layout-ir, engrave: ledger lines

Notes above or below the staff now get ledger lines — the gap the GUI surfaced
the moment a note is moved off the staff. Each notehead carries its StaffStep;
to_constrained emits one short horizontal stroke per whole step between the
staff (lines at steps 0..=8) and the note, reaching LEDGER_LINE_EXTENSION past
each side of the note's actual bounding box (so a wide whole note gets a wider
ledger), synthesized from the pitch so the strokes are deterministic and
hit-testable. The synthesis key splits component (high 64 bits) from signed step
(low 64) so two components of a very low note can never collide.

Ledger lines are fixed-width marks, not system-spanning lines, so the Engraver's
horizontal spacing must not scale them. is_rigid_width_stroke marks them; the
remap translates such a stroke rigidly by its *owning glyph's* column delta
(found by source, not the stroke midpoint — which for a wide head can fall nearer
a neighbouring column), so it keeps both its length and its offset from the
notehead. The spacing pass folds each ledger's extent into its notehead's slot,
so adjacent off-staff notes' ledgers reserve room and do not overlap. The stub
solver passes ledgers through unchanged.

Tests cover the step geometry, key distinctness (incl. steps below -128), the
bbox span, width preservation and offset (no-drift) through the Engraver, the
adjacent-overlap spacing, and an explicit two-whole-note off-staff drift case.
Render goldens regenerated.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NAtEiJtt9yKVV1zjKYmZhS
This commit is contained in:
Levi Neuwirth 2026-06-29 17:12:56 -04:00
parent c56ea4845f
commit 9539b1652b
12 changed files with 730 additions and 156 deletions

View File

