From c4979e4726b836281c3680e5e11cd3094701dc64 Mon Sep 17 00:00:00 2001 From: mikekirin Date: Mon, 9 Mar 2026 14:14:55 +0100 Subject: [PATCH 01/11] added condition to SlurTieLayout::computeBezier --- src/engraving/rendering/score/slurtielayout.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/engraving/rendering/score/slurtielayout.cpp b/src/engraving/rendering/score/slurtielayout.cpp index 73a2eb24f1a30..cc4d7659bffd3 100644 --- a/src/engraving/rendering/score/slurtielayout.cpp +++ b/src/engraving/rendering/score/slurtielayout.cpp @@ -2639,6 +2639,9 @@ void SlurTieLayout::computeBezier(TieSegment* tieSeg, PointF shoulderOffset) { const PointF tieStart = tieSeg->ups(Grip::START).p + tieSeg->ups(Grip::START).off; const PointF tieEnd = tieSeg->ups(Grip::END).p + tieSeg->ups(Grip::END).off; + if (!muse::RealIsEqualOrMore(tieEnd.x(), tieStart.x())) { + return; + } PointF tieEndNormalized = tieEnd - tieStart; // normalize to zero if (muse::RealIsNull(tieEndNormalized.x())) { From 3e65bb30dcd91018081f6e53f1acb4f7b13ce6b0 Mon Sep 17 00:00:00 2001 From: James Mizen Date: Mon, 11 May 2026 16:29:02 +0100 Subject: [PATCH 02/11] Link partial lyric line and end lyric verse --- src/engraving/dom/lyrics.cpp | 6 ++++++ src/engraving/dom/lyrics.h | 4 ++-- src/engraving/dom/lyricsline.cpp | 25 +++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/engraving/dom/lyrics.cpp b/src/engraving/dom/lyrics.cpp index 74976a7f30686..2dab93cfa642b 100644 --- a/src/engraving/dom/lyrics.cpp +++ b/src/engraving/dom/lyrics.cpp @@ -557,6 +557,8 @@ void Score::forAllLyrics(std::function f) void Lyrics::undoChangeProperty(Pid id, const PropertyValue& v, PropertyFlags ps) { if (id == Pid::VERSE && verse() != v.toInt()) { + PartialLyricsLine* prevPartial = findPrevPartialLyricsLineDash(this); + for (Lyrics* l : chordRest()->lyrics()) { if (l->verse() == v.toInt()) { // verse already exists, swap @@ -568,6 +570,10 @@ void Lyrics::undoChangeProperty(Pid id, const PropertyValue& v, PropertyFlags ps } } TextBase::undoChangeProperty(id, v, ps); + if (prevPartial && prevPartial->verse() != v.toInt()) { + // Skip logic to update Lyrics by calling parent class + prevPartial->LyricsLine::undoChangeProperty(id, v, ps); + } return; } diff --git a/src/engraving/dom/lyrics.h b/src/engraving/dom/lyrics.h index ef3cb0e607a01..78568e2e431b9 100644 --- a/src/engraving/dom/lyrics.h +++ b/src/engraving/dom/lyrics.h @@ -96,6 +96,7 @@ class Lyrics final : public TextBase PropertyValue getProperty(Pid propertyId) const override; bool setProperty(Pid propertyId, const PropertyValue&) override; PropertyValue propertyDefault(Pid id) const override; + void undoChangeProperty(Pid id, const PropertyValue&, PropertyFlags ps) override; void triggerLayout() const override; double yRelativeToStaff() const; @@ -110,8 +111,6 @@ class Lyrics final : public TextBase Lyrics(ChordRest* parent); Lyrics(const Lyrics&); - void undoChangeProperty(Pid id, const PropertyValue&, PropertyFlags ps) override; - int m_verse = 0; // row index Fraction m_ticks; // if > 0 then draw an underline to tick() + _ticks (melisma) LyricsSyllabic m_syllabic = LyricsSyllabic::SINGLE; @@ -229,6 +228,7 @@ class PartialLyricsLine final : public LyricsLine bool setProperty(Pid propertyId, const PropertyValue&) override; PropertyValue propertyDefault(Pid propertyId) const override; Sid getPropertyStyle(Pid propertyId) const override; + void undoChangeProperty(Pid id, const PropertyValue&, PropertyFlags ps) override; Lyrics* findLyricsInPreviousRepeatSeg() const; Lyrics* findAdjacentLyricsOrDefault() const; diff --git a/src/engraving/dom/lyricsline.cpp b/src/engraving/dom/lyricsline.cpp index de12764c04b95..7e527a8821059 100644 --- a/src/engraving/dom/lyricsline.cpp +++ b/src/engraving/dom/lyricsline.cpp @@ -292,6 +292,31 @@ Sid PartialLyricsLine::getPropertyStyle(Pid propertyId) const } } +void PartialLyricsLine::undoChangeProperty(Pid id, const PropertyValue& v, PropertyFlags ps) +{ + if (id == Pid::VERSE && verse() != v.toInt()) { + ChordRest* endCR = endElement() + && endElement()->isChordRest() ? toChordRest(endElement()) : nullptr; + Lyrics* endLyrics = nullptr; + if (endCR) { + for (Lyrics* lyr : endCR->lyrics()) { + if (lyr->verse() == verse()) { + endLyrics = lyr; + break; + } + } + } + + LyricsLine::undoChangeProperty(id, v, ps); + if (endLyrics && endLyrics->verse() != v.toInt()) { + endLyrics->undoChangeProperty(id, v, ps); + } + return; + } + + LyricsLine::undoChangeProperty(id, v, ps); +} + void PartialLyricsLine::doComputeEndElement() { LyricsLine::doComputeEndElement(); From 3a8a764b4c31f3d87a72be3506fe4fc398bb000a Mon Sep 17 00:00:00 2001 From: James Mizen Date: Tue, 12 May 2026 09:30:05 +0100 Subject: [PATCH 03/11] Fix layout of chord brackets and parens --- src/engraving/rendering/score/chordlayout.cpp | 16 +++++++++------- .../rendering/score/parenthesislayout.cpp | 4 +++- vtest/scores/chordBrackets-3.mscz | Bin 0 -> 27494 bytes 3 files changed, 12 insertions(+), 8 deletions(-) create mode 100644 vtest/scores/chordBrackets-3.mscz diff --git a/src/engraving/rendering/score/chordlayout.cpp b/src/engraving/rendering/score/chordlayout.cpp index fb59f8c394173..28b1e5413eb76 100644 --- a/src/engraving/rendering/score/chordlayout.cpp +++ b/src/engraving/rendering/score/chordlayout.cpp @@ -166,12 +166,6 @@ void ChordLayout::layoutPitched(Chord* item, LayoutContext& ctx) } } - for (EngravingItem* e : item->el()) { - if (e->isChordBracket()) { - TLayout::layoutItem(e, ctx); - } - } - // A chord can have its own arpeggio and also be part of another arpeggio's span. We need to lay out both of these arpeggios properly Arpeggio* oldSpanArp = item->spanArpeggio(); Arpeggio* newSpanArp = nullptr; @@ -296,7 +290,9 @@ void ChordLayout::layoutPitched(Chord* item, LayoutContext& ctx) } for (EngravingItem* e : item->el()) { - if (e->isSlur()) { // we cannot at this time as chordpositions are not fixed + // Cannot layout slurs as chord positions are not fixed + // Chord brackets should be the outermost element + if (e->isSlur() || e->isChordBracket()) { continue; } TLayout::layoutItem(e, ctx); @@ -341,6 +337,12 @@ void ChordLayout::layoutPitched(Chord* item, LayoutContext& ctx) createParenGroups(item); ParenthesisLayout::layoutChordParentheses(item, ctx); + for (EngravingItem* e : item->el()) { + if (e->isChordBracket()) { + TLayout::layoutItem(e, ctx); + } + } + fillShape(item, item->mutldata(), ctx.conf()); } diff --git a/src/engraving/rendering/score/parenthesislayout.cpp b/src/engraving/rendering/score/parenthesislayout.cpp index 477a4f505b87e..e153121480341 100644 --- a/src/engraving/rendering/score/parenthesislayout.cpp +++ b/src/engraving/rendering/score/parenthesislayout.cpp @@ -553,7 +553,9 @@ Shape ParenthesisLayout::getParentShape(const EngravingItem* parent) return !s.item() || s.item()->isParenthesis() || (s.item()->isLaissezVibSegment() && isChord) || (s.item()->isHook() && isChord) - || (s.item()->isStem() && isChord); + || (s.item()->isStem() && isChord) + || (s.item()->isArpeggio() && isChord) + || (s.item()->isChordBracket() && isChord); }); return parentShape; diff --git a/vtest/scores/chordBrackets-3.mscz b/vtest/scores/chordBrackets-3.mscz new file mode 100644 index 0000000000000000000000000000000000000000..8b576a07f32e68b24e4a8bbade6088490c23e453 GIT binary patch literal 27494 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 WQ<8;%{MUC-U-!@#FJr9#_4Z#iL Date: Tue, 5 May 2026 11:52:02 +0200 Subject: [PATCH 04/11] i/o line arrows --- .../musicxml/internal/export/exportmusicxml.cpp | 10 +++++++--- .../musicxml/internal/import/importmusicxmlpass2.cpp | 4 ++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/importexport/musicxml/internal/export/exportmusicxml.cpp b/src/importexport/musicxml/internal/export/exportmusicxml.cpp index f76fb208fa358..ba98207859ccb 100644 --- a/src/importexport/musicxml/internal/export/exportmusicxml.cpp +++ b/src/importexport/musicxml/internal/export/exportmusicxml.cpp @@ -5760,13 +5760,17 @@ void ExportMusicXml::textLine(TextLineBase const* const tl, staff_idx_t staff, c String lineEnd; switch (hookType) { + case HookType::HOOK_90: + lineEnd = (hookHeight < 0.0) ? u"up" : u"down"; + rest += String(u" end-length=\"%1\"").arg(std::abs(hookHeight * 10)); + break; case HookType::HOOK_90T: lineEnd = u"both"; rest += String(u" end-length=\"%1\"").arg(std::abs(hookHeight * 20)); break; - case HookType::HOOK_90: - lineEnd = (hookHeight < 0.0) ? u"up" : u"down"; - rest += String(u" end-length=\"%1\"").arg(std::abs(hookHeight * 10)); + case HookType::ARROW: + case HookType::ARROW_FILLED: + lineEnd = u"arrow"; break; case HookType::NONE: lineEnd = u"none"; diff --git a/src/importexport/musicxml/internal/import/importmusicxmlpass2.cpp b/src/importexport/musicxml/internal/import/importmusicxmlpass2.cpp index c1bd2205583aa..c76630beb639e 100644 --- a/src/importexport/musicxml/internal/import/importmusicxmlpass2.cpp +++ b/src/importexport/musicxml/internal/import/importmusicxmlpass2.cpp @@ -5131,7 +5131,7 @@ void MusicXmlParserDirection::bracket(const String& type, const int number, } else if (lineEnd == "both") { textLine->setBeginHookType(HookType::HOOK_90T); } else if (lineEnd == "arrow") { - m_logger->logError(String(u"line-end \"arrow\" not supported")); + textLine->setBeginHookType(HookType::ARROW_FILLED); } else if (lineEnd == "none") { textLine->setBeginHookType(HookType::NONE); } @@ -5192,7 +5192,7 @@ void MusicXmlParserDirection::bracket(const String& type, const int number, } else if (lineEnd == "both") { textLine->setEndHookType(HookType::HOOK_90T); } else if (lineEnd == "arrow") { - m_logger->logError(String(u"line-end \"arrow\" not supported")); + textLine->setEndHookType(HookType::ARROW_FILLED); } else if (lineEnd == "none") { textLine->setEndHookType(HookType::NONE); } From 6728cf7085125dd83201a4b01c71c498df5fd8e2 Mon Sep 17 00:00:00 2001 From: rettinghaus Date: Mon, 27 Apr 2026 17:44:31 +0200 Subject: [PATCH 05/11] import tstamp to tick --- src/importexport/mei/internal/meiimporter.cpp | 164 ++++++++++-------- src/importexport/mei/internal/meiimporter.h | 11 +- 2 files changed, 100 insertions(+), 75 deletions(-) diff --git a/src/importexport/mei/internal/meiimporter.cpp b/src/importexport/mei/internal/meiimporter.cpp index 783d827e6b389..fd8c3faaa5a7b 100644 --- a/src/importexport/mei/internal/meiimporter.cpp +++ b/src/importexport/mei/internal/meiimporter.cpp @@ -450,54 +450,57 @@ bool MeiImporter::addGraceNotesToChord(ChordRest* chordRest, bool isAfter) EngravingItem* MeiImporter::addAnnotation(const libmei::Element& meiElement, Measure* measure) { - const ChordRest* chordRest = this->findStart(meiElement, measure); - if (!chordRest || chordRest->isGrace()) { + ControlElementPosition pos = this->findStart(meiElement, measure); + if (!pos.measure || (pos.chordRest && pos.chordRest->isGrace())) { return nullptr; } - Segment* segment = chordRest->segment(); + Segment* segment = pos.measure->getSegment(SegmentType::ChordRest, pos.tick); EngravingItem* item = nullptr; if (meiElement.m_name == "breath" || meiElement.m_name == "caesura") { // For Breath we need to add a specific segment and add the breath to it (and not to the ChordRest one) - segment = measure->getSegment(SegmentType::Breath, chordRest->endTick()); + Fraction tick = (pos.chordRest) ? pos.chordRest->endTick() : pos.tick; + segment = pos.measure->getSegment(SegmentType::Breath, tick); item = Factory::createBreath(segment); } else if (meiElement.m_name == "dir") { ElementType elementType = Convert::elementTypeForDir(meiElement); switch (elementType) { - case (ElementType::PLAYTECH_ANNOTATION): item = Factory::createPlayTechAnnotation( - chordRest->segment(), PlayingTechniqueType::Natural, TextStyleType::STAFF); + case (ElementType::PLAYTECH_ANNOTATION): + item = Factory::createPlayTechAnnotation(segment, PlayingTechniqueType::Natural, TextStyleType::STAFF); break; - case (ElementType::STAFF_TEXT): item = Factory::createStaffText(chordRest->segment()); + case (ElementType::STAFF_TEXT): + item = Factory::createStaffText(segment); break; - case (ElementType::SYSTEM_TEXT): item = Factory::createSystemText(chordRest->segment()); + case (ElementType::SYSTEM_TEXT): + item = Factory::createSystemText(segment); break; default: - item = Factory::createExpression(chordRest->segment()); + item = Factory::createExpression(segment); } } else if (meiElement.m_name == "dynam") { - item = Factory::createDynamic(chordRest->segment()); + item = Factory::createDynamic(segment); } else if (meiElement.m_name == "fermata") { - item = Factory::createFermata(chordRest->segment()); + item = Factory::createFermata(segment); } else if (meiElement.m_name == "harm") { const libmei::AttLabelled* labeledAtt = dynamic_cast(&meiElement); if (labeledAtt && (labeledAtt->GetLabel() == MEI_FB_HARM)) { - item = Factory::createFiguredBass(chordRest->segment()); + item = Factory::createFiguredBass(segment); } else { - item = Factory::createHarmony(chordRest->segment()); + item = Factory::createHarmony(segment); } } else if (meiElement.m_name == "harpPedal") { - item = Factory::createHarpPedalDiagram(chordRest->segment()); + item = Factory::createHarpPedalDiagram(segment); } else if (meiElement.m_name == "reh") { - item = Factory::createRehearsalMark(chordRest->segment()); + item = Factory::createRehearsalMark(segment); } else if (meiElement.m_name == "tempo") { - item = Factory::createTempoText(chordRest->segment()); + item = Factory::createTempoText(segment); } else { return nullptr; } this->readXmlId(item, meiElement.m_xmlId); - item->setTrack(chordRest->track()); + item->setTrack(pos.track); segment->add(item); return item; @@ -512,41 +515,41 @@ EngravingItem* MeiImporter::addAnnotation(const libmei::Element& meiElement, Mea Spanner* MeiImporter::addSpanner(const libmei::Element& meiElement, Measure* measure, pugi::xml_node node) { - ChordRest* chordRest = this->findStart(meiElement, measure); - if (!chordRest) { + ControlElementPosition pos = this->findStart(meiElement, measure); + if (!pos.measure) { return nullptr; } Spanner* item = nullptr; + Segment* segment = pos.measure->getSegment(SegmentType::ChordRest, pos.tick); if (meiElement.m_name == "dir") { ElementType elementType = Convert::elementTypeForDirWithExt(meiElement); switch (elementType) { - case (ElementType::HAIRPIN): item = Factory::createHairpin( - chordRest->segment()); + case (ElementType::HAIRPIN): item = Factory::createHairpin(segment); break; default: - item = Factory::createTextLine(chordRest->segment()); + item = Factory::createTextLine(segment); } } else if (meiElement.m_name == "hairpin") { - item = Factory::createHairpin(chordRest->segment()); + item = Factory::createHairpin(segment); } else if (meiElement.m_name == "octave") { - item = Factory::createOttava(chordRest->segment()); + item = Factory::createOttava(segment); } else if (meiElement.m_name == "pedal") { - item = Factory::createPedal(chordRest->segment()); + item = Factory::createPedal(segment); } else if (meiElement.m_name == "slur") { - item = Factory::createSlur(chordRest->segment()); + item = Factory::createSlur(segment); } else if (meiElement.m_name == "trill") { - item = Factory::createTrill(chordRest->segment()); + item = Factory::createTrill(segment); } else { return nullptr; } this->readXmlId(item, meiElement.m_xmlId); - item->setTick(chordRest->tick()); - item->setStartElement(chordRest); - item->setTrack(chordRest->track()); - item->setTrack2(chordRest->track()); + item->setTick(pos.tick); + item->setStartElement(pos.chordRest); + item->setTrack(pos.track); + item->setTrack2(pos.track); m_score->addElement(item); @@ -566,7 +569,7 @@ Spanner* MeiImporter::addSpanner(const libmei::Element& meiElement, Measure* mea EngravingItem* MeiImporter::addToChordRest(const libmei::Element& meiElement, Measure* measure, Chord* chord) { - ChordRest* chordRest = (!measure) ? chord : this->findStart(meiElement, measure); + ChordRest* chordRest = (!measure) ? chord : this->findStart(meiElement, measure).chordRest; if (!chordRest) { return nullptr; } @@ -614,23 +617,30 @@ std::string MeiImporter::xmlIdFrom(std::string dataURI) * If there is not @startid but a @tstamp (MEI not written by MuseScore), try to find the corresponding ChordRest */ -ChordRest* MeiImporter::findStart(const libmei::Element& meiElement, Measure* measure) +ControlElementPosition MeiImporter::findStart(const libmei::Element& meiElement, Measure* measure) { + ControlElementPosition pos; const libmei::AttStartId* startIdAtt = dynamic_cast(&meiElement); IF_ASSERT_FAILED(measure && startIdAtt) { - return nullptr; + return pos; } - ChordRest* chordRest = nullptr; + pos.measure = measure; + if (startIdAtt->HasStartid()) { std::string startId = this->xmlIdFrom(startIdAtt->GetStartid()); // The startid corresponding ChordRest should have been added to the m_startIdChordRests previously if (!m_startIdChordRests.count(startId) || !m_startIdChordRests.at(startId)) { Convert::logs.push_back(String("Could not find element for @startid '%1'").arg(String::fromStdString( startIdAtt->GetStartid()))); - return nullptr; + return pos; + } + pos.chordRest = m_startIdChordRests.at(startId); + if (pos.chordRest) { + pos.measure = pos.chordRest->measure(); + pos.tick = pos.chordRest->tick(); + pos.track = pos.chordRest->track(); } - chordRest = m_startIdChordRests.at(startId); } else { // No @startid, try a lookup based on the @tstamp. This is only for files not written via MuseScore const libmei::AttTimestampLog* timestampLogAtt = dynamic_cast(&meiElement); @@ -638,7 +648,7 @@ ChordRest* MeiImporter::findStart(const libmei::Element& meiElement, Measure* me const libmei::AttLayerIdent* layerIdentAtt = dynamic_cast(&meiElement); IF_ASSERT_FAILED(timestampLogAtt && staffIdentAtt) { - return nullptr; + return pos; } // If no @tstamp (invalid), put it on 1.0; @@ -648,14 +658,12 @@ ChordRest* MeiImporter::findStart(const libmei::Element& meiElement, Measure* me staffIdentAtt->GetStaff().at(0)) : 0; const int layer = (layerIdentAtt && layerIdentAtt->HasLayer()) ? this->getVoiceIndex(staffIdx, layerIdentAtt->GetLayer()) : 0; - chordRest = measure->findChordRest(measure->tick() + tstampFraction, staffIdx * VOICES + layer); - if (!chordRest) { - Convert::logs.push_back(String("Could not find element corresponding to @tstamp '%1'").arg(timestampLogAtt->GetTstamp())); - return nullptr; - } + pos.tick = measure->tick() + tstampFraction; + pos.track = staffIdx * VOICES + layer; + pos.chordRest = measure->findChordRest(pos.tick, pos.track); } - return chordRest; + return pos; } /** @@ -664,20 +672,25 @@ ChordRest* MeiImporter::findStart(const libmei::Element& meiElement, Measure* me * If there is not @endid but a @tstamp2 (MEI not written by MuseScore), try to find the corresponding ChordRest */ -ChordRest* MeiImporter::findEnd(pugi::xml_node controlNode, const ChordRest* startChordRest) +ControlElementPosition MeiImporter::findEnd(pugi::xml_node controlNode, Spanner* spanner) { + ControlElementPosition pos; libmei::InstStartEndId startEndIdAtt; startEndIdAtt.ReadStartEndId(controlNode); - ChordRest* chordRest = nullptr; if (startEndIdAtt.HasEndid()) { std::string endId = this->xmlIdFrom(startEndIdAtt.GetEndid()); // The @endid corresponding ChordRest should have been added to the m_endIdChordRests previously if (!m_endIdChordRests.count(endId) || !m_endIdChordRests.at(endId)) { Convert::logs.push_back(String("Could not find element for @endid '%1'").arg(String::fromStdString(startEndIdAtt.GetEndid()))); - return nullptr; + return pos; + } + pos.chordRest = m_endIdChordRests.at(endId); + if (pos.chordRest) { + pos.measure = pos.chordRest->measure(); + pos.tick = pos.chordRest->tick(); + pos.track = pos.chordRest->track(); } - chordRest = m_endIdChordRests.at(endId); } else { // No @endid, try a lookup based on the @tstamp2. This is only for files not written via MuseScore libmei::InstTimestamp2Log timestamp2LogAtt; @@ -687,40 +700,43 @@ ChordRest* MeiImporter::findEnd(pugi::xml_node controlNode, const ChordRest* sta libmei::InstLayerIdent layerIdentAtt; layerIdentAtt.ReadLayerIdent(controlNode); - // We need at least a @tstamp2 and a startChordRest with its Measure - if (!timestamp2LogAtt.HasTstamp2() || !startChordRest || !startChordRest->measure()) { - return nullptr; + // We need at least a @tstamp2 and a spanner with its startMeasure + Measure* startM = (spanner->startElement()) + ? spanner->startElement()->findMeasure() + : m_score->tick2measure(spanner->tick()); + + if (!timestamp2LogAtt.HasTstamp2() || !startM) { + return pos; } libmei::data_MEASUREBEAT tstamp2Value = timestamp2LogAtt.GetTstamp2(); // Find the end Measure - Measure* measure = startChordRest->measure(); + Measure* measure = startM; for (int i = tstamp2Value.first; i > 0; --i) { if (!measure->next() || !measure->next()->isMeasure()) { - return nullptr; + return pos; } measure = toMeasure(measure->next()); } + pos.measure = measure; Fraction tstampFraction = Convert::tstampToFraction(tstamp2Value.second, measure->timesig()); - // Use the startChordRest staffIdx unless given in @staff + // Use the spanner staffIdx unless given in @staff staff_idx_t staffIdx = (staffIdentAtt.HasStaff() && staffIdentAtt.GetStaff().size() > 0) ? this->getStaffIndex( - staffIdentAtt.GetStaff().at(0)) : startChordRest->staffIdx(); - // Use the startChordRest voice unless given in @layer - track_idx_t layer - = (layerIdentAtt.HasLayer()) ? this->getVoiceIndex(static_cast(staffIdx), - layerIdentAtt.GetLayer()) : startChordRest->voice(); + staffIdentAtt.GetStaff().at(0)) : track2staff(spanner->track()); + // Use the spanner voice unless given in @layer + track_idx_t layer = (layerIdentAtt.HasLayer()) + ? static_cast(this->getVoiceIndex(static_cast(staffIdx), + layerIdentAtt.GetLayer())) + : track2voice(spanner->track()); - chordRest = measure->findChordRest(measure->tick() + tstampFraction, staffIdx * VOICES + layer); - if (!chordRest) { - Convert::logs.push_back(String("Could not find element corresponding to @tstamp2 '%1m+%2'").arg(tstamp2Value.first).arg( - tstamp2Value.second)); - return nullptr; - } + pos.tick = measure->tick() + tstampFraction; + pos.track = staffIdx * VOICES + layer; + pos.chordRest = measure->findChordRest(pos.tick, pos.track); } - return chordRest; + return pos; } /** @@ -3572,17 +3588,19 @@ void MeiImporter::addSpannerEnds() endNote->addSpannerBack(gliss); // All other Spanners - } else if (spannerMapEntry.first->startCR()) { - ChordRest* chordRest = this->findEnd(spannerMapEntry.second, spannerMapEntry.first->startCR()); - if (!chordRest) { + } else { + ControlElementPosition pos = this->findEnd(spannerMapEntry.second, spannerMapEntry.first); + if (!pos.measure) { continue; } - spannerMapEntry.first->setTick2(chordRest->tick()); - spannerMapEntry.first->setEndElement(chordRest); - spannerMapEntry.first->setTrack2(chordRest->track()); + spannerMapEntry.first->setTick2(pos.tick); + spannerMapEntry.first->setEndElement(pos.chordRest); + spannerMapEntry.first->setTrack2(pos.track); if (spannerMapEntry.first->isOttava() || spannerMapEntry.first->isTrill()) { // Set the tick2 to include the duration of the ChordRest - spannerMapEntry.first->setTick2(chordRest->endTick()); + if (pos.chordRest) { + spannerMapEntry.first->setTick2(pos.chordRest->endTick()); + } // Special handling of ottavas if (spannerMapEntry.first->isOttava()) { Ottava* ottava = toOttava(spannerMapEntry.first); diff --git a/src/importexport/mei/internal/meiimporter.h b/src/importexport/mei/internal/meiimporter.h index 2e070e7f8cadd..fc15624bb9d3b 100644 --- a/src/importexport/mei/internal/meiimporter.h +++ b/src/importexport/mei/internal/meiimporter.h @@ -57,6 +57,13 @@ struct ClefTypeList; namespace mu::iex::mei { class UIDRegister; +struct ControlElementPosition { + engraving::Measure* measure = nullptr; + engraving::Fraction tick; + int track = 0; + engraving::ChordRest* chordRest = nullptr; +}; + enum GraceReading { GraceNone = 0, GraceAsGrp, @@ -188,8 +195,8 @@ class MeiImporter engraving::EngravingItem* addToChordRest(const libmei::Element& meiElement, engraving::Measure* measure, engraving::Chord* chord = nullptr); std::string xmlIdFrom(std::string dataURI); - engraving::ChordRest* findStart(const libmei::Element& meiElement, engraving::Measure* measure); - engraving::ChordRest* findEnd(pugi::xml_node controlNode, const engraving::ChordRest* startChordRest); + ControlElementPosition findStart(const libmei::Element& meiElement, engraving::Measure* measure); + ControlElementPosition findEnd(pugi::xml_node controlNode, engraving::Spanner* spanner); engraving::Note* findStartNote(const libmei::Element& meiElement); engraving::Note* findEndNote(pugi::xml_node controlNode); const std::vector findPlistChordRests(pugi::xml_node controlNode); From fa891c83d5341476bb35f2c5c87e82b5f67a8002 Mon Sep 17 00:00:00 2001 From: rettinghaus Date: Tue, 28 Apr 2026 10:45:07 +0200 Subject: [PATCH 06/11] react on review --- src/importexport/mei/internal/meiimporter.cpp | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/src/importexport/mei/internal/meiimporter.cpp b/src/importexport/mei/internal/meiimporter.cpp index fd8c3faaa5a7b..63ba60e9624ba 100644 --- a/src/importexport/mei/internal/meiimporter.cpp +++ b/src/importexport/mei/internal/meiimporter.cpp @@ -625,8 +625,6 @@ ControlElementPosition MeiImporter::findStart(const libmei::Element& meiElement, return pos; } - pos.measure = measure; - if (startIdAtt->HasStartid()) { std::string startId = this->xmlIdFrom(startIdAtt->GetStartid()); // The startid corresponding ChordRest should have been added to the m_startIdChordRests previously @@ -636,11 +634,9 @@ ControlElementPosition MeiImporter::findStart(const libmei::Element& meiElement, return pos; } pos.chordRest = m_startIdChordRests.at(startId); - if (pos.chordRest) { - pos.measure = pos.chordRest->measure(); - pos.tick = pos.chordRest->tick(); - pos.track = pos.chordRest->track(); - } + pos.measure = pos.chordRest->measure(); + pos.tick = pos.chordRest->tick(); + pos.track = pos.chordRest->track(); } else { // No @startid, try a lookup based on the @tstamp. This is only for files not written via MuseScore const libmei::AttTimestampLog* timestampLogAtt = dynamic_cast(&meiElement); @@ -658,6 +654,7 @@ ControlElementPosition MeiImporter::findStart(const libmei::Element& meiElement, staffIdentAtt->GetStaff().at(0)) : 0; const int layer = (layerIdentAtt && layerIdentAtt->HasLayer()) ? this->getVoiceIndex(staffIdx, layerIdentAtt->GetLayer()) : 0; + pos.measure = measure; pos.tick = measure->tick() + tstampFraction; pos.track = staffIdx * VOICES + layer; pos.chordRest = measure->findChordRest(pos.tick, pos.track); @@ -686,11 +683,9 @@ ControlElementPosition MeiImporter::findEnd(pugi::xml_node controlNode, Spanner* return pos; } pos.chordRest = m_endIdChordRests.at(endId); - if (pos.chordRest) { - pos.measure = pos.chordRest->measure(); - pos.tick = pos.chordRest->tick(); - pos.track = pos.chordRest->track(); - } + pos.measure = pos.chordRest->measure(); + pos.tick = pos.chordRest->tick(); + pos.track = pos.chordRest->track(); } else { // No @endid, try a lookup based on the @tstamp2. This is only for files not written via MuseScore libmei::InstTimestamp2Log timestamp2LogAtt; From 1f8efe7b5f61d9dade64903b8fd178f2780c27fa Mon Sep 17 00:00:00 2001 From: James Mizen Date: Mon, 11 May 2026 16:29:08 +0100 Subject: [PATCH 07/11] Add test --- src/engraving/tests/CMakeLists.txt | 1 + .../lyrics_data/partialLyricsLineVerse.mscx | 231 ++++++++++++++++++ src/engraving/tests/lyrics_tests.cpp | 85 +++++++ 3 files changed, 317 insertions(+) create mode 100755 src/engraving/tests/lyrics_data/partialLyricsLineVerse.mscx create mode 100644 src/engraving/tests/lyrics_tests.cpp diff --git a/src/engraving/tests/CMakeLists.txt b/src/engraving/tests/CMakeLists.txt index 831d0729b47ac..e63fa9aa31dd5 100644 --- a/src/engraving/tests/CMakeLists.txt +++ b/src/engraving/tests/CMakeLists.txt @@ -98,6 +98,7 @@ set(MODULE_TEST_SRC ${CMAKE_CURRENT_LIST_DIR}/fretdiagram_tests.cpp ${CMAKE_CURRENT_LIST_DIR}/engraving_xml_tests.cpp ${CMAKE_CURRENT_LIST_DIR}/parentheses_tests.cpp + ${CMAKE_CURRENT_LIST_DIR}/lyrics_tests.cpp ${CMAKE_CURRENT_LIST_DIR}/automation/automation_tests.cpp ${CMAKE_CURRENT_LIST_DIR}/mocks/engravingconfigurationmock.h diff --git a/src/engraving/tests/lyrics_data/partialLyricsLineVerse.mscx b/src/engraving/tests/lyrics_data/partialLyricsLineVerse.mscx new file mode 100755 index 0000000000000..3fb51711bfef8 --- /dev/null +++ b/src/engraving/tests/lyrics_data/partialLyricsLineVerse.mscx @@ -0,0 +1,231 @@ + + + 4.7.0 + + + nKXCiaEoEhL_6aillYgKmGN + 480 + 1 + 1 + 1 + 0 + 1 + + + Composer / arranger + + 2026-05-11 + + + + Apple Macintosh + + + + + Untitled score + + Orchestra + + Flutes + +
+ flutes + oboes + clarinets + saxophones + bassoons + +
+
+ horns + trumpets + cornets + flugelhorns + trombones + tubas + +
+
+ timpani +
+
+ keyboard-percussion + + drums + unpitched-metal-percussion + unpitched-wooden-percussion + other-percussion + +
+ keyboards + harps + organs + synths + + +
+ voices + voice-groups +
+
+ orchestral-strings +
+
+ + t4wOfNXvET_MB7K3yCV9bO + + CG/iy0suU5M_8apoiL+qw2P + + stdNormal + + + + + Flute + Fl. + + Flute + 59 + 98 + 60 + 93 + wind.flutes.flute + + + Fluid + + + + + + mKe/djNTwGI_s1XmcbjJpUL + 2 + + + cUnqv/ph9gI_LPTcl7EN5KB + 0 + + + XgRNHq69m7K_S3NLE+JPF5K + 4 + 4 + + + + 1 + 1. + +t9p05H+WZE_dUtgtdQFXUJ + 1 + + + + 1 + + + + + 28VKFi2fDqK_9xUWGpjsqy + measure + 4/4 + + + + + Xr5lOYXqQ3N_cA97Vqf75gL + + + + + -1 + + + + + + 0 + a396oaBKAiJ_VRT1nJG6RCJ + + + + 3/4 + + + + + + 2. + 4xcpnAOTAoL_n4evRtiDRJG + 2 + + + + 1/1 + + + + + 3CiytIHP3RJ_ALMjoc/8kLJ + quarter + + m7fQthHZQJO_7DgH01TN/EM + 67 + 15 + + + + fvBsBY0kU4M_oSukTnvYBhB + quarter + + Rb2Rvj8SSME_zaNY72NA+cI + 67 + 15 + + + + iWINXjjGjhC_hyQB/0KmcXO + quarter + + zkh7KqvN1tI_uzBzYEU/fTD + 67 + 15 + + + + + + -3/4 + + + + + VwNj0yokoxC_HzD3rfGZTsB + quarter + + end + z+ILmWw4Gq_BSmKiWdn0aD + l1 + + + 1 + 6REO+yewDvG_38oVnz2lL2D + l2 + + + o/LBWL7i30E_B9M2co1VMIE + 67 + 15 + + + + + + -1/1 + + + + + + +
+
diff --git a/src/engraving/tests/lyrics_tests.cpp b/src/engraving/tests/lyrics_tests.cpp new file mode 100644 index 0000000000000..cfcd952c173cc --- /dev/null +++ b/src/engraving/tests/lyrics_tests.cpp @@ -0,0 +1,85 @@ +/* + * SPDX-License-Identifier: GPL-3.0-only + * MuseScore-Studio-CLA-applies + * + * MuseScore Studio + * Music Composition & Notation + * + * Copyright (C) 2026 MuseScore Limited and others + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include + +#include "engraving/dom/lyrics.h" +#include "engraving/dom/utils.h" +#include "utils/scorerw.h" + +using namespace mu::engraving; + +static const String LYRICS_DATA_DIR("lyrics_data/"); + +class Engraving_LyricsTests : public ::testing::Test +{ +}; + +TEST_F(Engraving_LyricsTests, PartialLyricsLineVerse) +{ + // Check partial lyrics dash verses are linked to their ending lyric + MasterScore* score = ScoreRW::readScore(LYRICS_DATA_DIR + u"partialLyricsLineVerse.mscx"); + + Measure* m2 = score->first()->nextMeasure(); + + EXPECT_TRUE(m2); + + ChordRest* endCR = m2->lastChordRest(0); + + EXPECT_TRUE(endCR); + + Lyrics* l1 = nullptr; + Lyrics* l2 = nullptr; + + for (Lyrics* l : endCR->lyrics()) { + if (l->verse() == 0) { + l1 = l; + } + if (l->verse() == 1) { + l2 = l; + } + } + + EXPECT_TRUE(l1); + EXPECT_TRUE(l2); + + PartialLyricsLine* pll = findPrevPartialLyricsLineDash(l1); + + EXPECT_TRUE(pll); + EXPECT_EQ(pll->verse(), 0); + + score->startCmd(TranslatableString::untranslatable("Lyrics tests")); + pll->undoChangeProperty(Pid::VERSE, 1, PropertyFlags::UNSTYLED); + score->endCmd(); + + EXPECT_EQ(pll->verse(), 1); + EXPECT_EQ(l1->verse(), 1); + EXPECT_EQ(l2->verse(), 0); + + score->startCmd(TranslatableString::untranslatable("Lyrics tests")); + l1->undoChangeProperty(Pid::VERSE, 0, PropertyFlags::UNSTYLED); + score->endCmd(); + + EXPECT_EQ(pll->verse(), 0); + EXPECT_EQ(l1->verse(), 0); + EXPECT_EQ(l2->verse(), 1); +} From 58f0b11dc9e4aaa923e46f96dce0d8b8f86ace9c Mon Sep 17 00:00:00 2001 From: pyonpyoco <60975353+pyonpyoco@users.noreply.github.com> Date: Sun, 24 May 2026 02:38:17 +0900 Subject: [PATCH 08/11] fix saving hidden grace note stem slash --- src/engraving/rw/write/twrite.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engraving/rw/write/twrite.cpp b/src/engraving/rw/write/twrite.cpp index 5bf38ff82ae7b..6c1e1055fbfa7 100644 --- a/src/engraving/rw/write/twrite.cpp +++ b/src/engraving/rw/write/twrite.cpp @@ -1025,7 +1025,7 @@ void TWrite::write(const Chord* item, XmlWriter& xml, WriteContext& ctx) if (item->hook() && item->hook()->isUserModified()) { write(item->hook(), xml, ctx); } - if (item->showStemSlash() && item->isUserModified()) { + if (item->showStemSlash() != item->propertyDefault(Pid::SHOW_STEM_SLASH).toBool()) { xml.tag("showStemSlash", item->showStemSlash()); } if (item->stemSlash() && item->stemSlash()->isUserModified()) { From b889ce396d585023c58b882b3488dec0d8ddae74 Mon Sep 17 00:00:00 2001 From: Casper Jeukendrup <48658420+cbjeukendrup@users.noreply.github.com> Date: Thu, 21 May 2026 23:59:02 +0200 Subject: [PATCH 09/11] Fix crash when closing score after deleting frame that occupies system MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The deleted frame would still be referenced by the System that contained it, and that System would be deleted from its Page’s list of systems, but not from the Score’s list of systems. Lucky enough, that seems not to cause crashes normally (as far as I know), but upon closing the score, it does cause a crash: the deleted frame is destroyed by the UndoStack (correctly so), but when the frame's System is destroyed as part of the Score destruction, the deleted frame is referenced again. Solution: properly remove the System’s reference to the frame, and also properly remove the System and its Page when they become empty. This brings the code in line with `InsertRemoveMeasures::removeMeasures()`. Resolves: https://github.com/musescore/MuseScore/issues/33518 --- src/engraving/dom/score.cpp | 30 ++++++++++++++++---------- src/engraving/editing/editmeasures.cpp | 14 ++++++++---- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/src/engraving/dom/score.cpp b/src/engraving/dom/score.cpp index 053df9a884adc..0b56ae73f3e47 100644 --- a/src/engraving/dom/score.cpp +++ b/src/engraving/dom/score.cpp @@ -1555,28 +1555,37 @@ void Score::removeElement(EngravingItem* element) ) { MeasureBase* mb = toMeasureBase(element); measures()->remove(mb); - System* system = mb->system(); + System* system = mb->system(); if (!system) { - // vertical boxes are not shown in continuous view so no system #ifndef NDEBUG - bool noSystemMode = lineMode() && element->isVBoxBase(); -#endif + // vertical boxes are not shown in continuous view so no system + const bool noSystemMode = lineMode() && element->isVBoxBase(); assert(noSystemMode || !isOpen()); +#endif return; } - Page* page = system->page(); - if (element->isBox() && system->measures().size() == 1) { - auto i = std::find(page->systems().begin(), page->systems().end(), system); - page->systems().erase(i); - mb->resetExplicitParent(); - if (page->systems().empty()) { + system->removeMeasure(mb); + + // See also InsertRemoveMeasures::removeMeasures() + if (element->isBox() && system->measures().empty()) { + Page* page = system->page(); + if (page) { + muse::remove(page->systems(), system); + } + + muse::remove(m_systems, system); + deleteLater(system); + + if (page && page->systems().empty()) { // Remove this page, since it is now empty. // This involves renumbering and repositioning all subsequent pages. PointF pos = page->pos(); auto ii = std::find(pages().begin(), pages().end(), page); pages().erase(ii); + deleteLater(page); + while (ii != pages().end()) { page = *ii; page->setPageNumber(page->pageNumber() - 1); @@ -1587,7 +1596,6 @@ void Score::removeElement(EngravingItem* element) } } } -// setLayout(mb->tick()); return; } diff --git a/src/engraving/editing/editmeasures.cpp b/src/engraving/editing/editmeasures.cpp index f677450db6957..7466a16853b1b 100644 --- a/src/engraving/editing/editmeasures.cpp +++ b/src/engraving/editing/editmeasures.cpp @@ -339,10 +339,16 @@ void InsertRemoveMeasures::removeMeasures() if (page) { // erase system from page muse::remove(page->systems(), s); - // erase system from score - muse::remove(score->systems(), s); - // finally delete system - score->deleteLater(s); + } + // erase system from score + muse::remove(score->systems(), s); + // finally delete system + score->deleteLater(s); + + if (page && page->systems().empty()) { + // if page is empty, delete it as well + muse::remove(score->pages(), page); + score->deleteLater(page); } } } From 743c0014fb885821eba061416a5d04d28462e44b Mon Sep 17 00:00:00 2001 From: James Mizen Date: Thu, 28 May 2026 11:05:24 +0100 Subject: [PATCH 10/11] Fix #33570 dynamic scale not preserved --- src/engraving/rw/read460/tread.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engraving/rw/read460/tread.cpp b/src/engraving/rw/read460/tread.cpp index 3a37f8b3c6084..79e8eab9f5d9b 100644 --- a/src/engraving/rw/read460/tread.cpp +++ b/src/engraving/rw/read460/tread.cpp @@ -781,7 +781,7 @@ void TRead::read(Dynamic* d, XmlReader& e, ReadContext& ctx) } else if (tag == "play") { d->setPlayDynamic(e.readBool()); } else if (ctx.mscVersion() < 470 && tag == "dynamicsSize") { - d->setSymbolScale(e.readDouble()); + readProperty(d, e, ctx, Pid::MUSICAL_SYMBOLS_SCALE); } else if (readProperty(d, tag, e, ctx, Pid::AVOID_BARLINES)) { } else if (readProperty(d, tag, e, ctx, Pid::CENTER_ON_NOTEHEAD)) { } else if (readProperty(d, tag, e, ctx, Pid::ANCHOR_TO_END_OF_PREVIOUS)) { From c16744d71217c3f9417e28685b47dd05e230d656 Mon Sep 17 00:00:00 2001 From: James Mizen Date: Thu, 28 May 2026 16:20:56 +0100 Subject: [PATCH 11/11] Change vtest version to 4.7 --- vtest/scores/chordBrackets-3.mscz | Bin 27494 -> 27269 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/vtest/scores/chordBrackets-3.mscz b/vtest/scores/chordBrackets-3.mscz index 8b576a07f32e68b24e4a8bbade6088490c23e453..8fd58ff6c363871d5c22e11a5dd0f586802ef219 100644 GIT binary patch delta 26229 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 C4(gr& delta 26418 zcmY&Q{m#9A+;ir1)pXTc)8~25 zbX7my9kL91v;qoLk_Csr00Du40l5;b(i`gtU{3xC0s_bZ1wjS@0dX~TbTKz{b@R3} zXR>#7E%w`V*_2AXd;^G!i;oWRpsF$@c8sdo4!ERD3fQL+rdD*ETZ5sI!kQ-j2`I9E zSS3Dy%y?_?KvU~o+cU7Wr$FOF_a0UJda!SQzLMRx&-4I3tX`KgQ|$sZYp*uE8-1S7 zpL%z@KL5VIeRaII=B9Sa`}wVUxF6+orOWm7zPDcYyq)^IHI;1}e(au~<$wCJ?+O?Y zb#wD|a`U{Nj@nHmbGhH&v~_3qq~|D>2BOJl+}GP`Y@T@}y#JoDNJmq^ zyl%a&yvhe^>nj+@&CJZkQa6&ITc!G?&)Q=`zcf2+xTF2nlT%PAd6B{0&#d(5v`;IE z?q`VjXTlb8V$!XxCtDG1yA81Cn(oRm95E~24QyD~czWusU3K?d_PFopzc9>22l43%tYq z9X6haUYp3-J2s~uOy3?#DmAj)zZhEmQ2kd!y9kHzj~lq$NF*7_++I5_QO1PNf}o+&#vx?-COOiDu(w?T?+Q4 zST2^j^tTy3?q64HwySG94AdRDNLcJ0oIZff+S6RI-VX=H$0F-s53-x3(k{);Wp%IE zYvABiH8UzJLXNF*AGVrx&8+d~DZZ>o?QY#yuQrRtkQ=5h?{P{|dNY6rX~yV(y`2@6 zrkoGVH`;q_0Wt=c9mA>`a?p^CQFuS7;#PARrpt4pR|;{<`FI*vJ6rpO2molh9@4<* zM(LYyFXq3#prF!s^}vK42Q1N}CB+vgM!r)+R$9_jfHHD!`}9 z+TEwi*3w@8ufdBqV#>n`gC;}vLn)RWuA1(|U9myR5Pd0;H_}QyDy_VDs<(sT=n9fA z{YDx4kw96y#`<6wGn+&{jvBPd4AqONR&4n~60(Z{Js1HC;>6tVt9_oaDrEPU0hk zVsFah*Xpn7;_VHm-8Ye+>L+sRqL;a&>X_}>dnb^15@wUwP~gMl7yf$qfKorkjz9R}0ull^2Q)IFm$D$=jFuwKhd8&{n( zy_`hvy{(_SXSKVt3JOEAMaN+ce#h)uDPO^pKivK3kB+Pv7m};O1^xj+r2R-qDd54O zipc(aqklGNTce6KC3W-qcTVrVp_0Lsg8JXr?#LJYv52(bNRH5yYvM$(QV70rU&1sB z1#12DR3dVrF4zs31t1IIBvg`{OSWHFaS}FCI0u%_n0Klj7fvXT9sy3h3?3pZX`YGDWQ-}NyE(Y+&)AV3X<(uc61v;4T`oG^JPyQtLXUmF$CVJLi(c~hfa<|m@ z)MOxzl_o+FfWGI{k6`NteQA|&dff}a3s>{(=@O26p<^F`A72)Z?-}G6KLY0KNvHK& zOO!2gHGu120hw83DE_4eHW`w_eSc?lxuka)rRTT@dsHsaOBd))`_EV96?e|N^L+PF zGn+hGRMJPmiki9x{%0>+SHjiQJgzfM1A`ZenK8mtP3>-ly`A94mP75i`|^uiL%i#jaFRl)Z!ddL#vVUuL z%rt}>H(CKp(79%e|?{w4(J3t2a~kgT1_Mtz^Uv+Zmj52nAfg zcj8AR2~g;{2uWVq2}WbeI^Gv&tp3j0cIFWR(hWQ;-T__EZG|1p0AY0Fg29VGtBKs8 zJL*!vonw^Ti`Wj)k{LBqzs^78(`Vvyf z*b0hq{=iq|&9JnCclF$s-etv40hgB{p&oHiIfLx5P6k*hN**(~W{WF%DMmtlv7_Xe z0OYC&fi7?!eI4sc8aYZT8U$~0u_!&d8fiKUJzC?-Ki$MWGp4j=|J@Ok{c$R2-P34`)J$AMs}| zho)Zw6W0X?Vz+r|yBl&RQXlBd)m_R0ZCPoa`sW*`%W1sR2g$HgJp5ejn#gi`TurZeO2P4Li-AxzZN05M%zEFKZNBgO@^grDR{@);*IT*U2P8tXs!Z zyI99^JC;-tn-~FD#aRGSu^XnJcgKgwNtV!bz*ZltO-(VsQ|H00TI}Ut*YQGcbMs|s zW+3EW(REo8HE$dB2CrApFBuQcZErMH(9*pT(9|~^cDbne3H;oPFx@vJ`?uY~jP(xo zZ<;R^pM~~&ld+$%+i4xO^a3wPxZV*@dI&{Kb(7TdJP9jH@D?jK9tkT$e%_v|ZSzew zK;f=jD9FAbhvm)!eX`xg#F2DIx$AV`~&L?UZE@#?k1{2D`$My8%t?BZE_mh^R2z99( zjKW3_y1Zk*Jf8eVwjjjbjeO@h#`9z=uo|E8^4;&sxQOWUqx)hU&Xgdr^7uPxWU6d4 zl-0>NWSalvEig0S)c>m+oKeb>#|2NBjt}`#OkB#HgK{Rz>4q9(C*b5Ea^k{PClWG1 z3qpcfkmrI)_bcC0XV%qvlDv1Zk-sGn=XS5gJh6Xzt~SIYV+Z-Sp!0^N|mb5qkVg=aUQ2zMyI*szxUp`*uE^L|?XO{p`4Wkx$gNChj@ zVQ^TgrwBru`|`LS?%wL;Iz!ze09e`58A}@nT^t;`DxP8x#)Ppj`!DDcxT4wZ?NxuY zyDpjzhGgqBb}jc@-EGih>>ua}f3~|gJ0wht% zFWH9NVZa}DUl1#8e(3FLb`GyB_i$Q8>|VZN=^OGa>t{o3N!Ani;Y_qbTIWwLav6iD z7X2pCd2H{HLpBF9T zMPZS{Z=;0kQT6)J0={fzBGA94bIcJ}mgsWPw*<+pbF0^qX7zASs(NNntt619`sR{{ zK`DA=OY7_~I3+s#nl2RItn_G(@i3IMYV7c_X`4dRZ_z8zp2?7HBr9Eau~v;Bxj*Qu zApC`UhgL=S%ybxCDaFNpxLGE>JvPG*WpbD{;O%pg+}2=C2h2i{3`mVPDB`sB$pl%I zkSF^2ATJI*?Ry-Az0t+w>1uq$Xq>p5#;`y9>(ZCra|dwz>60KU1BUZ;{K^D+Z;|nW zF{kNtI3xN+t#|ZwcTRz$Pj9;o`BmFRw(_d7zwfokl*z*^&)XA*8Bhc1mRu`T75Qn~ zymDcsCOw|^8~7Gt!SGWeGdrW?PjbXm6QYsaM2JfMk5CCF8z^o~k&INk2`EDb+G{M-$3iSu#wql&K~;9NkqLPThY*shLoyy$t-35SC+x zcSzvMF~pdlA`D6kMnt=P+a7U5_R`sDiDHpTZ-Pl$B?Mv>!@%dqRI&bC1ysT$mjv}F z2a7MPZHi@4{_c`4QdU{i70aY>{)bN?i{t}D5RdQq*(PuHblA(>^40FG^Z7RTDELNn zYOm{lA7`L6OZd-pXpB9clA)-kipe6n3hp0l=G*qcy`6e(f$y-FukX&N>09)P!9lP%G zwXo%}++wb&%BjHEEy*VNC?LgGuG>;sx~i{rhl)46l{_-H3lR`U1HyNYAP$99tL7I4 zLWm@I_vQ~0FXlgY{#xI@8>;SVjGx#9=A*?(eF}6#)R$xSWtzY$)9#&?#4?Tn46FM8og^qgMtrbbT4NFjL)3kjL`-$9HzMq|zZyPY{s2ex*L z=~hU+!&hwSgk)&;l}j_UnY|b)l;&Y&PlTyHR<7?i{3*7>5Js3(L5Bs?A;*)$GSfr& zkqdluLC_S9f&th0(eP7U0?9#pz$ni2trY{iRBSyV1l1Vi8Rb+Wv2RMw%19 zg7llb%(fl+OSnV2LWGN9-ob1Pae}{aGB2HIAgG{<$#XN6`WHZWxVxL=($g7%=9GnE zb^7sl#)B>VDQNgj!-bP@XvAuINB+`di> z7>thInC3vATFyFN4}J7Ce;a<*ue}T-j>$o|MIO9UEF5A)0M+6ySDQ+JWGT?b#mHT? z1^ak?-X`p(B#u7FS529K$nZLnjWG2!g|cYpA-2sU*VaH!Zl_rM#^W}hgwjBKL^kP& zhEb=2qt+VV+hQHPqvawnkOD8x5jCl`1Y87Z_2D-U149j_79h+fXE3}%bZc7`mOp8J zWgOtIX{wY<(vRGnmbgja5mV~;s=en=l#j@z?(9Ej`R9v$HKPo{2S^2zwu$>Qa=|Rq zwZB?vcxCWn<2#=u*>5)$sYG1ybHUE}8=z$6gt}dzdfiz*aYvD|y!}+Sc_$~|KHJ}Z z>AaUwKqR*IzN7%=4c`-(m#?;bZjJdCoz#uh-HudoFf(?LI3V|c$FJk|ToHYBwyWYR zQ?(*L`nVs7xhg@x)+bCR9Df~F^f>a(x@EbZX@QbaaMFZ+EM?qrN#Se!f*WC;fbJTpsQ*Sd9wtrS51M?m9cFGR&RJtMvG=E$ki9 z-_@~cSuS|7+{iHk3JbS69ozJrZI1Y{mt4B+!*7HP{U$+?;m0(ymD4cB{y7js+Sl!1R?zxLXNhbxy``2)J>Nk3Lp5+U@U+-K-IZldW$e_)?wXRb! zrz}Z``SX0`>aVRpT#7A(dAaT`5xOhd2he51yP^Q3!w6r2jmXfkvu^078P_Y(jmbmP znNTuKgTJn|k&%rdshY^g>l{F|_A7h!`9mzRTDBX+UurOo_Ox|Xi%!X~^v(j- z81kNq{4ugIgypLYt8?Q4O7><>2yf*BxfJ&6quw9^-(%E`^WFeIQ=xEu;U}Mq=YhC{ z&0VAKq=KBk@2+QhqxA`ViZqEKSI)C!qqPGtD`fMN2bHH1rv7nz+d(d}5+Lh!LG@6J zvD(+0t*}+jHCVgWS+41K|Eej0+L9jMbLysvdN0k*8G%pkS%2OpYY`FGth@%+7sP3c30(Kkof8&*@@iB|o#C%UulM zee09oG2aCY8_Nb2Vm;HHJ8x4UYSr>ZPn*gP-tgV!Z)enAacrdCs-r>3t@@U!WbNy$ zp-g#j`V6-7V~@`2V~Xwt9M=^NwJl?L2fJ2FJA=pOq4OI3S7D6YUh@$aGNq^?RoT7p zqVJ|G7+%-r=k^bGfuqz9h2(U*0Xg90J48IipfN-*Q|5HZby2G{Pn2Y+DL>D%@BK}k zSE3V&X|#Y2D=uja1vRAVnn`QVS*_aFecX}8Ei1qZ3{tn{lnGbsO>cypl z@|hEFB>%x?(E1vROYRI=9Sp7Of|50N>&$hht*7qO2U@N&%&N)m`Ctdgd_0iyxS_K@ zgVbi(`SLI8gX7=rg4y9F^-C+S0I>0bv#bCM;ercVl-*+LDHEj(^Rj}xhR?1~m<+u=B&52Rh6i4(uqh%=#fKbmfi z@B58+3uXl&ULy-?DPG5^W8bH=F?({^&D7s9b*(-nXRx`dY2=cn8Y1!UVxXR`_hOKG zDL&8cm}_bFQ%nFRL{b`u@bSc8h*#r^fxv>Z{--pL`szNmwfAj^StsE2?PP}U&x2fu zRQ#-9WtR03s_(+GBjS_-?O~+EEVeV9CduCJPNO|91Rs)hiboMPYKrXG?Kp()zoJr{ zmXl^!0GKXvv^HjroCBYhjuNaiZV-iC>TJ0g?Q2S}@Lw@`hGw7Ywjh%zAuV4iQ6!Bf zS&K5B_-iEup*ZpiD6z-+Lh-I^pzxe*beiYr*d{MV9Lj##W{_X+u=e=z_v}3`&CVUV z&gB(zlLoXZS>UI4+?H!2N*=ruJLZ(d4crz3#L0K#BIRHJ*EcEf>!pX12}Plb(Af8P zAfqnrW<5I>uCZ6Ah{1$3y*K;f5mCL{Q*WmQhvU_meB%$`HP>koJAI7l?^KnFh6G*? zM?u))R#s_7ACASd0Ue*qEQC#q9(oI*1!+qSl~G>CVzom$cbgp`nvA1qqRu}Z8cAkN z##p~XDTxjj6(*^YMip2=26IgobIn=VjO1~$@+1lJExK@$kbeG>wKavP!#8bOac|tI zFA*78?=!e04Qw=I%VLZ}YnCr~TE;``+d=0fPi!7g)ueiCUs!6st#ImQmId`B4jgKz zq=mK=b><`!94g?=xLn{7@tL1}}S!U0{cu z#vu0Uva={$xb*Y;!IRvNN-q1=_r|14TtXo7wLd!Y55O7ERbwwhy{~rvI)5hlWG!0H zneL)1C(O?v$ZdOr$8sEj_l4sJo1C2q@{Ca3ReG;&4`5SGqHLw==v><%vf)|HIlhv= zL*^DuqbqC{x~0T-nkp;kfpK1A8Ydiw>CD{RIO`_R6&6K{9qNY7hDE z_FAlh_o6y|Km0K%g$JwThKCtr8Vd*!Qaq-i#@@rDD$yRIql0ye6+J}uYCnf|oM>bs zMJF2)LB>i?ie(0;ZB6^91iXV`Nkrb6PMpd@Mly{i?`N4_IZa9NB*=@C%5bku(x?Rv z+K;bB-I^%y)5(grXvL*T$E_P$$n~&f3vmV0!G)3Z0&>`@4b~HxRHI8HD>on=eqn5M z_!yO}>-!B8`#r@RS&3cd1RN$n zwb{3BdSo#7D+tDLb`BgzyKz^vL}r;vmeY}w+>@)Jf{D3J{%!#m7GP7?1@(JZE?0A3 zOXyS12-*>B&K6R}!BPb3yRO=)849g){KSMZ|NnkX)Ob!pf#^jJidVm$coHm(dz%S9 zn^lafF4DKqTo@lTBLy-X1eF%P4+)~20fas;jtO4QT}c}!xxl`5D$q|bTa$V+2r8ft z`m>#6aS;i+lLl!n_Wc)=OGZF8f;gBKq~F1yG!VcIq*KZu!yD_1JYh&?4K|}lM-8B$ z%}&6Dm4N<{Mu;&lZL>-jQLrJ37x58(_UO(vrBZ@(E&t%&yzv~O0>af~T?`5lAoU1j zoa!Lb38_mneS`Pjtv$Pda!a33bEc!JLP8KK^PTJl7UCQni-$tz;qK* zMbej6^tWYvRd8cTN=)iOSG{^s^48puW}uQw0=^k!+kp`P9dY8Txgf=s_luEb-YwN` zeY+mEU%0iFVlz1CS3bpN9w`=Odw5z+98iGMSx9G(64*^ckL^(?uB=|TYyp8Bx9oDNaRu07 z+!}>(ta!jnKKfbZR}<>e9j5F;F7xcau=At;+9l57+Fh`#_eohMRsvX!7ZEcH^xa(A zW1K%TA~vrjztz6!?&?NbmmGYmd*mh0#n>HOKR*jVj?EH4djI6UGu0$XuN5#fpb%HQ z>~QDf6=)MBdJkOpb}osKK9zTmQd`f4{N8*0+jkzAiMVw>IUMBUD#+e1`N{X>yyEa{ zQQydj>x_tn`^S)pLum8$-)Eg!U|V);523~0Tp*tuGVDF6FYXEZ{$-1SL)jv%I$6*m zMb1qaD6P&#N0!Hj3rFuAc%Q>^8E`EBxG9aJ>ust^o7n^Z>1;E}^Y=_4KIJ6#)^lye zA7+_v`Xe-rw8=Ii8;6r*U*`{HYno}B4Eiw2TtPj0ni$w-btVW}`p!>wV1f|OK0T|z zxov)E`pl=v6v~mdQ8Z4&ZDYTR_gXZI@@6g4#DeQ6Oi@SHcEy*cXc#{$OIK+}^HgzZ@Id zG=4dj7D`m8b)d4-0A3*#(7;IuFONzmo_OvA;tV`1YfH2|e>~$Z>j=s!T()u#RQoE* z+xR$eqe6u&9s3|9UmC@ywZg^lBb3{mtNmWT&mLRD-BRhXs95dta{tP?+J;`L?l*ys zRru10jqcDuOdlQs+9P*AN5=5RKEkq9dgEw9%{q%|T-Km1_vv46U^BrjTR{oAUCU;z z91S;UGf~BOo0;6UB!YsYbBwvh=f)@L`-JGmt zh6|HBpNnuV!yTSu*jr(HK<@N;-L3kk9o_HK>2zo1G0xEn#^>@ z!@@Yopv$0G;mkV5S@HxbtEka9Nw8aE(ZsDlhGZ;)q4Nqg8pNf<5=4EdV7CIHjXZDV zx@;iCq#GB81iZ*VLR@Cl0g+KK*>8O?@kDFTCKA=LNJCIA!uSEpg72aHL}xE9geRIK zQoCw1_#uJ_WT7GM@Mw)ab{!{!W@V6d6oRpep|Saov+H{JA7zI+7=RT6$WsG@p5hRO zzg!qrk)6bXLO`Y0q_PQ@&S3i{#U_&egV$V|7MV_3ty&_S6vypfI<3b>aFeZ%fTIW= zk7f=x=u{sMuWLatIQHO#l>K)W8KoEFrN;)ge~cO@5a69}z>K{kzN4H3Ll~U<)VC7!tz&!+v`?3lV1?944`d2FhX_J0Tj>3l(MB7iVr7WqynS zlAKr_tFNCARu&cCN5X?OY?()B$5i$;UESoU4H+YpajSet~qO<*K z9{`Zkg0cU{<1*RSplB~P36r1b>K-~-S?JNFP5>BVNY>!ZvoQ(}@*IMF?JQc5agD=L zG*0;8ERy#_mX{Ad9-lHL8*WTK(F@q;9q{X*ZxBQj={^ahJSH@mZ%Z%N7lMRlPh4s( z1q_oq<`2BKc%@K(tQKpM2PMyeGGvJU4NZ+%9txdMgj-;;2jjXfH+rp}7&s!fTFj|s zK3sK^X#`Ur$dHP5I%cqWmk~Wk6cYV`n3tEb;;byDS76`WSX?qB3e)g~C=U=tjrVq( z06eh4%l{}urT!O3+Cz)2=B0|dB_2qST8ee0QIrkB#yn)7koA9g)0C@^?t~ni$} z?0^9JH!EqFf*V)|U(AsC<$HKJAYP)K@4Sdatdr`^Xmnzv>se_7uLCE(BA{u_?}S`@ zP^zXZvalm|S;;$j(S7xy%1ig!L~LgElR6;DOHRJOjM6f1L14$#Pv7@i^}uEfFfg1M z*?2(*fB(qaM8`U`agLyA8{W9Od{4)Fwg19F{HDOtz2FB-CJW?i&DRz($YJ;lrpUQ7RoA9A5JKu-fcq@sf<3^VCc3=YbGXV?w%*Vr8{ zidH}|f(2N-P;C=UOKR=I*tzq(`@4~?+s?z@cfvy1UUyj+;`>j5g~}q^LqHS?(gnlI z-8&WFaHpx+tPMAUbWIsZz?=|%fE^1yHE#N=tPcSa0E20&Bn7R63MTITjIo|?_Wp-< zm5|dTv&rQ|4O}=u@VNj>(H27bF45XP70|AP2L`+$v+{P!0NpMUpYLOUga*b!bFNb| zh`(>cU8wkAI7)Sah7=MOH%;N5a7YDVIHK+k1#DIm`h@ul(L2} zu^%v2@?gJVN|_Xu5;r|0AkEZ1<=r26E27oYlV`Gi54J}qH}8Y9wI)!<&|G_Wb_EWcJV4JJKif5hAYr zxSm#i0uML=|E4AZ8kMHBh1)0d9U{XrkGk05uxybJC2p$So~;}_ld1X_PU2F(mE6#iM3OIVNN@0{=}*pJd5oafpcBfU;8y${LN zyrMwYpxhZhqOMJ~s3-L&Z4XEmE0{$AxoD6Seu}MuD)@rI{-;C+%RxA4aL|T&XeHGc zRyag%n%{0<(?Sf|OhMFA^syfrUUV*{QqwbU8dd`5n*j`epV@o9tI+%Iay{ZTMCGEQ zZ4U5$>?UYKip6XfbFpP__Ics18v50GfDh<$(k~hgU>GDE#3tlNSpe*&i^{lG9-}~B z!TcV0CElmjGyJ9qqkZ{K{Fcace_7rYi}TqZeIRt(o)Ju9_*qZ}C9wt?S^zd{B~%jV z_6=NMR`H*_GM69`#CT&`u*00JWxtb!nQ0}EiMD|}r4+kBp#+-Q0VGQ3)V(5K3DC!v zs0k);VA)<0A2wtfGLmot4e3@5MqM-wgy9$iB_|}`-l5o9%0V9WG3K)rskjoal1{Mx zZX6TyKrCh6kQIuodPV|DYJ>_oCfzt`?_4l9I#$#^7S8 zJi4X`%E^8Lr&{s6U8dHNl0pS8S&PQ~y9U>#iU!oTuA;Cv}N_K7hje-Z#m`v#Ih`0 zn~O30j#xC6E&s&qihmrkw$>D7krM%=F*>m@+f%((E|J;_V|cdnyc;Z7x2ssz`>k96 zN`j;D=bLqi0)xFA6XZ3hkrGk}9e({z9Hz4z_|Fa9)FAy#1Y~I{5|fm5WW0iWNFq`a ziZS3Ii3j(40l2Uuxfr8nVT9;hQsS`79w)RbYO z@?vU;68G{l`^&|O`{el5tki*h_6N6a-}_=D5=8aG@lUzPJ&6wbu+ZVN zBNWY=CI5@A!8E@a_lH^e+=uGk$T$AdubmMCm5!7igsqqBbbgJi+K&5NxnYp$AIB_m z5+Rm3M9~mMFp?~iaxu|HkWh!F`qK~X!~=BYgVZP?Aq!$3wJ{UaIMNJxGC4h^lyb@3 zkL+?eQ&@%1P*lyT7Jq^JGNi2kLP+Ez#{@%)FJ*)TJt?arvjwdw?IU?V8`ZU4*TO2g z6oA0ktbHM~%`|b$((l-!*>Ld1&1Ox5u{g^-O&?AA)8Haglkf3c@8G zocx*B3i^}?&LbI0AYNZuLZEfKNJ|76)|g}5$m4ZTWaDoKs_)L& zac0>G|7#lu_q`vxymA7+KR_=5vReSf-V4m|J!<$d zIp(Y+Nlu&)Kk;8L0lHy!sN(dId(_C|LU5viZ$XYbD|zT8uy6~2*ng4we&V}}U{+Fs zpE%!3Am|oQwEqG#azFp~7VxjjO91TKZSN(0=)OMu*c4-S^gFORKk+Xw0jOI*^!`g5 z#w<=U&;)OGlqM$**$d`BVa`vSw*R6vde0htY>N3mi!(nl{6^ecgN5@Yxprb+AK9$j-nEOZh)77@+|;t?*(G$9yazkNrm53DbkuhH_uCe=MQQ2 zw@A1JsKg$l6V6hzYfWh1$ryHBXMBJAdwg zmw@{JEEuEr<*2izG&zdK{JCdd0wK2mA20q~0p=V{)^oA6W?6~vz8M4x!?Hzx&@T% zzaWg5!;f7tW{DjIH~#P_v)Cj#rRco*Yzgdi=-kC@psa+^02Onv0v}%C zMLKj-19O#Zt^Tsa#_|-{$jj4%c-%nPZ2gR~)0FX?mlW7^ql`besS!CQ8F@Hy8b8O` zSPS^UTr$nU_W3hk#3msme0~6lIhWbIkMt%X+)0j6UCwNckgGSiEupd7rvUQ*7&%qFf8nm>jC;ry zRQTO*GAK|-=d)8)8*}FTPtoM<_gfICF9I2n)kog2s!4-ji)b^F3Q1`#LsTUil;zNjSLLm-7pP-^%q?0hV*~_C zsHx8(QM7l6SlqNR^?rKkj$0NDgsy0Rv*1-b11O0J9q^!1iD%4a5<&CsIBA4xQS<2q z59uxNJ!O-5`cgm{{4uP_r_Sn)o}!D)96I)I>b^NkF)PqjDFM^@k4f1`Q$mvDH4D63 zA<`mC+BhD)bX_D^J=R)T7c0E_kqu7CRx?#t00~|9L2si zypbdW57yB7=7dZtDTD&T?UU3zNJw-kQZVO`*NCLmpn(pta`U24%F?9l*cb}T zWu4~D)qSZMusO9pnDw%#1_mJ}{j(M;les#O0BMS|XDRP= z5Vd3CClD+sn0Txrn3JG(jUy^VCbt3VF72qLvV{@yH4;pVyj%YU$KA{tzkv3#1@so8 zKK*mMBM#CJe1gE$w*LHG+jaTUy-_dhvS*`gtajtDp_ZMS2TxmBeI}n!`i?U1r__;R zrOo=5{gOEgi1_!t2qSTIeVB~|3PY$3Q%JYtOd$Cg*%$)E3)&a~@m|a5>&=oPA()a_ zjsQgH=JhM_^zSzp^f6BOAHzSu8RM4|&kE*ZDPC0OX3k~YaS?=+dr+WEsj5BR^O)fru9~w&b+RZUYc4j-_$!yQngO1TihZnax?vXuc%pLH5H<-?@ zT9A#JgRm%8J zYNV*4lcij4Sn|!FAf?~g;MewoQJ!7-=;+ZKqlO=>wIR>f?B)>k9k!atj;akY7?*#= z6#Y^FtDZ23#8fg%S%y7JKnbNZr?bC<1YLxU;4q^WmiqRuk?!0+)wM?&%PU@UrtN*~ z06kxvUs?96H9A^@Gug=Kv9E`vK8+v2;ER+6!O+;1HuulP+6+_49l;lr;)b`TxZGj( z$%x{@)gg%XtI&Ke7Z7}#q69rbnyt#L$iEIDxtqINhtYg5ba%v&fP{8~T!HzUUt8NS)6U%B9+q5&1Oi>ErlvD0uG~8C1D%FXj+@W)m z-m*;+P)BuNSA2L(s6L|~SV*00Zd)1wQRDkQny2)&>)D9=+@NhjLm{Y_ZFk4Q5t9>CRW|2&cDL zd;^65R!*D|HoBSIMVrAbeA<;BX?nXlRDZ0Syio z=OD@Mk}XI=+Mag*snq{dZT?d&|ED^9t3Y?`Z~dTM5e}KiNK6|p!(>VhUicRauOy_d zHWY^BoX4ierG+X`TfH^P=Zc!NC?@8g-DepeSDA}9+c-J@ICr#ddxfQ|`fextbHxlI zw*TF=+m~M)njPPBonKYwSF3J~JaI5;mi`r!0pr=*7(UZpralx!P49=!YNeru@cnrY zYCR%>hkI~oOW$e_=92xnysG2awkZi@05N>*kz7>eCL)S{f@NAn#5vVa+mC_yWy76L zN2WI1N%1c;qNyYiUJ4-G)%d3W?$YYyb~pV~T9PrCf@odDSA8YdH}(G@-+WFErtWY> z4jlZQCExE3^o7^qeR8pix){9tTJqei`#hKcZj<<7l*!?Yz*fG@#8?+|E~%@5&|Zw^ksl&^Ke>4J~UVR z5|5}>WijtjVpG6Uf_VnA=LKxIIQh{d546RnfI}{&CRJ{-r0nx?vC3A|*lsrxkJUS@ zL&>wY*F~VQ_UOa21>a?^bR&K6pL;}kjYCQcMfB^T3M2OLm#9Rvvk zg9Uc75cS4vxB&l)9?i9C%SBb)W5b=wxAG7_d zD^C4GUOW=Oo{FY2Mm`1-QRn)r`^|{%k!8ZcN@s%Lp@e~|B%V4w2+iae&YOC`4C6Kt zJ~J9kv`Y{^g605%>;z)1J>D?+=9RMTPe4hY(4T8HARlPR8+2Poo8Qw#3~X(0n6ihc zs>)H>lPxQ2$a^0~a=eJ#oF|Pxow>w1qOX8>tj|6cx@shvlrU_)t2sKSi@t(kc6)8w zkRj+B>m~8)>FA+@>YJjq-sk2Q^#6aS_s2_&12zl@$UFrI$oEZO5K}8h7qcW2estg& zKXQ*?Z_wYCMJi*<&_TW`THgsBpQLe1AyAo(bTyUu?j;zmIh>X7E&Jpn(e1dsN7o0m4wxDD61>{0U85dKw|{PJS$r)G--yegyA)Uu_!ATDHW z$ajHJ33;rtE^p2e6ot)k_AweyDqY}GS#)VNFn|y7Mvf>DEDk@IWAKS}mIIjGVXi~{ zWp^wrMKVO6kBC;&8G1uQ=}&>AtRgLZbEZq(rv2tW3mV4)Uaz^SHo%mQ4Z=bes$n~i{mE$MY-LC8#eT|P+L z=m!olAN~?Fab2*ijyj%zY0QOC7z74LLa9fvg1h#$5Zz(zWO^dd%4Z;+E;~jld3vA~ zYK2{0bKglOo_aopDF)SFlE{eZSbK#!)88a{&NIl_VJb8>2=p@7(Cc7HN{T;&eEnC{ z#kAh_!=ec%2ynPAja0jlDlb`#dIL_0@|gFnMU#x7uEWYoSuRBM?gzodT+6cbu8t?r z?9{7JK5mQN;X!ofEXINTy(b9rj@>h4`xDkYCwU|C@+0oZOe<|qV0p}p1CL~=BhkN2$rAaj?(39F-yrE+=%%d)bDWCrEdBWk@8EIJ2V&h5BBXBs;3r=DD z^5+PBge$z=y(RV>3&jewWu2V>w^h7OpN>78@%rZm9Hw;8WbOuT(9)V2z6Gm}yS*)T zB@)E7##H|azbiSC+e9Pu;8HidKlA8nVas}vYwt?9&&JXnaY?70^zchagqn`vD9>f& zXCQQ7L}?4{(I<-JYJOlkcg5K6^16O7CK%KfJ)$EFKkj|eP zq=6bP&gMK|9qB^9^EkQ8LnY&C=j~q$$(yG=$_`ddo*q0Uej3gV zdjuTd{(h+Bw?=$jHkLHtwiwsq+t0?7Q`iBMC1r@!3Nnu~OIg-`JbO}RD%y@xnPM?} zEF{@&X)5TuDt<$}!%~7K6AG}0IZ2#_@ePr<3z7l0P3lX6*T0x?kjUGZcQQGWOvmSB z?u8h+<=QjS>uu`@0BnH=DIHdxf=TOWy>^p_9@I%t*RMW{-Dm3mr>k#@t^{bhjcq$K zvF(X%+xEoP2`9Eav6G2y8z;uZ)`^|m`M$O8`tN`HsaLJ)?w5L~uDxs5UZqyW53dJR z5|1>Co+E~{+Y4{{9I^lRp0ARLk$@soit$LbsN798cNy>^z1!xv<$Bf&AuLJ#ROWIp}OxRU9SrZg- zuddWwI^C-Wy`z_x&ZZtZJA2EKs#r?(5VckD`BVv(vus$}MZ-Ibyk;FM)au97IQ=;( z@s0MeeW*k5bPJkDyFQ2NKTfSQVA= zBkU1i?#g+%?Eh+*@BUdN@mrjMC11?1K8COIvK02|n&2-B()2Dz>nT%Nd6p^hDRs3i z%-KWeaRddC!zC&PO9I_5N=vnI3$>$j+KTnl1w*>(nl>qjBM8(~2wbm6asChzmsjNr z#n2~1wb}*0)60@{?X=+dv;-?<^$}7k!QTsjSp?H620b9B-#IU4GyW?=yU~b|i!h$n zG9J2$;<3~Nyc|;+ri#&5K6`)%A6E{t&(-g!&FXrxXITt2q9v{X$cSs~hm(&(VszAh*~xk|U;!im zIOki|Js@(`DCZ%pl>()PLPDaK)W2gsUvy}IssK`+0j*FBBXrpS37UsH)JardGf^{3 z`(p#0CIVG6u_U0(klx-gX&PC4mLuv&OJn(@PJ@o-_q9Svapmn}lM3yDK|G}8s-I#c z0c3GXPl=YFHQ^SanD9KUppY9{3raw{O*3zQt(s!j$N8QptEK04^*bQmIC-!a9=mNH zK#dLfK>gpTgi*f1bOk9Gm^m337~a2BLfzW^r>TR9jlCA%gh5Dk;jKgMNpkC&*WK0-d9(iFr&qY4F>` zzPVptea^os5_o+_gBerfwfT8ac8SmIZ%RlvM#2m}7>x5B96Zm&6x_7QIHf3S-eFPE zwGogvW4+m^to3)WII3w;PqbCKM|x$RLK1iB<@h=yvFgZ+e>8ncI7XZj#>0|^s_D&g z+nG_KX7V;N;`|~mLJMM4bNZ`u2LR|0w%C6bB@T!qsFC#2dn(iIFPE1uyhl>k z(Ae6fL%5t*&HMs}XDHNM{m4Aq`BXg)dFu~*d?T7gl==xH)ax_Mh#i0P6~8%7P@YAF zM}QG5h06U|%IM?Pnk+&8f|t3U&Gk{Sl(r>KOP2=#0L;A8D7pfkc0;SUUd6*St^ro? z`5>73l^?NnT*<+(S3&KYh-N5It#n+~arY9Lcg+*ql+d(ZcTbL&=wTZ)E{1F_F7*cixee}g{%<3Sg5l&}2gx=WP?vEaF{(X<5hs}xGTM|`%^K$YizYQZS z{pRM@pB-(iNw};Qc6M^4P7m7uG+(NRjp`Ot-sX#LCz0ohE)E&3e$SrHKs-DQJ7*=Z z8{9nvt}=;9D=EddgF|O<-9+*oxOvv9Nw*F?)5Z=?d4gxYA01_n%MvQdP_clmEpz;8 z$;-=&l;H^4l6C+vsB`&^*W_8oH8qu=(8msf(v@jpZ~==W+r5B6 zrF@g!y%wP8_uu>rOIW)x6g)eRKcI2fJ30XI-KcPslzO^)CHIo7VMV~m?{CDSBo2E$)ZUz zw^9a}G6y4yipVWr#|fm)umKw!BBSa7*-!ZR_zIBe=Ywm;EZapU!=WW5`SW4hJtCe6 zl3#q&evWT6{riQnGfo@S;@FG_{Lz)1yv904dW3Z?E3O+gNta&~dp+yv4O8X|JL4{T z^c2iwWWkY2Wrei?K2AH26BHVoQ}(q2NWII>bT%4LP#hh*yWZ}F5r79CDN80VWp1#|n>lIgy(YDN@Q*@?1aDDtsvdSloAdV2g7I*1|_fdKb-d_3J`r!zMJ0VNFH2Rb_XAKSq7_^i~_6c8L7#cQqG?RQy3 zCMKqU_h)bn{4i1fd+)lmm5miC@&j?qc%$kEMiE}CwWIXSp|P<7*S^EWm9iT+A|?-y z;Bu7yY@9LO+-q+MIk~>mnW@hy^%{0+_?bPHF*z>HWusUiB)|u4J6mtF2nbXx@I;W~ zolSZoqNJp})T@QJ(AL&=adE*2W}G+ z+WQXQNP2EI?_8CY&y9)?abBGVo(>Xl{ch&GD<+Pcl6K}y5nN!rdM706jK80u4?J9If7^37#pagryJ1q zj{frbv3lg}VB_Y-!OiUWlb0`k^u{Qc`4Xt6CdsQC4}c^>hYPK~5K_rhfc9;*(`X_0 z$I#Kx(3o+Z4#7|2dd+l+L7$)3bVFPeRrJF03#wuz#l(zP(sKaL4$pZ9;NpXnjzc+e z>q;5rUQf@G44xdK_xqop;UMzp53R$Hf5z`~@`^i8=Ao%F4?6 zx~}F(>%@6;uh%u&`NKaJ4fo|5-^yeC*ze8$Y_W*RipDNKspgO8zu#h+GYV#x);_gW zuf~2M)ThKCbx2n@wF%;Gy4vk++;xHUW~`w<0fB_uhyw6+kc)ABt$TZ!x>oEuYde`% z%h9PJpl1iU#i^?4dJ|Ofb^oOS6-}J9-I!sOP4%m&D1+SU%!M6lT!Vx?d(stm{ytK45E=~~% z&|Un%(2q#Gr;V){$XlvnzPbDUSNdT7aq-ltrI08f1CE%O_$0&b!3u($qHW6Lb{uaK ziu{K!4;x-!12A#SHlenlAopCy&;Q6=tJ$sPp6FLgk03O1?Db*fzO?ps_qYVs65R5Y zIc0Wvxk(z#6q>7s#zf@0OIbBh=Q+#-rr!(ZwQYDrM#g&mN%Kg; z;BEfYuDm;3;EP-Rip*9Tyc~;--9XsL$jIvI>R)ri?`U8iRc214moqe$JF%ZP0K({y z!>g^M$s}9viIaT%Ph9k#G&{)CBrV@dfD|IUg|v(eF&A|xv*LSU;XNx0iyw2Vol;b! zCN9ndq=RGM?-ufQM95+;+$x)y#=qH{-|GkA@EFhX+$?PPvpbGw+$JzLc)V87HQX{W z?uc2zf^!$igFai3Mh0)yLl#$70NF3Z$+a2T*|T+zW%v{nC1u$sXLRyal@Io6uT@p%`QTNhDgqM5FoJ9~SIoLwF*4Z1HMm)<^RrL=eu2|3l(_I)q1 zY>tyl;q(wOpGSFsjSpCL7ZB4??NYo7(~cpl8-`+IER3aP2sR}+9QWxPAkAET>CwZ3 zCVKP|`v*I+Xq{&asxcl4wO%sV9v_GmWpgw5TIk!rfU=(wq|2fVqmuBWdBtMZ>;(AkbGr~3ii=CZ zKJjV8h+p`)x*OVT86^%X0!sC4eYz9V`^}b-4u%SAhzvnz3#yMSqNGLnqZu8tCIxSh zbvo=*j_~=4MBdK#(o{tFpB&3_?~ROXOt6!%-!i|J@M#=qu(Hs8H8}Y{$nN~1jCu`- z!ZQY|ah&3QC5lYcg2TjIKQ}zvaEE9{@=Eq5=eO zKXkvCBlY$5Mevyb``q8#8)GtS7YbzKy2mH{R+#|%!^~LtbQ`fUN^?=Hk~tz3%F5Lh zSiW8xg6`a)osh}K2H+?zD0x6MX}&n3WG1Z~n#$;WJD9+L1NZTH6_u<#_)AptV_DP0 z7e0eR#k)y3+;yqlimE&wC*ggKYL|$cnmRccQVs6?aiUvFieX+nWuCOSdSD$L3{=s0 z6LUuH*sBVp!Y$udS15ErS>RuR0Q^%ldC8w&q&(G@!N))I zs$sqUi=CRXm?GCr*`Ekoff+D?LiY9cWMDKme&`?#zx)R&bKQA};or@9wz($8X~f--VbYvgz}=2q~c|O%?yTDm;CEb zHlW%Tn7G8F9h1J&6?JKtp1kMSUu}trj0dN*WK{f-18^eAd#alVx+;IS8SGX#<&Vq-544@(kiba-?_@ILFU%fW2-S)cCVk8?Q`U%J+CVsw({6m}?A)E*1B z#8NzjTF5a2krH+f+bT9juvjXWFyORRSe9N|cBFDQpJw}Qk9L1pVN%huhRmtvX-ljN z(tO5U0ocZNNN{Rk(W^C=flK~Mj2uqt^zEpe+`QKJd>lU?o4Z|lQsLxf#4zm#6K66O>1Sl1bHa}Ji~kj&RV&^2 zEUM$XEQjWAwesIQAEQtV3x7@N6NpWo@2ktw0Dh|#y4z{f;rBsvvhwocg>AGSrbXBd zV%YL8@Zd>aHr7b72NfaqOk9}=d0z}QlZp#2t}3hG{s?I{=RdO7ipW0kn)%;~^h7k5 zTVJ_Tje4NE`DRP-M^hR+Y%SMjCE)Z}0_@pQS{@nHY3$wbk7-iFmD9*Y1XIy&7# z08gx=mPZHi*ryk`KX{P3y1H00MnSkQ8bEk)`zNHYj9?b5ENFdkhj*|rTHRbT`wE$m z2Q$s;>hnq9udLZTL~M|7Un%XUeO|WNroFvAKR;?NqtX2Yte|U#T~93uw|{9ZiBmw| z9-sM))#lFWYBK1g{C;V!Z1eZGdlG;ypt>5)wB;$~UC49!qKR3l1>CB}(SfVW8bIje z%bQ-67n!@>uTw!CxbrF?XjneYx@9_V=7+0upB}-6{J0IbYCF!~YEXRdkHKV0D2CJrj3q9e?+ofyk+g(T7@`YrD!cUS68na{-tz@Gyh z#n(Q|g^^Gw#)XfbIPBRgzgC(Ztzc{jMFSEpv~)~_c$DdB1J!cn=uopWH;9m`ELu_5 zS8)-!I?6RiNOZ15qZ8s%`!gZEuZ=9d6zH!;^EcmXM`B2)78F%foK|&G89#iIX1*i( zHJE2LfE>219E+#qhCBl0MU$cc+&g=_2Dx<>Zboq%+PX82gnp_tM9`8!ZgD0njoJ9% z(tZTY%>>eBK-B^&H&^&Q_~-=XOoo37L~dif=*1El+o*6+@U9&M zdN~*|XCm^)3%l*in=!cuf-sWR6js~hNzyKcYO_&PJbeqcmZ>Y8u>%sr9jp!d~u zKlV0B`OTK6?AO@E_w}sU^Q0>*J>{pUjV5YjaB%SNCL5jvN|t2yb-!0kP;H)cPqj-> zgWye(*}jD-EFqF<3YD51+Wuk36o6hImep=B5YUP$kOze?b6+wb^Ll$vzrn&lg!-cf zYY0x#u}4Nn-`yaakajiz)Ec4jb7*}XaaJmGOp)&I@s|1K^E|=Vz?{AXgXuFKwNqZy zlT@WqM@!(>B-EyHH{5Jo;YpW8?@u2rs&}ez-U9B}6_m$t(h!hF{JIKSeo0;&&rS!V z=Utt>yu4Vre=rjf5rK7BNzEop0OejoHYeS;X=}lJu1TlDg=>5O*UTP^6kQB?HeSdc zAv>H$Vp)y*&g@inr_(}9kA{ZF#+k@OS8IvsJIWG}v-lVo5RbBV#j>k!)&d%RpJIM~ zcqAoAv6S--x*aFKMxP4Fn0((*Wn>&3lb_-xa7)j(f+#w>`G|_;bzPEhiu?3*biNak zLXA9>3~98IRu&ZjAj8(Peir7*0ZdDfjIHxOTvL5A{1AIJB%e<8g<;q>dlw$dF)5A8 zTW|)D85M`G5ZUS_afACoCquNqNzTQT&&m;qm?_!+2<`qWp}n#4*NAn-%7BZ~{boE# z5a+NFGCTyBfi`a6jiKkt3?rR!6l$pL)_Tb+Z&MF$ZN<5qWN)qFFg( zrX+}cCFo5>hBtwwXB~y*ZzLtZJ~=(?uMrXk$}=0;i+S8lEG>6L!>R%U!C0%Jcvan| z!8?5~mFrdkPKT8`FF!HR=puHRwX}MAe0X&ks;fyIoJpvH9~czynAz}X0TpdDNTF*a z-pQ<}gx#=YIG{gRA>K8DSF0{)B)*9R=H7461xROR7xRfy%>{I^cT=80!~?y_sa(H) zsnav7B_|I;$TU?BGorEG}Le6NuUgj`~cah%)IPy zUDDOODdWvLC!fX5q z@3(>pNW6buPpH!=@}TNvF#|5-<&I)n($}ICKc$r?oZ_7Jevd#xwL0D@eaF)d!we}|^WoKmzprwy?f4dJBR7PT#xBw!RV&#G+Mqnse zomql#e!xeG1><8{iE~*R!^6L+4>u3c5@OXVi;pHtvVVh>ph2o{w*A^N^xn-QMILG{! z*1@7?A8X#wq?7I!7E}*&^7{MN{gc^{k&)Aj+@~d|{XgL6C`(FigixibOX^t+h{MtD zT2C{c-3UDRU|?GOu=?h@H%XprbBcx&wS!`Kg@jtG9tHI;mAuS-um1`}-^MEewl~*$ zze6EKh_?&ikX_uFB;<%O=D&tbjwtw(Ox>vLEV)}E)iQcRlZT|%t(x&|uv@!sbaFpN$5@qpvw!-vjdXzsqvRFN*lWwT%iqSYk+Rf=f+ zoJwn6qHj`kKj`H;+=!e;7cnOQ!JUOnMo-mu0)Pepi*9)9>cTb+YKLH0rBFSgJ?rHtzgDLJ8fSX@ZN-F=jLI!G+LzY#(2?|WfH@CbisV;L1i9@3MO_z>- zNYob%Pkw`>C9ry{V!i(~5mda8fEEKu6xWkeXLM6;{4&_*bO|{a8^pA=2iR&pWvVN0 zJG~*s>)O34!3|`|2i;X!^=TjnkA~O43b|6#L6%pyoGCzXx3zTvrrus3%+~d!NT5Kf zpP!$upXtL?=0BDp`4*VhgpVM8=o%PwUpz~4Lbr;JHlbJ8nC@lx_0&wPan{v39udps z4Txhyo&C$Lv>>LyR$C@BFSn6nNq$L_SQiiI) zM2kPqFol8h%Yy5Gtm^ky&LK~09}QgP8loGtz>z(nTmk+{RmxE?-3(DCMbBwB_ffi^ zi@rw&TP2Z2e8P1(R^xxE^$3kVxzIYQWNFQ>A&I|^rU@50u;V)28qXI#XqM%L7g*lv z3r##jXpxZiYxAp-Y=R5yySPPbqg|p+ZAKAs+H=7C@1$vx+F;^;0eCl~zuKLS(0=UetU3eChkSRvuNg2wH|*sL7VMi?n*A7^YNyFWtUXA?xt@7fsIm}anR5aI5nW#B-qk*@Dz45{I`u(?lMMU zqr#ToxS8n0I1XaIw&J!gOhd)u;^Lv9S-QGxWVZK!N$)d!Y%J6D($dClqcuI_hUUs; zka2L7Gh}%^zlZWCb+IG1ig#=*W_n5y4o-Jb2%<67YX8uaR}_M3jUVYMDLU#`B9SRRhgc zF+zN-5e*hX`Jd+0REJ6G?IvD~)J`BD^UTaE8wDg->bN;F_NFhq-(7#dNPcKRq)byI zj|(%4Cq!EywEIme`_At`bEGoM7trn?-v&PbBl0~fy_G`ELYqJ4GvwinaAI5wUXxKsiK0%&x!R#kBdzgAw~x~*)r4!+Y(UcdLzZMgeadm*$T zUdI|S0PimS4E|N&Er_6rzgm#K5H~JV3(HXgp*ULKA&SR(i{EmMS{5!07{wRb3N`^9 zFVmhsmvbDiH@Vvs#ME3(%*-0rX3PG-Mg^)!w6o*$7)vb*ej9-QX=jJ2K>7y{e%{y< zZ`^;!2LWsH;=_J>ulw5@c*K9&QDBG4JhE77 zg+>mnIwprIuetza_s-q#bb@?X>nZJYuP}Gu*ffGnr6r$xPA(`((m<+f)BRUe=BpB) zKkfhMX%U|RP4sb*3Y<#~2yrY7wXAkG@nriR*;uY64!44jJ$&?aT2SupkRE=30NaZI zS)4K9RHWxAw?{M&(#yei$H>5n4xL=8nexbpU=~Cq!ZS?dXgLJLOgaw);vizNJTt?R z{;_tl}@Veh8HjbCwbaamb|*EBE02-*n@1I&oIL-4ng!n!pY zG(UKpc!xE8XX?THd2ClewyqBVyMw3D_4O67@R`T-M-zO0s_jnA&4nd{genPvDR9wtVAq_@~^tMw=Iu4x53@sdhU1=68;qulRBJXfy1j2 zWPQeVcRbsT=Vzh2_^tm~bq%qbh8?;HaSZx7_Cx(ttXRkLK zLr#x-q?E-zQX(swsy;rpDas@D7in-~G5~!L{V> z^SaDgrU}$IoO=;hi=@!8s&}{OVMFB+gmswanJ)iH*xY4(h}_12Uqfq899tU@7#_EO zz}`Qi0Dj8l`Pv>}}c9D)`rMV?E<0F_{4#LNNs zdK<9~xR?H$bBX}audVr4&~0?f*2rKu{rgS6Am^)*FD?u(*bSyDX?$>Co}ob~3Xy|i zbFWQ$dU}3@piBLCJqci4!x?2`M2NU5A}{gfl(Lw>GR#6yB9vk4U$E~+C_%sXH$QOt zYJK)DH{N2=^dbM~Huc^haI9+F#}#gO-?h=sJEnpS$@BqiY~n(ta6T=f)J)SC+d6u# zn25ZJ(zUB$$G7Ckz=V&3|MH!5DEA#8=F9aHLkINOKW5EAPfrZd@Y3;b9%9@4{um;a zub4nGLq*kYJU@&ygA+kN6@we9FhdFn%<=Q{7mD1lX5CMt3Dyw}#zAO&n^qL?LWQvL zzy6KT?&|_z9!`*H^z%YVz(ho47Ky|+A8?Hm=OOyMJ?^~q-|xHzbdIq6>KT(tVrJfjl_zlIvrn?0r}}JX}N=@8$OB zcstX#HNV*^$0C4Ih5aykArJbx3N{~o%^gLcxg^QdFV~a%>IW%* zy(w;TG!4mgVw8Vd4yU{6dhyDesxp!^(~YsBIZCiDyVWZ~{2r7Wx3;Jw&GysyJz6iZ zJ_P0>Z_MY|=*p@5{l`-n3$TK_j!WEI^{Cwlg4 z`df|tkzNxNDhoX#Q2T8+)A(UQl7l4U>K+?xs$Jv6pie&}f2JD5Y!ltk6#ic2+uId6 zG~?Emuq4;YLaGxWZ+VLZIWTicRjDEf-X#=-tIy|1+tw5$`3y&YXIc69lks#kej1kt z<;!gwPHvp>wcc+U+mh70Tk`j011lQ`|C?F(LDeyXXL5*vMW9BKP?@?c#7U*=l^C1M zJL*P$5NmM}Wl7H>LY;Se%31OJ38*+!?15fENv>OsoOK*9k}nF|ypSr&_phbj2eGmh z^|O*Ty;&?>@R z|8x98ALpl+f^&1xRL7{>SD$dXd~EjN!`Y;`Kec3h|8Pdm%poZiKQ|20FS*$#ZDp$` z!8u?z{en4;kWW*Wd<;%e@Ba>z04p8He}R&`ZncT>pMd$Fu`|g-*394jWBUJDtN++0 z|6K<`{Q}9DHe~;G`v3VT|Ko%pnXF+$_1{MVYzV