@ -45,12 +45,30 @@ use std::collections::BTreeMap;
use epiphany_layout_ir::{
all_available, Axis, BravuraCatalog, BreakKind, ConstrainedLayoutIR, ConstraintId,
ConstraintSolver, GlyphCatalog, GlyphObjectId, InvalidationSet, LayoutConstraint, Margins,
Point, QualityMetricVector, Rect, ResolvedGlyph, ResolvedLayoutIR, ResolvedPage,
ConstraintSolver, GlyphCatalog, GlyphObject, GlyphObjectId, InvalidationSet, LayoutConstraint,
Margins, Point, QualityMetricVector, Rect, ResolvedGlyph, ResolvedLayoutIR, ResolvedPage,
ResolvedSystem, Size2D, SolveReport, SolveStatus, SolverBudgetUsed, SolverConfig, SolverState,
SolverTier, SolverVersion, SolverWarning, SolverWarningKind, Stroke,
};
/// The glyph a fixed-width stroke (a ledger line) belongs to: the same-source glyph
/// whose baseline falls within the stroke's horizontal span (its accidentals sit
/// outside the span, to the left). The stroke is anchored to this glyph's column so
/// it translates with it — found by source, never inferred from the stroke's own
/// midpoint, which for a wide head can fall nearer a neighbouring column.
pub(crate) fn owning_glyph<'a>(
stroke: &Stroke,
glyphs: &'a [GlyphObject],
) -> Option<&'a GlyphObject> {
let lo = stroke.from.x.0.min(stroke.to.x.0);
let hi = stroke.from.x.0.max(stroke.to.x.0);
glyphs.iter().find(|g| {
g.provenance.source == stroke.provenance.source
&& g.baseline.x.0 >= lo
&& g.baseline.x.0 <= hi
})
}
/// The Epiphany engraving solver (Chapter 9). A `Minimal`-tier solver: it spaces
/// glyphs horizontally and satisfies the IR's declared hard constraints. See the
/// crate docs for what each tier claims and what remains deferred.
@ -248,18 +266,39 @@ impl HorizontalRemap {
.collect()
}
/// Re-maps both endpoints of each stroke, so it tracks the glyphs it spans.
/// Re-maps each stroke's endpoints so it tracks the glyphs it spans. A
/// system-spanning stroke (staff line, barline, …) maps both endpoints, so it
/// stretches with the spacing; a fixed-width stroke (a ledger line on one
/// notehead) is translated rigidly by its owning column's delta
/// ([`epiphany_layout_ir::is_rigid_width_stroke`]) — preserving both its length
/// and its offset from its glyph, which maps by that same delta at its column.
fn strokes(&self, input: &ConstrainedLayoutIR) -> Vec<Stroke> {
input
.strokes
.iter()
.map(|s| Stroke {
provenance: s.provenance.clone(),
from: Point::new(self.map(s.from.x.0), s.from.y.0),
to: Point::new(self.map(s.to.x.0), s.to.y.0),
thickness: s.thickness,
layer: s.layer,
style: s.style,
.map(|s| {
let (from_x, to_x) = if epiphany_layout_ir::is_rigid_width_stroke(s) {
// Translate rigidly by the *owning glyph's* column delta — found by
// source, not the stroke's midpoint, which for a wide head could
// pick a neighbouring column and reintroduce drift. The glyph
// baseline is a control point, so `map(baseline) baseline` is its
// exact column delta; applying it keeps the stroke's offset from the
// glyph and its length.
let delta = owning_glyph(s, &input.glyphs)
.map(|g| self.map(g.baseline.x.0) - g.baseline.x.0)
.unwrap_or(0.0);
(s.from.x.0 + delta, s.to.x.0 + delta)
} else {
(self.map(s.from.x.0), self.map(s.to.x.0))
};
Stroke {
provenance: s.provenance.clone(),
from: Point::new(from_x, s.from.y.0),
to: Point::new(to_x, s.to.y.0),
thickness: s.thickness,
layer: s.layer,
style: s.style,
}
})
.collect()
}
@ -395,7 +434,7 @@ impl ConstraintSolver for Engraver {
mod tests {
use super::*;
use epiphany_core::generators::valid_score_rich;
use epiphany_layout_ir::{to_constrained, to_logical, StubSolver};
use epiphany_layout_ir::{is_rigid_width_stroke, to_constrained, to_logical, StubSolver};
fn fixture() -> ConstrainedLayoutIR {
to_constrained(&to_logical(&valid_score_rich(11)))
@ -569,6 +608,270 @@ mod tests {
);
}
#[test]
fn ledger_lines_keep_their_width_through_the_spacing_pass() {
// A corpus score with off-staff notes yields ledger strokes; the horizontal
// spacing pass must translate them (preserving length), not re-map both
// endpoints — which would scale a fixed-width mark with the local spacing.
let mut checked = 0;
for seed in 0..16 {
let input = to_constrained(&to_logical(&valid_score_rich(seed)));
let widths: std::collections::HashMap<u128, f32> = input
.strokes
.iter()
.filter(|s| is_rigid_width_stroke(s))
.map(|s| (s.provenance.stable_id.0, s.to.x.0 - s.from.x.0))
.collect();
if widths.is_empty() {
continue;
}
let report = Engraver.solve(&input, &SolverConfig::default());
for s in report
.layout
.strokes
.iter()
.filter(|s| is_rigid_width_stroke(s))
{
if let Some(&w_in) = widths.get(&s.provenance.stable_id.0) {
let w_out = s.to.x.0 - s.from.x.0;
assert!(
(w_out - w_in).abs() < 1e-4,
"ledger width changed through spacing: {w_in} -> {w_out}"
);
checked += 1;
}
}
}
assert!(checked > 0, "no ledger strokes exercised across 16 seeds");
}
/// Two whole notes (wide heads) a step above the staff, in adjacent time
/// columns — the case where a ledger's own midpoint can fall nearer the next
/// column than its notehead's.
fn two_off_staff_whole_notes() -> ConstrainedLayoutIR {
use epiphany_core::{
CmnNominal, EventId, MusicalDuration, MusicalPosition, NotatedComponent, NoteValue,
PitchId, PitchSpelling, RationalTime, RegionId, StaffId, StaffInstanceId,
TypedObjectId,
};
use epiphany_layout_ir::{
LayoutContent, LayoutObject, LayoutRegion, LocalCoordinateSystem, LogicalLayoutIR,
MetricTimeAxis, NoteContent, NotePitch, PlacedComponent, Provenance, ScoreVersion,
StaffContent, TimeAxisModel, TimePoint, VerticalExtent,
};
let region = RegionId::from_raw(1);
let staff = StaffId::from_raw(10);
let manifested = |src, content| {
LayoutObject::from_projection_with_content(
Provenance::manifested(src, region, vec![]),
Some(staff),
content,
)
};
let whole = || {
vec![PlacedComponent {
offset: MusicalDuration::zero(),
component: NotatedComponent {
base_value: NoteValue::Whole,
dots: 0,
tuplet: None,
tied_to_next: false,
},
tuplet: None,
}]
};
let note = |eid: u128, pid: u128, pos: MusicalPosition| {
let pitch = PitchId::from_raw(pid);
[
manifested(
TypedObjectId::Event(EventId::from_raw(eid)),
LayoutContent::Note(NoteContent {
position: TimePoint::Musical(pos),
components: whole(),
// C6 is a step above the treble staff, so each head earns
// ledger lines.
pitches: vec![NotePitch {
pitch,
spelling: Some(PitchSpelling::cmn(CmnNominal::C, 6)),
}],
}),
),
manifested(TypedObjectId::Pitch(pitch), LayoutContent::Structural),
]
};
let mut objects = vec![manifested(
TypedObjectId::StaffInstance(StaffInstanceId::from_raw(1)),
LayoutContent::Staff(StaffContent {
clefs: vec![],
keys: vec![],
}),
)];
objects.extend(note(1, 101, MusicalPosition::origin()));
objects.extend(note(
2,
102,
MusicalPosition(RationalTime::new(1, 1).unwrap()),
));
let logical = LogicalLayoutIR {
source: ScoreVersion::default(),
regions: vec![LayoutRegion {
provenance: Provenance::projected(TypedObjectId::Region(region), vec![]),
coordinate_system: LocalCoordinateSystem::default(),
time_axis: TimeAxisModel::Metric(MetricTimeAxis::default()),
vertical_extent: VerticalExtent {
staves: vec![staff],
},
objects,
}],
engraving_decisions: vec![],
overrides: vec![],
cross_region: vec![],
};
to_constrained(&logical)
}
#[test]
fn an_off_staff_whole_note_ledger_does_not_drift() {
let input = two_off_staff_whole_notes();
assert!(
input
.glyphs
.iter()
.any(|g| g.glyph.as_str() == "noteheadWhole"),
"the fixture engraves whole notes"
);
let ledger_count = input
.strokes
.iter()
.filter(|s| is_rigid_width_stroke(s))
.count();
assert!(
ledger_count >= 2,
"off-staff whole notes earn ledger strokes"
);
let report = Engraver.solve(&input, &SolverConfig::default());
// The wide whole-note columns re-space (their deltas differ), so a midpoint-
// anchored ledger would translate by a neighbouring column's delta and drift.
// The owning-glyph anchor keeps every ledger at its notehead's offset.
for s_in in input.strokes.iter().filter(|s| is_rigid_width_stroke(s)) {
let g_in = owning_glyph(s_in, &input.glyphs).expect("owning notehead");
let s_out = report
.layout
.strokes
.iter()
.find(|s| s.provenance.stable_id == s_in.provenance.stable_id)
.expect("stroke survives");
let g_out = report
.layout
.glyphs
.iter()
.find(|g| g.provenance.stable_id == g_in.provenance.stable_id)
.expect("glyph survives");
let offset_in = s_in.from.x.0 - g_in.baseline.x.0;
let offset_out = s_out.from.x.0 - g_out.position.x.0;
assert!(
(offset_out - offset_in).abs() < 1e-4,
"whole-note ledger drifted {offset_in} -> {offset_out}"
);
}
}
#[test]
fn ledger_offsets_from_the_notehead_survive_the_engraver() {
// The column-delta translation keeps a ledger at exactly the same offset from
// its notehead through the spacing pass; interpolating its midpoint (the bug
// this replaced) would shift it under a non-unit local slope.
let mut checked = 0;
for seed in 0..16 {
let input = to_constrained(&to_logical(&valid_score_rich(seed)));
let report = Engraver.solve(&input, &SolverConfig::default());
for s_in in input.strokes.iter().filter(|s| is_rigid_width_stroke(s)) {
let lo = s_in.from.x.0.min(s_in.to.x.0);
let hi = s_in.from.x.0.max(s_in.to.x.0);
let Some(g_in) = input.glyphs.iter().find(|g| {
g.provenance.source == s_in.provenance.source
&& g.baseline.x.0 >= lo
&& g.baseline.x.0 <= hi
}) else {
continue;
};
let Some(s_out) = report
.layout
.strokes
.iter()
.find(|s| s.provenance.stable_id == s_in.provenance.stable_id)
else {
continue;
};
let Some(g_out) = report
.layout
.glyphs
.iter()
.find(|g| g.provenance.stable_id == g_in.provenance.stable_id)
else {
continue;
};
let offset_in = s_in.from.x.0 - g_in.baseline.x.0;
let offset_out = s_out.from.x.0 - g_out.position.x.0;
assert!(
(offset_out - offset_in).abs() < 1e-4,
"seed {seed}: ledger offset drifted {offset_in} -> {offset_out}"
);
checked += 1;
}
}
assert!(checked > 0, "no ledger/notehead pairs exercised");
}
#[test]
fn adjacent_ledger_lines_are_spaced_not_overlapping() {
use std::collections::HashMap;
// The spacing pass reserves room for ledger overhang, so two off-staff notes
// that share a ledger height (same step) and sit in neighbouring columns get
// ledger strokes that do not overlap.
let mut ledgers = 0;
let mut pairs = 0;
for seed in 0..32 {
let report = Engraver.solve(
&to_constrained(&to_logical(&valid_score_rich(seed))),
&SolverConfig::default(),
);
let mut by_height: HashMap<i64, Vec<(f32, f32, _)>> = HashMap::new();
for s in report
.layout
.strokes
.iter()
.filter(|s| is_rigid_width_stroke(s))
{
ledgers += 1;
let y = (s.from.y.0 * 1024.0).round() as i64;
let (lo, hi) = (s.from.x.0.min(s.to.x.0), s.from.x.0.max(s.to.x.0));
by_height
.entry(y)
.or_default()
.push((lo, hi, s.provenance.source));
}
for group in by_height.values_mut() {
group.sort_by(|a, b| a.0.total_cmp(&b.0));
for w in group.windows(2) {
// Distinct notes' ledgers at the same height must not overlap.
if w[0].2 != w[1].2 {
pairs += 1;
assert!(
w[0].1 <= w[1].0 + 1e-3,
"seed {seed}: ledger lines overlap ({:?} vs {:?})",
w[0],
w[1]
);
}
}
}
}
assert!(ledgers > 0, "the corpus exercised no ledger lines");
assert!(pairs > 0, "no adjacent same-height ledger pairs to check");
}
#[test]
fn solves_the_stub_pipeline_and_preserves_provenance() {
let input = fixture();

View File

@ -20,7 +20,9 @@
use std::collections::BTreeMap;
use epiphany_layout_ir::{ConstrainedLayoutIR, SpringSlotId};
use epiphany_layout_ir::{is_rigid_width_stroke, ConstrainedLayoutIR, SpringSlotId};
use crate::owning_glyph;
/// Inter-slot gap (staff spaces) reserved between one slot's right content and
/// the next slot's left content.
@ -71,6 +73,25 @@ pub(crate) fn control_points(input: &ConstrainedLayoutIR) -> Vec<(f32, f32)> {
});
}
// Fold each ledger line (a fixed-width stroke) into its notehead's slot extent,
// so a ledger that overhangs the notehead reserves room — otherwise adjacent
// off-staff notes' ledgers can overlap even though glyph spacing is collision-
// aware. The owning notehead is the same-source glyph whose baseline lies within
// the stroke's span (its accidentals sit outside it, to the left).
for stroke in &input.strokes {
if !is_rigid_width_stroke(stroke) {
continue;
}
if let Some(glyph) = owning_glyph(stroke, &input.glyphs) {
let lo = stroke.from.x.0.min(stroke.to.x.0);
let hi = stroke.from.x.0.max(stroke.to.x.0);
if let Some(extent) = by_slot.get_mut(&glyph.horizontal_slot) {
extent.min_left = extent.min_left.min(lo);
extent.max_right = extent.max_right.max(hi);
}
}
}
let mut slots: Vec<Extent> = by_slot.into_values().collect();
slots.sort_by(|a, b| {
a.source

View File

@ -464,6 +464,8 @@ const TIME_DIGIT_X: f32 = 0.8; // x advance per time-signature digit
/// five lines share its source, so four of them must be synthesized to earn
/// distinct stable ids; this is the kind they declare.
const STAFF_LINE_SYNTHESIS: SynthesisRegistryId = SynthesisRegistryId(0x5354_4146_465F_4C4E); // "STAFFLN"
const LEDGER_LINE_SYNTHESIS: SynthesisRegistryId = SynthesisRegistryId(0x4C45_4447_4552_4C4E); // "LEDGERLN"
const LEDGER_LINE_EXTENSION: f32 = 0.3; // a ledger line reaches this far past the notehead, each side
/// The registry id for **notated-component synthesis**: a note/rest notated as a
/// tied decomposition (e.g. a quarter tied to an eighth across a barline) draws
@ -654,6 +656,7 @@ pub fn try_to_constrained(
name,
key: key.clone(),
y,
step,
comp,
accidentals,
});
@ -984,6 +987,31 @@ pub fn try_to_constrained(
staff,
info.slot,
);
// Ledger lines: short strokes continuing the staff to a
// notehead above or below it, one per whole step between
// the staff and the note, reaching `LEDGER_LINE_EXTENSION`
// past each side of *this notehead's* drawn box — so a
// wider head (a whole note) gets a wider ledger. Synthesized
// from the pitch; render-svg draws strokes under glyphs at a
// layer, so the notehead sits over them.
let head_box = metrics(head.name).map(|m| m.bounding_box());
let head_left = head_box.map_or(0.0, |b| b.left.0);
let head_right = head_box.map_or(NOTEHEAD_STEM_X, |b| b.right.0);
for ledger_step in ledger_steps(head.step) {
let y = step_to_y(yo, ledger_step);
let ledger_provenance = Provenance::synthesized(
provenance.source,
SynthesisKind::Registered(LEDGER_LINE_SYNTHESIS),
ledger_line_key(head.comp, ledger_step),
provenance.dependencies.clone(),
);
emit.stroke(line_stroke(
ledger_provenance,
Point::new(info.x + head_left - LEDGER_LINE_EXTENSION, y),
Point::new(info.x + head_right + LEDGER_LINE_EXTENSION, y),
STAFF_LINE_THICKNESS,
));
}
// The spelling's accidental stack: synthesized glyphs
// left of the notehead (innermost nearest it), at its
// staff position, sharing the notehead's column slot.
@ -1188,6 +1216,8 @@ struct Head {
name: &'static str,
key: ColumnKey,
y: f32,
/// The note's diatonic staff position, for ledger-line emission.
step: StaffStep,
comp: usize,
/// The spelling's accidental stack (innermost — nearest the notehead — first),
/// each drawn left of the notehead. Present only on the first component (a tie
@ -1532,6 +1562,49 @@ fn step_to_y(y_origin: f32, step: StaffStep) -> f32 {
y_origin + step as f32 * 0.5
}
/// The staff steps at which a note at `step` needs ledger lines: the even steps
/// strictly outside the five-line staff (whose lines are the even steps `0..=8`),
/// from the staff out to the note. Empty when the note is on or within the staff,
/// or one space just outside it (an odd step at `±1` from the nearest line). At
/// most one of the two loops runs, since a step cannot be both above and below.
fn ledger_steps(step: StaffStep) -> Vec<StaffStep> {
let mut steps = Vec::new();
let mut above = 10;
while above <= step {
steps.push(above);
above += 2;
}
let mut below = -2;
while below >= step {
steps.push(below);
below -= 2;
}
steps
}
/// A distinct synthesis key for a ledger line on component `comp` at diatonic
/// `step`. The component occupies the high 64 bits and the signed step the low 64,
/// so the two fields never overlap — including a step below `-128`, whose
/// two's-complement low bits would otherwise reach into the component field and let
/// two components of a very low pitch mint colliding stable ids.
fn ledger_line_key(comp: usize, step: StaffStep) -> SynthesisInstanceKey {
SynthesisInstanceKey(((comp as u128) << 64) | (step as i64 as u64 as u128))
}
/// Whether a stroke must keep a **fixed width** when a solver resolves horizontal
/// spacing: its length is a glyph-relative constant, not a span across the columns
/// the spacing pass stretches. A solver should translate such a stroke (preserving
/// its length) rather than re-map both endpoints, which would scale it. Ledger lines
/// are the case today — a fixed-width mark centered on one notehead, unlike a staff
/// line or barline that genuinely spans the system. Public so the constraint solver
/// can honor it without hard-coding the ledger synthesis identity.
pub fn is_rigid_width_stroke(stroke: &Stroke) -> bool {
matches!(
stroke.provenance.synthesis,
Some(SynthesisKind::Registered(k)) if k == LEDGER_LINE_SYNTHESIS
)
}
/// The staff step of a clef's reference line — a neutral fallback position for a
/// pitch whose spelling does not resolve to a CMN nominal.
fn reference_step(clef: &Clef) -> StaffStep {
@ -1627,6 +1700,93 @@ mod tests {
use epiphany_core::generators::valid_score_rich;
use std::collections::BTreeSet;
#[test]
fn ledger_steps_cover_only_lines_outside_the_staff() {
// Within the five-line staff (steps 0..=8) and one space just outside: none.
for step in [-1, 0, 4, 8, 9] {
assert!(ledger_steps(step).is_empty(), "no ledger at step {step}");
}
// First ledger above (step 10) and below (-2): exactly one line, on the note.
assert_eq!(ledger_steps(10), vec![10]);
assert_eq!(ledger_steps(-2), vec![-2]);
// A note in the space above the first ledger still needs just that line.
assert_eq!(ledger_steps(11), vec![10]);
// Two lines above / below, in order from the staff outward.
assert_eq!(ledger_steps(12), vec![10, 12]);
assert_eq!(ledger_steps(-4), vec![-2, -4]);
}
#[test]
fn ledger_line_keys_are_distinct_across_components_and_low_steps() {
// The high/low 64-bit split keeps the component and step fields disjoint —
// including a step below -128, whose two's-complement low bits are large and,
// under a naive `(comp << small) | (step + bias)`, would reach into the
// component field and collide with another component's key.
let mut seen = std::collections::HashSet::new();
for comp in 0..3usize {
for step in [-300, -200, -130, -128, -2, 10, 200] {
assert!(
seen.insert(ledger_line_key(comp, step).0),
"ledger key collision at comp={comp} step={step}"
);
}
}
}
#[test]
fn a_ledger_line_spans_its_notehead() {
// The ledger reaches past the notehead on both sides, for any notehead width
// — a whole note's head is wider than a black head, and the ledger must use
// the real bounding box, not a fixed notehead width.
let mut checked = 0;
for seed in 0..32 {
let c = to_constrained(&to_logical(&valid_score_rich(seed)));
for s in c.strokes.iter().filter(|s| is_rigid_width_stroke(s)) {
let lo = s.from.x.0.min(s.to.x.0);
let hi = s.from.x.0.max(s.to.x.0);
// The owning notehead: same source, baseline within the stroke span.
if let Some(g) = c.glyphs.iter().find(|g| {
g.provenance.source == s.provenance.source
&& g.baseline.x.0 >= lo
&& g.baseline.x.0 <= hi
}) {
let head_left = g.baseline.x.0 + g.bounding_box.left.0;
let head_right = g.baseline.x.0 + g.bounding_box.right.0;
assert!(
lo <= head_left + 1e-4 && hi >= head_right - 1e-4,
"seed {seed}: ledger [{lo}, {hi}] does not span notehead [{head_left}, {head_right}]"
);
checked += 1;
}
}
}
assert!(checked > 0, "no ledger/notehead pairs to check");
}
#[test]
fn a_note_far_above_the_staff_gets_ledger_strokes() {
// A constrained layout of the rich corpus has noteheads across the range; at
// least one sits far enough off the staff to earn a ledger line, emitted as a
// synthesized stroke sourced from its pitch.
let mut any_ledger = false;
for seed in 0..16 {
let c = to_constrained(&to_logical(&valid_score_rich(seed)));
if c.strokes.iter().any(|s| {
matches!(
s.provenance.synthesis,
Some(SynthesisKind::Registered(k)) if k == LEDGER_LINE_SYNTHESIS
)
}) {
any_ledger = true;
break;
}
}
assert!(
any_ledger,
"no ledger-line strokes across 16 rich-corpus seeds"
);
}
#[test]
fn out_of_range_finite_stroke_thickness_is_rejected() {
let mut c = to_constrained(&to_logical(&valid_score_rich(11)));

View File

@ -90,8 +90,8 @@ pub use cache::{
ResolvedSystemCache, SystemId,
};
pub use constrained::{
to_constrained, try_to_constrained, Axis, BreakKind, ConstrainedLayoutIR,
ConstrainedLayoutRegion, ConstrainedValidationError, ConstraintParameters,
is_rigid_width_stroke, to_constrained, try_to_constrained, Axis, BreakKind,
ConstrainedLayoutIR, ConstrainedLayoutRegion, ConstrainedValidationError, ConstraintParameters,
ConstraintRegistryId, GlyphObject, GlyphObjectId, GlyphStyle, LayoutConstraint,
LayoutTransformError, SpringSlot, Stroke,
};

View File

@ -2,12 +2,12 @@ fixture=ten_measure_single_staff solver=engrave
glyph_count=51
path_count=51
fallback_rect_count=0
stroke_count=51
provenance_count=102
stroke_count=91
provenance_count=142
layer_count=1
hard_constraint_count=0
xml_well_formed=true
view_box=[-3.059857 -3.632 82.456436 11.024]
view_box=[-3.059857 -3.632 102.98304 11.024]
class_counts:
barline=10
clef=1

View File

@ -1,110 +1,150 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="824.5643" height="110.24" viewBox="0 0 82.4564 11.024">
<svg xmlns="http://www.w3.org/2000/svg" width="1029.8304" height="110.24" viewBox="0 0 102.983 11.024">
<!-- epiphany-render-svg: glyphs are genuine Bravura SMuFL outlines inlined as paths; geometry is the resolved layout verbatim, no engraving performed here; every glyph and stroke carries a data-prov trace to its score-graph source -->
<g transform="translate(3.0599 7.392) scale(1 -1)">
<g data-layer="0">
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="01550dc9d118134419219044f188e28a" data-source-kind="6" data-kind="stroke"/>
<line x1="-0.9949" y1="0" x2="76.7265" y2="0" stroke="#000000" stroke-width="0.13" data-prov="5235156954d3cdda987a3da1af222a55" data-source-kind="3" data-kind="stroke"/>
<line x1="-0.9949" y1="1" x2="76.7265" y2="1" stroke="#000000" stroke-width="0.13" data-prov="10cbe3e182e937b8e3d90a03397b2e97" data-source-kind="3" data-kind="stroke"/>
<line x1="-0.9949" y1="2" x2="76.7265" y2="2" stroke="#000000" stroke-width="0.13" data-prov="94825cd467fe6fb512d271e66b59674a" data-source-kind="3" data-kind="stroke"/>
<line x1="-0.9949" y1="3" x2="76.7265" y2="3" stroke="#000000" stroke-width="0.13" data-prov="bc2cd26cec8e4650eedcf04fbc91320f" data-source-kind="3" data-kind="stroke"/>
<line x1="-0.9949" y1="4" x2="76.7265" y2="4" stroke="#000000" stroke-width="0.13" data-prov="c46b9445a4c5ff909f50b13f9025c4a3" data-source-kind="3" data-kind="stroke"/>
<line x1="-0.9949" y1="0" x2="97.2984" y2="0" stroke="#000000" stroke-width="0.13" data-prov="5235156954d3cdda987a3da1af222a55" data-source-kind="3" data-kind="stroke"/>
<line x1="-0.9949" y1="1" x2="97.2984" y2="1" stroke="#000000" stroke-width="0.13" data-prov="10cbe3e182e937b8e3d90a03397b2e97" data-source-kind="3" data-kind="stroke"/>
<line x1="-0.9949" y1="2" x2="97.2984" y2="2" stroke="#000000" stroke-width="0.13" data-prov="94825cd467fe6fb512d271e66b59674a" data-source-kind="3" data-kind="stroke"/>
<line x1="-0.9949" y1="3" x2="97.2984" y2="3" stroke="#000000" stroke-width="0.13" data-prov="bc2cd26cec8e4650eedcf04fbc91320f" data-source-kind="3" data-kind="stroke"/>
<line x1="-0.9949" y1="4" x2="97.2984" y2="4" stroke="#000000" stroke-width="0.13" data-prov="c46b9445a4c5ff909f50b13f9025c4a3" data-source-kind="3" data-kind="stroke"/>
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="fe116eb75ff697f9f2451c10c05349c6" data-source-kind="2" data-kind="stroke"/>
<line x1="5.5627" y1="-1" x2="5.5627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="dbd573fbc0c21f9b07a8537f658b048c" data-source-kind="0" data-kind="stroke"/>
<line x1="7.0627" y1="-1" x2="7.0627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="276b6f72f2bcb818f84229b6833ce022" data-source-kind="0" data-kind="stroke"/>
<line x1="8.5627" y1="-1" x2="8.5627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="d1b0067ebb2b2b9115a77aaadc53bffe" data-source-kind="0" data-kind="stroke"/>
<line x1="10.0627" y1="-1" x2="10.0627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="13303d184ca25b99835d71e21f3a96df" data-source-kind="0" data-kind="stroke"/>
<line x1="13.0627" y1="-1" x2="13.0627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="aa33134cf72cebda65d1b2b427230541" data-source-kind="0" data-kind="stroke"/>
<line x1="14.5627" y1="-1" x2="14.5627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="01d06ae931cf05983e4b17744108297b" data-source-kind="0" data-kind="stroke"/>
<line x1="16.0627" y1="-1" x2="16.0627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="47c9ce76466974ecfabe4a9cafb75c3c" data-source-kind="0" data-kind="stroke"/>
<line x1="17.5627" y1="-1" x2="17.5627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="e6d1c0a44d13be2700ad4381e1d518fa" data-source-kind="0" data-kind="stroke"/>
<line x1="20.5627" y1="-1" x2="20.5627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="370a65aab516f6792e49a1ed28bd5cd9" data-source-kind="0" data-kind="stroke"/>
<line x1="22.0627" y1="-1" x2="22.0627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="75b4bca159d5c28b10b2078bb457bb53" data-source-kind="0" data-kind="stroke"/>
<line x1="23.5627" y1="-1" x2="23.5627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="c4531390972e55a43af2bd9f85e3c250" data-source-kind="0" data-kind="stroke"/>
<line x1="25.0627" y1="-1" x2="25.0627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="888c6ef019fc4b0fc714672a4444c60c" data-source-kind="0" data-kind="stroke"/>
<line x1="28.0627" y1="-1" x2="28.0627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="6c70ad9006ed8fbb104d77eba3f2dbcb" data-source-kind="0" data-kind="stroke"/>
<line x1="29.5627" y1="-1" x2="29.5627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="debe82da2c34817a871d8a4cc5cc3fdd" data-source-kind="0" data-kind="stroke"/>
<line x1="31.0627" y1="-1" x2="31.0627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="7b524c2e9e5657b68fd1a81337887c2e" data-source-kind="0" data-kind="stroke"/>
<line x1="32.5627" y1="-1" x2="32.5627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="cb31fbbd4a3e3eb17ed06e65f40589e5" data-source-kind="0" data-kind="stroke"/>
<line x1="35.5627" y1="-1" x2="35.5627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="bc1cc9bede7fc3c72827cfbf184cdb7e" data-source-kind="0" data-kind="stroke"/>
<line x1="37.0627" y1="-1" x2="37.0627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="95891bc2b58231a1618b5d422e6131b0" data-source-kind="0" data-kind="stroke"/>
<line x1="38.5627" y1="-1" x2="38.5627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="ed21002861831422bdbb36e8f981d2a9" data-source-kind="0" data-kind="stroke"/>
<line x1="40.0627" y1="-1" x2="40.0627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="e49748251746a6dbdf15aa8dd983e6e7" data-source-kind="0" data-kind="stroke"/>
<line x1="43.0627" y1="-1" x2="43.0627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="8d2938a01abfe451991829fbde6d2b94" data-source-kind="0" data-kind="stroke"/>
<line x1="44.5627" y1="-1" x2="44.5627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="88366a6edcce03db41d39d08b2616742" data-source-kind="0" data-kind="stroke"/>
<line x1="46.0627" y1="-1" x2="46.0627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="77a10c7862f0ffce98d309bb71ce675f" data-source-kind="0" data-kind="stroke"/>
<line x1="47.5627" y1="-1" x2="47.5627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="cfa457e70519a1826f321a56cb3fd03b" data-source-kind="0" data-kind="stroke"/>
<line x1="50.5627" y1="-1" x2="50.5627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="273d04eeece605789035a29d80023c2c" data-source-kind="0" data-kind="stroke"/>
<line x1="52.0627" y1="-1" x2="52.0627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="a23b09fda2784b566bf1de48e89a2baa" data-source-kind="0" data-kind="stroke"/>
<line x1="53.5627" y1="-1" x2="53.5627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="edf9ca4611cfc17faace6241cae3b73d" data-source-kind="0" data-kind="stroke"/>
<line x1="55.0627" y1="-1" x2="55.0627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="f1e3c0367633266d5f188e5bd6d98ad4" data-source-kind="0" data-kind="stroke"/>
<line x1="58.0627" y1="-1" x2="58.0627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="2bf824905032462ee8c9988b780feabf" data-source-kind="0" data-kind="stroke"/>
<line x1="59.5627" y1="-1" x2="59.5627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="08a65aebf8baaded74feb3ec7cc36d18" data-source-kind="0" data-kind="stroke"/>
<line x1="61.0627" y1="-1" x2="61.0627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="d155779804ad660f4466745153872349" data-source-kind="0" data-kind="stroke"/>
<line x1="62.5627" y1="-1" x2="62.5627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="af73177552d5fa95b746caf62d000623" data-source-kind="0" data-kind="stroke"/>
<line x1="65.5627" y1="-1" x2="65.5627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="7c839e4fb5f2522c8fde3b48577eafae" data-source-kind="0" data-kind="stroke"/>
<line x1="67.0627" y1="-1" x2="67.0627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="0c8e0b8170c827494e606d4541ce2c89" data-source-kind="0" data-kind="stroke"/>
<line x1="68.5627" y1="-1" x2="68.5627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="42480ffc14ad129d8dec456e7bad317c" data-source-kind="0" data-kind="stroke"/>
<line x1="70.0627" y1="-1" x2="70.0627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="0f408610c63793003f04e3af5a03493f" data-source-kind="0" data-kind="stroke"/>
<line x1="71.5627" y1="-1" x2="71.5627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="99d50b32a7d1eac1019c14132a834144" data-source-kind="0" data-kind="stroke"/>
<line x1="73.0627" y1="-1" x2="73.0627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="572e96450f21b18771e510c6c41444dc" data-source-kind="0" data-kind="stroke"/>
<line x1="74.5627" y1="-1" x2="74.5627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="68935c410dbe357c3f80b01c6e6d3cb1" data-source-kind="0" data-kind="stroke"/>
<line x1="75.541" y1="-1" x2="75.541" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="9e9ba65603d31963bdc6d55dfacc5eba" data-source-kind="0" data-kind="stroke"/>
<line x1="5.98" y1="-1" x2="5.98" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="dbd573fbc0c21f9b07a8537f658b048c" data-source-kind="0" data-kind="stroke"/>
<line x1="4.1846" y1="-1" x2="5.9652" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="07ffb45f25e59b0955bd4e248522b2ef" data-source-kind="1" data-kind="stroke"/>
<line x1="8.0607" y1="-1" x2="8.0607" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="276b6f72f2bcb818f84229b6833ce022" data-source-kind="0" data-kind="stroke"/>
<line x1="6.2652" y1="-1" x2="8.0459" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="3539af5cd23dc6ca259a35fef4aa45c2" data-source-kind="1" data-kind="stroke"/>
<line x1="10.1414" y1="-1" x2="10.1414" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="d1b0067ebb2b2b9115a77aaadc53bffe" data-source-kind="0" data-kind="stroke"/>
<line x1="8.3459" y1="-1" x2="10.1266" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="9b43d5d2a83ce1086364f6f3ac4b5ba2" data-source-kind="1" data-kind="stroke"/>
<line x1="12.0064" y1="-1" x2="12.0064" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="13303d184ca25b99835d71e21f3a96df" data-source-kind="0" data-kind="stroke"/>
<line x1="10.4266" y1="-1" x2="12.2072" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="d6c7a9458a06532e1c7507e71363c0dd" data-source-kind="1" data-kind="stroke"/>
<line x1="15.5027" y1="-1" x2="15.5027" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="aa33134cf72cebda65d1b2b427230541" data-source-kind="0" data-kind="stroke"/>
<line x1="13.7072" y1="-1" x2="15.4879" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="20fbe0162b0bc4dd93e2c3e3da73bb83" data-source-kind="1" data-kind="stroke"/>
<line x1="17.5834" y1="-1" x2="17.5834" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="01d06ae931cf05983e4b17744108297b" data-source-kind="0" data-kind="stroke"/>
<line x1="15.7879" y1="-1" x2="17.5686" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="cd9abf9ed66ab876f68b9d88ce1e5199" data-source-kind="1" data-kind="stroke"/>
<line x1="19.664" y1="-1" x2="19.664" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="47c9ce76466974ecfabe4a9cafb75c3c" data-source-kind="0" data-kind="stroke"/>
<line x1="17.8686" y1="-1" x2="19.6492" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="7ade41165c11102f29e87cb09eb3f88f" data-source-kind="1" data-kind="stroke"/>
<line x1="21.5291" y1="-1" x2="21.5291" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="e6d1c0a44d13be2700ad4381e1d518fa" data-source-kind="0" data-kind="stroke"/>
<line x1="19.9492" y1="-1" x2="21.7299" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="32c2aa89808756c46e8b7afcfb2eb057" data-source-kind="1" data-kind="stroke"/>
<line x1="25.0254" y1="-1" x2="25.0254" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="370a65aab516f6792e49a1ed28bd5cd9" data-source-kind="0" data-kind="stroke"/>
<line x1="23.2299" y1="-1" x2="25.0105" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="0a3ae3c155d29c21e266e663a8b1b214" data-source-kind="1" data-kind="stroke"/>
<line x1="27.106" y1="-1" x2="27.106" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="75b4bca159d5c28b10b2078bb457bb53" data-source-kind="0" data-kind="stroke"/>
<line x1="25.3105" y1="-1" x2="27.0912" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="c27e3e835224dc54cef9b36818099cd0" data-source-kind="1" data-kind="stroke"/>
<line x1="29.1867" y1="-1" x2="29.1867" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="c4531390972e55a43af2bd9f85e3c250" data-source-kind="0" data-kind="stroke"/>
<line x1="27.3912" y1="-1" x2="29.1719" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="4b43990bc25bf4afffda3e2a7d4dcab7" data-source-kind="1" data-kind="stroke"/>
<line x1="31.0517" y1="-1" x2="31.0517" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="888c6ef019fc4b0fc714672a4444c60c" data-source-kind="0" data-kind="stroke"/>
<line x1="29.4719" y1="-1" x2="31.2525" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="8e120598410629bb86883f318071a6b5" data-source-kind="1" data-kind="stroke"/>
<line x1="34.548" y1="-1" x2="34.548" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="6c70ad9006ed8fbb104d77eba3f2dbcb" data-source-kind="0" data-kind="stroke"/>
<line x1="32.7525" y1="-1" x2="34.5332" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="6d2724bb96160f831b4e987ce6b4349a" data-source-kind="1" data-kind="stroke"/>
<line x1="36.6287" y1="-1" x2="36.6287" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="debe82da2c34817a871d8a4cc5cc3fdd" data-source-kind="0" data-kind="stroke"/>
<line x1="34.8332" y1="-1" x2="36.6139" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="7a9f84c8590c7e8156fd929e35153cf8" data-source-kind="1" data-kind="stroke"/>
<line x1="38.7093" y1="-1" x2="38.7093" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="7b524c2e9e5657b68fd1a81337887c2e" data-source-kind="0" data-kind="stroke"/>
<line x1="36.9139" y1="-1" x2="38.6945" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="c4a9602f838e0ea74a9fe68da12baff2" data-source-kind="1" data-kind="stroke"/>
<line x1="40.5744" y1="-1" x2="40.5744" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="cb31fbbd4a3e3eb17ed06e65f40589e5" data-source-kind="0" data-kind="stroke"/>
<line x1="38.9945" y1="-1" x2="40.7752" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="76860486e62be8520184bb3e8c284d94" data-source-kind="1" data-kind="stroke"/>
<line x1="44.0707" y1="-1" x2="44.0707" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="bc1cc9bede7fc3c72827cfbf184cdb7e" data-source-kind="0" data-kind="stroke"/>
<line x1="42.2752" y1="-1" x2="44.0558" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="a3fd2ae47f432e61881cb1e44a7108e6" data-source-kind="1" data-kind="stroke"/>
<line x1="46.1513" y1="-1" x2="46.1513" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="95891bc2b58231a1618b5d422e6131b0" data-source-kind="0" data-kind="stroke"/>
<line x1="44.3558" y1="-1" x2="46.1365" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="a9e2ee2be83c0a4978db517bf182efe9" data-source-kind="1" data-kind="stroke"/>
<line x1="48.232" y1="-1" x2="48.232" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="ed21002861831422bdbb36e8f981d2a9" data-source-kind="0" data-kind="stroke"/>
<line x1="46.4365" y1="-1" x2="48.2172" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="2bac60a88ddddcf403dd6edfb67b5bb0" data-source-kind="1" data-kind="stroke"/>
<line x1="50.097" y1="-1" x2="50.097" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="e49748251746a6dbdf15aa8dd983e6e7" data-source-kind="0" data-kind="stroke"/>
<line x1="48.5172" y1="-1" x2="50.2978" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="a592bc951f4afa64726aa30ccdd6ddfa" data-source-kind="1" data-kind="stroke"/>
<line x1="53.5933" y1="-1" x2="53.5933" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="8d2938a01abfe451991829fbde6d2b94" data-source-kind="0" data-kind="stroke"/>
<line x1="51.7978" y1="-1" x2="53.5785" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="c73f1aad686621adde07e7fe7b160ad7" data-source-kind="1" data-kind="stroke"/>
<line x1="55.674" y1="-1" x2="55.674" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="88366a6edcce03db41d39d08b2616742" data-source-kind="0" data-kind="stroke"/>
<line x1="53.8785" y1="-1" x2="55.6591" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="4e052448582a8fdc672f38b02dc205e1" data-source-kind="1" data-kind="stroke"/>
<line x1="57.7546" y1="-1" x2="57.7546" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="77a10c7862f0ffce98d309bb71ce675f" data-source-kind="0" data-kind="stroke"/>
<line x1="55.9591" y1="-1" x2="57.7398" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="68c691f2336e5a322116641b9f2f7054" data-source-kind="1" data-kind="stroke"/>
<line x1="59.6197" y1="-1" x2="59.6197" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="cfa457e70519a1826f321a56cb3fd03b" data-source-kind="0" data-kind="stroke"/>
<line x1="58.0398" y1="-1" x2="59.8205" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="3c3f0d6b5ab00374d7628cd6f9876bc9" data-source-kind="1" data-kind="stroke"/>
<line x1="63.116" y1="-1" x2="63.116" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="273d04eeece605789035a29d80023c2c" data-source-kind="0" data-kind="stroke"/>
<line x1="61.3205" y1="-1" x2="63.1011" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="9ec226573f8ea2320fc444c562163ddb" data-source-kind="1" data-kind="stroke"/>
<line x1="65.1966" y1="-1" x2="65.1966" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="a23b09fda2784b566bf1de48e89a2baa" data-source-kind="0" data-kind="stroke"/>
<line x1="63.4011" y1="-1" x2="65.1818" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="9e3345d5dddffbb9cf263a1708fc2589" data-source-kind="1" data-kind="stroke"/>
<line x1="67.2773" y1="-1" x2="67.2773" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="edf9ca4611cfc17faace6241cae3b73d" data-source-kind="0" data-kind="stroke"/>
<line x1="65.4818" y1="-1" x2="67.2625" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="ea06a5b83026202fbe3eed55ca3680c9" data-source-kind="1" data-kind="stroke"/>
<line x1="69.1423" y1="-1" x2="69.1423" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="f1e3c0367633266d5f188e5bd6d98ad4" data-source-kind="0" data-kind="stroke"/>
<line x1="67.5625" y1="-1" x2="69.3431" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="b8d324f0620ebb59f66346b61a4d214e" data-source-kind="1" data-kind="stroke"/>
<line x1="72.6386" y1="-1" x2="72.6386" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="2bf824905032462ee8c9988b780feabf" data-source-kind="0" data-kind="stroke"/>
<line x1="70.8431" y1="-1" x2="72.6238" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="579f0f80918268f1ba03890d14832b56" data-source-kind="1" data-kind="stroke"/>
<line x1="74.7193" y1="-1" x2="74.7193" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="08a65aebf8baaded74feb3ec7cc36d18" data-source-kind="0" data-kind="stroke"/>
<line x1="72.9238" y1="-1" x2="74.7045" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="f04f04c436808c53ab1c2b169d7f5a33" data-source-kind="1" data-kind="stroke"/>
<line x1="76.7999" y1="-1" x2="76.7999" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="d155779804ad660f4466745153872349" data-source-kind="0" data-kind="stroke"/>
<line x1="75.0045" y1="-1" x2="76.7851" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="3b9174fe7361dbfc454fbe17b9ec81b1" data-source-kind="1" data-kind="stroke"/>
<line x1="78.665" y1="-1" x2="78.665" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="af73177552d5fa95b746caf62d000623" data-source-kind="0" data-kind="stroke"/>
<line x1="77.0851" y1="-1" x2="78.8658" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="46e6eac9f03c1e09a15cb0bb07628570" data-source-kind="1" data-kind="stroke"/>
<line x1="82.1613" y1="-1" x2="82.1613" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="7c839e4fb5f2522c8fde3b48577eafae" data-source-kind="0" data-kind="stroke"/>
<line x1="80.3658" y1="-1" x2="82.1465" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="0e4ec9f37979b06c54f0e2d499df5bf1" data-source-kind="1" data-kind="stroke"/>
<line x1="84.242" y1="-1" x2="84.242" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="0c8e0b8170c827494e606d4541ce2c89" data-source-kind="0" data-kind="stroke"/>
<line x1="82.4465" y1="-1" x2="84.2271" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="61f1ed037baf82bf6594769a9205df07" data-source-kind="1" data-kind="stroke"/>
<line x1="86.3226" y1="-1" x2="86.3226" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="42480ffc14ad129d8dec456e7bad317c" data-source-kind="0" data-kind="stroke"/>
<line x1="84.5271" y1="-1" x2="86.3078" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="adc82c9de5d3ed333e335c32f7690a6b" data-source-kind="1" data-kind="stroke"/>
<line x1="88.4033" y1="-1" x2="88.4033" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="0f408610c63793003f04e3af5a03493f" data-source-kind="0" data-kind="stroke"/>
<line x1="86.6078" y1="-1" x2="88.3885" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="1dee0e17b4b9167cda8e51b45e2ab47c" data-source-kind="1" data-kind="stroke"/>
<line x1="90.484" y1="-1" x2="90.484" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="99d50b32a7d1eac1019c14132a834144" data-source-kind="0" data-kind="stroke"/>
<line x1="88.6885" y1="-1" x2="90.4692" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="c33f0e929fa3ea4230c07aca80f60c04" data-source-kind="1" data-kind="stroke"/>
<line x1="92.5647" y1="-1" x2="92.5647" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="572e96450f21b18771e510c6c41444dc" data-source-kind="0" data-kind="stroke"/>
<line x1="90.7692" y1="-1" x2="92.5498" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="67463b29bfb160641501f497f6134aa6" data-source-kind="1" data-kind="stroke"/>
<line x1="94.6453" y1="-1" x2="94.6453" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="68935c410dbe357c3f80b01c6e6d3cb1" data-source-kind="0" data-kind="stroke"/>
<line x1="92.8498" y1="-1" x2="94.6305" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="75f41055f9e23911ca51158dab6488df" data-source-kind="1" data-kind="stroke"/>
<line x1="95.8911" y1="-1" x2="95.8911" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="9e9ba65603d31963bdc6d55dfacc5eba" data-source-kind="0" data-kind="stroke"/>
<line x1="94.9305" y1="-1" x2="96.7112" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="66a37f88caecfe799ec34469d2302afd" data-source-kind="1" data-kind="stroke"/>
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="40a9a55985c8bf8b1eb66b6d8c8e7b7a" data-source-kind="12" data-kind="stroke"/>
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="10eb9773d25f0d7d64f92b36f88e5b38" data-source-kind="14" data-kind="stroke"/>
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="86a982398112115027c54222505dd143" data-source-kind="15" data-kind="stroke"/>
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="c183669ac91f35eb7a0040b48fde85ab" data-source-kind="25" data-kind="stroke"/>
<path d="M1.504 1.66C1.496 1.708 1.504 1.712 1.528 1.736C1.96 2.14 2.288 2.648 2.288 3.26C2.288 3.608 2.192 3.952 2.028 4.192C1.968 4.28 1.864 4.392 1.82 4.392C1.764 4.392 1.64 4.288 1.56 4.2C1.264 3.872 1.168 3.372 1.168 2.956C1.168 2.724 1.196 2.464 1.224 2.3C1.232 2.252 1.236 2.244 1.188 2.204C0.612 1.728 0 1.156 0 0.348C0 -0.348 0.476 -1.008 1.456 -1.008C1.548 -1.008 1.652 -1 1.732 -0.984C1.776 -0.976 1.784 -0.972 1.792 -1.02C1.84 -1.288 1.9 -1.636 1.9 -1.824C1.9 -2.416 1.5 -2.488 1.264 -2.488C1.048 -2.488 0.944 -2.424 0.944 -2.372C0.944 -2.344 0.98 -2.332 1.072 -2.304C1.196 -2.268 1.34 -2.16 1.34 -1.928C1.34 -1.708 1.2 -1.52 0.956 -1.52C0.688 -1.52 0.528 -1.732 0.528 -1.98C0.528 -2.24 0.684 -2.632 1.288 -2.632C1.556 -2.632 2.076 -2.512 2.076 -1.832C2.076 -1.604 2.004 -1.224 1.96 -0.976C1.952 -0.928 1.956 -0.932 2.012 -0.908C2.416 -0.748 2.684 -0.408 2.684 0.044C2.684 0.556 2.308 1.008 1.72 1.008C1.616 1.008 1.616 1.008 1.604 1.08ZM1.88 3.772C2.012 3.772 2.12 3.664 2.12 3.444C2.12 3 1.74 2.64 1.424 2.364C1.396 2.34 1.38 2.344 1.372 2.396C1.356 2.5 1.348 2.636 1.348 2.764C1.348 3.388 1.636 3.772 1.88 3.772ZM1.444 1.048C1.456 0.972 1.456 0.976 1.384 0.952C1.032 0.832 0.804 0.516 0.804 0.176C0.804 -0.184 0.992 -0.44 1.264 -0.532C1.296 -0.544 1.344 -0.556 1.372 -0.556C1.404 -0.556 1.42 -0.536 1.42 -0.512C1.42 -0.484 1.388 -0.472 1.36 -0.46C1.192 -0.388 1.072 -0.216 1.072 -0.032C1.072 0.196 1.228 0.368 1.472 0.436C1.536 0.452 1.544 0.448 1.552 0.404L1.752 -0.788C1.76 -0.832 1.756 -0.832 1.696 -0.844C1.632 -0.856 1.552 -0.864 1.472 -0.864C0.772 -0.864 0.32 -0.476 0.32 0.08C0.32 0.316 0.36 0.632 0.692 1.008C0.932 1.276 1.116 1.424 1.304 1.576C1.344 1.608 1.352 1.604 1.36 1.56ZM1.72 0.412C1.712 0.46 1.716 0.472 1.764 0.468C2.088 0.44 2.356 0.168 2.356 -0.184C2.356 -0.436 2.204 -0.64 1.98 -0.752C1.932 -0.776 1.924 -0.776 1.916 -0.728Z" transform="translate(0 1)" fill="#000000" data-prov="2bc09f9490decea3e13f24459f1b64f4" data-source-kind="4" data-glyph="gClef" data-class="clef"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(4.4846 -1)" fill="#000000" data-prov="870b54f8730bed8251f4f891a3c4b233" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(5.9846 -1)" fill="#000000" data-prov="5833135b23eaf581bccad90222f64e7e" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(7.4846 -1)" fill="#000000" data-prov="3c653d764b31b22273540a079363370c" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(8.9846 -1)" fill="#000000" data-prov="dfd195901678557bdc1f1351634d2b68" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(11.9846 -1)" fill="#000000" data-prov="99d206152de1651afeef963c42d7984f" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(13.4846 -1)" fill="#000000" data-prov="1340dc8c93d5925410da02d683dd5916" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(14.9846 -1)" fill="#000000" data-prov="d9b7e874516d265e3c165a16887a22bd" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(16.4846 -1)" fill="#000000" data-prov="12ef29aff1cc56481133aec42c0d1d35" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(19.4846 -1)" fill="#000000" data-prov="6f2586548ccd7de6800f74edd852d03b" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(20.9846 -1)" fill="#000000" data-prov="6cd2fcd32ca7d1441b6534c025d7ae93" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(22.4846 -1)" fill="#000000" data-prov="e71f03f7d3d50a64ea72ce4bcdffb03e" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(23.9846 -1)" fill="#000000" data-prov="0227904e88f6312904444c17ae540b57" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(26.9846 -1)" fill="#000000" data-prov="6cce2821ccbb4f5769708cb9ca3c38a7" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(28.4846 -1)" fill="#000000" data-prov="9952a70d5e0f9911d93466e83edc252e" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(29.9846 -1)" fill="#000000" data-prov="1ead59d59c0c7cec46071003e7741905" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(31.4846 -1)" fill="#000000" data-prov="4b82f873de97ed4fa80748acbf368585" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(34.4846 -1)" fill="#000000" data-prov="a26098a444bb635ce82ff700f48491ed" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(35.9846 -1)" fill="#000000" data-prov="460c0831f9fd8de9b01a3a4bac641c8e" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(37.4846 -1)" fill="#000000" data-prov="50dc15968bfd55c7637d0dde7c2f7bb3" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(38.9846 -1)" fill="#000000" data-prov="d095c952d8865af497a68b9fb543c15e" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(41.9846 -1)" fill="#000000" data-prov="1e4cb41d3c7556e314182c82b7790bef" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(43.4846 -1)" fill="#000000" data-prov="9645397274cb84055aeba5639f8b06a5" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(44.9846 -1)" fill="#000000" data-prov="9578182658c00300531491532d13f66a" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(46.4846 -1)" fill="#000000" data-prov="0a4dcf79021a9ba0366091e34fab456c" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(49.4846 -1)" fill="#000000" data-prov="4b3905877c48341998d76f07cdb9eff5" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(50.9846 -1)" fill="#000000" data-prov="4582d540c93386289e704713ab2deeeb" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(52.4846 -1)" fill="#000000" data-prov="b6d88aa94cc5462fed11ef21a9b9d6df" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(53.9846 -1)" fill="#000000" data-prov="88fff9d9a3f4097be33105eff4f0664a" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(56.9846 -1)" fill="#000000" data-prov="1c0a15caddb0e912285270f67ff23a3b" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(58.4846 -1)" fill="#000000" data-prov="82e4c22515ed591ba37576873988586e" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(59.9846 -1)" fill="#000000" data-prov="6304bcb23912da87e33c77509f7985f4" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(61.4846 -1)" fill="#000000" data-prov="99878edbfc3bbb1e8eca463cccd584ce" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(64.4846 -1)" fill="#000000" data-prov="d10593c1a375a3b07eb107dae9e897b3" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(65.9846 -1)" fill="#000000" data-prov="ba9722cd8f95336b0804751c84983573" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(67.4846 -1)" fill="#000000" data-prov="103fdcd52932b1c8f5fab0036c2dd002" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(68.9846 -1)" fill="#000000" data-prov="fcd49faa62e91333932dbac75206c859" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(70.4846 -1)" fill="#000000" data-prov="cc13049cf24d89de78d5dcc3bed18d7f" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(71.9846 -1)" fill="#000000" data-prov="88a15f00dc6e06aaf9f2532f05f6197e" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(73.4846 -1)" fill="#000000" data-prov="cd16148313e9a4f391ab0cabfeb1ee4c" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(74.9846 -1)" fill="#000000" data-prov="df598a181d9acccffc346705fce5da9b" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(6.5652 -1)" fill="#000000" data-prov="5833135b23eaf581bccad90222f64e7e" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(8.6459 -1)" fill="#000000" data-prov="3c653d764b31b22273540a079363370c" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(10.7266 -1)" fill="#000000" data-prov="dfd195901678557bdc1f1351634d2b68" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(14.0072 -1)" fill="#000000" data-prov="99d206152de1651afeef963c42d7984f" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(16.0879 -1)" fill="#000000" data-prov="1340dc8c93d5925410da02d683dd5916" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(18.1686 -1)" fill="#000000" data-prov="d9b7e874516d265e3c165a16887a22bd" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(20.2492 -1)" fill="#000000" data-prov="12ef29aff1cc56481133aec42c0d1d35" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(23.5299 -1)" fill="#000000" data-prov="6f2586548ccd7de6800f74edd852d03b" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(25.6105 -1)" fill="#000000" data-prov="6cd2fcd32ca7d1441b6534c025d7ae93" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(27.6912 -1)" fill="#000000" data-prov="e71f03f7d3d50a64ea72ce4bcdffb03e" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(29.7719 -1)" fill="#000000" data-prov="0227904e88f6312904444c17ae540b57" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(33.0525 -1)" fill="#000000" data-prov="6cce2821ccbb4f5769708cb9ca3c38a7" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(35.1332 -1)" fill="#000000" data-prov="9952a70d5e0f9911d93466e83edc252e" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(37.2139 -1)" fill="#000000" data-prov="1ead59d59c0c7cec46071003e7741905" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(39.2945 -1)" fill="#000000" data-prov="4b82f873de97ed4fa80748acbf368585" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(42.5752 -1)" fill="#000000" data-prov="a26098a444bb635ce82ff700f48491ed" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(44.6558 -1)" fill="#000000" data-prov="460c0831f9fd8de9b01a3a4bac641c8e" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(46.7365 -1)" fill="#000000" data-prov="50dc15968bfd55c7637d0dde7c2f7bb3" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(48.8172 -1)" fill="#000000" data-prov="d095c952d8865af497a68b9fb543c15e" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(52.0978 -1)" fill="#000000" data-prov="1e4cb41d3c7556e314182c82b7790bef" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(54.1785 -1)" fill="#000000" data-prov="9645397274cb84055aeba5639f8b06a5" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(56.2591 -1)" fill="#000000" data-prov="9578182658c00300531491532d13f66a" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(58.3398 -1)" fill="#000000" data-prov="0a4dcf79021a9ba0366091e34fab456c" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(61.6205 -1)" fill="#000000" data-prov="4b3905877c48341998d76f07cdb9eff5" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(63.7011 -1)" fill="#000000" data-prov="4582d540c93386289e704713ab2deeeb" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(65.7818 -1)" fill="#000000" data-prov="b6d88aa94cc5462fed11ef21a9b9d6df" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(67.8625 -1)" fill="#000000" data-prov="88fff9d9a3f4097be33105eff4f0664a" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(71.1431 -1)" fill="#000000" data-prov="1c0a15caddb0e912285270f67ff23a3b" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(73.2238 -1)" fill="#000000" data-prov="82e4c22515ed591ba37576873988586e" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(75.3045 -1)" fill="#000000" data-prov="6304bcb23912da87e33c77509f7985f4" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(77.3851 -1)" fill="#000000" data-prov="99878edbfc3bbb1e8eca463cccd584ce" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(80.6658 -1)" fill="#000000" data-prov="d10593c1a375a3b07eb107dae9e897b3" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(82.7465 -1)" fill="#000000" data-prov="ba9722cd8f95336b0804751c84983573" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(84.8271 -1)" fill="#000000" data-prov="103fdcd52932b1c8f5fab0036c2dd002" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(86.9078 -1)" fill="#000000" data-prov="fcd49faa62e91333932dbac75206c859" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(88.9885 -1)" fill="#000000" data-prov="cc13049cf24d89de78d5dcc3bed18d7f" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(91.0692 -1)" fill="#000000" data-prov="88a15f00dc6e06aaf9f2532f05f6197e" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(93.1498 -1)" fill="#000000" data-prov="cd16148313e9a4f391ab0cabfeb1ee4c" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(95.2305 -1)" fill="#000000" data-prov="df598a181d9acccffc346705fce5da9b" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.144 0V4H0V0Z" transform="translate(2.9846 0)" fill="#000000" data-prov="867b15e7cfaeccccfe301517166fe106" data-source-kind="9" data-glyph="barlineSingle" data-class="barline"/>
<path d="M0.144 0V4H0V0Z" transform="translate(10.4846 0)" fill="#000000" data-prov="2d8913235b36cc0b1c41dc5238cba014" data-source-kind="9" data-glyph="barlineSingle" data-class="barline"/>
<path d="M0.144 0V4H0V0Z" transform="translate(17.9846 0)" fill="#000000" data-prov="b263edd8a4514fa237d4e7942c04be8c" data-source-kind="9" data-glyph="barlineSingle" data-class="barline"/>
<path d="M0.144 0V4H0V0Z" transform="translate(25.4846 0)" fill="#000000" data-prov="abc1bd57e0116cfc47c4f84f0c22b2e6" data-source-kind="9" data-glyph="barlineSingle" data-class="barline"/>
<path d="M0.144 0V4H0V0Z" transform="translate(32.9846 0)" fill="#000000" data-prov="9f811a0578b546d35393e29bb06afe9b" data-source-kind="9" data-glyph="barlineSingle" data-class="barline"/>
<path d="M0.144 0V4H0V0Z" transform="translate(40.4846 0)" fill="#000000" data-prov="7c62f742d0a60d8a6177a714ef9241af" data-source-kind="9" data-glyph="barlineSingle" data-class="barline"/>
<path d="M0.144 0V4H0V0Z" transform="translate(47.9846 0)" fill="#000000" data-prov="0b1e63cbd07616159ee70000e3c76056" data-source-kind="9" data-glyph="barlineSingle" data-class="barline"/>
<path d="M0.144 0V4H0V0Z" transform="translate(55.4846 0)" fill="#000000" data-prov="f21f4e337050d50f36f7d905196db794" data-source-kind="9" data-glyph="barlineSingle" data-class="barline"/>
<path d="M0.144 0V4H0V0Z" transform="translate(62.9846 0)" fill="#000000" data-prov="f4a3968aa56472207e4e921c44dfa1d7" data-source-kind="9" data-glyph="barlineSingle" data-class="barline"/>
<path d="M0.144 0V4H0V0ZM0.912 4H0.412V0H0.912Z" transform="translate(76.4846 0)" fill="#000000" data-prov="d99180b4838ec1269b3f4caee0201968" data-source-kind="9" data-glyph="barlineFinal" data-class="barline"/>
<path d="M0.144 0V4H0V0Z" transform="translate(12.5072 0)" fill="#000000" data-prov="2d8913235b36cc0b1c41dc5238cba014" data-source-kind="9" data-glyph="barlineSingle" data-class="barline"/>
<path d="M0.144 0V4H0V0Z" transform="translate(22.0299 0)" fill="#000000" data-prov="b263edd8a4514fa237d4e7942c04be8c" data-source-kind="9" data-glyph="barlineSingle" data-class="barline"/>
<path d="M0.144 0V4H0V0Z" transform="translate(31.5525 0)" fill="#000000" data-prov="abc1bd57e0116cfc47c4f84f0c22b2e6" data-source-kind="9" data-glyph="barlineSingle" data-class="barline"/>
<path d="M0.144 0V4H0V0Z" transform="translate(41.0752 0)" fill="#000000" data-prov="9f811a0578b546d35393e29bb06afe9b" data-source-kind="9" data-glyph="barlineSingle" data-class="barline"/>
<path d="M0.144 0V4H0V0Z" transform="translate(50.5978 0)" fill="#000000" data-prov="7c62f742d0a60d8a6177a714ef9241af" data-source-kind="9" data-glyph="barlineSingle" data-class="barline"/>
<path d="M0.144 0V4H0V0Z" transform="translate(60.1205 0)" fill="#000000" data-prov="0b1e63cbd07616159ee70000e3c76056" data-source-kind="9" data-glyph="barlineSingle" data-class="barline"/>
<path d="M0.144 0V4H0V0Z" transform="translate(69.6431 0)" fill="#000000" data-prov="f21f4e337050d50f36f7d905196db794" data-source-kind="9" data-glyph="barlineSingle" data-class="barline"/>
<path d="M0.144 0V4H0V0Z" transform="translate(79.1658 0)" fill="#000000" data-prov="f4a3968aa56472207e4e921c44dfa1d7" data-source-kind="9" data-glyph="barlineSingle" data-class="barline"/>
<path d="M0.144 0V4H0V0ZM0.912 4H0.412V0H0.912Z" transform="translate(97.0112 0)" fill="#000000" data-prov="d99180b4838ec1269b3f4caee0201968" data-source-kind="9" data-glyph="barlineFinal" data-class="barline"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

@ -2,8 +2,8 @@ fixture=ten_measure_single_staff solver=stub
glyph_count=51
path_count=51
fallback_rect_count=0
stroke_count=51
provenance_count=102
stroke_count=91
provenance_count=142
layer_count=1
hard_constraint_count=0
xml_well_formed=true

View File

@ -11,45 +11,85 @@
<line x1="-1" y1="4" x2="83.4" y2="4" stroke="#000000" stroke-width="0.13" data-prov="c46b9445a4c5ff909f50b13f9025c4a3" data-source-kind="3" data-kind="stroke"/>
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="fe116eb75ff697f9f2451c10c05349c6" data-source-kind="2" data-kind="stroke"/>
<line x1="5.75" y1="-1" x2="5.75" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="dbd573fbc0c21f9b07a8537f658b048c" data-source-kind="0" data-kind="stroke"/>
<line x1="4.3" y1="-1" x2="6.0807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="07ffb45f25e59b0955bd4e248522b2ef" data-source-kind="1" data-kind="stroke"/>
<line x1="7.35" y1="-1" x2="7.35" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="276b6f72f2bcb818f84229b6833ce022" data-source-kind="0" data-kind="stroke"/>
<line x1="5.9" y1="-1" x2="7.6807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="3539af5cd23dc6ca259a35fef4aa45c2" data-source-kind="1" data-kind="stroke"/>
<line x1="8.95" y1="-1" x2="8.95" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="d1b0067ebb2b2b9115a77aaadc53bffe" data-source-kind="0" data-kind="stroke"/>
<line x1="7.5" y1="-1" x2="9.2807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="9b43d5d2a83ce1086364f6f3ac4b5ba2" data-source-kind="1" data-kind="stroke"/>
<line x1="10.55" y1="-1" x2="10.55" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="13303d184ca25b99835d71e21f3a96df" data-source-kind="0" data-kind="stroke"/>
<line x1="9.1" y1="-1" x2="10.8807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="d6c7a9458a06532e1c7507e71363c0dd" data-source-kind="1" data-kind="stroke"/>
<line x1="13.75" y1="-1" x2="13.75" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="aa33134cf72cebda65d1b2b427230541" data-source-kind="0" data-kind="stroke"/>
<line x1="12.3" y1="-1" x2="14.0807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="20fbe0162b0bc4dd93e2c3e3da73bb83" data-source-kind="1" data-kind="stroke"/>
<line x1="15.35" y1="-1" x2="15.35" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="01d06ae931cf05983e4b17744108297b" data-source-kind="0" data-kind="stroke"/>
<line x1="13.9" y1="-1" x2="15.6807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="cd9abf9ed66ab876f68b9d88ce1e5199" data-source-kind="1" data-kind="stroke"/>
<line x1="16.95" y1="-1" x2="16.95" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="47c9ce76466974ecfabe4a9cafb75c3c" data-source-kind="0" data-kind="stroke"/>
<line x1="15.5" y1="-1" x2="17.2807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="7ade41165c11102f29e87cb09eb3f88f" data-source-kind="1" data-kind="stroke"/>
<line x1="18.55" y1="-1" x2="18.55" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="e6d1c0a44d13be2700ad4381e1d518fa" data-source-kind="0" data-kind="stroke"/>
<line x1="17.1" y1="-1" x2="18.8807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="32c2aa89808756c46e8b7afcfb2eb057" data-source-kind="1" data-kind="stroke"/>
<line x1="21.75" y1="-1" x2="21.75" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="370a65aab516f6792e49a1ed28bd5cd9" data-source-kind="0" data-kind="stroke"/>
<line x1="20.3" y1="-1" x2="22.0807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="0a3ae3c155d29c21e266e663a8b1b214" data-source-kind="1" data-kind="stroke"/>
<line x1="23.35" y1="-1" x2="23.35" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="75b4bca159d5c28b10b2078bb457bb53" data-source-kind="0" data-kind="stroke"/>
<line x1="21.9" y1="-1" x2="23.6807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="c27e3e835224dc54cef9b36818099cd0" data-source-kind="1" data-kind="stroke"/>
<line x1="24.95" y1="-1" x2="24.95" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="c4531390972e55a43af2bd9f85e3c250" data-source-kind="0" data-kind="stroke"/>
<line x1="23.5" y1="-1" x2="25.2807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="4b43990bc25bf4afffda3e2a7d4dcab7" data-source-kind="1" data-kind="stroke"/>
<line x1="26.55" y1="-1" x2="26.55" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="888c6ef019fc4b0fc714672a4444c60c" data-source-kind="0" data-kind="stroke"/>
<line x1="25.1" y1="-1" x2="26.8807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="8e120598410629bb86883f318071a6b5" data-source-kind="1" data-kind="stroke"/>
<line x1="29.75" y1="-1" x2="29.75" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="6c70ad9006ed8fbb104d77eba3f2dbcb" data-source-kind="0" data-kind="stroke"/>
<line x1="28.3" y1="-1" x2="30.0807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="6d2724bb96160f831b4e987ce6b4349a" data-source-kind="1" data-kind="stroke"/>
<line x1="31.35" y1="-1" x2="31.35" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="debe82da2c34817a871d8a4cc5cc3fdd" data-source-kind="0" data-kind="stroke"/>
<line x1="29.9" y1="-1" x2="31.6807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="7a9f84c8590c7e8156fd929e35153cf8" data-source-kind="1" data-kind="stroke"/>
<line x1="32.95" y1="-1" x2="32.95" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="7b524c2e9e5657b68fd1a81337887c2e" data-source-kind="0" data-kind="stroke"/>
<line x1="31.5" y1="-1" x2="33.2807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="c4a9602f838e0ea74a9fe68da12baff2" data-source-kind="1" data-kind="stroke"/>
<line x1="34.55" y1="-1" x2="34.55" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="cb31fbbd4a3e3eb17ed06e65f40589e5" data-source-kind="0" data-kind="stroke"/>
<line x1="33.1" y1="-1" x2="34.8807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="76860486e62be8520184bb3e8c284d94" data-source-kind="1" data-kind="stroke"/>
<line x1="37.75" y1="-1" x2="37.75" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="bc1cc9bede7fc3c72827cfbf184cdb7e" data-source-kind="0" data-kind="stroke"/>
<line x1="36.3" y1="-1" x2="38.0807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="a3fd2ae47f432e61881cb1e44a7108e6" data-source-kind="1" data-kind="stroke"/>
<line x1="39.35" y1="-1" x2="39.35" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="95891bc2b58231a1618b5d422e6131b0" data-source-kind="0" data-kind="stroke"/>
<line x1="37.9" y1="-1" x2="39.6807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="a9e2ee2be83c0a4978db517bf182efe9" data-source-kind="1" data-kind="stroke"/>
<line x1="40.95" y1="-1" x2="40.95" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="ed21002861831422bdbb36e8f981d2a9" data-source-kind="0" data-kind="stroke"/>
<line x1="39.5" y1="-1" x2="41.2807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="2bac60a88ddddcf403dd6edfb67b5bb0" data-source-kind="1" data-kind="stroke"/>
<line x1="42.55" y1="-1" x2="42.55" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="e49748251746a6dbdf15aa8dd983e6e7" data-source-kind="0" data-kind="stroke"/>
<line x1="41.1" y1="-1" x2="42.8807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="a592bc951f4afa64726aa30ccdd6ddfa" data-source-kind="1" data-kind="stroke"/>
<line x1="45.75" y1="-1" x2="45.75" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="8d2938a01abfe451991829fbde6d2b94" data-source-kind="0" data-kind="stroke"/>
<line x1="44.3" y1="-1" x2="46.0807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="c73f1aad686621adde07e7fe7b160ad7" data-source-kind="1" data-kind="stroke"/>
<line x1="47.35" y1="-1" x2="47.35" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="88366a6edcce03db41d39d08b2616742" data-source-kind="0" data-kind="stroke"/>
<line x1="45.9" y1="-1" x2="47.6807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="4e052448582a8fdc672f38b02dc205e1" data-source-kind="1" data-kind="stroke"/>
<line x1="48.95" y1="-1" x2="48.95" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="77a10c7862f0ffce98d309bb71ce675f" data-source-kind="0" data-kind="stroke"/>
<line x1="47.5" y1="-1" x2="49.2807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="68c691f2336e5a322116641b9f2f7054" data-source-kind="1" data-kind="stroke"/>
<line x1="50.55" y1="-1" x2="50.55" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="cfa457e70519a1826f321a56cb3fd03b" data-source-kind="0" data-kind="stroke"/>
<line x1="49.1" y1="-1" x2="50.8807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="3c3f0d6b5ab00374d7628cd6f9876bc9" data-source-kind="1" data-kind="stroke"/>
<line x1="53.75" y1="-1" x2="53.75" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="273d04eeece605789035a29d80023c2c" data-source-kind="0" data-kind="stroke"/>
<line x1="52.3" y1="-1" x2="54.0807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="9ec226573f8ea2320fc444c562163ddb" data-source-kind="1" data-kind="stroke"/>
<line x1="55.35" y1="-1" x2="55.35" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="a23b09fda2784b566bf1de48e89a2baa" data-source-kind="0" data-kind="stroke"/>
<line x1="53.9" y1="-1" x2="55.6806" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="9e3345d5dddffbb9cf263a1708fc2589" data-source-kind="1" data-kind="stroke"/>
<line x1="56.95" y1="-1" x2="56.95" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="edf9ca4611cfc17faace6241cae3b73d" data-source-kind="0" data-kind="stroke"/>
<line x1="55.5" y1="-1" x2="57.2806" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="ea06a5b83026202fbe3eed55ca3680c9" data-source-kind="1" data-kind="stroke"/>
<line x1="58.55" y1="-1" x2="58.55" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="f1e3c0367633266d5f188e5bd6d98ad4" data-source-kind="0" data-kind="stroke"/>
<line x1="57.1" y1="-1" x2="58.8806" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="b8d324f0620ebb59f66346b61a4d214e" data-source-kind="1" data-kind="stroke"/>
<line x1="61.75" y1="-1" x2="61.75" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="2bf824905032462ee8c9988b780feabf" data-source-kind="0" data-kind="stroke"/>
<line x1="60.3" y1="-1" x2="62.0806" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="579f0f80918268f1ba03890d14832b56" data-source-kind="1" data-kind="stroke"/>
<line x1="63.35" y1="-1" x2="63.35" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="08a65aebf8baaded74feb3ec7cc36d18" data-source-kind="0" data-kind="stroke"/>
<line x1="61.9" y1="-1" x2="63.6806" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="f04f04c436808c53ab1c2b169d7f5a33" data-source-kind="1" data-kind="stroke"/>
<line x1="64.95" y1="-1" x2="64.95" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="d155779804ad660f4466745153872349" data-source-kind="0" data-kind="stroke"/>
<line x1="63.5" y1="-1" x2="65.2806" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="3b9174fe7361dbfc454fbe17b9ec81b1" data-source-kind="1" data-kind="stroke"/>
<line x1="66.55" y1="-1" x2="66.55" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="af73177552d5fa95b746caf62d000623" data-source-kind="0" data-kind="stroke"/>
<line x1="65.1" y1="-1" x2="66.8806" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="46e6eac9f03c1e09a15cb0bb07628570" data-source-kind="1" data-kind="stroke"/>
<line x1="69.75" y1="-1" x2="69.75" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="7c839e4fb5f2522c8fde3b48577eafae" data-source-kind="0" data-kind="stroke"/>
<line x1="68.3" y1="-1" x2="70.0806" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="0e4ec9f37979b06c54f0e2d499df5bf1" data-source-kind="1" data-kind="stroke"/>
<line x1="71.35" y1="-1" x2="71.35" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="0c8e0b8170c827494e606d4541ce2c89" data-source-kind="0" data-kind="stroke"/>
<line x1="69.9" y1="-1" x2="71.6806" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="61f1ed037baf82bf6594769a9205df07" data-source-kind="1" data-kind="stroke"/>
<line x1="72.95" y1="-1" x2="72.95" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="42480ffc14ad129d8dec456e7bad317c" data-source-kind="0" data-kind="stroke"/>
<line x1="71.5" y1="-1" x2="73.2806" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="adc82c9de5d3ed333e335c32f7690a6b" data-source-kind="1" data-kind="stroke"/>
<line x1="74.55" y1="-1" x2="74.55" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="0f408610c63793003f04e3af5a03493f" data-source-kind="0" data-kind="stroke"/>
<line x1="73.1" y1="-1" x2="74.8806" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="1dee0e17b4b9167cda8e51b45e2ab47c" data-source-kind="1" data-kind="stroke"/>
<line x1="76.15" y1="-1" x2="76.15" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="99d50b32a7d1eac1019c14132a834144" data-source-kind="0" data-kind="stroke"/>
<line x1="74.7" y1="-1" x2="76.4806" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="c33f0e929fa3ea4230c07aca80f60c04" data-source-kind="1" data-kind="stroke"/>
<line x1="77.75" y1="-1" x2="77.75" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="572e96450f21b18771e510c6c41444dc" data-source-kind="0" data-kind="stroke"/>
<line x1="76.3" y1="-1" x2="78.0806" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="67463b29bfb160641501f497f6134aa6" data-source-kind="1" data-kind="stroke"/>
<line x1="79.35" y1="-1" x2="79.35" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="68935c410dbe357c3f80b01c6e6d3cb1" data-source-kind="0" data-kind="stroke"/>
<line x1="77.9" y1="-1" x2="79.6806" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="75f41055f9e23911ca51158dab6488df" data-source-kind="1" data-kind="stroke"/>
<line x1="80.95" y1="-1" x2="80.95" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="9e9ba65603d31963bdc6d55dfacc5eba" data-source-kind="0" data-kind="stroke"/>
<line x1="79.5" y1="-1" x2="81.2806" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="66a37f88caecfe799ec34469d2302afd" data-source-kind="1" data-kind="stroke"/>
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="40a9a55985c8bf8b1eb66b6d8c8e7b7a" data-source-kind="12" data-kind="stroke"/>
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="10eb9773d25f0d7d64f92b36f88e5b38" data-source-kind="14" data-kind="stroke"/>
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="86a982398112115027c54222505dd143" data-source-kind="15" data-kind="stroke"/>

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

@ -2,12 +2,12 @@ fixture=valid_score_rich solver=engrave
glyph_count=11
path_count=11
fallback_rect_count=0
stroke_count=33
provenance_count=44
stroke_count=38
provenance_count=49
layer_count=1
hard_constraint_count=0
xml_well_formed=true
view_box=[-3.059857 -3.632 27.953568 11.024]
view_box=[-3.1598568 -3.632 31.588375 11.024]
class_counts:
barline=1
clef=3

View File

@ -1,52 +1,57 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="279.5357" height="110.24" viewBox="0 0 27.9536 11.024">
<svg xmlns="http://www.w3.org/2000/svg" width="315.8838" height="110.24" viewBox="0 0 31.5884 11.024">
<!-- epiphany-render-svg: glyphs are genuine Bravura SMuFL outlines inlined as paths; geometry is the resolved layout verbatim, no engraving performed here; every glyph and stroke carries a data-prov trace to its score-graph source -->
<g transform="translate(3.0599 7.392) scale(1 -1)">
<g transform="translate(3.1599 7.392) scale(1 -1)">
<g data-layer="0">
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="5fc3f9fc71005c8f91cef3c82cf457d7" data-source-kind="6" data-kind="stroke"/>
<line x1="-0.9949" y1="0" x2="7.6512" y2="0" stroke="#000000" stroke-width="0.13" data-prov="540fd4c2706753fcc11d7abf84677260" data-source-kind="3" data-kind="stroke"/>
<line x1="-0.9949" y1="1" x2="7.6512" y2="1" stroke="#000000" stroke-width="0.13" data-prov="fea4bf7d60f88df52ba88e1026e63342" data-source-kind="3" data-kind="stroke"/>
<line x1="-0.9949" y1="2" x2="7.6512" y2="2" stroke="#000000" stroke-width="0.13" data-prov="2ce0db586e615b2e13faf76b21a0d74e" data-source-kind="3" data-kind="stroke"/>
<line x1="-0.9949" y1="3" x2="7.6512" y2="3" stroke="#000000" stroke-width="0.13" data-prov="d6f4c9a4f9b381f86948af62dd614587" data-source-kind="3" data-kind="stroke"/>
<line x1="-0.9949" y1="4" x2="7.6512" y2="4" stroke="#000000" stroke-width="0.13" data-prov="d26797f8b55b1986957fe0b86a4d8ad3" data-source-kind="3" data-kind="stroke"/>
<line x1="-1.0949" y1="0" x2="9.3932" y2="0" stroke="#000000" stroke-width="0.13" data-prov="540fd4c2706753fcc11d7abf84677260" data-source-kind="3" data-kind="stroke"/>
<line x1="-1.0949" y1="1" x2="9.3932" y2="1" stroke="#000000" stroke-width="0.13" data-prov="fea4bf7d60f88df52ba88e1026e63342" data-source-kind="3" data-kind="stroke"/>
<line x1="-1.0949" y1="2" x2="9.3932" y2="2" stroke="#000000" stroke-width="0.13" data-prov="2ce0db586e615b2e13faf76b21a0d74e" data-source-kind="3" data-kind="stroke"/>
<line x1="-1.0949" y1="3" x2="9.3932" y2="3" stroke="#000000" stroke-width="0.13" data-prov="d6f4c9a4f9b381f86948af62dd614587" data-source-kind="3" data-kind="stroke"/>
<line x1="-1.0949" y1="4" x2="9.3932" y2="4" stroke="#000000" stroke-width="0.13" data-prov="d26797f8b55b1986957fe0b86a4d8ad3" data-source-kind="3" data-kind="stroke"/>
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="fbab9b9c1117f1a77321eef2528313c7" data-source-kind="2" data-kind="stroke"/>
<line x1="4.0627" y1="-1" x2="4.0627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="685bb2f9eba2acf767017fe46340d32d" data-source-kind="0" data-kind="stroke"/>
<line x1="5.5627" y1="-1" x2="5.5627" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="bfca9c8f8054f3d500e342f0b4750c5e" data-source-kind="0" data-kind="stroke"/>
<line x1="6.541" y1="-1" x2="6.541" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="150cdc069f098c84e4293a2bb4ae6693" data-source-kind="0" data-kind="stroke"/>
<line x1="4.78" y1="-1" x2="4.78" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="685bb2f9eba2acf767017fe46340d32d" data-source-kind="0" data-kind="stroke"/>
<line x1="2.9846" y1="-1" x2="4.7652" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="badbeee9b287e9d086850c2be907fce8" data-source-kind="1" data-kind="stroke"/>
<line x1="6.8607" y1="-1" x2="6.8607" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="bfca9c8f8054f3d500e342f0b4750c5e" data-source-kind="0" data-kind="stroke"/>
<line x1="5.0652" y1="-1" x2="6.8459" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="9a0cb14210151fc9b638f964beb65c6c" data-source-kind="1" data-kind="stroke"/>
<line x1="8.1065" y1="-1" x2="8.1065" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="150cdc069f098c84e4293a2bb4ae6693" data-source-kind="0" data-kind="stroke"/>
<line x1="7.1459" y1="-1" x2="8.9266" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="01fbbb3559a0372164da3f005943fc45" data-source-kind="1" data-kind="stroke"/>
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="ccedf36ea2c89203f216fe2bdcf32577" data-source-kind="12" data-kind="stroke"/>
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="0bc5e2a029d8599bd4d15a916eb90318" data-source-kind="22" data-kind="stroke"/>
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="5078100681364e0eef0becb94f607df4" data-source-kind="14" data-kind="stroke"/>
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="850009fc86dd7744c4dea1ea6a28be42" data-source-kind="15" data-kind="stroke"/>
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="0b3280aa906b67171cb829398b7bf1f0" data-source-kind="25" data-kind="stroke"/>
<line x1="8.9846" y1="0" x2="8.9846" y2="0" stroke="#000000" stroke-width="0" data-prov="d9a97871d4088c0f7e7c1ab7e4fd49b7" data-source-kind="6" data-kind="stroke"/>
<line x1="8.6512" y1="0" x2="14.1797" y2="0" stroke="#000000" stroke-width="0.13" data-prov="74a1941933b935bf49129ddec9ceb7cb" data-source-kind="3" data-kind="stroke"/>
<line x1="8.6512" y1="1" x2="14.1797" y2="1" stroke="#000000" stroke-width="0.13" data-prov="9127c3ddf63996fbde1522f2af47e640" data-source-kind="3" data-kind="stroke"/>
<line x1="8.6512" y1="2" x2="14.1797" y2="2" stroke="#000000" stroke-width="0.13" data-prov="6244e1812ecbd0f97ace48fed547d2a0" data-source-kind="3" data-kind="stroke"/>
<line x1="8.6512" y1="3" x2="14.1797" y2="3" stroke="#000000" stroke-width="0.13" data-prov="daaa82fcc1b3fceb63ecca023f71c3a6" data-source-kind="3" data-kind="stroke"/>
<line x1="8.6512" y1="4" x2="14.1797" y2="4" stroke="#000000" stroke-width="0.13" data-prov="00ce5a2fe2e45b498b1164e3ce0239f0" data-source-kind="3" data-kind="stroke"/>
<line x1="8.9846" y1="0" x2="8.9846" y2="0" stroke="#000000" stroke-width="0" data-prov="374743e32dbbfe82916c87b68c2fcbd3" data-source-kind="2" data-kind="stroke"/>
<line x1="13.0473" y1="-1" x2="13.0473" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="27a2f99d23428f969f8f22d7e42f89a4" data-source-kind="0" data-kind="stroke"/>
<line x1="13.6961" y1="-0.5" x2="13.6961" y2="3" stroke="#000000" stroke-width="0.12" data-prov="4ba26f525e6c664f9f3727b3f001c4f7" data-source-kind="0" data-kind="stroke"/>
<line x1="14.9691" y1="0" x2="14.9691" y2="0" stroke="#000000" stroke-width="0" data-prov="cc34303d8801d20b413432a3a1b66aa0" data-source-kind="6" data-kind="stroke"/>
<line x1="14.7718" y1="0" x2="22.8287" y2="0" stroke="#000000" stroke-width="0.13" data-prov="ff986fa2737b7cc76925b8b003dfb446" data-source-kind="3" data-kind="stroke"/>
<line x1="14.7718" y1="1" x2="22.8287" y2="1" stroke="#000000" stroke-width="0.13" data-prov="8c632b729231878fa18c479fd24d7436" data-source-kind="3" data-kind="stroke"/>
<line x1="14.7718" y1="2" x2="22.8287" y2="2" stroke="#000000" stroke-width="0.13" data-prov="0c8b92c6e5cb8d4afcffe28972595e85" data-source-kind="3" data-kind="stroke"/>
<line x1="14.7718" y1="3" x2="22.8287" y2="3" stroke="#000000" stroke-width="0.13" data-prov="d01bcd62385bf77312ae65017a9b4a50" data-source-kind="3" data-kind="stroke"/>
<line x1="14.7718" y1="4" x2="22.8287" y2="4" stroke="#000000" stroke-width="0.13" data-prov="c882fdc5188e96b8a1950c11dfd401e9" data-source-kind="3" data-kind="stroke"/>
<line x1="14.9691" y1="0" x2="14.9691" y2="0" stroke="#000000" stroke-width="0" data-prov="2fe40e9238d3fc28c88d7082dbbec593" data-source-kind="2" data-kind="stroke"/>
<line x1="19.0318" y1="-1" x2="19.0318" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="8b99315d75c981620504d9274be1fa45" data-source-kind="0" data-kind="stroke"/>
<line x1="20.5318" y1="-0.5" x2="20.5318" y2="3" stroke="#000000" stroke-width="0.12" data-prov="b98aa6fd428e2b9f68fefec4b05a2b78" data-source-kind="0" data-kind="stroke"/>
<line x1="10.7266" y1="0" x2="10.7266" y2="0" stroke="#000000" stroke-width="0" data-prov="d9a97871d4088c0f7e7c1ab7e4fd49b7" data-source-kind="6" data-kind="stroke"/>
<line x1="10.3932" y1="0" x2="16.5023" y2="0" stroke="#000000" stroke-width="0.13" data-prov="74a1941933b935bf49129ddec9ceb7cb" data-source-kind="3" data-kind="stroke"/>
<line x1="10.3932" y1="1" x2="16.5023" y2="1" stroke="#000000" stroke-width="0.13" data-prov="9127c3ddf63996fbde1522f2af47e640" data-source-kind="3" data-kind="stroke"/>
<line x1="10.3932" y1="2" x2="16.5023" y2="2" stroke="#000000" stroke-width="0.13" data-prov="6244e1812ecbd0f97ace48fed547d2a0" data-source-kind="3" data-kind="stroke"/>
<line x1="10.3932" y1="3" x2="16.5023" y2="3" stroke="#000000" stroke-width="0.13" data-prov="daaa82fcc1b3fceb63ecca023f71c3a6" data-source-kind="3" data-kind="stroke"/>
<line x1="10.3932" y1="4" x2="16.5023" y2="4" stroke="#000000" stroke-width="0.13" data-prov="00ce5a2fe2e45b498b1164e3ce0239f0" data-source-kind="3" data-kind="stroke"/>
<line x1="10.7266" y1="0" x2="10.7266" y2="0" stroke="#000000" stroke-width="0" data-prov="374743e32dbbfe82916c87b68c2fcbd3" data-source-kind="2" data-kind="stroke"/>
<line x1="15.291" y1="-1" x2="15.291" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="27a2f99d23428f969f8f22d7e42f89a4" data-source-kind="0" data-kind="stroke"/>
<line x1="13.7111" y1="-1" x2="15.4918" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="370371bf62378295492e01246d4ee16f" data-source-kind="1" data-kind="stroke"/>
<line x1="16.0188" y1="-0.5" x2="16.0188" y2="3" stroke="#000000" stroke-width="0.12" data-prov="4ba26f525e6c664f9f3727b3f001c4f7" data-source-kind="0" data-kind="stroke"/>
<line x1="17.2918" y1="0" x2="17.2918" y2="0" stroke="#000000" stroke-width="0" data-prov="cc34303d8801d20b413432a3a1b66aa0" data-source-kind="6" data-kind="stroke"/>
<line x1="17.0944" y1="0" x2="26.3635" y2="0" stroke="#000000" stroke-width="0.13" data-prov="ff986fa2737b7cc76925b8b003dfb446" data-source-kind="3" data-kind="stroke"/>
<line x1="17.0944" y1="1" x2="26.3635" y2="1" stroke="#000000" stroke-width="0.13" data-prov="8c632b729231878fa18c479fd24d7436" data-source-kind="3" data-kind="stroke"/>
<line x1="17.0944" y1="2" x2="26.3635" y2="2" stroke="#000000" stroke-width="0.13" data-prov="0c8b92c6e5cb8d4afcffe28972595e85" data-source-kind="3" data-kind="stroke"/>
<line x1="17.0944" y1="3" x2="26.3635" y2="3" stroke="#000000" stroke-width="0.13" data-prov="d01bcd62385bf77312ae65017a9b4a50" data-source-kind="3" data-kind="stroke"/>
<line x1="17.0944" y1="4" x2="26.3635" y2="4" stroke="#000000" stroke-width="0.13" data-prov="c882fdc5188e96b8a1950c11dfd401e9" data-source-kind="3" data-kind="stroke"/>
<line x1="17.2918" y1="0" x2="17.2918" y2="0" stroke="#000000" stroke-width="0" data-prov="2fe40e9238d3fc28c88d7082dbbec593" data-source-kind="2" data-kind="stroke"/>
<line x1="21.8562" y1="-1" x2="21.8562" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="8b99315d75c981620504d9274be1fa45" data-source-kind="0" data-kind="stroke"/>
<line x1="20.2764" y1="-1" x2="22.057" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="95dfefec6481cc7be34a31c283b7fd8c" data-source-kind="1" data-kind="stroke"/>
<line x1="23.6369" y1="-0.5" x2="23.6369" y2="3" stroke="#000000" stroke-width="0.12" data-prov="b98aa6fd428e2b9f68fefec4b05a2b78" data-source-kind="0" data-kind="stroke"/>
<path d="M1.504 1.66C1.496 1.708 1.504 1.712 1.528 1.736C1.96 2.14 2.288 2.648 2.288 3.26C2.288 3.608 2.192 3.952 2.028 4.192C1.968 4.28 1.864 4.392 1.82 4.392C1.764 4.392 1.64 4.288 1.56 4.2C1.264 3.872 1.168 3.372 1.168 2.956C1.168 2.724 1.196 2.464 1.224 2.3C1.232 2.252 1.236 2.244 1.188 2.204C0.612 1.728 0 1.156 0 0.348C0 -0.348 0.476 -1.008 1.456 -1.008C1.548 -1.008 1.652 -1 1.732 -0.984C1.776 -0.976 1.784 -0.972 1.792 -1.02C1.84 -1.288 1.9 -1.636 1.9 -1.824C1.9 -2.416 1.5 -2.488 1.264 -2.488C1.048 -2.488 0.944 -2.424 0.944 -2.372C0.944 -2.344 0.98 -2.332 1.072 -2.304C1.196 -2.268 1.34 -2.16 1.34 -1.928C1.34 -1.708 1.2 -1.52 0.956 -1.52C0.688 -1.52 0.528 -1.732 0.528 -1.98C0.528 -2.24 0.684 -2.632 1.288 -2.632C1.556 -2.632 2.076 -2.512 2.076 -1.832C2.076 -1.604 2.004 -1.224 1.96 -0.976C1.952 -0.928 1.956 -0.932 2.012 -0.908C2.416 -0.748 2.684 -0.408 2.684 0.044C2.684 0.556 2.308 1.008 1.72 1.008C1.616 1.008 1.616 1.008 1.604 1.08ZM1.88 3.772C2.012 3.772 2.12 3.664 2.12 3.444C2.12 3 1.74 2.64 1.424 2.364C1.396 2.34 1.38 2.344 1.372 2.396C1.356 2.5 1.348 2.636 1.348 2.764C1.348 3.388 1.636 3.772 1.88 3.772ZM1.444 1.048C1.456 0.972 1.456 0.976 1.384 0.952C1.032 0.832 0.804 0.516 0.804 0.176C0.804 -0.184 0.992 -0.44 1.264 -0.532C1.296 -0.544 1.344 -0.556 1.372 -0.556C1.404 -0.556 1.42 -0.536 1.42 -0.512C1.42 -0.484 1.388 -0.472 1.36 -0.46C1.192 -0.388 1.072 -0.216 1.072 -0.032C1.072 0.196 1.228 0.368 1.472 0.436C1.536 0.452 1.544 0.448 1.552 0.404L1.752 -0.788C1.76 -0.832 1.756 -0.832 1.696 -0.844C1.632 -0.856 1.552 -0.864 1.472 -0.864C0.772 -0.864 0.32 -0.476 0.32 0.08C0.32 0.316 0.36 0.632 0.692 1.008C0.932 1.276 1.116 1.424 1.304 1.576C1.344 1.608 1.352 1.604 1.36 1.56ZM1.72 0.412C1.712 0.46 1.716 0.472 1.764 0.468C2.088 0.44 2.356 0.168 2.356 -0.184C2.356 -0.436 2.204 -0.64 1.98 -0.752C1.932 -0.776 1.924 -0.776 1.916 -0.728Z" transform="translate(0 1)" fill="#000000" data-prov="11b3eeb335691c9e35abc39fd2b199b8" data-source-kind="4" data-glyph="gClef" data-class="clef"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(2.9846 -1)" fill="#000000" data-prov="a9ea8a975336c483b806550f06c6ac3a" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(4.4846 -1)" fill="#000000" data-prov="f75057d1424ec76a43140fd09f5430f6" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(5.9846 -1)" fill="#000000" data-prov="ae10a4d1e0e114150bb2f37428592071" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.144 0V4H0V0ZM0.912 4H0.412V0H0.912Z" transform="translate(7.4846 0)" fill="#000000" data-prov="688cee6a171fdd158a2ecee088684062" data-source-kind="9" data-glyph="barlineFinal" data-class="barline"/>
<path d="M1.504 1.66C1.496 1.708 1.504 1.712 1.528 1.736C1.96 2.14 2.288 2.648 2.288 3.26C2.288 3.608 2.192 3.952 2.028 4.192C1.968 4.28 1.864 4.392 1.82 4.392C1.764 4.392 1.64 4.288 1.56 4.2C1.264 3.872 1.168 3.372 1.168 2.956C1.168 2.724 1.196 2.464 1.224 2.3C1.232 2.252 1.236 2.244 1.188 2.204C0.612 1.728 0 1.156 0 0.348C0 -0.348 0.476 -1.008 1.456 -1.008C1.548 -1.008 1.652 -1 1.732 -0.984C1.776 -0.976 1.784 -0.972 1.792 -1.02C1.84 -1.288 1.9 -1.636 1.9 -1.824C1.9 -2.416 1.5 -2.488 1.264 -2.488C1.048 -2.488 0.944 -2.424 0.944 -2.372C0.944 -2.344 0.98 -2.332 1.072 -2.304C1.196 -2.268 1.34 -2.16 1.34 -1.928C1.34 -1.708 1.2 -1.52 0.956 -1.52C0.688 -1.52 0.528 -1.732 0.528 -1.98C0.528 -2.24 0.684 -2.632 1.288 -2.632C1.556 -2.632 2.076 -2.512 2.076 -1.832C2.076 -1.604 2.004 -1.224 1.96 -0.976C1.952 -0.928 1.956 -0.932 2.012 -0.908C2.416 -0.748 2.684 -0.408 2.684 0.044C2.684 0.556 2.308 1.008 1.72 1.008C1.616 1.008 1.616 1.008 1.604 1.08ZM1.88 3.772C2.012 3.772 2.12 3.664 2.12 3.444C2.12 3 1.74 2.64 1.424 2.364C1.396 2.34 1.38 2.344 1.372 2.396C1.356 2.5 1.348 2.636 1.348 2.764C1.348 3.388 1.636 3.772 1.88 3.772ZM1.444 1.048C1.456 0.972 1.456 0.976 1.384 0.952C1.032 0.832 0.804 0.516 0.804 0.176C0.804 -0.184 0.992 -0.44 1.264 -0.532C1.296 -0.544 1.344 -0.556 1.372 -0.556C1.404 -0.556 1.42 -0.536 1.42 -0.512C1.42 -0.484 1.388 -0.472 1.36 -0.46C1.192 -0.388 1.072 -0.216 1.072 -0.032C1.072 0.196 1.228 0.368 1.472 0.436C1.536 0.452 1.544 0.448 1.552 0.404L1.752 -0.788C1.76 -0.832 1.756 -0.832 1.696 -0.844C1.632 -0.856 1.552 -0.864 1.472 -0.864C0.772 -0.864 0.32 -0.476 0.32 0.08C0.32 0.316 0.36 0.632 0.692 1.008C0.932 1.276 1.116 1.424 1.304 1.576C1.344 1.608 1.352 1.604 1.36 1.56ZM1.72 0.412C1.712 0.46 1.716 0.472 1.764 0.468C2.088 0.44 2.356 0.168 2.356 -0.184C2.356 -0.436 2.204 -0.64 1.98 -0.752C1.932 -0.776 1.924 -0.776 1.916 -0.728Z" transform="translate(8.9846 1)" fill="#000000" data-prov="22ee2bcfa4f95b655d9005ee6936f95c" data-source-kind="4" data-glyph="gClef" data-class="clef"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(11.9691 -1)" fill="#000000" data-prov="570646848d323a130dfd8621abc0523a" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(13.4691 -0.5)" fill="#000000" data-prov="8203471bd393291712730bfe067a49f4" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M1.504 1.66C1.496 1.708 1.504 1.712 1.528 1.736C1.96 2.14 2.288 2.648 2.288 3.26C2.288 3.608 2.192 3.952 2.028 4.192C1.968 4.28 1.864 4.392 1.82 4.392C1.764 4.392 1.64 4.288 1.56 4.2C1.264 3.872 1.168 3.372 1.168 2.956C1.168 2.724 1.196 2.464 1.224 2.3C1.232 2.252 1.236 2.244 1.188 2.204C0.612 1.728 0 1.156 0 0.348C0 -0.348 0.476 -1.008 1.456 -1.008C1.548 -1.008 1.652 -1 1.732 -0.984C1.776 -0.976 1.784 -0.972 1.792 -1.02C1.84 -1.288 1.9 -1.636 1.9 -1.824C1.9 -2.416 1.5 -2.488 1.264 -2.488C1.048 -2.488 0.944 -2.424 0.944 -2.372C0.944 -2.344 0.98 -2.332 1.072 -2.304C1.196 -2.268 1.34 -2.16 1.34 -1.928C1.34 -1.708 1.2 -1.52 0.956 -1.52C0.688 -1.52 0.528 -1.732 0.528 -1.98C0.528 -2.24 0.684 -2.632 1.288 -2.632C1.556 -2.632 2.076 -2.512 2.076 -1.832C2.076 -1.604 2.004 -1.224 1.96 -0.976C1.952 -0.928 1.956 -0.932 2.012 -0.908C2.416 -0.748 2.684 -0.408 2.684 0.044C2.684 0.556 2.308 1.008 1.72 1.008C1.616 1.008 1.616 1.008 1.604 1.08ZM1.88 3.772C2.012 3.772 2.12 3.664 2.12 3.444C2.12 3 1.74 2.64 1.424 2.364C1.396 2.34 1.38 2.344 1.372 2.396C1.356 2.5 1.348 2.636 1.348 2.764C1.348 3.388 1.636 3.772 1.88 3.772ZM1.444 1.048C1.456 0.972 1.456 0.976 1.384 0.952C1.032 0.832 0.804 0.516 0.804 0.176C0.804 -0.184 0.992 -0.44 1.264 -0.532C1.296 -0.544 1.344 -0.556 1.372 -0.556C1.404 -0.556 1.42 -0.536 1.42 -0.512C1.42 -0.484 1.388 -0.472 1.36 -0.46C1.192 -0.388 1.072 -0.216 1.072 -0.032C1.072 0.196 1.228 0.368 1.472 0.436C1.536 0.452 1.544 0.448 1.552 0.404L1.752 -0.788C1.76 -0.832 1.756 -0.832 1.696 -0.844C1.632 -0.856 1.552 -0.864 1.472 -0.864C0.772 -0.864 0.32 -0.476 0.32 0.08C0.32 0.316 0.36 0.632 0.692 1.008C0.932 1.276 1.116 1.424 1.304 1.576C1.344 1.608 1.352 1.604 1.36 1.56ZM1.72 0.412C1.712 0.46 1.716 0.472 1.764 0.468C2.088 0.44 2.356 0.168 2.356 -0.184C2.356 -0.436 2.204 -0.64 1.98 -0.752C1.932 -0.776 1.924 -0.776 1.916 -0.728Z" transform="translate(14.9691 1)" fill="#000000" data-prov="592b318a5a382abc0a975f47f08f0ad3" data-source-kind="4" data-glyph="gClef" data-class="clef"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(17.9537 -1)" fill="#000000" data-prov="cfe927096cef847eb22b0f0da758ae25" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(19.4537 -0.5)" fill="#000000" data-prov="156fb4f4836e433fab4e81ed7492b103" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(3.2846 -1)" fill="#000000" data-prov="a9ea8a975336c483b806550f06c6ac3a" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(5.3652 -1)" fill="#000000" data-prov="f75057d1424ec76a43140fd09f5430f6" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(7.4459 -1)" fill="#000000" data-prov="ae10a4d1e0e114150bb2f37428592071" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.144 0V4H0V0ZM0.912 4H0.412V0H0.912Z" transform="translate(9.2266 0)" fill="#000000" data-prov="688cee6a171fdd158a2ecee088684062" data-source-kind="9" data-glyph="barlineFinal" data-class="barline"/>
<path d="M1.504 1.66C1.496 1.708 1.504 1.712 1.528 1.736C1.96 2.14 2.288 2.648 2.288 3.26C2.288 3.608 2.192 3.952 2.028 4.192C1.968 4.28 1.864 4.392 1.82 4.392C1.764 4.392 1.64 4.288 1.56 4.2C1.264 3.872 1.168 3.372 1.168 2.956C1.168 2.724 1.196 2.464 1.224 2.3C1.232 2.252 1.236 2.244 1.188 2.204C0.612 1.728 0 1.156 0 0.348C0 -0.348 0.476 -1.008 1.456 -1.008C1.548 -1.008 1.652 -1 1.732 -0.984C1.776 -0.976 1.784 -0.972 1.792 -1.02C1.84 -1.288 1.9 -1.636 1.9 -1.824C1.9 -2.416 1.5 -2.488 1.264 -2.488C1.048 -2.488 0.944 -2.424 0.944 -2.372C0.944 -2.344 0.98 -2.332 1.072 -2.304C1.196 -2.268 1.34 -2.16 1.34 -1.928C1.34 -1.708 1.2 -1.52 0.956 -1.52C0.688 -1.52 0.528 -1.732 0.528 -1.98C0.528 -2.24 0.684 -2.632 1.288 -2.632C1.556 -2.632 2.076 -2.512 2.076 -1.832C2.076 -1.604 2.004 -1.224 1.96 -0.976C1.952 -0.928 1.956 -0.932 2.012 -0.908C2.416 -0.748 2.684 -0.408 2.684 0.044C2.684 0.556 2.308 1.008 1.72 1.008C1.616 1.008 1.616 1.008 1.604 1.08ZM1.88 3.772C2.012 3.772 2.12 3.664 2.12 3.444C2.12 3 1.74 2.64 1.424 2.364C1.396 2.34 1.38 2.344 1.372 2.396C1.356 2.5 1.348 2.636 1.348 2.764C1.348 3.388 1.636 3.772 1.88 3.772ZM1.444 1.048C1.456 0.972 1.456 0.976 1.384 0.952C1.032 0.832 0.804 0.516 0.804 0.176C0.804 -0.184 0.992 -0.44 1.264 -0.532C1.296 -0.544 1.344 -0.556 1.372 -0.556C1.404 -0.556 1.42 -0.536 1.42 -0.512C1.42 -0.484 1.388 -0.472 1.36 -0.46C1.192 -0.388 1.072 -0.216 1.072 -0.032C1.072 0.196 1.228 0.368 1.472 0.436C1.536 0.452 1.544 0.448 1.552 0.404L1.752 -0.788C1.76 -0.832 1.756 -0.832 1.696 -0.844C1.632 -0.856 1.552 -0.864 1.472 -0.864C0.772 -0.864 0.32 -0.476 0.32 0.08C0.32 0.316 0.36 0.632 0.692 1.008C0.932 1.276 1.116 1.424 1.304 1.576C1.344 1.608 1.352 1.604 1.36 1.56ZM1.72 0.412C1.712 0.46 1.716 0.472 1.764 0.468C2.088 0.44 2.356 0.168 2.356 -0.184C2.356 -0.436 2.204 -0.64 1.98 -0.752C1.932 -0.776 1.924 -0.776 1.916 -0.728Z" transform="translate(10.7266 1)" fill="#000000" data-prov="22ee2bcfa4f95b655d9005ee6936f95c" data-source-kind="4" data-glyph="gClef" data-class="clef"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(14.0111 -1)" fill="#000000" data-prov="570646848d323a130dfd8621abc0523a" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(15.7918 -0.5)" fill="#000000" data-prov="8203471bd393291712730bfe067a49f4" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M1.504 1.66C1.496 1.708 1.504 1.712 1.528 1.736C1.96 2.14 2.288 2.648 2.288 3.26C2.288 3.608 2.192 3.952 2.028 4.192C1.968 4.28 1.864 4.392 1.82 4.392C1.764 4.392 1.64 4.288 1.56 4.2C1.264 3.872 1.168 3.372 1.168 2.956C1.168 2.724 1.196 2.464 1.224 2.3C1.232 2.252 1.236 2.244 1.188 2.204C0.612 1.728 0 1.156 0 0.348C0 -0.348 0.476 -1.008 1.456 -1.008C1.548 -1.008 1.652 -1 1.732 -0.984C1.776 -0.976 1.784 -0.972 1.792 -1.02C1.84 -1.288 1.9 -1.636 1.9 -1.824C1.9 -2.416 1.5 -2.488 1.264 -2.488C1.048 -2.488 0.944 -2.424 0.944 -2.372C0.944 -2.344 0.98 -2.332 1.072 -2.304C1.196 -2.268 1.34 -2.16 1.34 -1.928C1.34 -1.708 1.2 -1.52 0.956 -1.52C0.688 -1.52 0.528 -1.732 0.528 -1.98C0.528 -2.24 0.684 -2.632 1.288 -2.632C1.556 -2.632 2.076 -2.512 2.076 -1.832C2.076 -1.604 2.004 -1.224 1.96 -0.976C1.952 -0.928 1.956 -0.932 2.012 -0.908C2.416 -0.748 2.684 -0.408 2.684 0.044C2.684 0.556 2.308 1.008 1.72 1.008C1.616 1.008 1.616 1.008 1.604 1.08ZM1.88 3.772C2.012 3.772 2.12 3.664 2.12 3.444C2.12 3 1.74 2.64 1.424 2.364C1.396 2.34 1.38 2.344 1.372 2.396C1.356 2.5 1.348 2.636 1.348 2.764C1.348 3.388 1.636 3.772 1.88 3.772ZM1.444 1.048C1.456 0.972 1.456 0.976 1.384 0.952C1.032 0.832 0.804 0.516 0.804 0.176C0.804 -0.184 0.992 -0.44 1.264 -0.532C1.296 -0.544 1.344 -0.556 1.372 -0.556C1.404 -0.556 1.42 -0.536 1.42 -0.512C1.42 -0.484 1.388 -0.472 1.36 -0.46C1.192 -0.388 1.072 -0.216 1.072 -0.032C1.072 0.196 1.228 0.368 1.472 0.436C1.536 0.452 1.544 0.448 1.552 0.404L1.752 -0.788C1.76 -0.832 1.756 -0.832 1.696 -0.844C1.632 -0.856 1.552 -0.864 1.472 -0.864C0.772 -0.864 0.32 -0.476 0.32 0.08C0.32 0.316 0.36 0.632 0.692 1.008C0.932 1.276 1.116 1.424 1.304 1.576C1.344 1.608 1.352 1.604 1.36 1.56ZM1.72 0.412C1.712 0.46 1.716 0.472 1.764 0.468C2.088 0.44 2.356 0.168 2.356 -0.184C2.356 -0.436 2.204 -0.64 1.98 -0.752C1.932 -0.776 1.924 -0.776 1.916 -0.728Z" transform="translate(17.2918 1)" fill="#000000" data-prov="592b318a5a382abc0a975f47f08f0ad3" data-source-kind="4" data-glyph="gClef" data-class="clef"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(20.5764 -1)" fill="#000000" data-prov="cfe927096cef847eb22b0f0da758ae25" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(22.357 -0.5)" fill="#000000" data-prov="156fb4f4836e433fab4e81ed7492b103" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -2,8 +2,8 @@ fixture=valid_score_rich solver=stub
glyph_count=11
path_count=11
fallback_rect_count=0
stroke_count=33
provenance_count=44
stroke_count=38
provenance_count=49
layer_count=1
hard_constraint_count=0
xml_well_formed=true

View File

@ -11,8 +11,11 @@
<line x1="-1" y1="4" x2="9.8" y2="4" stroke="#000000" stroke-width="0.13" data-prov="d26797f8b55b1986957fe0b86a4d8ad3" data-source-kind="3" data-kind="stroke"/>
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="fbab9b9c1117f1a77321eef2528313c7" data-source-kind="2" data-kind="stroke"/>
<line x1="4.15" y1="-1" x2="4.15" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="685bb2f9eba2acf767017fe46340d32d" data-source-kind="0" data-kind="stroke"/>
<line x1="2.7" y1="-1" x2="4.4807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="badbeee9b287e9d086850c2be907fce8" data-source-kind="1" data-kind="stroke"/>
<line x1="5.75" y1="-1" x2="5.75" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="bfca9c8f8054f3d500e342f0b4750c5e" data-source-kind="0" data-kind="stroke"/>
<line x1="4.3" y1="-1" x2="6.0807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="9a0cb14210151fc9b638f964beb65c6c" data-source-kind="1" data-kind="stroke"/>
<line x1="7.35" y1="-1" x2="7.35" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="150cdc069f098c84e4293a2bb4ae6693" data-source-kind="0" data-kind="stroke"/>
<line x1="5.9" y1="-1" x2="7.6807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="01fbbb3559a0372164da3f005943fc45" data-source-kind="1" data-kind="stroke"/>
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="ccedf36ea2c89203f216fe2bdcf32577" data-source-kind="12" data-kind="stroke"/>
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="0bc5e2a029d8599bd4d15a916eb90318" data-source-kind="22" data-kind="stroke"/>
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="5078100681364e0eef0becb94f607df4" data-source-kind="14" data-kind="stroke"/>
@ -26,6 +29,7 @@
<line x1="12.8" y1="4" x2="22" y2="4" stroke="#000000" stroke-width="0.13" data-prov="00ce5a2fe2e45b498b1164e3ce0239f0" data-source-kind="3" data-kind="stroke"/>
<line x1="13.8" y1="0" x2="13.8" y2="0" stroke="#000000" stroke-width="0" data-prov="374743e32dbbfe82916c87b68c2fcbd3" data-source-kind="2" data-kind="stroke"/>
<line x1="17.95" y1="-1" x2="17.95" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="27a2f99d23428f969f8f22d7e42f89a4" data-source-kind="0" data-kind="stroke"/>
<line x1="16.5" y1="-1" x2="18.2807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="370371bf62378295492e01246d4ee16f" data-source-kind="1" data-kind="stroke"/>
<line x1="19.55" y1="-0.5" x2="19.55" y2="3" stroke="#000000" stroke-width="0.12" data-prov="4ba26f525e6c664f9f3727b3f001c4f7" data-source-kind="0" data-kind="stroke"/>
<line x1="26" y1="0" x2="26" y2="0" stroke="#000000" stroke-width="0" data-prov="cc34303d8801d20b413432a3a1b66aa0" data-source-kind="6" data-kind="stroke"/>
<line x1="25" y1="0" x2="34.2" y2="0" stroke="#000000" stroke-width="0.13" data-prov="ff986fa2737b7cc76925b8b003dfb446" data-source-kind="3" data-kind="stroke"/>
@ -35,6 +39,7 @@
<line x1="25" y1="4" x2="34.2" y2="4" stroke="#000000" stroke-width="0.13" data-prov="c882fdc5188e96b8a1950c11dfd401e9" data-source-kind="3" data-kind="stroke"/>
<line x1="26" y1="0" x2="26" y2="0" stroke="#000000" stroke-width="0" data-prov="2fe40e9238d3fc28c88d7082dbbec593" data-source-kind="2" data-kind="stroke"/>
<line x1="30.15" y1="-1" x2="30.15" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="8b99315d75c981620504d9274be1fa45" data-source-kind="0" data-kind="stroke"/>
<line x1="28.7" y1="-1" x2="30.4807" y2="-1" stroke="#000000" stroke-width="0.13" data-prov="95dfefec6481cc7be34a31c283b7fd8c" data-source-kind="1" data-kind="stroke"/>
<line x1="31.75" y1="-0.5" x2="31.75" y2="3" stroke="#000000" stroke-width="0.12" data-prov="b98aa6fd428e2b9f68fefec4b05a2b78" data-source-kind="0" data-kind="stroke"/>
<path d="M1.504 1.66C1.496 1.708 1.504 1.712 1.528 1.736C1.96 2.14 2.288 2.648 2.288 3.26C2.288 3.608 2.192 3.952 2.028 4.192C1.968 4.28 1.864 4.392 1.82 4.392C1.764 4.392 1.64 4.288 1.56 4.2C1.264 3.872 1.168 3.372 1.168 2.956C1.168 2.724 1.196 2.464 1.224 2.3C1.232 2.252 1.236 2.244 1.188 2.204C0.612 1.728 0 1.156 0 0.348C0 -0.348 0.476 -1.008 1.456 -1.008C1.548 -1.008 1.652 -1 1.732 -0.984C1.776 -0.976 1.784 -0.972 1.792 -1.02C1.84 -1.288 1.9 -1.636 1.9 -1.824C1.9 -2.416 1.5 -2.488 1.264 -2.488C1.048 -2.488 0.944 -2.424 0.944 -2.372C0.944 -2.344 0.98 -2.332 1.072 -2.304C1.196 -2.268 1.34 -2.16 1.34 -1.928C1.34 -1.708 1.2 -1.52 0.956 -1.52C0.688 -1.52 0.528 -1.732 0.528 -1.98C0.528 -2.24 0.684 -2.632 1.288 -2.632C1.556 -2.632 2.076 -2.512 2.076 -1.832C2.076 -1.604 2.004 -1.224 1.96 -0.976C1.952 -0.928 1.956 -0.932 2.012 -0.908C2.416 -0.748 2.684 -0.408 2.684 0.044C2.684 0.556 2.308 1.008 1.72 1.008C1.616 1.008 1.616 1.008 1.604 1.08ZM1.88 3.772C2.012 3.772 2.12 3.664 2.12 3.444C2.12 3 1.74 2.64 1.424 2.364C1.396 2.34 1.38 2.344 1.372 2.396C1.356 2.5 1.348 2.636 1.348 2.764C1.348 3.388 1.636 3.772 1.88 3.772ZM1.444 1.048C1.456 0.972 1.456 0.976 1.384 0.952C1.032 0.832 0.804 0.516 0.804 0.176C0.804 -0.184 0.992 -0.44 1.264 -0.532C1.296 -0.544 1.344 -0.556 1.372 -0.556C1.404 -0.556 1.42 -0.536 1.42 -0.512C1.42 -0.484 1.388 -0.472 1.36 -0.46C1.192 -0.388 1.072 -0.216 1.072 -0.032C1.072 0.196 1.228 0.368 1.472 0.436C1.536 0.452 1.544 0.448 1.552 0.404L1.752 -0.788C1.76 -0.832 1.756 -0.832 1.696 -0.844C1.632 -0.856 1.552 -0.864 1.472 -0.864C0.772 -0.864 0.32 -0.476 0.32 0.08C0.32 0.316 0.36 0.632 0.692 1.008C0.932 1.276 1.116 1.424 1.304 1.576C1.344 1.608 1.352 1.604 1.36 1.56ZM1.72 0.412C1.712 0.46 1.716 0.472 1.764 0.468C2.088 0.44 2.356 0.168 2.356 -0.184C2.356 -0.436 2.204 -0.64 1.98 -0.752C1.932 -0.776 1.924 -0.776 1.916 -0.728Z" transform="translate(0 1)" fill="#000000" data-prov="11b3eeb335691c9e35abc39fd2b199b8" data-source-kind="4" data-glyph="gClef" data-class="clef"/>
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(3 -1)" fill="#000000" data-prov="a9ea8a975336c483b806550f06c6ac3a" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 15 KiB