diff --git a/RELEASE.md b/RELEASE.md index 7b2789c03..2426fafe3 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -1,3 +1,11 @@ +# Version 6.4.1 + +## Bugs + +* fix regression when playing a specified sequence instead of using visualObj + +* don't inject a bass note when chords change mid-measure if the pattern doesn't start on a bass note. + # Version 6.4.0 ## Features diff --git a/dist/abcjs-basic-min.js b/dist/abcjs-basic-min.js index 85e7bbf11..29ab290b7 100644 --- a/dist/abcjs-basic-min.js +++ b/dist/abcjs-basic-min.js @@ -1,3 +1,3 @@ -/*! abcjs_basic v6.4.0 Copyright © 2009-2023 Paul Rosen and Gregory Dyke (https://abcjs.net) */ +/*! abcjs_basic v6.4.1 Copyright © 2009-2023 Paul Rosen and Gregory Dyke (https://abcjs.net) */ /*! For license information please see abcjs_basic.LICENSE */ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.abcjs=t():e.ABCJS=t()}(this,(function(){return e={1045:function(e,t,r){var n=r(1185),i=r(6306),a=r(1592),s=r(1028),o=r(5633),c={};c.signature="abcjs-basic v"+n,Object.keys(i).forEach((function(e){c[e]=i[e]})),Object.keys(a).forEach((function(e){c[e]=a[e]})),c.renderAbc=r(6859),c.tuneMetrics=r(9989),c.TimingCallbacks=r(5681);var l=r(6020);c.setGlyph=l.setSymbol,c.strTranspose=o;var h=r(5594),u=r(8471),d=r(522),f=r(2029),p=r(6313),m=r(5281),g=r(8702),v=r(5049),b=r(4718),y=r(3450),x=r(562),k=r(9991);c.synth={CreateSynth:h,instrumentIndexToName:u,pitchToNoteName:d,SynthController:y,SynthSequence:f,CreateSynthControl:p,registerAudioContext:m,activeAudioContext:g,supportsAudio:v,playEvent:b,getMidiFile:x,sequence:s,midiRenderer:k},c.Editor=r(5294),c.EditArea=r(2945),e.exports=c},6306:function(e,t,r){var n=r(5681),i={};!function(){"use strict";var e,t;i.startAnimation=function(r,i,a){function s(e){for(var t=0;t0)for(var i=r.length,a=0;a1&&r&&r.length>0)for(i=r.length,a=0;ar.currentEvent&&r.noteTimings[r.currentEvent].millisecondsr.currentLine&&r.lineEndTimings[r.currentLine].milliseconds=r.lastMoment)if(r.eventCallback){var s=r.eventCallback(null);r.shouldStop(s).then((function(e){e&&r.stop()}))}else r.stop()}},r.shouldStop=function(e){return new Promise((function(t){return e?"continue"===e?t(!1):void(e.then&&e.then((function(e){t("continue"!==e)}))):t(!0)}))},r.doBeatCallback=function(e){if(r.beatCallback){for(var t,n,i=r.currentEvent;i=0&&null===r.noteTimings[i].left;)i--;n=r.noteTimings[i]}var a={},s={};if(n){a.top=n.top,a.height=n.height;var o=Math.max(0,e-r.startTime-n.milliseconds),c=t-n.milliseconds,l=n.endX-n.left,h=c?o*l/c:0;a.left=n.left+h,0===r.currentEvent&&n.milliseconds>e-r.startTime&&(a.left=void 0),s={timestamp:e,startTime:r.startTime,ev:n,endMs:t,offMs:o,offPx:h,gapMs:c,gapPx:l}}else s={timestamp:e,startTime:r.startTime};var u=r.startTime;if(r.beatCallback(r.currentBeat/r.beatSubdivisions,r.totalBeats/r.beatSubdivisions,r.lastMoment,a,s),u!==r.startTime)return e-r.startTime;r.currentBeat++}return null},r.animationJogger=function(){r.isRunning&&(r.doTiming(performance.now()),r.joggerTimer=setTimeout(r.animationJogger,60))},r.start=function(e,t){if(r.isRunning=!0,r.isPaused&&(r.isPaused=!1,void 0===e&&(r.justUnpaused=!0)),e)r.setProgress(e,t);else if(0===e)r.reset();else if(null!==r.pausedPercent){var n=performance.now();r.currentTime=r.lastMoment*r.pausedPercent,r.startTime=n-r.currentTime,r.pausedPercent=null,r.reportNext=!0}requestAnimationFrame(r.doTiming),r.joggerTimer=setTimeout(r.animationJogger,60)},r.pause=function(){r.isPaused=!0;var e=performance.now();r.pausedPercent=(e-r.startTime)/r.lastMoment,r.isRunning=!1,r.joggerTimer&&(clearTimeout(r.joggerTimer),r.joggerTimer=null)},r.currentMillisecond=function(){return r.currentTime},r.reset=function(){r.currentBeat=0,r.currentEvent=0,r.currentLine=0,r.startTime=null,r.pausedPercent=null},r.stop=function(){r.pause(),r.reset()},r.setProgress=function(e,t){var n;switch(t){case"seconds":r.currentTime=1e3*e,r.currentTime<0&&(r.currentTime=0),r.currentTime>r.lastMoment&&(r.currentTime=r.lastMoment),n=r.currentTime/r.lastMoment;break;case"beats":r.currentTime=e*r.millisecondsPerBeat*r.beatSubdivisions,r.currentTime<0&&(r.currentTime=0),r.currentTime>r.lastMoment&&(r.currentTime=r.lastMoment),n=r.currentTime/r.lastMoment;break;default:(n=e)<0&&(n=0),n>1&&(n=1),r.currentTime=r.lastMoment*n}r.isRunning||(r.pausedPercent=n);var i=performance.now();for(r.startTime=i-r.currentTime,r.currentEvent,r.currentEvent=0;r.noteTimings.length>r.currentEvent&&r.noteTimings[r.currentEvent].millisecondsr.currentLine&&r.lineEndTimings[r.currentLine].milliseconds+r.lineEndAnticipation=0&&"event"===r.noteTimings[r.currentEvent].type&&r.eventCallback(r.noteTimings[r.currentEvent]),r.lineEndCallback&&r.lineEndCallback(r.lineEndTimings[r.currentLine],r.noteTimings[r.currentEvent],{line:r.currentLine,endTimings:r.lineEndTimings}),r.joggerTimer=setTimeout(r.animationJogger,60)}}},1592:function(e,t,r){function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var i=r(8905),a=r(9565),s=r(4321),o={};!function(){"use strict";o.numberOfTunes=function(e){var t=e.split("\nX:").length;return 0===t&&(t=1),t};var e=o.TuneBook=function(e){var t=a(e);this.header=t.header,this.tunes=t.tunes};e.prototype.getTuneById=function(e){for(var t=0;t=0&&h0,v=0;v=0&&(d=T.startChar,u=void 0===T.chord?h:null),T.chord&&(h=T),"bar"===T.el_type){if(p){var S={abc:a.abc.substring(d,T.endChar)};(h=u&&u.chord&&u.chord.length>0?u.chord[0].name:null)&&(S.lastChord=h),T.startEnding&&(S.startEnding=T.startEnding),T.endEnding&&(S.endEnding=T.endEnding),f.push(S),d=null,p=!1}}else"note"===T.el_type&&(p=!0)}}r.push({header:l,measures:f,hasPickup:g})}return r}}(),e.exports=o},6859:function(e,t,r){var n=r(1592),i=(r(6780),r(5253)),a=r(8905),s=r(1756),o={};function c(){var e=window.innerWidth;for(var t in o)if(o.hasOwnProperty(t)){var r=o[t];e-=2*r.offsetLeft,r.style.width=e+"px"}}try{window.addEventListener("resize",c),window.addEventListener("orientationChange",c)}catch(e){}function l(e,t,r,n,a){r.viewportHorizontal?(e.innerHTML='
',r.scrollHorizontal?(e.style.overflowX="auto",e.style.overflowY="hidden"):e.style.overflow="hidden",o[e.id]=e,e=e.children[0]):r.viewportVertical?(e.innerHTML='
',e.style.overflowX="hidden",e.style.overflowY="auto",e=e.children[0]):e.innerHTML="";var s=new i(e,r);s.engraveABC(t,n,a),t.engraver=s,(r.viewportVertical||r.viewportHorizontal)&&(e.parentNode.style.width=e.style.width)}e.exports=function(e,t,r,o,c){var h,u={};if(r){for(h in r)r.hasOwnProperty(h)&&(u[h]=r[h]);u.warnings_id&&u.tablature&&(u.tablature.warning_id=u.warnings_id)}if(o)for(h in o)o.hasOwnProperty(h)&&("listener"===h?o[h].highlight&&(u.clickListener=o[h].highlight):u[h]=o[h]);if(c)for(h in c)c.hasOwnProperty(h)&&(u[h]=c[h]);return n.renderEngine((function(e,t,r,n){var o=!1;return"*"===e&&(o=!0,(e=document.createElement("div")).setAttribute("style","visibility: hidden;"),document.body.appendChild(e)),!o&&u.wrap&&u.staffwidth?(t=function(e,t,r,n,o){var c=new i(e,o).getMeasureWidths(t),h=s.calcLineWraps(t,c,o);if(h.reParse){var u=new a;u.parse(n,h.revisedParams),t=u.getTune();var d=u.getWarnings();d&&(t.warnings=d)}return o.afterParsing&&o.afterParsing(t,r,n),l(e,t,h.revisedParams,r,0),t.explanation=h.explanation,t}(e,t,r,n,u),t):(u.afterParsing&&u.afterParsing(t,r,n),l(e,t,u,r,0),o&&e.parentNode.removeChild(e),null)}),e,t,u)}},9989:function(e,t,r){var n=r(1592),i=r(5253);e.exports=function(e,t){return n.renderEngine((function(e,r,n,a){(e=document.createElement("div")).setAttribute("style","visibility: hidden;"),document.body.appendChild(e);var s=new i(e,t).getMeasureWidths(r);return e.parentNode.removeChild(e),{sections:s}}),"*",e,t)}},9447:function(e,t,r){var n=r(4914).relativeMajor,i={acc:"sharp",note:"f"},a={acc:"sharp",note:"c"},s={acc:"sharp",note:"g"},o={acc:"sharp",note:"d"},c={acc:"sharp",note:"A"},l={acc:"sharp",note:"e"},h={acc:"flat",note:"B"},u={acc:"flat",note:"e"},d={acc:"flat",note:"A"},f={acc:"flat",note:"d"},p={acc:"flat",note:"G"},m={acc:"flat",note:"c"},g={"C#":[i,a,s,o,c,l,{acc:"sharp",note:"B"}],"F#":[i,a,s,o,c,l],B:[i,a,s,o,c],E:[i,a,s,o],A:[i,a,s],D:[i,a],G:[i],C:[],F:[h],Bb:[h,u],Eb:[h,u,d],Cm:[h,u,d],Ab:[h,u,d,f],Db:[h,u,d,f,p],Gb:[h,u,d,f,p,m],Cb:[h,u,d,f,p,m,{acc:"flat",note:"F"}],"A#":[h,u],"B#":[],"D#":[h,u,d],"E#":[h],"G#":[h,u,d,f],none:[]};e.exports=function(e){var t=g[n(e)];return t?JSON.parse(JSON.stringify(t)):null}},4914:function(e){var t={C:{modes:["CMaj","Amin","Am","GMix","DDor","EPhr","FLyd","BLoc"],stepsFromC:0},Db:{modes:["DbMaj","Bbmin","Bbm","AbMix","EbDor","FPhr","GbLyd","CLoc"],stepsFromC:1},D:{modes:["DMaj","Bmin","Bm","AMix","EDor","F#Phr","GLyd","C#Loc"],stepsFromC:2},Eb:{modes:["EbMaj","Cmin","Cm","BbMix","FDor","GPhr","AbLyd","DLoc"],stepsFromC:3},E:{modes:["EMaj","C#min","C#m","BMix","F#Dor","G#Phr","ALyd","D#Loc"],stepsFromC:4},F:{modes:["FMaj","Dmin","Dm","CMix","GDor","APhr","BbLyd","ELoc"],stepsFromC:5},Gb:{modes:["GbMaj","Ebmin","Ebm","DbMix","AbDor","BbPhr","CbLyd","FLoc"],stepsFromC:6},G:{modes:["GMaj","Emin","Em","DMix","ADor","BPhr","CLyd","F#Loc"],stepsFromC:7},Ab:{modes:["AbMaj","Fmin","Fm","EbMix","BbDor","CPhr","DbLyd","GLoc"],stepsFromC:8},A:{modes:["AMaj","F#min","F#m","EMix","BDor","C#Phr","DLyd","G#Loc"],stepsFromC:9},Bb:{modes:["BbMaj","Gmin","Gm","FMix","CDor","DPhr","EbLyd","ALoc"],stepsFromC:10},B:{modes:["BMaj","G#min","G#m","F#Mix","C#Dor","D#Phr","ELyd","A#Loc"],stepsFromC:11},"C#":{modes:["C#Maj","A#min","A#m","G#Mix","D#Dor","E#Phr","F#Lyd","B#Loc"],stepsFromC:1},"F#":{modes:["F#Maj","D#min","D#m","C#Mix","G#Dor","A#Phr","BLyd","E#Loc"],stepsFromC:6},Cb:{modes:["CbMaj","Abmin","Abm","GbMix","DbDor","EbPhr","FbLyd","BbLoc"],stepsFromC:11}},r=null;e.exports={relativeMajor:function(e){r||function(){r={};for(var e=Object.keys(t),n=0;n=t&&(r-=t),"bar"===s[c].el_type)return r}return r}(this.lines,e);return t<1e-8||e-t<1e-8?0:t},this.getBarLength=function(){var e=this.getMeterFraction();return e.num/e.den},this.getTotalTime=function(){return this.totalTime},this.getTotalBeats=function(){return this.totalBeats},this.millisecondsPerMeasure=function(e){var t;if(e)t=e;else{var r=this.metaText?this.metaText.tempo:null;t=this.getBpm(r)}return t<=0&&(t=1),this.getBeatsPerMeasure()/t*6e4},this.getBeatsPerMeasure=function(){var e=this.getBeatLength();return this.getBarLength()/e},this.getMeter=function(){for(var e=0;ee)return c}}return null},this.addElementToEvents=function(e,t,r,i,a,s,o,c,l,h){if(t.hint)return{isTiedState:void 0,duration:0};var u=t.durationClass?t.durationClass:t.duration;if(t.abcelem.rest&&"spacer"===t.abcelem.rest.type&&(u=0),u>0){for(var d=[],f=0;f0)for(var s=a.staffs[0],o=s.absoluteY,c=o-s.top*i.STEP,l=a.staffs[a.staffs.length-1],h=(o=l.absoluteY)-l.bottom*i.STEP-c,u=a.voices,d=0;d0&&o["event"+p]&&(w="event"+p),p=Math.round(1e3*f),"bar"===C.type){var S=C.abcelem.type,_="bar_right_repeat"===S||"bar_dbl_repeat"===S,E="1"===C.abcelem.startEnding,M="bar_left_repeat"===S||"bar_dbl_repeat"===S||"bar_right_repeat"===S;if(_){x>0&&(o[w].endX=C.x),-1===g&&(g=x);var N=0;y=-1;for(var A=m;A=0;a--){var s=e[a];"bar"===s.type?(s.top=n,s.nextTop=t,t=n,s.bottom=i,s.nextBottom=r,r=i):"event"===s.type&&(n=s.top,i=s.top+s.height)}}(s=function(e){var t=[];for(var r in e)e.hasOwnProperty(r)&&t.push(e[r]);return t.sort((function(e,t){var r=e.milliseconds-t.milliseconds;return 0!==r?r:"bar"===e.type?-1:1}))}(o)),function(e,r){if(!(r.length<1)){for(var n=0;ni.left&&(i.endX=Math.min(i.endX,s)):i.endX=s}}var o=r[r.length-1];o.endX=e[o.line].staffGroup.w}}(this.lines,s),s.push({type:"end",milliseconds:u}),this.addUsefulCallbackInfo(s,b*i),s},this.addUsefulCallbackInfo=function(e,t){for(var r=this.millisecondsPerMeasure(t),n=0;n0?e.duration[0]:r)/r}if(!t){t=180;var n=this.getMeterFraction();n&&3!==n.num&&n.num%3==0&&(t=120)}return t},this.setTiming=function(e,t){if(t=t||0,!this.engraver||!this.engraver.staffgroups)return console.log("setTiming cannot be called before the tune is drawn."),this.noteTimings=[],this.noteTimings;var r=this.metaText?this.metaText.tempo:null,n=this.getBpm(r),i=1;e?r&&(i=e/n):e=n;var a=this.getBeatLength(),s=e/60,o=this.getBarLength()/a*t/s;o&&(o-=this.getPickupLength()/a/s);var c=a*s;return this.noteTimings=this.setupEvents(o,c,e,i),this.noteTimings.length>0?(this.totalTime=this.noteTimings[this.noteTimings.length-1].milliseconds/1e3,this.totalBeats=this.totalTime*s):(this.totalTime=void 0,this.totalBeats=void 0),this.noteTimings},this.setUpAudio=function(e){e||(e={});var t=a(this,e);return s(t,e,this.formatting.percmap,this.formatting.midi)},this.deline=function(e){return o(this.lines,e)},this.findSelectableElement=function(e){return this.engraver&&this.engraver.selectables?this.engraver.findSelectableElement(e):null},this.getSelectableArray=function(){return this.engraver&&this.engraver.selectables?this.engraver.selectables:[]}}},351:function(e){function t(e,t){return"abselem"===e?"abselem":t}function r(e,t){e.el_type="meter",e.startChar=-1,e.endChar=-1;for(var r=0;r0&&(r===t||new RegExp("(^|\\s)"+t+"(\\s|$)").test(r))}(e,t)||(e.className+=(e.className?" ":"")+t),e},this.removeClassName=function(e,t){return e.className=n.strip(e.className.replace(new RegExp("(^|\\s+)"+t+"(\\s+|$)")," ")),e},this.setReadOnly=function(e){var t="abc_textarea_readonly",r=this.editarea.getElem();e?(r.setAttribute("readonly","yes"),this.addClassName(r,t)):(r.removeAttribute("readonly"),this.removeClassName(r,t))}};c.prototype.redrawMidi=function(){if(this.generate_midi&&!this.midiPause){var e=new window.CustomEvent("generateMidi",{detail:{tunes:this.tunes,abcjsParams:this.abcjsParams,downloadMidiEl:this.downloadMidi,inlineMidiEl:this.inlineMidi,engravingEl:this.div}});window.dispatchEvent(e)}if(this.synth){var t=this.synth.synthControl;this.synth.synthControl||(this.synth.synthControl=new i,this.synth.synthControl.load(this.synth.el,this.synth.cursorControl,this.synth.options)),this.synth.synthControl.setTune(this.tunes[0],t,this.synth.options)}},c.prototype.modelChanged=function(){if(!this.bReentry){this.bReentry=!0;try{this.timerId=null,this.synth&&this.synth.synthControl&&this.synth.synthControl.disable(!0),this.tunes=s(this.div,this.currentAbc,this.abcjsParams),this.tunes.length>0&&(this.warnings=this.tunes[0].warnings),this.redrawMidi()}catch(e){console.error("ABCJS error: ",e),this.warnings||(this.warnings=[]),this.warnings.push(e.message)}this.warningsdiv&&(this.warningsdiv.innerHTML=this.warnings?this.warnings.join("
"):"No errors"),this.updateSelection(),this.bReentry=!1}},c.prototype.paramChanged=function(e){if(e)for(var t in e)e.hasOwnProperty(t)&&(this.abcjsParams[t]=e[t]);this.currentAbc="",this.fireChanged()},c.prototype.synthParamChanged=function(e){if(this.synth){if(this.synth.options={},e)for(var t in e)e.hasOwnProperty(t)&&(this.synth.options[t]=e[t]);this.currentAbc="",this.fireChanged()}},c.prototype.parseABC=function(){var e=this.editarea.getString();return e===this.currentAbc?(this.updateSelection(),!1):(this.currentAbc=e,!0)},c.prototype.updateSelection=function(){var e=this.editarea.getSelection();try{this.tunes.length>0&&this.tunes[0].engraver&&this.tunes[0].engraver.rangeHighlight(e.start,e.end)}catch(e){}this.selectionChangeCallback&&this.selectionChangeCallback(e.start,e.end)},c.prototype.fireSelectionChanged=function(){this.updateSelection()},c.prototype.setDirtyStyle=function(e){if(void 0!==this.indicate_changed){var t,r,i="abc_textarea_dirty",a=this.editarea.getElem();e?function(e,t){var r=e.className;return r.length>0&&(r===t||new RegExp("(^|\\s)"+t+"(\\s|$)").test(r))}(t=a,r=i)||(t.className+=(t.className?" ":"")+r):function(e,t){e.className=n.strip(e.className.replace(new RegExp("(^|\\s+)"+t+"(\\s+|$)")," "))}(a,i)}},c.prototype.fireChanged=function(){if(!this.bIsPaused&&this.parseABC()){var e=this;this.timerId&&clearTimeout(this.timerId),this.timerId=setTimeout((function(){e.modelChanged()}),300);var t=this.isDirty();this.wasDirty!==t&&(this.wasDirty=t,this.setDirtyStyle(t)),this.onchangeCallback&&this.onchangeCallback(this)}},c.prototype.setNotDirty=function(){this.editarea.initialText=this.editarea.getString(),this.wasDirty=!1,this.setDirtyStyle(!1)},c.prototype.isDirty=function(){return void 0!==this.indicate_changed&&this.editarea.initialText!==this.editarea.getString()},c.prototype.highlight=function(e,t,r,n,i,a){this.editarea.setSelection(e.startChar,e.endChar),this.selectionChangeCallback&&this.selectionChangeCallback(e.startChar,e.endChar),this.clientClickListener&&this.clientClickListener(e,t,r,n,i,a)},c.prototype.pause=function(e){this.bIsPaused=e,e||this.fireChanged()},c.prototype.millisecondsPerMeasure=function(){return this.synth&&this.synth.synthControl&&this.synth.synthControl.visualObj?this.synth.synthControl.visualObj.millisecondsPerMeasure():0},c.prototype.pauseMidi=function(e){this.midiPause=e,e||this.redrawMidi()},e.exports=c},3284:function(e,t,r){var n,i=r(9991);!function(){"use strict";function e(e,t,r){for(var n=Object.keys(t),i=0;ia){var c=(n[s]-a)*r;e.addRest(c),a=n[s]}for(var l=0;l128&&(s=s.substring(0,124)+"...");var o=t.getKeySignature(),c=t.getMeterFraction(),l=n.tempo/60;a.setGlobalInfo(n.tempo,s,o,c);for(var h=0;hh&&(p=r.pan[h]),128===f.instrument?(a.setChannel(9,p),a.setInstrument(0)):(a.setChannel(f.channel,p),a.setInstrument(f.instrument));break;case"note":var m=f.gap*l,g=f.start,v=g+f.duration-m;u[g]||(u[g]=[]),u[g].push({pitch:f.pitch,volume:f.volume,cents:f.cents}),u[v]||(u[v]=[]),u[v].push({pitch:f.pitch,volume:0});break;default:console.log("MIDI create Unknown: "+f.cmd)}}e(a,u,1920),a.endTrack()}return a.getData()}}(),e.exports=n},5008:function(e){var t={clone:function(e){var t={};for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);return t},cloneArray:function(e){for(var r=[],n=0;n=0&&e.lastIndexOf(t)===r},last:function(e){return 0===e.length?null:e[e.length-1]}};e.exports=t},8905:function(e,t,r){var n=r(5008),i=r(8360),a=r(9928),s=r(6476),o=r(1881),c=r(1756),l=r(6780),h=r(575);e.exports=function(){"use strict";var e,t=new l,r=new h(t),u="",d="";function f(e,t,r){e.positioning||(e.positioning={}),e.positioning[t]=r}function p(e,t,r){e.fonts||(e.fonts={}),e.fonts[t]=r}this.getTune=function(){var e={formatting:t.formatting,lines:t.lines,media:t.media,metaText:t.metaText,metaTextInfo:t.metaTextInfo,version:t.version,addElementToEvents:t.addElementToEvents,addUsefulCallbackInfo:t.addUsefulCallbackInfo,getTotalTime:t.getTotalTime,getTotalBeats:t.getTotalBeats,getBarLength:t.getBarLength,getBeatLength:t.getBeatLength,getBeatsPerMeasure:t.getBeatsPerMeasure,getBpm:t.getBpm,getMeter:t.getMeter,getMeterFraction:t.getMeterFraction,getPickupLength:t.getPickupLength,getKeySignature:t.getKeySignature,getElementFromChar:t.getElementFromChar,makeVoicesArray:t.makeVoicesArray,millisecondsPerMeasure:t.millisecondsPerMeasure,setupEvents:t.setupEvents,setTiming:t.setTiming,setUpAudio:t.setUpAudio,deline:t.deline,findSelectableElement:t.findSelectableElement,getSelectableArray:t.getSelectableArray};return t.lineBreaks&&(e.lineBreaks=t.lineBreaks),t.visualTranspose&&(e.visualTranspose=t.visualTranspose),e};var m,g,v={reset:function(){for(var e in this)this.hasOwnProperty(e)&&"function"!=typeof this[e]&&delete this[e];this.iChar=0,this.key={accidentals:[],root:"none",acc:"",mode:""},this.meter=null,this.origMeter=null,this.hasMainTitle=!1,this.default_length=.125,this.clef={type:"treble",verticalPos:0},this.octave=0,this.next_note_duration=0,this.start_new_line=!0,this.is_in_header=!0,this.partForNextLine={},this.tempoForNextLine=[],this.havent_set_length=!0,this.voices={},this.staves=[],this.macros={},this.currBarNumber=1,this.barCounter={},this.ignoredDecorations=[],this.score_is_present=!1,this.inEnding=!1,this.inTie=[],this.inTieChord={},this.vocalPosition="auto",this.dynamicPosition="auto",this.chordPosition="auto",this.ornamentPosition="auto",this.volumePosition="auto",this.openSlurs=[],this.freegchord=!1,this.endingHoldOver={}},differentFont:function(e,t){return this[e].decoration!==t[e].decoration||this[e].face!==t[e].face||this[e].size!==t[e].size||this[e].style!==t[e].style||this[e].weight!==t[e].weight},addFormattingOptions:function(e,t,r){"note"===r?("auto"!==this.vocalPosition&&f(e,"vocalPosition",this.vocalPosition),"auto"!==this.dynamicPosition&&f(e,"dynamicPosition",this.dynamicPosition),"auto"!==this.chordPosition&&f(e,"chordPosition",this.chordPosition),"auto"!==this.ornamentPosition&&f(e,"ornamentPosition",this.ornamentPosition),"auto"!==this.volumePosition&&f(e,"volumePosition",this.volumePosition),this.differentFont("annotationfont",t)&&p(e,"annotationfont",this.annotationfont),this.differentFont("gchordfont",t)&&p(e,"gchordfont",this.gchordfont),this.differentFont("vocalfont",t)&&p(e,"vocalfont",this.vocalfont),this.differentFont("tripletfont",t)&&p(e,"tripletfont",this.tripletfont)):"bar"===r&&("auto"!==this.dynamicPosition&&f(e,"dynamicPosition",this.dynamicPosition),"auto"!==this.chordPosition&&f(e,"chordPosition",this.chordPosition),"auto"!==this.ornamentPosition&&f(e,"ornamentPosition",this.ornamentPosition),"auto"!==this.volumePosition&&f(e,"volumePosition",this.volumePosition),this.differentFont("measurefont",t)&&p(e,"measurefont",this.measurefont),this.differentFont("repeatfont",t)&&p(e,"repeatfont",this.repeatfont))},duplicateStartEndingHoldOvers:function(){this.endingHoldOver={inTie:[],inTieChord:{}};for(var e=0;e/g,">")},y=function(t,r,n){r||(r=" ");var i=r[n];" "!==i&&i||(i="SPACE");var a,s=b(r.substring(n-64,n))+''+i+""+b(r.substring(n+1).substring(0,64));!function(e){v.warnings||(v.warnings=[]),v.warnings.push(e)}("Music Line:"+e.lineIndex+":"+(n+1)+": "+t+": "+s),a={message:t,line:r,startChar:v.iChar+n,column:n},v.warningObjects||(v.warningObjects=[]),v.warningObjects.push(a)};this.getWarnings=function(){return v.warnings},this.getWarningObjects=function(){return v.warningObjects};var x=function(t,r){if(r.indexOf("")>=0)u+=r;else if(r=u+r,u="",t){"-"!==(r=n.strip(r))[r.length-1]&&(r+=" ");for(var i=[],a=0,s=!1,o=function(t){var o=n.strip(r.substring(a,t));if(o=o.replace(/\\([-_*|~])/g,"$1"),a=t+1,o.length>0){s&&(o=o.replace(/~/g," "));var c=r[t];return"_"!==c&&"-"!==c&&(c=" "),i.push({syllable:e.translateString(o),divider:c}),s=!1,!0}return!1},c=!1,l=0;l0&&(n.last(i).divider="-",i.push({skip:!0,to:"next"}));break;case"_":c||(o(l),i.push({skip:!0,to:"slur"}));break;case"*":c||(o(l),i.push({skip:!0,to:"next"}));break;case"|":c||(o(l),i.push({skip:!0,to:"bar"}));break;case"~":c||(s=!0)}c="\\"===r[l]}t.forEach((function(e){if(0!==i.length)if(i[0].skip){switch(i[0].to){case"next":case"slur":"note"===e.el_type&&null!==e.pitches&&i.shift();break;case"bar":"bar"===e.el_type&&i.shift()}"bar"!==e.el_type&&(void 0===e.lyric?e.lyric=[{syllable:"",divider:" "}]:e.lyric.push({syllable:"",divider:" "}))}else if("note"===e.el_type&&void 0===e.rest){var t=i.shift();t.syllable&&(t.syllable=t.syllable.replace(/ +/g," ")),void 0===e.lyric?e.lyric=[t]:e.lyric.push(t)}}))}else y("Can't add words before the first line of music",t,0)},k=function(t,r){if(r.indexOf("")>=0)d+=r;else if(r=d+r,d="",t){"-"!==(r=n.strip(r))[r.length-1]&&(r+=" ");for(var i=[],a=0,s=!1,o=function(t){var o=n.strip(r.substring(a,t));if(a=t+1,o.length>0){s&&(o=o.replace(/~/g," "));var c=r[t];return"_"!==c&&"-"!==c&&(c=" "),i.push({syllable:e.translateString(o),divider:c}),s=!1,!0}return!1},c=0;c0&&(n.last(i).divider="-",i.push({skip:!0,to:"next"}));break;case"_":o(c),i.push({skip:!0,to:"slur"});break;case"*":o(c),i.push({skip:!0,to:"next"});break;case"|":o(c),i.push({skip:!0,to:"bar"});break;case"~":s=!0}t.forEach((function(e){if(0!==i.length)if(i[0].skip)switch(i[0].to){case"next":case"slur":"note"===e.el_type&&null!==e.pitches&&i.shift();break;case"bar":"bar"===e.el_type&&i.shift()}else if("note"===e.el_type&&void 0===e.rest){var t=i.shift();void 0===e.lyric?e.lyric=[t]:e.lyric.push(t)}}))}else y("Can't add symbols before the first line of music",t,0)},w=function(e){if(n.startsWith(e,"%%")){var t=i.addDirective(e.substring(2));t&&y(t,e,2)}else{var a=e.indexOf("%");if(a>=0&&(e=e.substring(0,a)),0!==(e=e.replace(/\s+$/,"")).length)if(u)x(r.getCurrentVoice(),e.substring(2));else if(d)k(r.getCurrentVoice(),e.substring(2));else if(e.length<2||":"!==e[1]||g.lineContinuation)g.parseMusic(e);else{var s=m.parseHeader(e);s.regular&&g.parseMusic(e),s.newline&&g.startNewLine(),s.words&&x(r.getCurrentVoice(),e.substring(2)),s.symbols&&k(r.getCurrentVoice(),e.substring(2))}}};function C(e,t){e.push({el_type:"hint"});for(var r=0;r1){for(var b=1;b0&&"\n"!==p[b][0];)p[b]=p[b].substr(1),p[b-1]+=" ";l=p.join(" ")}var C=(l=l.replace(/\\([ \t]*)(%.*)*\n/g,(function(e,t,r){return t+""+(r?Array(r.length+1).join(" "):"")+"\n"}))).split("\n");0===n.last(C).length&&C.pop(),e=new o(C,v),m=new a(e,y,v,t,r),g=new s(e,y,v,t,r,m),h.print&&(t.media="print"),v.reset(),v.iChar=f,h.visualTranspose?(v.globalTranspose=parseInt(h.visualTranspose),0===v.globalTranspose?v.globalTranspose=void 0:r.setVisualTranspose(h.visualTranspose)):v.globalTranspose=void 0,h.lineBreaks&&(v.lineBreaks=h.lineBreaks),m.reset(e,y,v,t);try{h.format&&i.globalFormatting(h.format);for(var S=e.nextLine();S;){if(h.header_only&&!1===v.is_in_header)throw"normal_abort";if(h.stop_on_warning&&v.warnings)throw"normal_abort";var _=v.is_in_header;w(S),_&&!v.is_in_header&&(r.setRunningFont("annotationfont",v.annotationfont),r.setRunningFont("gchordfont",v.gchordfont),r.setRunningFont("tripletfont",v.tripletfont),r.setRunningFont("vocalfont",v.vocalfont)),S=e.nextLine()}u&&x(r.getCurrentVoice(),""),d&&k(r.getCurrentVoice(),""),v.openSlurs=r.cleanUp(v.barsperstaff,v.staffnonote,v.openSlurs)}catch(e){if("normal_abort"!==e)throw e}var E=792,M=612;switch(v.papersize){case"legal":E=1008,M=612;break;case"A4":E=842.4,M=597.6}if(v.landscape){var N=E;E=M,M=N}t.formatting.pagewidth||(t.formatting.pagewidth=M),t.formatting.pageheight||(t.formatting.pageheight=E),h.hint_measures&&function(){for(var e=0;e1&&!n.startsWith(o[0].abc,"X:")&&o.shift().abc.split("\n").forEach((function(e){n.startsWith(e,"%%")&&(t+=e+"\n")}));var c=t;return o.forEach((function(e){var r=e.abc.indexOf("\n\n");r>0&&(e.abc=e.abc.substring(0,r)),e.pure=e.abc,e.abc=t+e.abc,e.title="";var i=e.pure.split("T:");i.length>1&&(i=i[1].split("\n"),e.title=n.strip(i[0]));var a=e.pure.substring(2,e.pure.indexOf("\n"));e.id=n.strip(a)})),{header:c,tunes:o}}},8360:function(e,t,r){var n=r(5008),i={};!function(){"use strict";var e,t,r,a,s;i.initialize=function(n,i,o,c,l){e=n,t=i,a=c,s=l,(r=o).annotationfont={face:"Helvetica",size:12,weight:"normal",style:"normal",decoration:"none"},r.gchordfont={face:"Helvetica",size:12,weight:"normal",style:"normal",decoration:"none"},r.historyfont={face:'"Times New Roman"',size:16,weight:"normal",style:"normal",decoration:"none"},r.infofont={face:'"Times New Roman"',size:14,weight:"normal",style:"italic",decoration:"none"},r.measurefont={face:'"Times New Roman"',size:14,weight:"normal",style:"italic",decoration:"none"},r.partsfont={face:'"Times New Roman"',size:15,weight:"normal",style:"normal",decoration:"none"},r.repeatfont={face:'"Times New Roman"',size:13,weight:"normal",style:"normal",decoration:"none"},r.textfont={face:'"Times New Roman"',size:16,weight:"normal",style:"normal",decoration:"none"},r.tripletfont={face:"Times",size:11,weight:"normal",style:"italic",decoration:"none"},r.vocalfont={face:'"Times New Roman"',size:13,weight:"bold",style:"normal",decoration:"none"},r.wordsfont={face:'"Times New Roman"',size:16,weight:"normal",style:"normal",decoration:"none"},a.formatting.composerfont={face:'"Times New Roman"',size:14,weight:"normal",style:"italic",decoration:"none"},a.formatting.subtitlefont={face:'"Times New Roman"',size:16,weight:"normal",style:"normal",decoration:"none"},a.formatting.tempofont={face:'"Times New Roman"',size:15,weight:"bold",style:"normal",decoration:"none"},a.formatting.titlefont={face:'"Times New Roman"',size:20,weight:"normal",style:"normal",decoration:"none"},a.formatting.footerfont={face:'"Times New Roman"',size:12,weight:"normal",style:"normal",decoration:"none"},a.formatting.headerfont={face:'"Times New Roman"',size:12,weight:"normal",style:"normal",decoration:"none"},a.formatting.voicefont={face:'"Times New Roman"',size:13,weight:"bold",style:"normal",decoration:"none"},a.formatting.tablabelfont={face:'"Trebuchet MS"',size:16,weight:"normal",style:"normal",decoration:"none"},a.formatting.tabnumberfont={face:'"Arial"',size:11,weight:"normal",style:"normal",decoration:"none"},a.formatting.tabgracefont={face:'"Arial"',size:8,weight:"normal",style:"normal",decoration:"none"},a.formatting.annotationfont=r.annotationfont,a.formatting.gchordfont=r.gchordfont,a.formatting.historyfont=r.historyfont,a.formatting.infofont=r.infofont,a.formatting.measurefont=r.measurefont,a.formatting.partsfont=r.partsfont,a.formatting.repeatfont=r.repeatfont,a.formatting.textfont=r.textfont,a.formatting.tripletfont=r.tripletfont,a.formatting.vocalfont=r.vocalfont,a.formatting.wordsfont=r.wordsfont};var o={gchordfont:!0,measurefont:!0,partsfont:!0,annotationfont:!0,composerfont:!0,historyfont:!0,infofont:!0,subtitlefont:!0,textfont:!0,titlefont:!0,voicefont:!0},c=function(e,r,n,i,a){function s(){var s=parseInt(e[0].token);return e.shift(),r?0===e.length?{face:r.face,weight:r.weight,style:r.style,decoration:r.decoration,size:s}:1===e.length&&"box"===e[0].token&&o[a]?{face:r.face,weight:r.weight,style:r.style,decoration:r.decoration,size:s,box:!0}:(t("Extra parameters in font definition.",n,i),{face:r.face,weight:r.weight,style:r.style,decoration:r.decoration,size:s}):(t("Can't set just the size of the font since there is no default value.",n,i),{face:'"Times New Roman"',weight:"normal",style:"normal",decoration:"none",size:s})}if("*"===e[0].token){if(e.shift(),"number"===e[0].type)return s();t("Expected font size number after *.",n,i)}if("number"===e[0].type)return s();for(var c,l=[],h="normal",u="normal",d="none",f=!1,p="face",m=!1;e.length;){var g=e.shift(),v=g.token.toLowerCase();switch(p){case"face":m||"utf"!==v&&"number"!==g.type&&"bold"!==v&&"italic"!==v&&"underline"!==v&&"box"!==v?l.length>0&&"-"===g.token?(m=!0,l[l.length-1]=l[l.length-1]+g.token):m?(m=!1,l[l.length-1]=l[l.length-1]+g.token):l.push(g.token):"number"===g.type?(c?t("Font size specified twice in font definition.",n,i):c=g.token,p="modifier"):"bold"===v?h="bold":"italic"===v?u="italic":"underline"===v?d="underline":"box"===v?(o[a]?f=!0:t('This font style doesn\'t support "box"',n,i),p="finished"):"utf"===v?(g=e.shift(),p="size"):t("Unknown parameter "+g.token+" in font definition.",n,i);break;case"size":"number"===g.type?c?t("Font size specified twice in font definition.",n,i):c=g.token:t("Expected font size in font definition.",n,i),p="modifier";break;case"modifier":"bold"===v?h="bold":"italic"===v?u="italic":"underline"===v?d="underline":"box"===v?(o[a]?f=!0:t('This font style doesn\'t support "box"',n,i),p="finished"):t("Unknown parameter "+g.token+" in font definition.",n,i);break;case"finished":t('Extra characters found after "box" in font definition.',n,i)}}void 0===c?r?c=r.size:(t("Must specify the size of the font since there is no default value.",n,i),c=12):c=parseFloat(c),""===(l=l.join(" "))&&(r?l=r.face:(t("Must specify the name of the font since there is no default value.",n,i),l="sans-serif"));var b=function(e){switch(e){case"Arial-Italic":return{face:"Arial",weight:"normal",style:"italic",decoration:"none"};case"Arial-Bold":return{face:"Arial",weight:"bold",style:"normal",decoration:"none"};case"Bookman-Demi":return{face:"Bookman,serif",weight:"bold",style:"normal",decoration:"none"};case"Bookman-DemiItalic":return{face:"Bookman,serif",weight:"bold",style:"italic",decoration:"none"};case"Bookman-Light":return{face:"Bookman,serif",weight:"normal",style:"normal",decoration:"none"};case"Bookman-LightItalic":return{face:"Bookman,serif",weight:"normal",style:"italic",decoration:"none"};case"Courier":return{face:'"Courier New"',weight:"normal",style:"normal",decoration:"none"};case"Courier-Oblique":return{face:'"Courier New"',weight:"normal",style:"italic",decoration:"none"};case"Courier-Bold":return{face:'"Courier New"',weight:"bold",style:"normal",decoration:"none"};case"Courier-BoldOblique":return{face:'"Courier New"',weight:"bold",style:"italic",decoration:"none"};case"AvantGarde-Book":return{face:"AvantGarde,Arial",weight:"normal",style:"normal",decoration:"none"};case"AvantGarde-BookOblique":return{face:"AvantGarde,Arial",weight:"normal",style:"italic",decoration:"none"};case"AvantGarde-Demi":case"Avant-Garde-Demi":return{face:"AvantGarde,Arial",weight:"bold",style:"normal",decoration:"none"};case"AvantGarde-DemiOblique":return{face:"AvantGarde,Arial",weight:"bold",style:"italic",decoration:"none"};case"Helvetica-Oblique":return{face:"Helvetica",weight:"normal",style:"italic",decoration:"none"};case"Helvetica-Bold":return{face:"Helvetica",weight:"bold",style:"normal",decoration:"none"};case"Helvetica-BoldOblique":return{face:"Helvetica",weight:"bold",style:"italic",decoration:"none"};case"Helvetica-Narrow":return{face:'"Helvetica Narrow",Helvetica',weight:"normal",style:"normal",decoration:"none"};case"Helvetica-Narrow-Oblique":return{face:'"Helvetica Narrow",Helvetica',weight:"normal",style:"italic",decoration:"none"};case"Helvetica-Narrow-Bold":return{face:'"Helvetica Narrow",Helvetica',weight:"bold",style:"normal",decoration:"none"};case"Helvetica-Narrow-BoldOblique":return{face:'"Helvetica Narrow",Helvetica',weight:"bold",style:"italic",decoration:"none"};case"Palatino-Roman":return{face:"Palatino",weight:"normal",style:"normal",decoration:"none"};case"Palatino-Italic":return{face:"Palatino",weight:"normal",style:"italic",decoration:"none"};case"Palatino-Bold":return{face:"Palatino",weight:"bold",style:"normal",decoration:"none"};case"Palatino-BoldItalic":return{face:"Palatino",weight:"bold",style:"italic",decoration:"none"};case"NewCenturySchlbk-Roman":return{face:'"New Century",serif',weight:"normal",style:"normal",decoration:"none"};case"NewCenturySchlbk-Italic":return{face:'"New Century",serif',weight:"normal",style:"italic",decoration:"none"};case"NewCenturySchlbk-Bold":return{face:'"New Century",serif',weight:"bold",style:"normal",decoration:"none"};case"NewCenturySchlbk-BoldItalic":return{face:'"New Century",serif',weight:"bold",style:"italic",decoration:"none"};case"Times":case"Times-Roman":case"Times-Narrow":case"Times-Courier":case"Times-New-Roman":return{face:'"Times New Roman"',weight:"normal",style:"normal",decoration:"none"};case"Times-Italic":case"Times-Italics":return{face:'"Times New Roman"',weight:"normal",style:"italic",decoration:"none"};case"Times-Bold":return{face:'"Times New Roman"',weight:"bold",style:"normal",decoration:"none"};case"Times-BoldItalic":return{face:'"Times New Roman"',weight:"bold",style:"italic",decoration:"none"};case"ZapfChancery-MediumItalic":return{face:'"Zapf Chancery",cursive,serif',weight:"normal",style:"normal",decoration:"none"};default:return null}}(l),y={};return b?(y.face=b.face,y.weight=b.weight,y.style=b.style,y.decoration=b.decoration,y.size=c,f&&(y.box=!0),y):(y.face=l,y.weight=h,y.style=u,y.decoration=d,y.size=c,f&&(y.box=!0),y)},l=function(e,t,n){return 0===t.length?'Directive "'+e+'" requires a font as a parameter.':(r[e]=c(t,r[e],n,0,e),r.is_in_header&&(a.formatting[e]=r[e]),null)},h=function(e,t){var r="";t.forEach((function(e){r+=e.token}));var n=parseFloat(r);if(isNaN(n)||0===n)return'Directive "'+e+'" requires a number as a parameter.';a.formatting.scale=n},u=["acoustic-bass-drum","bass-drum-1","side-stick","acoustic-snare","hand-clap","electric-snare","low-floor-tom","closed-hi-hat","high-floor-tom","pedal-hi-hat","low-tom","open-hi-hat","low-mid-tom","hi-mid-tom","crash-cymbal-1","high-tom","ride-cymbal-1","chinese-cymbal","ride-bell","tambourine","splash-cymbal","cowbell","crash-cymbal-2","vibraslap","ride-cymbal-2","hi-bongo","low-bongo","mute-hi-conga","open-hi-conga","low-conga","high-timbale","low-timbale","high-agogo","low-agogo","cabasa","maracas","short-whistle","long-whistle","short-guiro","long-guiro","claves","hi-wood-block","low-wood-block","mute-cuica","open-cuica","mute-triangle","open-triangle"],d=function(e,t,n,i,a){if(1!==n.length||"number"!==n[0].type)return'Directive "'+t+'" requires a number as a parameter.';var s=n[0].intt;return void 0!==i&&sa?'Directive "'+t+'" requires a number less than or equal to '+a+" as a parameter.":(r[e]=s,null)},f=function(e,t,n){if(1===n.length&&("true"===n[0].token||"false"===n[0].token))return r[e]="true"===n[0].token,null;var i=d(e,t,n,0,1);return null!==i?i:(r[e]=1===r[e],null)},p=function(e,t,n,i){if(1!==n.length)return'Directive "'+t+'" requires one of [ '+i.join(", ")+" ] as a parameter.";for(var a=n[0].token,s=!1,o=0;!s&&o1&&r.setfont){var n=[];""!==t[0]&&n.push({text:t[0]});for(var i=1;i=0||e[0].floatt<=1)return{value:e[0].floatt}}else{if("false"===e[0].token)return{value:0};if("true"===e[0].token)return{value:1}}return{error:"Directive stretchlast requires zero or one parameter: false, true, or number between 0 and 1 (received "+e[0].token+")"}}i.addDirective=function(o){var E=e.tokenize(o,0,o.length);if(0===E.length||"alpha"!==E[0].type)return null;var M=o.substring(o.indexOf(E[0].token)+E[0].token.length);M=e.stripComment(M);var N,A=E.shift().token.toLowerCase(),B="";switch(A){case"bagpipes":a.formatting.bagpipes=!0;break;case"flatbeams":a.formatting.flatbeams=!0;break;case"jazzchords":a.formatting.jazzchords=!0;break;case"accentAbove":a.formatting.accentAbove=!0;break;case"germanAlphabet":a.formatting.germanAlphabet=!0;break;case"landscape":r.landscape=!0;break;case"papersize":r.papersize=M;break;case"graceslurs":if(1!==E.length)return"Directive graceslurs requires one parameter: 0 or 1";if("0"===E[0].token||"false"===E[0].token)a.formatting.graceSlurs=!1;else{if("1"!==E[0].token&&"true"!==E[0].token)return"Directive graceslurs requires one parameter: 0 or 1 (received "+E[0].token+")";a.formatting.graceSlurs=!0}break;case"lineThickness":var P=_(E);if(void 0!==P.value&&(a.formatting.lineThickness=P.value),P.error)return P.error;break;case"stretchlast":var L=_(E);if(void 0!==L.value&&(a.formatting.stretchlast=L.value),L.error)return L.error;break;case"titlecaps":r.titlecaps=!0;break;case"titleleft":a.formatting.titleleft=!0;break;case"measurebox":a.formatting.measurebox=!0;break;case"vocal":return p("vocalPosition",A,E,S);case"dynamic":return p("dynamicPosition",A,E,S);case"gchord":return p("chordPosition",A,E,S);case"ornament":return p("ornamentPosition",A,E,S);case"volume":return p("volumePosition",A,E,S);case"botmargin":case"botspace":case"composerspace":case"indent":case"leftmargin":case"linesep":case"musicspace":case"partsspace":case"pageheight":case"pagewidth":case"rightmargin":case"stafftopmargin":case"staffsep":case"staffwidth":case"subtitlespace":case"sysstaffsep":case"systemsep":case"textspace":case"titlespace":case"topmargin":case"topspace":case"vocalspace":case"wordsspace":return function(t,r){var n=e.getMeasurement(r);return 0===n.used||0!==r.length?'Directive "'+t+'" requires a measurement as a parameter.':(a.formatting[t]=n.value,null)}(A,E);case"voicescale":if(1!==E.length||"number"!==E[0].type)return"voicescale requires one float as a parameter";var O=E.shift();return r.currentVoice&&(r.currentVoice.scale=O.floatt,s.changeVoiceScale(r.currentVoice.scale)),null;case"voicecolor":if(1!==E.length)return"voicecolor requires one string as a parameter";var H=E.shift();return r.currentVoice&&(r.currentVoice.color=H.token,s.changeVoiceColor(r.currentVoice.color)),null;case"vskip":var z=Math.round(function(t,r){var n=e.getMeasurement(r);return 0===n.used||0!==r.length?{error:'Directive "'+t+'" requires a measurement as a parameter.'}:n.value}(A,E));return z.error?z.error:(s.addSpacing(z),null);case"scale":h(A,E);break;case"sep":if(0===E.length)s.addSeparator(14,14,85,{startChar:r.iChar,endChar:r.iChar+5});else{var F=e.getMeasurement(E);if(0===F.used)return'Directive "'+A+'" requires 3 numbers: space above, space below, length of line';var D=F.value;if(0===(F=e.getMeasurement(E)).used)return'Directive "'+A+'" requires 3 numbers: space above, space below, length of line';var I=F.value;if(0===(F=e.getMeasurement(E)).used||0!==E.length)return'Directive "'+A+'" requires 3 numbers: space above, space below, length of line';var j=F.value;s.addSeparator(D,I,j,{startChar:r.iChar,endChar:r.iChar+M.length})}break;case"barsperstaff":if(null!==(B=d("barsperstaff",A,E)))return B;break;case"staffnonote":if(1!==E.length)return"Directive staffnonote requires one parameter: 0 or 1";if("0"===E[0].token)r.staffnonote=!0;else{if("1"!==E[0].token)return"Directive staffnonote requires one parameter: 0 or 1 (received "+E[0].token+")";r.staffnonote=!1}break;case"printtempo":if(null!==(B=f("printTempo",A,E)))return B;break;case"partsbox":if(null!==(B=f("partsBox",A,E)))return B;r.partsfont.box=r.partsBox;break;case"freegchord":if(null!==(B=f("freegchord",A,E)))return B;break;case"measurenb":case"barnumbers":if(null!==(B=d("barNumbers",A,E)))return B;break;case"setbarnb":if(1!==E.length||"number"!==E[0].type)return"Directive setbarnb requires a number as a parameter.";r.currBarNumber=s.setBarNumberImmediate(E[0].intt);break;case"begintext":var V="";for(N=e.nextLine();N&&0!==N.indexOf("%%endtext");)n.startsWith(N,"%%")?V+=N.substring(2)+"\n":V+=N+"\n",N=e.nextLine();s.addText(V,{startChar:r.iChar,endChar:r.iChar+V.length+7});break;case"continueall":r.continueall=!0;break;case"beginps":for(N=e.nextLine();N&&0!==N.indexOf("%%endps");)e.nextLine();t("Postscript ignored",o,0);break;case"deco":M.length>0&&r.ignoredDecorations.push(M.substring(0,M.indexOf(" "))),t("Decoration redefinition ignored",o,0);break;case"text":var Y=e.translateString(M);s.addText(i.parseFontChangeLine(Y),{startChar:r.iChar,endChar:r.iChar+M.length+7});break;case"center":var G=e.translateString(M);s.addCentered(i.parseFontChangeLine(G));break;case"font":break;case"setfont":var q=e.tokenize(M,0,M.length);if(q.length>=4&&"-"===q[0].token&&"number"===q[1].type){var W=parseInt(q[1].token);W>=1&&W<=9&&(r.setfont||(r.setfont=[]),q.shift(),q.shift(),r.setfont[W]=c(q,r.setfont[W],o,0,"setfont"))}break;case"gchordfont":case"partsfont":case"tripletfont":case"vocalfont":case"textfont":case"annotationfont":case"historyfont":case"infofont":case"measurefont":case"repeatfont":case"wordsfont":return l(A,E,o);case"composerfont":case"subtitlefont":case"tempofont":case"titlefont":case"voicefont":case"footerfont":case"headerfont":return function(e,t,r){return 0===t.length?'Directive "'+e+'" requires a font as a parameter.':(a.formatting[e]=c(t,a.formatting[e],r,0,e),null)}(A,E,o);case"barlabelfont":case"barnumberfont":case"barnumfont":return l("measurefont",E,o);case"staves":case"score":r.score_is_present=!0;for(var R,X=function(e,t,i,a,s){(t||0===r.staves.length)&&r.staves.push({index:r.staves.length,numVoices:0});var o=n.last(r.staves);void 0!==i&&void 0===o.bracket&&(o.bracket=i),void 0!==a&&void 0===o.brace&&(o.brace=a),s&&(o.connectBarLines="end"),void 0===r.voices[e]&&(r.voices[e]={staffNum:o.index,index:o.numVoices},o.numVoices++)},U=!1,K=!1,$=!1,Q=!1,J=!1,Z=!1,ee=!1,te=function(){if(ee=!0,R){var e="start";R.staffNum>0&&("start"!==r.staves[R.staffNum-1].connectBarLines&&"continue"!==r.staves[R.staffNum-1].connectBarLines||(e="continue")),r.staves[R.staffNum].connectBarLines=e}};E.length;){var re=E.shift();switch(re.token){case"(":U?t("Can't nest parenthesis in %%score",o,re.start):(U=!0,Q=!0);break;case")":!U||Q?t("Unexpected close parenthesis in %%score",o,re.start):U=!1;break;case"[":K?t("Can't nest brackets in %%score",o,re.start):(K=!0,J=!0);break;case"]":!K||J?t("Unexpected close bracket in %%score",o,re.start):(K=!1,r.staves[R.staffNum].bracket="end");break;case"{":$?t("Can't nest braces in %%score",o,re.start):($=!0,Z=!0);break;case"}":!$||Z?t("Unexpected close brace in %%score",o,re.start):($=!1,r.staves[R.staffNum].brace="end");break;case"|":te();break;default:for(var ne="";("alpha"===re.type||"number"===re.type)&&(ne+=re.token,re.continueId);)re=E.shift();X(ne,!U||Q,J?"start":K?"continue":void 0,Z?"start":$?"continue":void 0,ee),Q=!1,J=!1,Z=!1,ee=!1,R=r.voices[ne],"staves"===A&&te()}}break;case"newpage":var ie=e.getInt(M);s.addNewPage(0===ie.digits?-1:ie.value);break;case"abc":var ae=M.split(" ");switch(ae[0]){case"-copyright":case"-creator":case"-edited-by":case"-version":case"-charset":var se=ae.shift();s.addMetaText(A+se,ae.join(" "),{startChar:r.iChar,endChar:r.iChar+M.length+5});break;default:return"Unknown directive: "+A+ae[0]}break;case"header":case"footer":var oe=e.getMeat(M,0,M.length);'"'===(oe=M.substring(oe.start,oe.end))[0]&&'"'===oe[oe.length-1]&&(oe=oe.substring(1,oe.length-1));var ce=oe.split("\t"),le={};le=1===ce.length?{left:"",center:ce[0],right:""}:2===ce.length?{left:ce[0],center:ce[1],right:""}:{left:ce[0],center:ce[1],right:ce[2]},ce.length>3&&t("Too many tabs in "+A+": "+ce.length+" found.",M,0),s.addMetaTextObj(A,le,{startChar:r.iChar,endChar:r.iChar+o.length});break;case"midi":var he=e.tokenize(M,0,M.length,!0);he.length>0&&"="===he[0].token&&he.shift(),0===he.length?t("Expected midi command",M,0):function(e,r,n){var i=e.shift().token,a=[];if(m.indexOf(i)>=0)0!==e.length&&t("Unexpected parameter in MIDI "+i,n,0);else if(g.indexOf(i)>=0)1!==e.length?t("Expected one parameter in MIDI "+i,n,0):a.push(e[0].token);else if(v.indexOf(i)>=0)1!==e.length?t("Expected one parameter in MIDI "+i,n,0):"number"!==e[0].type?t("Expected one integer parameter in MIDI "+i,n,0):a.push(e[0].intt);else if(b.indexOf(i)>=0)1!==e.length&&2!==e.length?t("Expected one or two parameters in MIDI "+i,n,0):"number"!==e[0].type||2===e.length&&"number"!==e[1].type?t("Expected integer parameter in MIDI "+i,n,0):(a.push(e[0].intt),2===e.length&&a.push(e[1].intt));else if(y.indexOf(i)>=0)2!==e.length?t("Expected two parameters in MIDI "+i,n,0):"number"!==e[0].type||"number"!==e[1].type?t("Expected two integer parameters in MIDI "+i,n,0):(a.push(e[0].intt),a.push(e[1].intt));else if(w.indexOf(i)>=0)2!==e.length?t("Expected two parameters in MIDI "+i,n,0):"alpha"!==e[0].type||"number"!==e[1].type?t("Expected one string and one integer parameters in MIDI "+i,n,0):(a.push(e[0].token),a.push(e[1].intt));else if("drummap"===i)2===e.length&&"alpha"===e[0].type&&"number"===e[1].type?(r.formatting||(r.formatting={}),r.formatting.midi||(r.formatting.midi={}),r.formatting.midi.drummap||(r.formatting.midi.drummap={}),r.formatting.midi.drummap[e[0].token]=e[1].intt,a=r.formatting.midi.drummap):3===e.length&&"punct"===e[0].type&&"alpha"===e[1].type&&"number"===e[2].type?(r.formatting||(r.formatting={}),r.formatting.midi||(r.formatting.midi={}),r.formatting.midi.drummap||(r.formatting.midi.drummap={}),r.formatting.midi.drummap[e[0].token+e[1].token]=e[2].intt,a=r.formatting.midi.drummap):t("Expected one note name and one integer parameter in MIDI "+i,n,0);else if(C.indexOf(i)>=0)3!==e.length||"number"!==e[0].type||"/"!==e[1].token||"number"!==e[2].type?t("Expected fraction parameter in MIDI "+i,n,0):(a.push(e[0].intt),a.push(e[2].intt));else if(x.indexOf(i)>=0)4!==e.length?t("Expected four parameters in MIDI "+i,n,0):"number"!==e[0].type||"number"!==e[1].type||"number"!==e[2].type||"number"!==e[3].type?t("Expected four integer parameters in MIDI "+i,n,0):(a.push(e[0].intt),a.push(e[1].intt),a.push(e[2].intt),a.push(e[3].intt));else if(k.indexOf(i)>=0)5!==e.length?t("Expected five parameters in MIDI "+i,n,0):"number"!==e[0].type||"number"!==e[1].type||"number"!==e[2].type||"number"!==e[3].type||"number"!==e[4].type?t("Expected five integer parameters in MIDI "+i,n,0):(a.push(e[0].intt),a.push(e[1].intt),a.push(e[2].intt),a.push(e[3].intt),a.push(e[4].intt));else if(b.indexOf(i)>=0)1!==e.length||4!==e.length?t("Expected one or two parameters in MIDI "+i,n,0):"number"!==e[0].type?t("Expected integer parameter in MIDI "+i,n,0):4===e.length?("octave"!==e[1].token&&t("Expected octave parameter in MIDI "+i,n,0),"="!==e[2].token&&t("Expected octave parameter in MIDI "+i,n,0),"number"!==e[3].type&&t("Expected integer parameter for octave in MIDI "+i,n,0)):(a.push(e[0].intt),4===e.length&&a.push(e[3].intt));else if(T.indexOf(i)>=0)if(e.length<2)t("Expected string parameter and at least one integer parameter in MIDI "+i,n,0);else if("alpha"!==e[0].type)t("Expected string parameter and at least one integer parameter in MIDI "+i,n,0);else{var o=e.shift();for(a.push(o.token);e.length>0;)"number"!==(o=e.shift()).type&&t("Expected integer parameter in MIDI "+i,n,0),a.push(o.intt)}s.hasBeginMusic()?s.appendElement("midi",-1,-1,{cmd:i,params:a}):(void 0===r.formatting.midi&&(r.formatting.midi={}),r.formatting.midi[i]=a)}(he,a,M);break;case"percmap":var ue=function(e){var t=e.split(/\s+/);if(2!==t.length&&3!==t.length)return{error:'Expected parameters "abc-note", "drum-sound", and optionally "note-head"'};var r=t[0],n=parseInt(t[1],10);if((isNaN(n)||n<35||n>81)&&t[1]&&(n=u.indexOf(t[1].toLowerCase())+35),isNaN(n)||n<35||n>81)return{error:'Expected drum name, received "'+t[1]+'"'};var i={sound:n};return 3===t.length&&(i.noteHead=t[2]),{key:r,value:i}}(M);ue.error?t(ue.error,o,8):(a.formatting.percmap||(a.formatting.percmap={}),a.formatting.percmap[ue.key]=ue.value);break;case"map":case"playtempo":case"auquality":case"continuous":case"nobarcheck":a.formatting[A]=M;break;default:return"Unknown directive: "+A}return null},i.globalFormatting=function(n){for(var i in n)if(n.hasOwnProperty(i)){var s,o=""+n[i],c=e.tokenize(o,0,o.length);switch(i){case"titlefont":case"gchordfont":case"composerfont":case"footerfont":case"headerfont":case"historyfont":case"infofont":case"measurefont":case"partsfont":case"repeatfont":case"subtitlefont":case"tempofont":case"textfont":case"voicefont":case"tripletfont":case"vocalfont":case"wordsfont":case"annotationfont":case"tablabelfont":case"tabnumberfont":case"tabgracefont":l(i,c,o);break;case"scale":h(i,c);break;case"partsbox":null!==(s=f("partsBox",i,c))&&t(s),r.partsfont.box=r.partsBox;break;case"freegchord":null!==(s=f("freegchord",i,c))&&t(s);break;case"fontboxpadding":1===c.length&&"number"===c[0].type||t('Directive "'+i+'" requires a number as a parameter.'),a.formatting.fontboxpadding=c[0].floatt;break;case"stafftopmargin":1===c.length&&"number"===c[0].type||t('Directive "'+i+'" requires a number as a parameter.'),a.formatting.stafftopmargin=c[0].floatt;break;case"stretchlast":var u=_(c);if(void 0!==u.value&&(a.formatting.stretchlast=u.value),u.error)return u.error;break;default:t("Formatting directive unrecognized: ",i,0)}}}}(),e.exports=i},9928:function(e,t,r){var n=r(5008),i=r(8360),a=r(9708);e.exports=function(e,t,r,s,o){this.reset=function(e,t,r,n){a.initialize(e,t,r,n,o),i.initialize(e,t,r,n,o)},this.reset(e,t,r,s),this.setTitle=function(e,t){r.hasMainTitle?o.addSubtitle(e,{startChar:r.iChar,endChar:r.iChar+t+2}):(o.addMetaText("title",e,{startChar:r.iChar,endChar:r.iChar+t+2}),r.hasMainTitle=!0)},this.setMeter=function(n){if("C"===(n=e.stripComment(n)))return!0===r.havent_set_length&&(r.default_length=.125,r.havent_set_length=!1),{type:"common_time"};if("C|"===n)return!0===r.havent_set_length&&(r.default_length=.125,r.havent_set_length=!1),{type:"cut_time"};if("o"===n)return!0===r.havent_set_length&&(r.default_length=.125,r.havent_set_length=!1),{type:"tempus_perfectum"};if("c"===n)return!0===r.havent_set_length&&(r.default_length=.125,r.havent_set_length=!1),{type:"tempus_imperfectum"};if("o."===n)return!0===r.havent_set_length&&(r.default_length=.125,r.havent_set_length=!1),{type:"tempus_perfectum_prolatio"};if("c."===n)return!0===r.havent_set_length&&(r.default_length=.125,r.havent_set_length=!1),{type:"tempus_imperfectum_prolatio"};if(0===n.length||"none"===n.toLowerCase())return!0===r.havent_set_length&&(r.default_length=.125,r.havent_set_length=!1),null;var i=e.tokenize(n,0,n.length);try{var a=function(){var e=function(){var e={value:0,num:""},t=i.shift();for("("===t.token&&(t=i.shift());;){if("number"!==t.type)throw"Expected top number of meter";if(e.value+=parseInt(t.token),e.num+=t.token,0===i.length||"/"===i[0].token)return e;if(")"===(t=i.shift()).token){if(0===i.length||"/"===i[0].token)return e;throw"Unexpected paren in meter"}if("."!==t.token&&"+"!==t.token)throw"Expected top number of meter";if(e.num+=t.token,0===i.length)throw"Expected top number of meter";t=i.shift()}return e}();if(0===i.length)return e;var t=i.shift();if("/"!==t.token)throw"Expected slash in meter";if("number"!==(t=i.shift()).type)throw"Expected bottom number of meter";return e.den=t.token,e.value=e.value/parseInt(e.den),e};if(0===i.length)throw"Expected meter definition in M: line";for(var s={type:"specified",value:[]},o=0;;){var c=a();o+=c.value;var l={num:c.num};if(void 0!==c.den&&(l.den=c.den),s.value.push(l),0===i.length)break}return!0===r.havent_set_length&&(r.default_length=o<.75?.0625:.125,r.havent_set_length=!1),s}catch(e){t(e,n,0)}return null},this.calcTempo=function(e){var t=1/4;r.meter&&"specified"===r.meter.type?t=1/parseInt(r.meter.value[0].den):r.origMeter&&"specified"===r.origMeter.type&&(t=1/parseInt(r.origMeter.value[0].den));for(var n=0;n0&&(r.default_length=a/s,r.havent_set_length=!1)}else 1===i.length&&"1"===i[0]&&(r.default_length=1,r.havent_set_length=!1)};var c={larghissimo:20,adagissimo:24,sostenuto:28,grave:32,largo:40,lento:50,larghetto:60,adagio:68,adagietto:74,andante:80,andantino:88,"marcia moderato":84,"andante moderato":100,moderato:112,allegretto:116,"allegro moderato":120,allegro:126,animato:132,agitato:140,veloce:148,"mosso vivo":156,vivace:164,vivacissimo:172,allegrissimo:176,presto:184,prestissimo:210};this.setTempo=function(n,i,a,s){try{var o=e.tokenize(n,i,a);if(0===o.length)throw"Missing parameter in Q: field";var l={startChar:s+i-2,endChar:s+a},h=!0,u=o.shift();if("quote"===u.type&&(l.preString=u.token,u=o.shift(),0===o.length))return c[l.preString.toLowerCase()]&&(l.bpm=c[l.preString.toLowerCase()],l.suppressBpm=!0),{type:"immediate",tempo:l};if("alpha"===u.type&&"C"===u.token){if(0===o.length)throw"Missing tempo after C in Q: field";if("punct"===(u=o.shift()).type&&"="===u.token){if(0===o.length)throw"Missing tempo after = in Q: field";if("number"!==(u=o.shift()).type)throw"Expected number after = in Q: field";l.duration=[1],l.bpm=parseInt(u.token)}else{if("number"!==u.type)throw"Expected number or equal after C in Q: field";if(l.duration=[parseInt(u.token)],0===o.length)throw"Missing = after duration in Q: field";if("punct"!==(u=o.shift()).type||"="!==u.token)throw"Expected = after duration in Q: field";if(0===o.length)throw"Missing tempo after = in Q: field";if("number"!==(u=o.shift()).type)throw"Expected number after = in Q: field";l.bpm=parseInt(u.token)}}else{if("number"!==u.type)throw"Unknown value in Q: field";var d=parseInt(u.token);if(0===o.length||"quote"===o[0].type)l.duration=[1],l.bpm=d;else{if(h=!1,"punct"!==(u=o.shift()).type&&"/"!==u.token)throw"Expected fraction in Q: field";if("number"!==(u=o.shift()).type)throw"Expected fraction in Q: field";var f=parseInt(u.token);for(l.duration=[d/f];o.length>0&&"="!==o[0].token&&"quote"!==o[0].type;){if("number"!==(u=o.shift()).type)throw"Expected fraction in Q: field";if(d=parseInt(u.token),"punct"!==(u=o.shift()).type&&"/"!==u.token)throw"Expected fraction in Q: field";if("number"!==(u=o.shift()).type)throw"Expected fraction in Q: field";f=parseInt(u.token),l.duration.push(d/f)}if("punct"!==(u=o.shift()).type&&"="!==u.token)throw"Expected = in Q: field";if("number"!==(u=o.shift()).type)throw"Expected tempo in Q: field";l.bpm=parseInt(u.token)}}if(0!==o.length&&("quote"===(u=o.shift()).type&&(l.postString=u.token,u=o.shift()),0!==o.length))throw"Unexpected string at end of Q: field";return!1===r.printTempo&&(l.suppress=!0),{type:h?"delaySet":"immediate",tempo:l}}catch(e){return t(e,n,i),{type:"none"}}},this.letter_to_inline_header=function(n,c,l){var h=e.eatWhiteSpace(n,c);if(c+=h,n.length>=c+5&&"["===n[c]&&":"===n[c+2]){var u=n.indexOf("]",c),d=r.iChar+c,f=r.iChar+u+1;switch(n.substring(c,c+3)){case"[I:":var p=i.addDirective(n.substring(c+3,u));return p&&t(p,n,c),[u-c+1+h];case"[M:":var m=this.setMeter(n.substring(c+3,u));return o.hasBeginMusic()&&m?o.appendStartingElement("meter",d,f,m):r.meter=m,[u-c+1+h];case"[K:":var g=a.parseKey(n.substring(c+3,u),!0);return g.foundClef&&o.hasBeginMusic()&&o.appendStartingElement("clef",d,f,r.clef),g.foundKey&&o.hasBeginMusic()&&o.appendStartingElement("key",d,f,a.fixKey(r.clef,r.key)),[u-c+1+h];case"[P:":var v=i.parseFontChangeLine(n.substring(c+3,u));return l||s.lines.length<=s.lineNum?r.partForNextLine={title:v,startChar:d,endChar:f}:o.appendElement("part",d,f,{title:v}),[u-c+1+h];case"[L:":return this.setDefaultLength(n,c+3,u),[u-c+1+h];case"[Q:":if(u>0){var b=this.setTempo(n,c+3,u,r.iChar);return"delaySet"===b.type?o.hasBeginMusic()?o.appendElement("tempo",d,f,this.calcTempo(b.tempo)):r.tempoForNextLine=["tempo",d,f,this.calcTempo(b.tempo)]:"immediate"===b.type&&(!l&&o.hasBeginMusic()?o.appendElement("tempo",d,f,b.tempo):r.tempoForNextLine=["tempo",d,f,b.tempo]),[u-c+1+h,n[c+1],n.substring(c+3,u)]}break;case"[V:":if(u>0)return a.parseVoice(n,c+3,u),[u-c+1+h,n[c+1],n.substring(c+3,u)];break;case"[r:":return[u-c+1+h]}}return[0]},this.letter_to_body_header=function(e,s){if(e.length>=s+3)switch(e.substring(s,s+2)){case"I:":var c=i.addDirective(e.substring(s+2));return c&&t(c,e,s),[e.length];case"M:":var l=this.setMeter(e.substring(s+2));return o.hasBeginMusic()&&l&&o.appendStartingElement("meter",r.iChar+s,r.iChar+e.length,l),[e.length];case"K:":var h=a.parseKey(e.substring(s+2),o.hasBeginMusic());return h.foundClef&&o.hasBeginMusic()&&o.appendStartingElement("clef",r.iChar+s,r.iChar+e.length,r.clef),h.foundKey&&o.hasBeginMusic()&&o.appendStartingElement("key",r.iChar+s,r.iChar+e.length,a.fixKey(r.clef,r.key)),[e.length];case"P:":return o.hasBeginMusic()&&o.appendElement("part",r.iChar+s,r.iChar+e.length,{title:e.substring(s+2)}),[e.length];case"L:":return this.setDefaultLength(e,s+2,e.length),[e.length];case"Q:":var u=e.indexOf("",s+2);-1===u&&(u=e.length);var d=this.setTempo(e,s+2,u,r.iChar);return"delaySet"===d.type?o.appendElement("tempo",r.iChar+s,r.iChar+e.length,this.calcTempo(d.tempo)):"immediate"===d.type&&o.appendElement("tempo",r.iChar+s,r.iChar+e.length,d.tempo),[u,e[s],n.strip(e.substring(s+2))];case"V:":return a.parseVoice(e,s+2,e.length),[e.length,e[s],n.strip(e.substring(s+2))]}return[0]};var l={A:"author",B:"book",C:"composer",D:"discography",F:"url",G:"group",I:"instruction",N:"notes",O:"origin",R:"rhythm",S:"source",W:"unalignedWords",Z:"transcription"};this.parseHeader=function(n){var c=l[n[0]],h=n.length-2,u=e.translateString(e.stripComment(n.substring(2)));if("unalignedWords"===c||"notes"===c)o.addMetaTextArray(c,i.parseFontChangeLine(u),{startChar:r.iChar,endChar:r.iChar+n.length});else if(void 0!==c)o.addMetaText(c,i.parseFontChangeLine(u),{startChar:r.iChar,endChar:r.iChar+n.length});else{var d=r.iChar,f=d+n.length;switch(n[0]){case"H":for(o.addMetaTextArray("history",i.parseFontChangeLine(u),{startChar:r.iChar,endChar:r.iChar+n.length}),n=e.peekLine();n&&":"!==n[1];)e.nextLine(),o.addMetaTextArray("history",i.parseFontChangeLine(e.translateString(e.stripComment(n))),{startChar:r.iChar,endChar:r.iChar+n.length}),n=e.peekLine();break;case"K":this.resolveTempo();var p=a.parseKey(n.substring(2),!1);!r.is_in_header&&o.hasBeginMusic()&&(p.foundClef&&o.appendStartingElement("clef",d,f,r.clef),p.foundKey&&o.appendStartingElement("key",d,f,a.fixKey(r.clef,r.key))),r.is_in_header=!1;break;case"L":this.setDefaultLength(n,2,n.length);break;case"M":r.origMeter=r.meter=this.setMeter(n.substring(2));break;case"P":r.is_in_header?o.addMetaText("partOrder",i.parseFontChangeLine(u),{startChar:r.iChar,endChar:r.iChar+n.length}):r.partForNextLine={title:u,startChar:d,endChar:f};break;case"Q":var m=this.setTempo(n,2,n.length,r.iChar);"delaySet"===m.type?r.tempo=m.tempo:"immediate"===m.type&&(s.metaText.tempo?r.tempoForNextLine=["tempo",d,f,m.tempo]:s.metaText.tempo=m.tempo);break;case"T":r.titlecaps&&(u=u.toUpperCase()),this.setTitle(i.parseFontChangeLine(e.theReverser(u)),h);break;case"U":this.addUserDefinition(n,2,n.length);break;case"V":if(a.parseVoice(n,2,n.length),!r.is_in_header)return{newline:!0};break;case"s":return{symbols:!0};case"w":return{words:!0};case"X":break;case"E":case"m":t("Ignored header",n,0);break;default:return{regular:!0}}}return{}}}},9708:function(e,t,r){var n=r(5008),i=r(8360),a=r(2821),s={};!function(){var e,t,r,o;s.initialize=function(n,i,a,s,c){e=n,t=i,r=a,o=c},s.standardKey=function(e,t,n,i){return a.keySignature(r,e,t,n,i)};var c={treble:{clef:"treble",pitch:4,mid:0},"treble+8":{clef:"treble+8",pitch:4,mid:0},"treble-8":{clef:"treble-8",pitch:4,mid:0},"treble^8":{clef:"treble+8",pitch:4,mid:0},treble_8:{clef:"treble-8",pitch:4,mid:0},treble1:{clef:"treble",pitch:2,mid:2},treble2:{clef:"treble",pitch:4,mid:0},treble3:{clef:"treble",pitch:6,mid:-2},treble4:{clef:"treble",pitch:8,mid:-4},treble5:{clef:"treble",pitch:10,mid:-6},perc:{clef:"perc",pitch:6,mid:0},none:{clef:"none",mid:0},bass:{clef:"bass",pitch:8,mid:-12},"bass+8":{clef:"bass+8",pitch:8,mid:-12},"bass-8":{clef:"bass-8",pitch:8,mid:-12},"bass^8":{clef:"bass+8",pitch:8,mid:-12},bass_8:{clef:"bass-8",pitch:8,mid:-12},"bass+16":{clef:"bass",pitch:8,mid:-12},"bass-16":{clef:"bass",pitch:8,mid:-12},"bass^16":{clef:"bass",pitch:8,mid:-12},bass_16:{clef:"bass",pitch:8,mid:-12},bass1:{clef:"bass",pitch:2,mid:-6},bass2:{clef:"bass",pitch:4,mid:-8},bass3:{clef:"bass",pitch:6,mid:-10},bass4:{clef:"bass",pitch:8,mid:-12},bass5:{clef:"bass",pitch:10,mid:-14},tenor:{clef:"alto",pitch:8,mid:-8},tenor1:{clef:"alto",pitch:2,mid:-2},tenor2:{clef:"alto",pitch:4,mid:-4},tenor3:{clef:"alto",pitch:6,mid:-6},tenor4:{clef:"alto",pitch:8,mid:-8},tenor5:{clef:"alto",pitch:10,mid:-10},alto:{clef:"alto",pitch:6,mid:-6},alto1:{clef:"alto",pitch:2,mid:-2},alto2:{clef:"alto",pitch:4,mid:-4},alto3:{clef:"alto",pitch:6,mid:-6},alto4:{clef:"alto",pitch:8,mid:-8},alto5:{clef:"alto",pitch:10,mid:-10},"alto+8":{clef:"alto+8",pitch:6,mid:-6},"alto-8":{clef:"alto-8",pitch:6,mid:-6},"alto^8":{clef:"alto+8",pitch:6,mid:-6},alto_8:{clef:"alto-8",pitch:6,mid:-6}},l=function(e,t){var r=c[e];return(r?r.mid:0)+t};s.fixClef=function(e){var t=c[e.type];t&&(e.clefPos=t.pitch,e.type=t.clef)},s.deepCopyKey=function(e){var t={accidentals:[],root:e.root,acc:e.acc,mode:e.mode};return e.accidentals.forEach((function(e){t.accidentals.push(n.clone(e))})),t};var h={A:5,B:6,C:0,D:1,E:2,F:3,G:4,a:12,b:13,c:7,d:8,e:9,f:10,g:11};s.addPosToKey=function(e,t){var r=e.verticalPos;t.accidentals.forEach((function(e){var t=h[e.note];t-=r,e.verticalPos=t})),t.impliedNaturals&&t.impliedNaturals.forEach((function(e){var t=h[e.note];t-=r,e.verticalPos=t})),r<-10?(t.accidentals.forEach((function(e){e.verticalPos-=7,(e.verticalPos>=11||10===e.verticalPos&&"flat"===e.acc)&&(e.verticalPos-=7),"A"===e.note&&"sharp"===e.acc&&(e.verticalPos-=7),"G"!==e.note&&"F"!==e.note||"flat"!==e.acc||(e.verticalPos-=7)})),t.impliedNaturals&&t.impliedNaturals.forEach((function(e){e.verticalPos-=7,(e.verticalPos>=11||10===e.verticalPos&&"flat"===e.acc)&&(e.verticalPos-=7),"A"===e.note&&"sharp"===e.acc&&(e.verticalPos-=7),"G"!==e.note&&"F"!==e.note||"flat"!==e.acc||(e.verticalPos-=7)}))):r<-4?(t.accidentals.forEach((function(e){e.verticalPos-=7,-8!==r||"f"!==e.note&&"g"!==e.note||"sharp"!==e.acc||(e.verticalPos-=7)})),t.impliedNaturals&&t.impliedNaturals.forEach((function(e){e.verticalPos-=7,-8!==r||"f"!==e.note&&"g"!==e.note||"sharp"!==e.acc||(e.verticalPos-=7)}))):r>=7&&(t.accidentals.forEach((function(e){e.verticalPos+=7})),t.impliedNaturals&&t.impliedNaturals.forEach((function(e){e.verticalPos+=7})))},s.fixKey=function(e,t){var r=n.clone(t);return s.addPosToKey(e,r),r};var u=function(e){var t=0,r=e[t++];"^"!==r&&"_"!==r||(r=e[t++]);var n=h[r];for(void 0===n&&(n=6);t0){c.foundKey=!0;var u="",d="";o[0].token.length>1?o[0].token=o[0].token.substring(1):o.shift();var f=h.token;if(o.length>0){var p=e.getSharpFlat(o[0].token);if(p.len>0&&(o[0].token.length>1?o[0].token=o[0].token.substring(1):o.shift(),f+=p.token,u=p.token),o.length>0){var m=e.getMode(o[0].token);m.len>0&&(o.shift(),f+=m.token,d=m.token)}if(void 0===s.standardKey(f,h.token,u,0))return t("Unsupported key signature: "+f,n,0),c}var g,v=s.deepCopyKey(r.key),b=!a&&r.globalTranspose?-r.globalTranspose:0;if(a&&(g=r.globalTransposeOrigKeySig),r.key=s.deepCopyKey(s.standardKey(f,h.token,u,b)),a&&(r.globalTransposeOrigKeySig=g),r.key.mode=d,v){for(var y,x=0;x0;)switch(o[0].token){case"m":case"middle":if(o.shift(),0===o.length)return t("Expected = after middle",n,0),c;if("="!==(k=o.shift()).token){t("Expected = after middle",n,k.start);break}if(0===o.length)return t("Expected parameter after middle=",n,0),c;var E=e.getPitchFromTokens(o);E.warn&&t(E.warn,n,0),E.position&&(r.clef.verticalPos=E.position-6);break;case"transpose":if(o.shift(),0===o.length)return t("Expected = after transpose",n,0),c;if("="!==(k=o.shift()).token){t("Expected = after transpose",n,k.start);break}if(0===o.length)return t("Expected parameter after transpose=",n,0),c;if("number"!==o[0].type){t("Expected number after transpose",n,o[0].start);break}r.clef.transpose=o[0].intt,o.shift();break;case"stafflines":if(o.shift(),0===o.length)return t("Expected = after stafflines",n,0),c;if("="!==(k=o.shift()).token){t("Expected = after stafflines",n,k.start);break}if(0===o.length)return t("Expected parameter after stafflines=",n,0),c;if("number"!==o[0].type){t("Expected number after stafflines",n,o[0].start);break}r.clef.stafflines=o[0].intt,o.shift();break;case"staffscale":if(o.shift(),0===o.length)return t("Expected = after staffscale",n,0),c;if("="!==(k=o.shift()).token){t("Expected = after staffscale",n,k.start);break}if(0===o.length)return t("Expected parameter after staffscale=",n,0),c;if("number"!==o[0].type){t("Expected number after staffscale",n,o[0].start);break}r.clef.staffscale=o[0].floatt,o.shift();break;case"octave":if(o.shift(),0===o.length)return t("Expected = after octave",n,0),c;if("="!==(k=o.shift()).token){t("Expected = after octave",n,k.start);break}if(0===o.length)return t("Expected parameter after octave=",n,0),c;if("number"!==o[0].type){t("Expected number after octave",n,o[0].start);break}r.octave=o[0].intt,o.shift();break;case"style":if(o.shift(),0===o.length)return t("Expected = after style",n,0),c;if("="!==(k=o.shift()).token){t("Expected = after style",n,k.start);break}if(0===o.length)return t("Expected parameter after style=",n,0),c;switch(o[0].token){case"normal":case"harmonic":case"rhythm":case"x":case"triangle":r.style=o[0].token,o.shift();break;default:t("error parsing style element: "+o[0].token,n,o[0].start)}break;case"clef":if(o.shift(),0===o.length)return t("Expected = after clef",n,0),c;if("="!==(k=o.shift()).token){t("Expected = after clef",n,k.start);break}if(0===o.length)return t("Expected parameter after clef=",n,0),c;case"treble":case"bass":case"alto":case"tenor":case"perc":case"none":var M=o.shift();switch(M.token){case"treble":case"tenor":case"alto":case"bass":case"perc":case"none":break;case"C":case"c":M.token="alto";break;case"F":case"f":M.token="bass";break;case"G":case"g":M.token="treble";break;default:t("Expected clef name. Found "+M.token,n,M.start)}o.length>0&&"number"===o[0].type&&(M.token+=o[0].token,o.shift()),o.length>1&&("-"===o[0].token||"+"===o[0].token||"^"===o[0].token||"_"===o[0].token)&&"8"===o[1].token&&(M.token+=o[0].token+o[1].token,o.shift(),o.shift()),r.clef={type:M.token,verticalPos:l(M.token,0)},r.currentVoice&&void 0!==r.currentVoice.transpose&&(r.clef.transpose=r.currentVoice.transpose),c.foundClef=!0;break;default:t("Unknown parameter: "+o[0].token,n,o[0].start),o.shift()}return c},s.parseVoice=function(n,i,a){var s=e.getMeat(n,i,a),c=s.start,h=s.end,d=e.getToken(n,c,h);if(0!==d.length){var f=!1;void 0===r.voices[d]&&(r.voices[d]={},f=!0,r.score_is_present&&t("Can't have an unknown V: id when the %score directive is present",n,c)),c+=d.length,c+=e.eatWhiteSpace(n,c);for(var p={startStaff:f},m=function(r){var i=e.getVoiceToken(n,c,h);void 0!==i.warn?t("Expected value for "+r+" in voice: "+i.warn,n,c):void 0!==i.err?t("Expected value for "+r+" in voice: "+i.err,n,c):0===i.token.length&&'"'!==n[c]?t("Expected value for "+r+" in voice",n,c):p[r]=i.token,c+=i.len},g=function(i,a,s){var o=e.getVoiceToken(n,c,h);void 0!==o.warn?t("Expected value for "+a+" in voice: "+o.warn,n,c):void 0!==o.err?t("Expected value for "+a+" in voice: "+o.err,n,c):0===o.token.length&&'"'!==n[c]?t("Expected value for "+a+" in voice",n,c):("number"===s&&(o.token=parseFloat(o.token)),r.voices[i][a]=o.token),c+=o.len},v=function(r,i){var a=e.getVoiceToken(n,c,h);if(void 0!==a.warn)t("Expected value for "+r+" in voice: "+a.warn,n,c);else if(void 0!==a.err)t("Expected value for "+r+" in voice: "+a.err,n,c);else{if(0!==a.token.length||'"'===n[c])return"number"===i&&(a.token=parseFloat(a.token)),a.token;t("Expected value for "+r+" in voice",n,c)}c+=a.len},b=function(i,a){var s=e.getVoiceToken(n,c,h);if(void 0!==s.warn)t("Expected one of (_B, _E, _b, _e) for "+a+" in voice: "+s.warn,n,c);else if(0===s.token.length&&'"'!==n[c])t("Expected one of (_B, _E, _b, _e) for "+a+" in voice",n,c);else{var o={_B:2,_E:9,_b:-10,_e:-3}[s.token];o?r.voices[i][a]=o:t("Expected one of (_B, _E, _b, _e) for "+a+" in voice",n,c)}c+=s.len};c0&&(t+=u[0],"V"===u[1]&&this.startNewLine());for(var d=0;t0)t+=p[0],"V"===p[1]&&(l=!0);else{var m;for((!o.hasBeginMusic()||l&&!this.lineContinuation)&&(this.startNewLine(),l=!1);;)if((m=n.eatWhiteSpace(e,t))>0&&(t+=m),t>0&&""===e[t-1]&&(m=c.letter_to_body_header(e,t))[0]>0&&("V"===m[1]&&this.startNewLine(),t=m[0],a.start_new_line=!1),(m=L(e,t))[0]>0&&(t+=m[0]),(m=M(e,t))[0]>0){_.chord||(_.chord=[]);var g=n.translateString(m[1]);g=g.replace(/;/g,"\n");for(var v=!1,x=0;x<_.chord.length;x++)_.chord[x].position===m[2]&&(v=!0,_.chord[x].name+="\n"+g);!1===v&&(null===m[2]&&m[3]?_.chord.push({name:g,rel_position:m[3]}):_.chord.push({name:g,position:m[2]})),t+=m[0];var k=n.skipWhiteSpace(e.substring(t));k>0&&(_.force_end_beam_last=!0),t+=k}else if((m=-1===b.indexOf(e[t])?P(e,t):[0])[0]>0)null===m[1]?t+10&&(0===m[1].indexOf("style=")?_.style=m[1].substr(6):(void 0===_.decoration&&(_.decoration=[]),"beambr1"===m[1]?_.beambr=1:"beambr2"===m[1]?_.beambr=2:_.decoration.push(m[1]))),t+=m[0];else{if(!((m=N(e,t))[0]>0))break;_.gracenotes=m[1],t+=m[0]}if((m=O(e,t))[0]>0){d=0,void 0!==_.gracenotes&&(_.rest={type:"spacer"},_.duration=.125,a.addFormattingOptions(_,s.formatting,"note"),o.appendElement("note",r+t,r+t+m[0],_),a.measureNotEmpty=!0,_={});var w={type:m[1]};0===w.type.length?i("Unknown bar type",e,t):(a.inEnding&&"bar_thin"!==w.type&&(w.endEnding=!0,a.inEnding=!1),m[2]&&(w.startEnding=m[2],a.inEnding&&(w.endEnding=!0),a.inEnding=!0,"bar_right_repeat"===m[1]?a.restoreStartEndingHoldOvers():a.duplicateStartEndingHoldOvers()),void 0!==_.decoration&&(w.decoration=_.decoration),void 0!==_.chord&&(w.chord=_.chord),w.startEnding&&void 0===a.barFirstEndingNum?a.barFirstEndingNum=a.currBarNumber:w.startEnding&&w.endEnding&&a.barFirstEndingNum?a.currBarNumber=a.barFirstEndingNum:w.endEnding&&(a.barFirstEndingNum=void 0),"bar_invisible"!==w.type&&a.measureNotEmpty&&(void 0===a.currentVoice||0===a.currentVoice.staffNum&&0===a.currentVoice.index)&&(a.currBarNumber++,a.barNumbers&&a.currBarNumber%a.barNumbers==0&&(w.barNumber=a.currBarNumber)),a.addFormattingOptions(_,s.formatting,"bar"),o.appendElement("bar",r+f,r+t+m[0],w),a.measureNotEmpty=!1,_={}),t+=m[0]}else if("&"===e[t])(m=A(e,t))[0]>0&&(o.appendElement("overlay",r,r+1,{}),t+=1,d++);else{if((m=H(e,t)).consumed>0&&(void 0!==m.startSlur&&(_.startSlur=m.startSlur),m.dottedSlur&&(_.dottedSlur=!0),void 0!==m.triplet&&(h>0?i("Can't nest triplets",e,t):(_.startTriplet=m.triplet,_.tripletMultiplier=m.tripletQ/m.triplet,_.tripletR=m.num_notes,h=void 0===m.num_notes?m.triplet:m.num_notes)),t+=m.consumed),"["===e[t]){t++;for(var C=null,T=!1,I=!1;!I;){var j=P(e,t);j[0]>0&&(t+=j[0]);var V=F(e,t,{},!1);if(null!==V&&void 0!==V.pitch)j[0]>0&&0!==j[1].indexOf("style=")&&(void 0===_.decoration&&(_.decoration=[]),_.decoration.push(j[1])),V.end_beam&&(_.end_beam=!0,delete V.end_beam),void 0===_.pitches?(_.duration=V.duration,_.pitches=[V]):_.pitches.push(V),delete V.duration,j[0]>0&&0===j[1].indexOf("style=")&&(_.pitches[_.pitches.length-1].style=j[1].substr(6)),a.inTieChord[_.pitches.length]&&(V.endTie=!0,a.inTieChord[_.pitches.length]=void 0),V.startTie&&(a.inTieChord[_.pitches.length]=!0),t=V.endChar,delete V.endChar;else if(" "===e[t])i("Spaces are not allowed in chords",e,t),t++;else{if(t0&&(!_.rest||"spacer"!==_.rest.type)&&0==--h&&(_.endTriplet=!0);for(var Y=!1;t":case"<":var G=D(e,t);t+=G[0]-1,a.next_note_duration=G[2],C?C*=G[1]:C=G[1];break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":case"/":var q=n.getFraction(e,t);C=q.value;var W=e[t=q.index];" "===W&&(T=!0),"-"===W||")"===W||" "===W||"<"===W||">"===W?t--:Y=!0;break;default:Y=!0}Y||t++}}else i("Expected ']' to end the chords",e,t);void 0!==_.pitches&&(null!==C&&(_.duration=_.duration*C,T&&z(_)),a.addFormattingOptions(_,s.formatting,"note"),o.appendElement("note",r+f,r+t,_),a.measureNotEmpty=!0,_={}),I=!0}}}else{var R={},X=F(e,t,R,!0);void 0!==R.endTie&&E(a,d,!0),null!==X&&(void 0!==X.pitch?(_.pitches=[{}],void 0!==X.accidental&&(_.pitches[0].accidental=X.accidental),_.pitches[0].pitch=X.pitch,_.pitches[0].name=X.name,(X.midipitch||0===X.midipitch)&&(_.pitches[0].midipitch=X.midipitch),void 0!==X.endSlur&&(_.pitches[0].endSlur=X.endSlur),void 0!==X.endTie&&(_.pitches[0].endTie=X.endTie),void 0!==X.startSlur&&(_.pitches[0].startSlur=X.startSlur),void 0!==_.startSlur&&(_.pitches[0].startSlur=_.startSlur),void 0!==_.dottedSlur&&(_.pitches[0].dottedSlur=!0),void 0!==X.startTie&&(_.pitches[0].startTie=X.startTie),void 0!==_.startTie&&(_.pitches[0].startTie=_.startTie)):(_.rest=X.rest,void 0!==X.endSlur&&(_.endSlur=X.endSlur),void 0!==X.endTie&&(_.rest.endTie=X.endTie),void 0!==X.startSlur&&(_.startSlur=X.startSlur),void 0!==X.startTie&&(_.rest.startTie=X.startTie),void 0!==_.startTie&&(_.rest.startTie=_.startTie)),void 0!==X.chord&&(_.chord=X.chord),void 0!==X.duration&&(_.duration=X.duration),void 0!==X.decoration&&(_.decoration=X.decoration),void 0!==X.graceNotes&&(_.graceNotes=X.graceNotes),delete _.startSlur,delete _.dottedSlur,S(a,d,_)&&(void 0!==_.pitches?_.pitches[0].endTie=!0:"spacer"!==_.rest.type&&(_.rest.endTie=!0),E(a,d,!1)),(X.startTie||_.startTie)&&E(a,d,!0),t=X.endChar,h>0&&(!X.rest||"spacer"!==X.rest.type)&&0==--h&&(_.endTriplet=!0),X.end_beam&&z(_),_.rest&&"rest"===_.rest.type&&1===_.duration&&B(a)<=1&&(_.rest.type="whole",_.duration=B(a)),_.duration<1&&-1===y.indexOf(_.duration)&&0!==_.duration&&(_.rest&&"spacer"===_.rest.type||i("Duration not representable: "+e.substring(f,t),e,t)),a.addFormattingOptions(_,s.formatting,"note"),o.appendElement("note",r+f,r+t,_),a.measureNotEmpty=!0,_={})}t===f&&(" "!==e[t]&&"`"!==e[t]&&i("Unknown character ignored",e,t),t++)}}}this.lineContinuation=e.indexOf("")>=0||u[0]>0,this.lineContinuation||(_={})}};var E=function(e,t,r){var n=e.currentVoice?100*e.currentVoice.staffNum+e.currentVoice.index:0;void 0===e.inTie[t]&&(e.inTie[t]=[]),e.inTie[t][n]=r},M=function(e,t){if('"'===e[t]){var r=n.getBrackettedSubstring(e,t,5);if(r[2]||i("Missing the closing quote while parsing the chord symbol",e,t),r[0]>0&&r[1].length>0&&"^"===r[1][0])r[1]=r[1].substring(1),r[2]="above";else if(r[0]>0&&r[1].length>0&&"_"===r[1][0])r[1]=r[1].substring(1),r[2]="below";else if(r[0]>0&&r[1].length>0&&"<"===r[1][0])r[1]=r[1].substring(1),r[2]="left";else if(r[0]>0&&r[1].length>0&&">"===r[1][0])r[1]=r[1].substring(1),r[2]="right";else if(r[0]>0&&r[1].length>0&&"@"===r[1][0]){r[1]=r[1].substring(1);var s=n.getFloat(r[1]);0===s.digits&&i("Missing first position in absolutely positioned annotation.",e,t),r[1]=r[1].substring(s.digits),","!==r[1][0]&&i("Missing comma absolutely positioned annotation.",e,t),r[1]=r[1].substring(1);var o=n.getFloat(r[1]);0===o.digits&&i("Missing second position in absolutely positioned annotation.",e,t),r[1]=r[1].substring(o.digits);var c=n.skipWhiteSpace(r[1]);r[1]=r[1].substring(c),r[2]=null,r[3]={x:s.value,y:o.value}}else!0!==a.freegchord&&(r[1]=r[1].replace(/([ABCDEFG0-9])b/g,"$1♭"),r[1]=r[1].replace(/([ABCDEFG0-9])#/g,"$1♯"),r[1]=r[1].replace(/^([ABCDEFG])([♯♭]?)o([^A-Za-z])/g,"$1$2°$3"),r[1]=r[1].replace(/^([ABCDEFG])([♯♭]?)o$/g,"$1$2°"),r[1]=r[1].replace(/^([ABCDEFG])([♯♭]?)0([^A-Za-z])/g,"$1$2ø$3"),r[1]=r[1].replace(/^([ABCDEFG])([♯♭]?)\^([^A-Za-z])/g,"$1$2∆$3")),r[2]="default",r[1]=u.chordName(a,r[1]);return r}return[0,""]},N=function(e,t){if("{"===e[t]){var r=n.getBrackettedSubstring(e,t,1,"}");r[2]||i("Missing the closing '}' while parsing grace note",e,t),")"===e[t+r[0]]&&(r[0]++,r[1]+=")");for(var s=[],o=0,c=!1;o0&&(s[s.length-1].endBeam=!0):i("Unknown character '"+r[1][o]+"' while parsing grace note",e,t),o++)}if(s.length)return[r[0],s]}return[0]};function A(e,t){if("&"===e[t]){for(var r=t;e[t]&&":"!==e[t]&&"|"!==e[t];)t++;return[t-r,e.substring(r+1,t)]}return[0]}function B(e){var t=e.origMeter;return t&&"specified"===t.type&&t.value&&0!==t.value.length?parseInt(t.value[0].num,10)/parseInt(t.value[0].den,10):1}var P=function(e,t){var r=a.macros[e[t]];if(void 0!==r)return"!"!==r[0]&&"+"!==r[0]||(r=r.substring(1)),"!"!==r[r.length-1]&&"+"!==r[r.length-1]||(r=r.substring(0,r.length-1)),f.includes(r)?[1,r]:p.includes(r)?("hidden"===a.volumePosition&&(r=""),[1,r]):m.includes(r)?("hidden"===a.dynamicPosition&&(r=""),[1,r]):(a.ignoredDecorations.includes(r)||i("Unknown macro: "+r,e,t),[1,""]);switch(e[t]){case".":if("("===e[t+1]||"-"===e[t+1])break;return[1,"staccato"];case"u":return[1,"upbow"];case"v":return[1,"downbow"];case"~":return[1,"irishroll"];case"!":case"+":var s=n.getBrackettedSubstring(e,t,5);if(s[1].length>1&&("^"===s[1][0]||"_"===s[1][0])&&(s[1]=s[1].substring(1)),f.includes(s[1]))return s;if(p.includes(s[1]))return"hidden"===a.volumePosition&&(s[1]=""),s;if(m.includes(s[1]))return"hidden"===a.dynamicPosition&&(s[1]=""),s;var o=g.findIndex((function(e){return s[1]===e[0]}));return o>=0?(s[1]=g[o][1],s):(o=v.findIndex((function(e){return s[1]===e[0]})))>=0?(s[1]=v[o][1],"hidden"===a.dynamicPosition&&(s[1]=""),s):"!"!==e[t]||1!==s[0]&&"!"===e[t+s[0]-1]?(i("Unknown decoration: "+s[1],e,t),s[1]="",s):[1,null];case"H":return[1,"fermata"];case"J":return[1,"slide"];case"L":return[1,"accent"];case"M":return[1,"mordent"];case"O":return[1,"coda"];case"P":return[1,"pralltriller"];case"R":return[1,"roll"];case"S":return[1,"segno"];case"T":return[1,"trill"]}return[0,0]},L=function(e,t){for(var r=t;n.isWhiteSpace(e[t]);)t++;return[t-r]},O=function(e,t){var r=n.getBarLine(e,t);if(0===r.len)return[0,""];if(r.warn)return i(r.warn,e,t),[r.len,""];for(var a=0;a="2"&&e[t+1]<="9"?(void 0!==r.triplet?i("Can't nest triplets",e,t):(r.triplet=e[t+1]-"0",r.tripletQ=C[r.triplet],r.num_notes=r.triplet,t+2="1"&&e[t+4]<="9"?(r.num_notes=e[t+4]-"0",t+=3):i("expected number after the two colons after the triplet to mark the duration",e,t):t+3="1"&&e[t+3]<="9"?(r.tripletQ=e[t+3]-"0",t+4="1"&&e[t+5]<="9"&&(r.num_notes=e[t+5]-"0",t+=4):t+=2):i("expected number after the triplet to mark the duration",e,t))),t++):void 0===r.startSlur?r.startSlur=1:r.startSlur++),t++;return r.consumed=t-a,r};T.prototype.startNewLine=function(){var e={startChar:-1,endChar:-1};a.partForNextLine.title&&(e.part=a.partForNextLine),e.clef=a.currentVoice&&void 0!==a.staves[a.currentVoice.staffNum].clef?l.clone(a.staves[a.currentVoice.staffNum].clef):l.clone(a.clef);var t=a.currentVoice?a.currentVoice.scoreTranspose:0;if(e.key=h.standardKey(a.key.root+a.key.acc+a.key.mode,a.key.root,a.key.acc,t),e.key.mode=a.key.mode,a.key.impliedNaturals&&(e.key.impliedNaturals=a.key.impliedNaturals),a.key.explicitAccidentals)for(var r=0;r=0?(r.duration=s.getBarLength(),r.rest.text=1,h="Zduration"):(i&&0!==a.next_note_duration?(r.duration=a.default_length*a.next_note_duration,a.next_note_duration=0,d=!0):r.duration=a.default_length,h="duration");break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":case"0":case"/":if("octave"===h||"duration"===h){var p=n.getFraction(e,t);for(r.duration=r.duration*p.value,r.endChar=p.index;p.index"!==e[t])return r;t--,h="broken_rhythm";break;case">":case"<":if(!l(h))return null;if(!i)return r.endChar=t,r;var g=D(e,t);t+=g[0]-1,a.next_note_duration=g[2],r.duration=g[1]*r.duration,h="end_slur";break;default:return l(h)?(r.endChar=t,r):null}if(++t===e.length)return l(h)?(r.endChar=t,r):null}return null},D=function(e,t){switch(e[t]){case">":return t"===e[t+1]&&">"===e[t+2]?[3,1.875,.125]:t"===e[t+1]?[2,1.75,.25]:[1,1.5,.5];case"<":return t","accent"],["tr","trill"],["plus","+"],["emphasis","accent"],["^","umarcato"],["marcato","umarcato"]],e.exports.accentDynamicPseudonyms=[["<(","crescendo("],["<)","crescendo)"],[">(","diminuendo("],[">)","diminuendo)"]],e.exports.nonDecorations="ABCDEFGabcdefgxyzZ[]|^_{",e.exports.durations=[.5,.75,.875,.9375,.96875,.984375,.25,.375,.4375,.46875,.484375,.4921875,.125,.1875,.21875,.234375,.2421875,.24609375,.0625,.09375,.109375,.1171875,.12109375,.123046875,.03125,.046875,.0546875,.05859375,.060546875,.0615234375,.015625,.0234375,.02734375,.029296875,.0302734375,.03076171875],e.exports.pitches={A:5,B:6,C:0,D:1,E:2,F:3,G:4,a:12,b:13,c:7,d:8,e:9,f:10,g:11},e.exports.rests={x:"invisible",X:"invisible-multimeasure",y:"spacer",z:"rest",Z:"multimeasure"},e.exports.accMap={dblflat:"__",flat:"_",natural:"=",sharp:"^",dblsharp:"^^",quarterflat:"_/",quartersharp:"^/"},e.exports.tripletQ={2:3,3:2,4:3,5:2,6:2,7:2,8:3,9:2}},1881:function(e,t,r){var n=r(5008),i=function(e,t){this.lineIndex=0,this.lines=e,this.multilineVars=t,this.skipWhiteSpace=function(e){for(var t=0;t=e.length};this.eatWhiteSpace=function(e,t){for(var r=t;r="a"&&e[t]<="z"||e[t]>="A"&&e[t]<="Z");)t++;return t},n=this.skipWhiteSpace(e);if(r(e,n))return{len:0};var i=e.substring(n,n+3).toLowerCase();switch((i.length>1&&" "===i[1]||"^"===i[1]||"_"===i[1]||"="===i[1])&&(i=i[0]),i){case"mix":return{len:t(e,n),token:"Mix"};case"dor":return{len:t(e,n),token:"Dor"};case"phr":return{len:t(e,n),token:"Phr"};case"lyd":return{len:t(e,n),token:"Lyd"};case"loc":return{len:t(e,n),token:"Loc"};case"aeo":case"min":case"m":return{len:t(e,n),token:"m"};case"maj":case"ion":return{len:t(e,n),token:""}}return{len:0}},this.getClef=function(e,t){var i=e,a=this.skipWhiteSpace(e);if(r(e,a))return{len:0};var s=!1,o=e.substring(a);if(n.startsWith(o,"clef=")&&(s=!0,o=o.substring(5),a+=5),0===o.length&&s)return{len:a+5,warn:"No clef specified: "+i};var c=this.skipWhiteSpace(o);if(r(o,c))return{len:0};c>0&&(a+=c,o=o.substring(c));var l=null;if(n.startsWith(o,"treble"))l="treble";else if(n.startsWith(o,"bass3"))l="bass3";else if(n.startsWith(o,"bass"))l="bass";else if(n.startsWith(o,"tenor"))l="tenor";else if(n.startsWith(o,"alto2"))l="alto2";else if(n.startsWith(o,"alto1"))l="alto1";else if(n.startsWith(o,"alto"))l="alto";else if(!t&&s&&n.startsWith(o,"none"))l="none";else if(n.startsWith(o,"perc"))l="perc";else if(!t&&s&&n.startsWith(o,"C"))l="tenor";else if(!t&&s&&n.startsWith(o,"F"))l="bass";else{if(t||!s||!n.startsWith(o,"G"))return{len:a+5,warn:"Unknown clef specified: "+i};l="treble"}return o=o.substring(l.length),(c=this.isMatch(o,"+8"))>0?l+="+8":(c=this.isMatch(o,"-8"))>0&&(l+="-8"),{len:a+l.length,token:l,explicit:s}},this.getBarLine=function(e,t){switch(e[t]){case"]":switch(e[++t]){case"|":return{len:2,token:"bar_thick_thin"};case"[":return e[++t]>="1"&&e[t]<="9"||'"'===e[t]?{len:2,token:"bar_invisible"}:{len:1,warn:"Unknown bar symbol"};default:return{len:1,token:"bar_invisible"}}break;case":":switch(e[++t]){case":":return{len:2,token:"bar_dbl_repeat"};case"|":switch(e[++t]){case"]":return"|"===e[++t]&&":"===e[++t]?{len:5,token:"bar_dbl_repeat"}:{len:3,token:"bar_right_repeat"};case"|":return":"===e[++t]?{len:4,token:"bar_dbl_repeat"}:{len:3,token:"bar_right_repeat"};default:return{len:2,token:"bar_right_repeat"}}break;default:return{len:1,warn:"Unknown bar symbol"}}break;case"[":if("|"!==e[++t])return e[t]>="1"&&e[t]<="9"||'"'===e[t]?{len:1,token:"bar_invisible"}:{len:0};switch(e[++t]){case":":return{len:3,token:"bar_left_repeat"};case"]":return{len:3,token:"bar_invisible"};default:return{len:2,token:"bar_thick_thin"}}break;case"|":switch(e[++t]){case"]":return{len:2,token:"bar_thin_thick"};case"|":return":"===e[++t]?{len:3,token:"bar_left_repeat"}:{len:2,token:"bar_thin_thin"};case":":for(var r=0;":"===e[t+r];)r++;return{len:1+r,token:"bar_left_repeat"};default:return{len:1,token:"bar_thin"}}}return{len:0}},this.getTokenOf=function(e,t){for(var r=0;r0;){var r;if("^"===e[0].token){if(r="sharp",e.shift(),0===e.length)return{accs:t,warn:"Expected note name after "+r};switch(e[0].token){case"^":r="dblsharp",e.shift();break;case"/":r="quartersharp",e.shift()}}else if("="===e[0].token)r="natural",e.shift();else{if("_"!==e[0].token)return{accs:t};if(r="flat",e.shift(),0===e.length)return{accs:t,warn:"Expected note name after "+r};switch(e[0].token){case"_":r="dblflat",e.shift();break;case"/":r="quarterflat",e.shift()}}if(0===e.length)return{accs:t,warn:"Expected note name after "+r};switch(e[0].token[0]){case"a":case"b":case"c":case"d":case"e":case"f":case"g":case"A":case"B":case"C":case"D":case"E":case"F":case"G":void 0===t&&(t=[]),t.push({acc:r,note:e[0].token[0]}),1===e[0].token.length?e.shift():e[0].token=e[0].token.substring(1);break;default:return{accs:t,warn:"Expected note name after "+r+" Found: "+e[0].token}}}return{accs:t}},this.getKeyAccidental=function(e){var t={"^":"sharp","^^":"dblsharp","=":"natural",_:"flat",__:"dblflat","_/":"quarterflat","^/":"quartersharp"},n=this.skipWhiteSpace(e);if(r(e,n))return{len:0};var i=null;switch(e[n]){case"^":case"_":case"=":i=e[n];break;default:return{len:0}}if(n++,r(e,n))return{len:1,warn:"Expected note name after accidental"};switch(e[n]){case"a":case"b":case"c":case"d":case"e":case"f":case"g":case"A":case"B":case"C":case"D":case"E":case"F":case"G":return{len:n+1,token:{acc:t[i],note:e[n]}};case"^":case"_":case"/":if(i+=e[n],n++,r(e,n))return{len:2,warn:"Expected note name after accidental"};switch(e[n]){case"a":case"b":case"c":case"d":case"e":case"f":case"g":case"A":case"B":case"C":case"D":case"E":case"F":case"G":return{len:n+1,token:{acc:t[i],note:e[n]}};default:return{len:2,warn:"Expected note name after accidental"}}break;default:return{len:1,warn:"Expected note name after accidental"}}},this.isWhiteSpace=function(e){return" "===e||"\t"===e||""===e},this.getMeat=function(e,t,r){var n=e.indexOf("%",t);for(n>=0&&n="A"&&e<="Z"||e>="a"&&e<="z"},a=function(e){return e>="0"&&e<="9"};this.tokenize=function(e,t,r,n){var s=this.getMeat(e,t,r);t=s.start,r=s.end;for(var o,c=[];t=r?{len:1,err:"Missing close quote"}:{len:i-t+1,token:this.translateString(e.substring(n+1,i))}}for(var a=n;a=0?n.strip(e.substring(0,t)):n.strip(e)},this.getInt=function(e){var t=parseInt(e);if(isNaN(t))return{digits:0};var r=""+t;return{value:t,digits:e.indexOf(r)+r.length}},this.getFloat=function(e){var t=parseFloat(e);if(isNaN(t))return{digits:0};var r=""+t;return{value:t,digits:e.indexOf(r)+r.length}},this.getMeasurement=function(e){if(0===e.length)return{used:0};var t=1,r="";if("-"===e[0].token)e.shift(),r="-",t++;else if("number"!==e[0].type)return{used:0};if(r+=e.shift().token,0===e.length)return{used:1,value:parseInt(r)};var n=e.shift();if("."===n.token){if(t++,0===e.length)return{used:t,value:parseInt(r)};if("number"===e[0].type&&(r=r+"."+(n=e.shift()).token,t++,0===e.length))return{used:t,value:parseFloat(r)};n=e.shift()}switch(n.token){case"pt":case"px":return{used:t+1,value:parseFloat(r)};case"cm":return{used:t+1,value:parseFloat(r)/2.54*72};case"in":return{used:t+1,value:72*parseFloat(r)};default:return e.unshift(n),{used:t,value:parseFloat(r)}}};var u=function(e){return e=(e=e.replace(/\\n/g,"\n")).replace(/\\"/g,'"')};this.getBrackettedSubstring=function(e,t,r,n){for(var i=n||e[t],a=t+1,s=!1;ae.length-1&&(a=e.length-1),[a-t+1,u(e.substring(t+1,a)),!1])}};i.prototype.peekLine=function(){return this.lines[this.lineIndex]},i.prototype.nextLine=function(){if(this.lineIndex>0&&(this.multilineVars.iChar+=this.lines[this.lineIndex-1].length+1),this.lineIndex11&&(f%=12);var p="m"===t[0]?l[f]:c[f],m=p+t,g=a(m);g.length>0&&"flat"===g[0].acc&&(e.localTransposePreferFlats=!0);var v=m.charCodeAt(0)-h.charCodeAt(0);return e.localTranspose>0?v<0?v+=7:0===v&&("#"!==h[1]&&"b"!==m[1]||(v+=7)):e.localTranspose<0&&(v>0?v-=7:0===v&&("b"!==h[1]&&"#"!==m[1]||(v-=7))),e.localTranspose>0?e.localTransposeVerticalMovement=v+7*Math.floor(e.localTranspose/12):e.localTransposeVerticalMovement=v+7*Math.ceil(e.localTranspose/12),d?{accidentals:g,root:p[0],acc:p.length>1?p[1]:""}:{accidentals:[],root:r,acc:n}},s.chordName=function(e,t){return i(t,e.localTranspose,e.localTransposePreferFlats,e.freegchord)};var h=["c","d","e","f","g","a","b"],u={dblflat:-2,flat:-1,natural:0,sharp:1,dblsharp:2},d={"-2":"dblflat","-1":"flat",0:"natural",1:"sharp",2:"dblsharp"},f={"-2":"__","-1":"_",0:"=",1:"^",2:"^^"};s.note=function(e,t){if(e.localTranspose&&"perc"!==e.clef.type){var r=t.pitch;if(e.localTransposeVerticalMovement&&(t.pitch=t.pitch+e.localTransposeVerticalMovement,t.name)){var i=t.accidental?t.name.substring(1):t.name,a=t.accidental?t.name[0]:"",s=n.pitchIndex(i);t.name=a+n.noteName(s+e.localTransposeVerticalMovement)}if(t.accidental){var o=function(e,t,r,n,i){for(var a=h[(e+49)%7],s=0,o=0;o2&&(t++,p-="b"===l||"e"===l?1:2),[t,p]}(r,t.pitch,t.accidental,e.globalTransposeOrigKeySig,e.targetKey);t.pitch=o[0],t.accidental=d[o[1]],t.name&&(t.name=f[o[1]]+t.name.replace(/[_^=]/g,""))}}},e.exports=s},867:function(e){var t={},r=["C,,,","D,,,","E,,,","F,,,","G,,,","A,,,","B,,,","C,,","D,,","E,,","F,,","G,,","A,,","B,,","C,","D,","E,","F,","G,","A,","B,","C","D","E","F","G","A","B","c","d","e","f","g","a","b","c'","d'","e'","f'","g'","a'","b'","c''","d''","e''","f''","g''","a''","b''","c'''","d'''","e'''","f'''","g'''","a'''","b'''"];t.pitchIndex=function(e){return r.indexOf(e)},t.noteName=function(e){return r[e]},e.exports=t},4208:function(e){var t=["C","C♯","D","D♯","E","F","F♯","G","G♯","A","A♯","B"],r=["C","D♭","D","E♭","E","F","G♭","G","A♭","A","B♭","B"],n=["C","C#","D","D#","E","F","F#","G","G#","A","A#","B"],i=["C","Db","D","Eb","E","F","Gb","G","Ab","A","Bb","B"];e.exports=function(e,a,s,o){if(!a||a%12==0)return e;for(;a<0;)a+=12;a>11&&(a%=12);var c=e.match(/^([A-G][b#♭♯]?)([^\/]+)?\/?([A-G][b#♭♯]?)?(.+)?/);if(!c)return e;var l,h=c[1],u=c[2],d=c[3],f=c[4];return(l=t.indexOf(h))<0&&(l=r.indexOf(h)),l<0&&(l=n.indexOf(h)),l<0&&(l=i.indexOf(h)),l<0||(l+=a,l%=12,e=s?o?i[l]:r[l]:o?n[l]:t[l],u&&(e+=u),d&&((l=t.indexOf(d))<0&&(l=r.indexOf(d)),l<0&&(l=n.indexOf(d)),l<0&&(l=i.indexOf(d)),e+="/",l>=0?(l+=a,l%=12,e+=s?o?i[l]:r[l]:o?n[l]:t[l]):e+=d),f&&(e+=f)),e}},575:function(e,t,r){var n=r(9708),i=r(5008);function a(e){if(!e)return!1;if("string"==typeof e)return!1;for(var t=0;t0&&"bar"!==e[r].el_type;r--);return r}this.setVisualTranspose=function(t){t&&(e.visualTranspose=t)},this.resolveOverlays=function(){for(var t=!1,n=[],a=0;a0&&l[h].voice.push({el_type:"note",duration:d,rest:{type:"invisible"},startChar:v.startChar,endChar:v.endChar}),l[h].voice.push(v)),d=0):"note"===v.el_type?f?l[h].voice.push(v):(d+=v.duration,n[a]+=v.duration):"scale"!==v.el_type&&"stem"!==v.el_type&&"overlay"!==v.el_type&&"style"!==v.el_type&&"transpose"!==v.el_type&&"color"!==v.el_type||l[h].voice.push(v);else{t=!0,f=!0,m=g,l[h].hasOverlay=!0,0===p&&(p=n[a]);for(var b=0;b=e.lines[b].staff[0].voices.length&&e.lines[b].staff[0].voices.push([{el_type:"note",duration:n[b],rest:{type:"invisible"},startChar:v.startChar,endChar:v.endChar}])}}l[h].hasOverlay&&0===l[h].snip.length&&l[h].snip.push({start:m,len:u.length-m})}for(h=0;h=0;x--){var k=y.snip[x];c.voices[h].splice(k.start,k.len),c.voices[h].splice(k.start+1,0,{el_type:"stem",direction:"auto"});var w=r(c.voices[h],k.start);c.voices[h].splice(w,0,{el_type:"stem",direction:"up"})}for(x=0;x=t&&st;){if(e[t].staff)return e[t];t++}return null}for(e.lineNum=0;e.lineNum0&&b[b.length-1].barNumber){var x=g(e.lines,e.lineNum);x&&(x.staff[0].barNumber=b[b.length-1].barNumber),delete b[b.length-1].barNumber}}}return delete e.staffNum,delete e.voiceNum,delete e.lineNum,delete e.potentialStartBeam,delete e.potentialEndBeam,delete e.vskipPending,s},e.reset(),this.getLastNote=function(){if(e.lines[e.lineNum]&&e.lines[e.lineNum].staff&&e.lines[e.lineNum].staff[e.staffNum]&&e.lines[e.lineNum].staff[e.staffNum].voices[e.voiceNum])for(var t=e.lines[e.lineNum].staff[e.staffNum].voices[e.voiceNum].length-1;t>=0;t--){var r=e.lines[e.lineNum].staff[e.staffNum].voices[e.voiceNum][t];if("note"===r.el_type)return r}return null},this.addTieToLastNote=function(e){var t=this.getLastNote();return!!(t&&t.pitches&&t.pitches.length>0)&&(t.pitches[0].startTie={},e&&(t.pitches[0].startTie.style="dotted"),!0)},this.getDuration=function(e){return e.duration?e.duration:0},this.closeLine=function(){e.potentialStartBeam&&e.potentialEndBeam&&(e.potentialStartBeam.startBeam=!0,e.potentialEndBeam.endBeam=!0),delete e.potentialStartBeam,delete e.potentialEndBeam},this.appendElement=function(r,n,i,a){var s=e;a.el_type=r,null!==n&&(a.startChar=n),null!==i&&(a.endChar=i);var o=function(){void 0!==s.potentialStartBeam&&void 0!==s.potentialEndBeam&&(s.potentialStartBeam.startBeam=!0,s.potentialEndBeam.endBeam=!0),delete s.potentialStartBeam,delete s.potentialEndBeam};"note"===r?t.getDuration(a)>=.25||a.force_end_beam_last&&void 0!==s.potentialStartBeam?o():a.end_beam&&void 0!==s.potentialStartBeam?void 0===a.rest?(s.potentialStartBeam.startBeam=!0,a.endBeam=!0,delete s.potentialStartBeam,delete s.potentialEndBeam):o():void 0===a.rest&&(void 0===s.potentialStartBeam?a.end_beam||(s.potentialStartBeam=a,delete s.potentialEndBeam):s.potentialEndBeam=a):o(),delete a.end_beam,delete a.force_end_beam_last,function(e){var t=s.lines[s.lineNum].staff[s.staffNum];if(t){if(void 0!==e.pitches){var r=t.workingClef.verticalPos;e.pitches.forEach((function(e){e.verticalPos=e.pitch-r}))}if(void 0!==e.gracenotes){var n=t.workingClef.verticalPos;e.gracenotes.forEach((function(e){e.verticalPos=e.pitch-n}))}t.voices[s.voiceNum].push(e)}}(a)},this.appendStartingElement=function(t,r,n,a){var s;this.closeLine(),"key"===t&&(s=a.impliedNaturals,delete a.impliedNaturals,delete a.explicitAccidentals);var o=i.clone(a);if(e.lines[e.lineNum]&&e.lines[e.lineNum].staff){e.lines[e.lineNum].staff.length<=e.staffNum&&(e.lines[e.lineNum].staff[e.staffNum]={},e.lines[e.lineNum].staff[e.staffNum].clef=i.clone(e.lines[e.lineNum].staff[0].clef),e.lines[e.lineNum].staff[e.staffNum].key=i.clone(e.lines[e.lineNum].staff[0].key),e.lines[e.lineNum].staff[0].meter&&(e.lines[e.lineNum].staff[e.staffNum].meter=i.clone(e.lines[e.lineNum].staff[0].meter)),e.lines[e.lineNum].staff[e.staffNum].workingClef=i.clone(e.lines[e.lineNum].staff[0].workingClef),e.lines[e.lineNum].staff[e.staffNum].voices=[[]]),"clef"===t&&(e.lines[e.lineNum].staff[e.staffNum].workingClef=o);for(var c=e.lines[e.lineNum].staff[e.staffNum].voices[e.voiceNum],l=0;l0){if(void 0!==r.voices[0]){for(var i=!1,a=0;a0){var r=t[t.length-1];if("bar"!==r.el_type)return e-1;void 0!==r.barNumber&&(r.barNumber=e)}return e},this.hasBeginMusic=function(){for(var t=0;t=0;r--)if(void 0!==e.lines[r].staff)return!1;return!0},this.getCurrentVoice=function(){var t=e.lines[e.lineNum];if(!t)return null;var r=t.staff[e.staffNum];return r&&void 0!==r.voices[e.voiceNum]?r.voices[e.voiceNum]:null},this.setCurrentVoice=function(t,r){e.staffNum=t,e.voiceNum=r;for(var n=0;n0?(r.push(a-1),n.push(Math.round(i-s)),i=s):as&&ds?(l.push(d-1),c++,o=Math.max(o,s),s=Math.abs(n-t[c]),a.push(i-f),i=f):s=p}a.push(i)}function i(e,t,r,i){for(var a=Math.ceil(e.total/t),s=Math.floor(e.total/a),o=[],c=0;ct&&(s=!0),o%r==r-1&&(o!==e.length-1&&n.push(o),i.push(Math.round(a)),a=0);return{failed:s,totals:i,lineBreaks:n}}e.exports={wrapLines:function(e,t,r){if(t&&0!==e.lines.length){var n=e.deline({lineBreaks:!1}),i=function(e,t){for(var r=[],n=0,i=0,a=0,s=0;s0&&(n[c.line].staff[c.staff].barNumber=s);for(var h=Object.keys(l),u=0;u=0;p--)if("key"===f[p].el_type){i[c.staff]={root:f[p].root,acc:f[p].acc,mode:f[p].mode,accidentals:f[p].accidentals.filter((function(e){return"natural"!==e.acc}))};break}for(p=f.length-1;p>=0;p--)if("stem"===f[p].el_type){a[10*c.staff+c.voice]={direction:f[p].direction};break}if(void 0!==r&&0===c.staff&&0===c.voice)for(p=0;p0&&p.measureWidths.length<25&&(k=i(p,g,0,b),b.attempts.push({type:"Optimize",failed:k.failed,reason:k.reason,lineBreaks:k.lineBreaks,totals:k.totals}),k.failed||(y=k.lineBreaks))}u.push(y),d.push(b)}var w=function(e,t,r){var n={lineBreaks:e,staffwidth:t};for(var i in r)r.hasOwnProperty(i)&&"wrap"!==i&&"staffwidth"!==i&&(n[i]=r[i]);return{revisedParams:n}}(u,n.staffwidth,n);return w.explanation=d,w.reParse=!0,w}}},5633:function(e,t,r){var n,i=r(9447),a=r(4914),s=a.relativeMajor,o=a.transposeKey,c=a.relativeMode,l=r(4208);!function(){"use strict";function e(e,r,n){var i=[],a=r.getKeySignature();if("Hp"===a.root||"HP"===a.root)return i;i=i.concat(function(e,t){for(var r=[],n=e.split("K:"),i=n[0].length,a=1;a2?n+=7:-12===r&&(n-=7):r>0&&n<0?n+=7:r<0&&n>0&&(n-=7),r>12?n+=7:r<-12&&(n-=7),n}function h(e,t,n,i,s,o){for(var c=[],h=a(s,n,o),u={},d={},m=0;m1?a[1]:"",accidentals:l}}function p(e,t,r,n){for(var i=e.pitch,a=u.indexOf(e.name),s=(u.indexOf(t.root)+i)%7,o=a+r,c=e.oct;o>6;)c++,o-=7;for(;o<0;)c--,o+=7;for(var l=u[s],h="",d=e.adj,f="=",m=0;m4&&(l=l.toLowerCase()),{acc:h,name:l,upper:l.toUpperCase()}}var m=/([_^=]*)([A-Ga-g])([,']*)/,g=/([_^=]*[A-Ga-g][,']*)(\d*\/*\d*)([\>\<\-\)\.\s\\]*)/,v=/([_^=]*[A-Ga-g][,']*)?(\d*\/*\d*)?([\>\<\-\)]*)?/,b=/(\s*)$/;function y(e,t,r,n){var i="none"===t?0:u.indexOf(t),a=e.match(m),s=a[2].toUpperCase(),o=u.indexOf(s)-i;o<0&&(o+=7);var c=d.indexOf(a[3]);s===a[2]&&c--;var l=n[s]||r[s]||"=";return{acc:a[1],name:s,pitch:o,oct:c,adj:C(a[1],r[s],n[s]),courtesy:a[1]===l}}function x(e,t,r,n,i){var a=e.substring(t,r),s=a.match(new RegExp(g.source+b.source),"");if(s){var o=s[1].length,c=s[2].length+s[3].length+s[4].length;t+=r-t-o-c,r-=c}else if(s=a.match(new RegExp(/([^\[]*)/.source+/\[/.source+v.source+v.source+v.source+v.source+v.source+v.source+v.source+v.source+/\-?](\d*\/*\d*)?([\>\<\-\)]*)/.source+b.source))){for(var l=1+s[1].length,h=0;h=0;t--)if("program"===u[t].cmd)return void(u[t].channel=e)}function L(e){return e/1e6}function O(e){return Math.round(e*k*1e6)/1e6}function H(e){switch(parseInt(e.den,10)){case 2:return.5;case 4:return.25;case 8:return e.num%3==0?.375:.125;case 16:return.125}return.25}function z(e,t){var r=t.start,n=t.duration,i=O(1/32);switch(e){case"trill":for(var a=1;n>0;)u.push({cmd:"note",pitch:t.pitch+a,volume:t.volume,start:r,duration:i,gap:0,instrument:h,style:"decoration"}),a=1===a?0:1,n-=i,r+=i;break;case"mordent":u.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r,duration:i,gap:0,instrument:h,style:"decoration"}),n-=i,r+=i,u.push({cmd:"note",pitch:t.pitch+1,volume:t.volume,start:r,duration:i,gap:0,instrument:h,style:"decoration"}),n-=i,r+=i,u.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r,duration:n,gap:0,instrument:h});break;case"lowermordent":u.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r,duration:i,gap:0,instrument:h,style:"decoration"}),n-=i,r+=i,u.push({cmd:"note",pitch:t.pitch-1,volume:t.volume,start:r,duration:i,gap:0,instrument:h,style:"decoration"}),n-=i,r+=i,u.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r,duration:n,gap:0,instrument:h});break;case"turn":i=t.duration/5,u.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r,duration:i,gap:0,instrument:h,style:"decoration"}),u.push({cmd:"note",pitch:t.pitch+1,volume:t.volume,start:r+i,duration:i,gap:0,instrument:h,style:"decoration"}),u.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r+2*i,duration:i,gap:0,instrument:h,style:"decoration"}),u.push({cmd:"note",pitch:t.pitch+1,volume:t.volume,start:r+3*i,duration:i,gap:0,instrument:h,style:"decoration"}),u.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r+4*i,duration:i,gap:0,instrument:h});break;case"roll":for(;n>0;)u.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r,duration:i,gap:0,instrument:h,style:"decoration"}),n-=2*i,r+=2*i}}function F(e,t){var r,n=function(e,t){if(t)return 0;var r;if(g)r=g,g=void 0;else if(T)if(B>e)r=E;else{var n=(e-m)/H(w);r=0===n?S:parseInt(n,10)===n?_:E}else r=_;return v&&(r+=v,v=void 0),r<0&&(r=0),r>127&&(r=127),t?0:r}(L(e.time),t);if(p.processChord(e),e.gracenotes&&e.pitches&&e.pitches.length>0&&e.pitches[0]&&(r=function(e,t){for(var r,n=0,i=[],s=0;s0?D.endType="tenuto":d&&(D.endType=d),D.endType){case"tenuto":D.gap=-.001;break;case"staccato":var j=.4*D.duration;D.gap=o/60*j;break;default:D.gap=0}u.push(D)}}}u.length}var Y=function(e){return e.pitches&&e.pitches.length>0&&e.pitches[0]?e.pitches[0].duration:e.elem?e.elem.duration:e.duration}(e);f=Math.max(f,L(e.time)+O(Y))}n=function(n,a,C,O){a||(a={}),O||(O={}),e=[],t=[0,0,0,0,0,0,0],s=[],o=a.qpm,c=void 0,k=1,l=void 0,h=void 0,u=void 0,d=void 0,f=0,x=C,w={num:4,den:4},T=!0,S=105,_=95,E=85,M=.25,g=void 0,v=void 0,N=0,b=[],A={},y=1,n.length>0&&n[0].length>0&&(B=n[0][0].pickupLength),void 0===a.bassprog||O.bassprog||(O.bassprog=[a.bassprog]),void 0===a.bassvol||O.bassvol||(O.bassvol=[a.bassvol]),void 0===a.chordprog||O.chordprog||(O.chordprog=[a.chordprog]),void 0===a.chordvol||O.chordvol||(O.chordvol=[a.chordvol]),void 0===a.gchord||O.gchord||(O.gchord=[a.gchord]),p=new i(n.length,a.chordsOff,O,w),function(e,t){for(var r=0;r=0)&&(I=!0);for(var V=0;V0&&"program"===u[u.length-1].cmd)u[u.length-1].instrument=Y.program;else{var R;for(R=u.length-1;R>=0&&"program"!==u[R].cmd;R--);(R<0||u[R].instrument!==Y.program)&&u.push({cmd:"program",channel:0,instrument:Y.program})}break;case"channel":P(Y.channel);break;case"drum":A=G(Y.params),q();break;case"gchordOn":p.gChordOn(Y);break;case"beat":S=Y.beats[0],_=Y.beats[1],E=Y.beats[2];break;case"vol":g=Y.volume;break;case"volinc":v=Y.volume;break;case"beataccents":T=Y.value;break;case"gchord":case"bassprog":case"chordprog":case"bassvol":case"chordvol":p.paramChange(Y);break;default:console.log("MIDI creation. Unknown el_type: "+Y.el_type+"\n")}}void 0===u[0].instrument&&(u[0].instrument=l||0),d&&u.unshift(d),s.push(u),p.finish(),b.length}return a.detuneOctave&&function(e,t){for(var r={},n=0;n1){var c=(o=o.sort((function(e,t){return e.pitch-t.pitch})))[o.length-1],l=c.pitch%12,h=!1;for(i=0;!h&&i0&&s.push(b),{tempo:o,instrument:l,tracks:s,totalDuration:f}};var D=[0,2,4,5,7,9,11];function I(n){if(void 0!==n.midipitch)return n.midipitch;var i=n.pitch;if(n.accidental)switch(n.accidental){case"sharp":e[i]=1;break;case"flat":e[i]=-1;break;case"natural":e[i]=0;break;case"dblsharp":e[i]=2;break;case"dblflat":e[i]=-2;break;case"quartersharp":e[i]=.25;break;case"quarterflat":e[i]=-.25}var a=12*function(e){return Math.floor(e/7)}(i)+D[Y(i)]+60;return void 0!==e[i]?a+=e[i]:a+=t[Y(i)],a+=r}function j(e){var t=[0,0,0,0,0,0,0];if(!e.accidentals)return t;for(var r=0;r=0?(e.pitch=Math.round(e.pitch),e.cents=-50):t.indexOf(".25")>=0&&(e.pitch=Math.round(e.pitch),e.cents=50),e}function Y(e){return(e%=7)<0&&(e+=7),e}function G(e){if(0===e.pattern.length||!1===e.on)return{on:!1};for(var t=e.pattern[0],r=[],n="",i=0,a=0;at&&(r=r.substring(0,t)),function(e){for(var t="",r=0;r>=7;for(var n=r.length-1;n>=0;n--){t<<=8;var i=r[n];0!==n&&(i|=128),t|=i}var s=t.toString(16).length;return a(t,s+=s%2)}t.prototype.setTempo=function(e){0===this.trackcount&&(this.startTrack(),this.track+="%00%FF%51%03"+a(Math.round(6e7/e),6),this.endTrack())},t.prototype.setGlobalInfo=function(e,t,n,i){if(0===this.trackcount){this.startTrack();var s=Math.round(6e7/e);this.track+="%00%FF%51%03"+a(s,6),n&&(this.track+=function(e){if(!e||!e.accidentals)return"";for(var t="%00%FF%59%02",r=0,n=256,i=0;i=0)return n;return n}function a(e,t,r){for(var n=Math.min(e.length,t+3),i=t;i=0)return e[i].decoration[a];return null}function s(e){for(var t=0;t=0&&"bar"!==r[n].el_type;)r[n].noChordVoice=!0,n--}function o(e,t){if(e&&!(e.length<=t)&&e[t].title)return e[t].title.join(" ")}function c(e,t){var r=1/4;e.duration&&(r=e.duration[0]);var n=60;return e.bpm&&(n=e.bpm),r*n/t}function l(t){var r;switch(t.type){case"common_time":r={el_type:"meter",num:4,den:4};break;case"cut_time":r={el_type:"meter",num:2,den:2};break;case"specified":r={el_type:"meter",num:t.value[0].num,den:t.value[0].den};break;default:r={el_type:"meter"}}return e=r.num/r.den,r}function h(e){for(var t=[],r=0;r=0;r--)if(e[r].el_type===t.el_type)return void(JSON.stringify(e[r])!==JSON.stringify(t)&&e.push(t));e.push(t)}n=function(n,h){var p,m=(h=h||{}).program||0,g=h.midiTranspose||0;n.visualTranspose&&(g-=n.visualTranspose);var v=h.channel||0,b=!1,y=h.drum||"",x=h.drumBars||1,k=h.drumIntro||0,w=""!==y,C=!!h.drumOff,T=[];m=parseInt(m,10),g=parseInt(g,10),10===(v=parseInt(v,10))&&(m=t),y=y.split(" "),x=parseInt(x,10),k=parseInt(k,10);var S=n.formatting.bagpipes;S&&(m=71);var _=[];if(n.formatting.midi){var E=n.formatting.midi;E.program&&E.program.length>0&&(m=E.program[0],E.program.length>1&&(m=E.program[1],v=E.program[0]),b=!0),E.transpose&&(g=E.transpose[0]),E.channel&&(v=E.channel[0],b=!0),E.drum&&(y=E.drum),E.drumbars&&(x=E.drumbars[0]),E.drumon&&(w=!0),10===v&&(m=t),E.beat&&_.push({el_type:"beat",beats:E.beat}),E.nobeataccents&&_.push({el_type:"beataccents",value:!1})}p=h.qpm?parseInt(h.qpm,10):n.metaText.tempo?c(n.metaText.tempo,n.getBeatLength()):h.defaultQpm?h.defaultQpm:180;var M=[];S&&M.push({el_type:"bagpipes"}),M.push({el_type:"instrument",program:m}),v&&M.push({el_type:"channel",channel:v}),g&&M.push({el_type:"transpose",transpose:g}),M.push({el_type:"tempo",qpm:p});for(var N=0;N<_.length;N++)M.push(_[N]);var A,B=[],P=[],L=[],O=[0],H={};H[0]={el_type:"tempo",qpm:p,timing:0};for(var z=[],F=[],D=!1,I=n.lines,j=0;j=0?t="pppp":e.decoration.indexOf("ppp")>=0?t="ppp":e.decoration.indexOf("pp")>=0?t="pp":e.decoration.indexOf("p")>=0?t="p":e.decoration.indexOf("mp")>=0?t="mp":e.decoration.indexOf("mf")>=0?t="mf":e.decoration.indexOf("f")>=0?t="f":e.decoration.indexOf("ff")>=0?t="ff":e.decoration.indexOf("fff")>=0?t="fff":e.decoration.indexOf("ffff")>=0&&(t="ffff"),t&&(A=n[t].slice(0),B[q].push({el_type:"beat",beats:A.slice(0)}),P[X]=!1,L[X]=!1),e.decoration.indexOf("crescendo(")>=0){var i=r(U,te,"crescendo)"),s=Math.min(127,A[0]+50),o=a(U,te+i+1,Object.keys(n));o&&(s=n[o][0]),P[X]=i>0&&Math.floor((s-A[0])/i),L[X]=!1}else if(e.decoration.indexOf("crescendo)")>=0)P[X]=!1;else if(e.decoration.indexOf("diminuendo(")>=0){var c=r(U,te,"diminuendo)"),l=Math.max(15,A[0]-50),h=a(U,te+c+1,Object.keys(n));h&&(l=n[h][0]),P[X]=!1,L[X]=c>0&&Math.floor((l-A[0])/c)}else e.decoration.indexOf("diminuendo)")>=0&&(L[X]=!1)},G=V.staff,q=0,W=0;W=0?B[q].push({el_type:"transpose",transpose:-12}):R.clef.type.indexOf("+8")>=0&&B[q].push({el_type:"transpose",transpose:12})),n.formatting.midi&&n.formatting.midi.drumoff&&(B[q].push({el_type:"bar"}),B[q].push({el_type:"drum",params:{pattern:"",on:!1}}));var Q=0,J=0,Z=0,ee=0;A=[105,95,85,1];for(var te=0;te=0?B[q].push({el_type:"transpose",transpose:-12}):re.type.indexOf("+8")>=0&&B[q].push({el_type:"transpose",transpose:12}));break;case"tempo":p=c(re,n.getBeatLength()),B[q].push({el_type:"tempo",qpm:p,timing:O[q]}),H[""+O[q]]={el_type:"tempo",qpm:p,timing:O[q]};break;case"bar":Q>0&&B[q].push({el_type:"bar"}),Y(re),Q=0;var se="bar_right_repeat"===re.type||"bar_dbl_repeat"===re.type,oe="1"===re.startEnding,ce="bar_left_repeat"===re.type||"bar_dbl_repeat"===re.type||"bar_right_repeat"===re.type;if(se){var le=z[q];le||(le=0);var he=F[q];he||(he=B[q].length);for(var ue=le;ue=0&&a!==t[""+o.timing].qpm&&(a=t[""+o.timing].qpm,"tempo"===o.el_type?(o.qpm=t[""+o.timing].qpm,s++):(e[n].splice(s,0,{el_type:"tempo",qpm:t[""+o.timing].qpm,timing:o.timing}),s+=2))}}(B,H),k)for(var pe=n.getPickupLength(),me=0;mege;)ge++;if(B[me].length>ge){for(ae=0;ae0&&B[0].length>0&&(B[0][0].pickupLength=n.getPickupLength()),B}}(),e.exports=n},8702:function(e,t,r){var n=r(5281);e.exports=function(){return window.abcjsAudioContext||n(),window.abcjsAudioContext}},2710:function(e){e.exports=function(e){return Math.pow(2,e/1200)}},7207:function(e,t,r){var n=r(5008),i=function(e,t,r,n){this.chordTrack=[],this.chordTrackFinished=!1,this.chordChannel=e,this.currentChords=[],this.lastChord,this.chordLastBar,this.chordsOff=!!t,this.gChordTacet=this.chordsOff,this.hasRhythmHead=!1,this.transpose=0,this.lastBarTime=0,this.meter=n,this.tempoChangeFactor=1,this.bassInstrument=r.bassprog&&1===r.bassprog.length?r.bassprog[0]:0,this.chordInstrument=r.chordprog&&1===r.chordprog.length?r.chordprog[0]:0,this.boomVolume=r.bassvol&&1===r.bassvol.length?r.bassvol[0]:64,this.chickVolume=r.chordvol&&1===r.chordvol.length?r.chordvol[0]:48,this.overridePattern=r.gchord?s(r.gchord[0]):void 0};function a(e,t,r,n){var i=[];if(!e)return i;if(t.indexOf("boom")>=0?i.push(r?e.boom:e.boom2):n&&i.push(e.boom),t.indexOf("chick")>=0)for(var a=0;a3?i.push(e.chick[2]):i.push(e.chick[0]+12);break;case"TOP":e.chick.length>4?i.push(e.chick[2]):i.push(e.chick[1]+12);break;case"do":i.push(e.chick[0]+12);break;case"mi":i.push(e.chick[1]+12);break;case"sol":i.push(e.chick[2]+12);break;case"ti":e.chick.length>3?i.push(e.chick[2]+12):i.push(e.chick[0]+24);break;case"top":e.chick.length>4?i.push(e.chick[2]+12):i.push(e.chick[1]+24)}return i}function s(e){for(var t=[],r=0;r0&&!this.chordTrackFinished&&(this.resolveChords(this.lastBarTime,o(e.time)),this.currentChords=[]),this.chordLastBar=this.lastChord},i.prototype.gChordOn=function(e){this.chordsOff||(this.gChordTacet=e.tacet)},i.prototype.paramChange=function(e){switch(e.el_type){case"gchord":this.overridePattern=s(e.param);break;case"bassprog":this.bassInstrument=e.param;break;case"chordprog":this.chordInstrument=e.param;break;case"bassvol":this.boomVolume=e.param;break;case"chordvol":this.chickVolume=e.param;break;default:console.log("unhandled midi param",e)}},i.prototype.finish=function(){this.chordTrackEmpty()||(this.chordTrackFinished=!0)},i.prototype.addTrack=function(e){this.chordTrackEmpty()||e.push(this.chordTrack)},i.prototype.findChord=function(e){if(this.gChordTacet)return"break";if(this.chordTrackFinished||!e.chord||0===e.chord.length)return null;for(var t=0;t=0)return"break"}return null},i.prototype.interpretChord=function(e){if(0!==e.length){if("break"===e)return{chick:[]};var t=e.substring(0,1);if("("===t){if(0===(e=e.substring(1,e.length-2)).length)return;t=e.substring(0,1)}var r=this.basses[t];if(r){for(var n=this.transpose;n<-8;)n+=12;for(;n>8;)n-=12;var i,a=(r+=n)-5;1===e.length&&(i=this.chordNotes(r,""));var s=e.substring(1),o=s.substring(0,1);"b"===o||"♭"===o?(r--,a--,s=s.substring(1)):"#"!==o&&"♯"!==o||(r++,a++,s=s.substring(1));var c=s.split("/");if((i=this.chordNotes(r,c[0])).length>=3&&(a=a+(i[2]-i[0])-7),2===c.length&&this.basses[c[1].substring(0,1)]){var l={"#":1,"♯":1,b:-1,"♭":-1}[c[1].substring(1)]||0;a=r=this.basses[c[1].substring(0,1)]+l+n}return{boom:r,boom2:a,chick:i}}}},i.prototype.chordNotes=function(e,t){var r=this.chordIntervals[t];r||(r="ma"===t.slice(0,2).toLowerCase()||"M"===t[0]?this.chordIntervals.M:"m"===t[0]||"-"===t[0]?this.chordIntervals.m:this.chordIntervals.M),e+=12;for(var n=[],i=0;i0&&c[u-1]&&c[u]&&c[u-1].boom!==c[u].boom&&(d=!0);var p=l[u],m=p.indexOf("boom")>=0,g=!(m||0===u||c[u-1]&&c[u-1].boom===c[u].boom),v=a(c[u],p,d,g);m&&(d=!1);for(var b=0;b0){var s=e.gap?e.gap:0,o=e.duration;s=Math.min(s,2*o/3);var c={pitch:e.pitch,instrument:a,start:Math.round(1e6*e.start)/1e6,end:Math.round(1e6*(e.start+o-s))/1e6,volume:e.volume};e.startChar&&(c.startChar=e.startChar),e.endChar&&(c.endChar=e.endChar),e.style&&(c.style=e.style),e.cents&&(c.cents=e.cents),t[r].push(c)}break;case"program":i=n[e.instrument];break;case"text":break;default:console.log("Unhandled midi event",e)}}))})),t}},6313:function(e,t,r){var n=r(5049),i=r(5281),a=r(8702),s=r(5008),o=r(1225),c=r(9733),l=r(5075),h=r(5343),u=r(6987);function d(e,t,r,s,o){var c=!0;if(a()?c="suspended"===a().state:i(),!n())throw{status:"NotSupported",message:"This browser does not support audio."};(c||o)&&r&&r.classList.add("abcjs-loading"),c?a().resume().then((function(){s?s().then((function(n){f(e,t,r,o)})):f(e,t,r,o)})):f(e,t,r,o)}function f(e,t,r,n){n?e(t).then((function(){r&&r.classList.remove("abcjs-loading")})):(e(t),r&&r.classList.remove("abcjs-loading"))}e.exports=function(e,t){var r=this;if("string"==typeof e){var n=e;if(!(e=document.querySelector(n)))throw new Error('Cannot find element "'+n+'" in the DOM.')}else if(!(e instanceof HTMLElement))throw new Error("The first parameter must be a valid element or selector in the DOM.");if(r.parent=e,r.options={},t&&(r.options=s.clone(t)),r.options.ac&&i(r.options.ac),function(e,t){var r=!!t.loopHandler,n=!!t.restartHandler,i=!!t.playHandler||!!t.playPromiseHandler,a=!!t.progressHandler,s=!!t.warpHandler,d=!1!==t.hasClock,f='
\n';if(r){var p=t.repeatTitle?t.repeatTitle:"Click to toggle play once/repeat.";f+='\n"}if(n){var m=t.restartTitle?t.restartTitle:"Click to go to beginning.";f+='\n"}if(i){var g=t.playTitle?t.playTitle:"Click to play/pause.";f+='\n"}if(a){var v=t.randomTitle?t.randomTitle:"Click to change the playback position.";f+='\n'}if(d&&(f+='\n'),s){var b=t.warpTitle?t.warpTitle:"Change the playback speed.";f+=' ( '+(t.bpm?t.bpm:"BPM")+")\n"}f+='
CSS required: load abcjs-audio.css
',f+="
\n",e.innerHTML=f}(r.parent,r.options),function(e){var t=!!e.options.loopHandler,r=!!e.options.restartHandler,n=!!e.options.playHandler||!!e.options.playPromiseHandler,i=!!e.options.progressHandler,a=!!e.options.warpHandler,s=e.parent.querySelector(".abcjs-midi-start");t&&e.parent.querySelector(".abcjs-midi-loop").addEventListener("click",(function(t){d(e.options.loopHandler,t,s,e.options.afterResume)})),r&&e.parent.querySelector(".abcjs-midi-reset").addEventListener("click",(function(t){d(e.options.restartHandler,t,s,e.options.afterResume)})),n&&s.addEventListener("click",(function(t){d(e.options.playPromiseHandler||e.options.playHandler,t,s,e.options.afterResume,!!e.options.playPromiseHandler)})),i&&e.parent.querySelector(".abcjs-midi-progress-background").addEventListener("click",(function(t){d(e.options.progressHandler,t,s,e.options.afterResume)})),a&&e.parent.querySelector(".abcjs-midi-tempo").addEventListener("change",(function(t){d(e.options.warpHandler,t,s,e.options.afterResume)}))}(r),r.disable=function(e){var t=r.parent.querySelector(".abcjs-inline-audio");e?t.classList.add("abcjs-disabled"):t.classList.remove("abcjs-disabled")},r.setWarp=function(e,t){r.parent.querySelector(".abcjs-midi-tempo").value=Math.round(t),r.setTempo(e)},r.setTempo=function(e){var t=r.parent.querySelector(".abcjs-midi-current-tempo");t&&(t.innerHTML=Math.round(e))},r.resetAll=function(){for(var e=r.parent.querySelectorAll(".abcjs-pushed"),t=0;t0){if(e.debugCallback&&e.debugCallback("pending "+JSON.stringify(l)),a?a*=2:a=50,a<9e4)return new Promise((function(t,n){setTimeout((function(){var s=[];for(u=0;u75&&(t=75),t=t/50-1;var i=0,a=.25;8===r.den&&(a/=2);for(var s=a/2,o=s*t,c=0;c=l[h].start+s)){var d=u.start;u.start+=o,u.volume*=1+i,h>0&&l[h-1].end==d&&(l[h-1].end=u.start,l[h-1].volume*=1-i)}}}}(c,e.options.swing,e.meterFraction,e.pickupLength),e.sequenceCallback&&e.sequenceCallback(c,e.callbackContext);var l=function(e,t){if(null==t)return null;var r=[];if(t.length){for(var n=0;n1&&(i=1),r.push(i)}else r.push(0);return r}var a=parseFloat(t);if(a*(e-1)>2)return null;for(var s=e%2==0,o=s?0-a/2:0,c=o+a,l=0;lr?l[r]:0;t.forEach((function(t){var r=t.instrument+":"+t.pitch+":"+t.volume+":"+Math.round(1e3*(t.end-t.start))/1e3+":"+n+":"+a+":"+(t.cents?t.cents:0);e.debugCallback&&e.debugCallback("noteMapTrack "+r),h[r]||(h[r]=[]),h[r].push(t.start)}))}));for(var d=[],f=s().createBuffer(2,o,s().sampleRate),p=0;p0?e.audioBuffers[0].duration:0;return{status:s().state,duration:t}}e.audioBuffers=[f],e.debugCallback&&(e.debugCallback("sampleRate = "+s().sampleRate),e.debugCallback("totalSamples = "+o),e.debugCallback("creationTime = "+Math.floor(1e3*(s().currentTime-n))+"ms")),Promise.all(d).then((function(){"suspended"===s().state?s().resume().then((function(){r(b(e))})):"interrupted"===s().state?s().suspend().then((function(){s().resume().then((function(){r(b(e))}))})):r(b(e))}))}))):Promise.reject(new Error(f))},e.start=function(){if(!e.audioBufferPossible)throw new Error(f);e.debugCallback&&e.debugCallback("start called");var t=e.pausedTimeSec?e.pausedTimeSec:0;e._kickOffSound(t),e.startTimeSec=s().currentTime-t,e.pausedTimeSec=void 0,e.debugCallback&&e.debugCallback("MIDI STARTED",e.startTimeSec)},e.pause=function(){if(!e.audioBufferPossible)throw new Error(f);return e.debugCallback&&e.debugCallback("pause called"),e.pausedTimeSec=e.stop(),e.pausedTimeSec},e.resume=function(){e.start()},e.seek=function(t,r){var n;switch(r){case"seconds":n=t;break;case"beats":n=t*e.millisecondsPerMeasure/e.beatsPerMeasure/1e3;break;default:n=(e.duration-e.fadeLength/1e3)*t}if(!e.audioBufferPossible)throw new Error(f);e.debugCallback&&e.debugCallback("seek called sec="+n),e.isRunning?(e.stop(),e._kickOffSound(n)):e.pausedTimeSec=n,e.pausedTimeSec=n},e.stop=function(){return e.isRunning=!1,e.pausedTimeSec=void 0,e.directSource.forEach((function(e){try{e.stop()}catch(e){console.log("direct source didn't stop:",e)}})),e.directSource=[],s().currentTime-e.startTimeSec},e.finished=function(){e.startTimeSec=void 0,e.pausedTimeSec=void 0,e.isRunning=!1},e.download=function(){return h(e)},e.getAudioBuffer=function(){return e.audioBuffers[0]},e.getIsRunning=function(){return e.isRunning},e._deviceCapable=function(){return!!o()||(console.warn(f),e.debugCallback&&e.debugCallback(f),!1)},e._kickOffSound=function(t){e.isRunning=!0,e.directSource=[],e.audioBuffers.forEach((function(t,r){e.directSource[r]=s().createBufferSource(),e.directSource[r].buffer=t,e.directSource[r].connect(s().destination)})),e.directSource.forEach((function(e){e.start(0,t)})),e.onEnded&&(e.directSource[0].onended=function(){e.onEnded(e.callbackContext)})}}},873:function(e){e.exports=function(e){return window.URL.createObjectURL(function(e){var t,r,n=e[0],i=n.numberOfChannels,a=n.length*i*2+44,s=new ArrayBuffer(a),o=new DataView(s),c=[],l=0,h=0;for(d(1179011410),d(a-8),d(1163280727),d(544501094),d(16),u(1),u(i),d(n.sampleRate),d(2*n.sampleRate*i),u(2*i),u(16),d(1635017060),d(a-h-4),t=0;t';t.preTextDownload&&(a+=t.preTextDownload);var s,o,c=e.metaText&&e.metaText.title?e.metaText.title:"Untitled";return s=t.downloadLabel&&(o=t.downloadLabel)&&"[object Function]"==={}.toString.call(o)?t.downloadLabel(e,n):t.downloadLabel?t.downloadLabel.replace(/%T/,c):'Download MIDI for "'+c+'"',c=c.toLowerCase().replace(/'/g,"").replace(/\W/g,"_").replace(/__/g,"_"),a+=''+s+"",t.postTextDownload&&(a+=t.postTextDownload),a+""};e.exports=function(e,t){var r={};if(t)for(var s in t)t.hasOwnProperty(s)&&(r[s]=t[s]);function o(e,t,n){var s=i(t,r);switch(r.midiOutputType){case"encoded":return s;case"binary":var o=s.replace("data:audio/midi,","");o=(o=o.replace(/MThd/g,"%4d%54%68%64")).replace(/MTrk/g,"%4d%54%72%6b");for(var c=new ArrayBuffer(o.length/3),l=new Uint8Array(c),h=0;h4)for(i=i.toLowerCase(),t-=5;t>0;)i+="'",t--;else for(;t<4;)i+=",",t++;return i}}},522:function(e){e.exports={21:"A0",22:"Bb0",23:"B0",24:"C1",25:"Db1",26:"D1",27:"Eb1",28:"E1",29:"F1",30:"Gb1",31:"G1",32:"Ab1",33:"A1",34:"Bb1",35:"B1",36:"C2",37:"Db2",38:"D2",39:"Eb2",40:"E2",41:"F2",42:"Gb2",43:"G2",44:"Ab2",45:"A2",46:"Bb2",47:"B2",48:"C3",49:"Db3",50:"D3",51:"Eb3",52:"E3",53:"F3",54:"Gb3",55:"G3",56:"Ab3",57:"A3",58:"Bb3",59:"B3",60:"C4",61:"Db4",62:"D4",63:"Eb4",64:"E4",65:"F4",66:"Gb4",67:"G4",68:"Ab4",69:"A4",70:"Bb4",71:"B4",72:"C5",73:"Db5",74:"D5",75:"Eb5",76:"E5",77:"F5",78:"Gb5",79:"G5",80:"Ab5",81:"A5",82:"Bb5",83:"B5",84:"C6",85:"Db6",86:"D6",87:"Eb6",88:"E6",89:"F6",90:"Gb6",91:"G6",92:"Ab6",93:"A6",94:"Bb6",95:"B6",96:"C7",97:"Db7",98:"D7",99:"Eb7",100:"E7",101:"F7",102:"Gb7",103:"G7",104:"Ab7",105:"A7",106:"Bb7",107:"B7",108:"C8",109:"Db8",110:"D8",111:"Eb8",112:"E8",113:"F8",114:"Gb8",115:"G8",116:"Ab8",117:"A8",118:"Bb8",119:"B8",120:"C9",121:"Db9"}},5058:function(e){var t={f0:"_C",n0:"=C",s0:"^C",x0:"C",f1:"_D",n1:"=D",s1:"^D",x1:"D",f2:"_E",n2:"=E",s2:"^E",x2:"E",f3:"_F",n3:"=F",s3:"^F",x3:"F",f4:"_G",n4:"=G",s4:"^G",x4:"G",f5:"_A",n5:"=A",s5:"^A",x5:"A",f6:"_B",n6:"=B",s6:"^B",x6:"B",f7:"_c",n7:"=c",s7:"^c",x7:"c",f8:"_d",n8:"=d",s8:"^d",x8:"d",f9:"_e",n9:"=e",s9:"^e",x9:"e",f10:"_f",n10:"=f",s10:"^f",x10:"f",f11:"_g",n11:"=g",s11:"^g",x11:"g",f12:"_a",n12:"=a",s12:"^a",x12:"a",f13:"_b",n13:"=b",s13:"^b",x13:"b",f14:"_c'",n14:"=c'",s14:"^c'",x14:"c'",f15:"_d'",n15:"=d'",s15:"^d'",x15:"d'",f16:"_e'",n16:"=e'",s16:"^e'",x16:"e'"};e.exports=function(e){var r=(e.accidental?e.accidental[0]:"x")+e.verticalPos;return t[r]}},4586:function(e,t,r){var n=r(4771),i=r(522),a=r(2710),s=function(e,t,r){for(var n=0;n<2;n++)for(var i=t.getChannelData(n),a=e.getChannelData(n),s=0;s=1&&parseInt(e.cursorControl.beatSubdivisions,10)<=64&&(r=parseInt(e.cursorControl.beatSubdivisions,10)),e.timer=new a(e.visualObj,{beatCallback:e.beatCallback,eventCallback:e.eventCallback,lineEndCallback:e.lineEndCallback,qpm:e.currentTempo,extraMeasuresAtBeginning:e.cursorControl?e.cursorControl.extraMeasuresAtBeginning:void 0,lineEndAnticipation:e.cursorControl?e.cursorControl.lineEndAnticipation:0,beatSubdivisions:r}),e.cursorControl&&e.cursorControl.onReady&&"function"==typeof e.cursorControl.onReady&&e.cursorControl.onReady(e),e.isLoaded=!0,e.isLoading=!1,Promise.resolve({status:"created",notesStatus:t})}))},e.destroy=function(){e.timer&&(e.timer.reset(),e.timer.stop(),e.timer=null),e.midiBuffer&&(e.midiBuffer.stop(),e.midiBuffer=null),e.setProgress(0,1),e.control&&e.control.resetAll()},e.play=function(){return e.runWhenReady(e._play,void 0)},e.runWhenReady=function(t,r){return e.visualObj?e.isLoading?(n=500,new Promise((function(e){setTimeout(e,n)}))).then((function(){return e.isLoading?e.runWhenReady(t,r):t(r)})):e.isLoaded?t(r):e.go().then((function(){return t(r)})):Promise.resolve({status:"loading"});var n},e._play=function(){return s().resume().then((function(){return e.isStarted=!e.isStarted,e.isStarted?(e.cursorControl&&e.cursorControl.onStart&&"function"==typeof e.cursorControl.onStart&&e.cursorControl.onStart(),e.midiBuffer.start(),e.timer.start(e.percent),e.control&&e.control.pushPlay(!0)):e.pause(),Promise.resolve({status:"ok"})}))},e.pause=function(){e.timer&&(e.timer.pause(),e.midiBuffer.pause(),e.control&&e.control.pushPlay(!1))},e.toggleLoop=function(){e.isLooping=!e.isLooping,e.control&&e.control.pushLoop(e.isLooping)},e.restart=function(){e.timer&&(e.timer.setProgress(0),e.midiBuffer.seek(0))},e.randomAccess=function(t){return e.runWhenReady(e._randomAccess,t)},e._randomAccess=function(t){var r=t.target.classList.contains("abcjs-midi-progress-indicator")?t.target.parentNode:t.target,n=(t.x-r.getBoundingClientRect().left)/r.offsetWidth;return n<0&&(n=0),n>1&&(n=1),e.seek(n),Promise.resolve({status:"ok"})},e.seek=function(t,r){e.timer&&e.midiBuffer&&(e.timer.setProgress(t,r),e.midiBuffer.seek(t,r))},e.setWarp=function(t){if(parseInt(t,10)>0){e.warp=parseInt(t,10);var r=e.isStarted,n=e.percent;return e.destroy(),e.isStarted=!1,e.go().then((function(){return e.setProgress(n,1e3*e.midiBuffer.duration),e.control&&e.control.setWarp(e.currentTempo,e.warp),r?e.play().then((function(){return e.seek(n),Promise.resolve()})):(e.seek(n),Promise.resolve())}))}return Promise.resolve()},e.onWarp=function(t){var r=t.target.value;return e.setWarp(r)},e.setProgress=function(t,r){e.percent=t,e.control&&e.control.setProgress(t,r)},e.finished=function(){if(e.timer.reset(),e.isLooping)return e.timer.start(0),e.midiBuffer.finished(),e.midiBuffer.start(),"continue";e.timer.stop(),e.isStarted&&(e.control&&e.control.pushPlay(!1),e.isStarted=!1,e.midiBuffer.finished(),e.cursorControl&&e.cursorControl.onFinished&&"function"==typeof e.cursorControl.onFinished&&e.cursorControl.onFinished(),e.setProgress(0,1))},e.beatCallback=function(t,r,n,i){var a=t/r;e.setProgress(a,n),e.cursorControl&&e.cursorControl.onBeat&&"function"==typeof e.cursorControl.onBeat&&e.cursorControl.onBeat(t,r,n,i)},e.eventCallback=function(t){if(!t)return e.finished();e.cursorControl&&e.cursorControl.onEvent&&"function"==typeof e.cursorControl.onEvent&&e.cursorControl.onEvent(t)},e.lineEndCallback=function(t,r){e.cursorControl&&e.cursorControl.onLineEnd&&"function"==typeof e.cursorControl.onLineEnd&&e.cursorControl.onLineEnd(t,r)},e.getUrl=function(){return e.midiBuffer.download()},e.download=function(t){var r=e.getUrl(),n=document.createElement("a");document.body.appendChild(n),n.setAttribute("style","display: none;"),n.href=r,n.download=t||"output.wav",n.click(),window.URL.revokeObjectURL(r),document.body.removeChild(n)}}},2029:function(e){e.exports=function(){var e=this;e.tracks=[],e.totalDuration=0,e.currentInstrument=[],e.starts=[],e.addTrack=function(){return e.tracks.push([]),e.currentInstrument.push(0),e.starts.push(0),e.tracks.length-1},e.setInstrument=function(t,r){e.tracks[t].push({channel:0,cmd:"program",instrument:r}),e.currentInstrument[t]=r},e.appendNote=function(t,r,n,i,a){var s={cmd:"note",duration:n,gap:0,instrument:e.currentInstrument[t],pitch:r,start:e.starts[t],volume:i};a&&(s.cents=a),e.tracks[t].push(s),e.starts[t]+=n,e.totalDuration=Math.max(e.totalDuration,e.starts[t])}}},1921:function(e,t,r){var n=r(2842).noteToMidi,i=r(6776),a=r(6629);function s(e,t){for(var r=[],n=0;n=0;n--)if(t.pitch+t.pitchAltered>=e.stringPitches[n]){var i=t.pitch+t.pitchAltered-e.stringPitches[n];return"^"===t.quarter?i-=.5:"v"===t.quarter&&(i+=.5),{num:Math.round(i),str:e.stringPitches.length-1-n,note:t}}return{num:"?",str:e.stringPitches.length-1,note:t}}function l(e,t){var r={num:"?",str:0,note:t};e.push(r),e.error=t.emit()+": unexpected note for instrument"}function h(e){var t=e.tuning,r=e.capo,s=e._super.params.highestNote;this.linePitch=e.linePitch,this.highestNote="a'",s&&(this.highestNote=s),this.measureAccidentals={},this.capo=0,r&&(this.capo=parseInt(r,10)),this.transpose=e.transpose?e.transpose:0,this.tuning=t,this.stringPitches=[];for(var o=0;o0&&(this.capoTuning=function(e){var t=null,r=e.tuning;if(e.capo>0){t=[];for(var n=0;n0&&(r=e.capoTuning);for(var n=r.length-1,i=0;i1?(o=s(this,e)).error&&(a=o.error):e[0].endTie||((r=new i.TabNote(e[0].name,this.clefTranspose)).checkKeyAccidentals(this.accidentals,this.measureAccidentals),(n=c(this,r))?o.push(n):(l(o,r),a=o.error))),a)return o;var h=null;if(t){h=[];for(var u=0;u0&&(r+=" capo:"+e.capo),t=t.replace("%T",r)),t}return""},h.prototype.suppress=function(e){return!!e._super.params.suppress},e.exports=h},8918:function(e){function t(e,t){this.numLines=e,this.lineSpace=t,this.verticalSize=this.numLines*this.lineSpace,this.bar={pitch:3,pitch2:t*e,height:5}}t.prototype.bypass=function(e){var t=e.staffGroup.voices;return!!(t.length>0&&t[0].isPercussion)},t.prototype.setRelative=function(e,t,r){switch(e.type){case"bar":t.pitch=this.bar.pitch,t.pitch2=this.bar.pitch2,t.height=this.height;break;case"symbol":var n=this.bar.pitch2/2;if("dots.dot"==e.name)return r?(t.pitch=n,!1):(t.pitch=n+this.lineSpace,!0)}return r},e.exports=t},6776:function(e,t,r){var n=r(2842),i=n.noteToMidi,a=n.midiToNote;function s(e,t){var r=i(e);t&&(r+=t);var n,s=a(r),o=!1,c=!1,l=null,h=null,u=!1,d=0;e.startsWith("_")?(o=!0,d=-1,"/"==e[1]?(o=!1,h="v",d=0):"_"==e[1]&&(u=!0,d-=1)):e.startsWith("^")?(c=!0,d=1,"/"==e[1]?(c=!1,h="^",d=0):"^"==e[1]&&(u=!0,d+=1)):e.startsWith("=")&&(l=!0,d=0),((n=o||c||null!=h)||l)&&(s=null!=h||u?e.slice(2):e.slice(1));var f=(s.match(/,/g)||[]).length,p=(s.match(/'/g)||[]).length;this.pitch=r,this.pitchAltered=0,this.name=s,this.acc=d,this.isSharp=c,this.isKeySharp=!1,this.isDouble=u,this.isAltered=n,this.isFlat=o,this.isKeyFlat=!1,this.natural=l,this.quarter=h,this.isLower=this.name==this.name.toLowerCase(),this.name=this.name[0].toUpperCase(),this.hasComma=f,this.isQuoted=p}s.prototype.sameNoteAs=function(e){return e.pitch===this.pitch},s.prototype.isLowerThan=function(e){return e.pitch>this.pitch},s.prototype.checkKeyAccidentals=function(e,t){if(!this.isAltered&&!this.natural)if(t[this.name.toUpperCase()])switch(t[this.name.toUpperCase()]){case"__":return this.acc=-2,void(this.pitchAltered=-2);case"_":return this.acc=-1,void(this.pitchAltered=-1);case"=":return this.acc=0,void(this.pitchAltered=0);case"^":return this.acc=1,void(this.pitchAltered=1);case"^^":return this.acc=2,void(this.pitchAltered=2)}else if(e)for(var r=this.name,n=0;n=0){if(r===t)return e.extra[n].x+e.extra[n].w/2;r++}return-1}function f(e){if(e.abcelem){var t=e.abcelem;if(t.rest)return t.gracenotes}return null}function p(e,t,r){var n=e.semantics.notesToNumber(t,r);if(n.error)return e._super.setError(n.error),n;if(n.graces&&n.notes){var i=n.notes.length-1;n.notes[i].graces=n.graces}return n}function m(e,t,r,n,i){for(var a=0;a=0&&(e.semantics.strings.clefTranspose=-12),k.abcelem.type.indexOf("+8")>=0&&(e.semantics.strings.clefTranspose=12)),k.type){case"staff-extra key-signature":this.accidentals=k.abcelem.accidentals,e.semantics.strings.accidentals=this.accidentals;break;case"bar":e.semantics.strings.measureAccidentals={};var T=!1;x===g.children.length-1&&(T=!0);var S=o(k,e);if(S.abcelem.barNumber){delete S.abcelem.barNumber;for(var _=0;_0&&(y.abselem=M,r.push(y),v.children.push(M))}}},e.exports=h},8660:function(e){function t(e,t,r){this.tune=e,this.params=r,this.tuneNumber=t,this.inError=!1}t.prototype.setError=function(e){var t=this.tune;e&&(this.error=e,this.inError=!0,t.warnings?t.warnings.push(e):t.warnings=[e])},e.exports=t},676:function(e,t,r){var n=r(3197),i=r(1696),a=r(4331);function s(e,t){var r=e.plugin.semantics.strings,n=e.renderer.controller.getTextSize,i=r.tabInfos(e.plugin),a=!0;if(r.suppress(e.plugin)&&(a=!1),a){var s=n.calc(i,"tablabelfont","text instrumentname");return t.tabNameInfos={textSize:{height:s.height,width:s.width},name:i},s.height}return 0}function o(e,t,r,n){this.renderer=t,this.plugin=e,this.line=r,this.absolutes=new i,this.staffIndex=n,this.tabStaff={clef:{type:"TAB"}},this.tabSize=e.linePitch*e.nbLines}function c(e,t){return!(!t[e].isTabStaff||e!==t.length-1&&t[e+1].isTabStaff)}function l(e,t){for(var r=t;r>=0;r--)if(!e[r].isTabStaff)return r;return-1}function h(e,t){return"clef"===e[t].children[0].abcelem.el_type?null:0==t?"none":e[t-1].children[0]}o.prototype.doLayout=function(){var e=this.line.staff;if(e){var t=e[0];if(t&&t.clef&&0==t.clef.stafflines)return void this.plugin._super.setError("No tablatures when stafflines=0");e.splice(e.length,0,this.tabStaff)}var r=this.line.staffGroup,i=r.voices,o=function(e){for(var t=0,r=0;rt&&(t=n.specialY.lyricHeightBelow)}return t}(i[0]),u=this.staffIndex,d=r.staffs[u],f=this.tabSize+3-d.bottom-o;d.isTabStaff&&(f=d.top);var p={bottom:-1,isTabStaff:!0,specialY:{tempoHeightAbove:0,partHeightAbove:0,volumeHeightAbove:0,dynamicHeightAbove:0,endingHeightAbove:0,chordHeightAbove:0,lyricHeightAbove:0,lyricHeightBelow:0,chordHeightBelow:0,volumeHeightBelow:0,dynamicHeightBelow:0},lines:this.plugin.nbLines,linePitch:this.plugin.linePitch,dy:.15,top:f},m=function(e,t){for(var r=e.staffIndex,n=0,i=0,a=0;;){if(!t[n])return-1;if(t[n].isTabStaff||(a=t[n].voices.length),t[n].isTabStaff){if(i++,c(n,t)&&i=r){if(n+1==t.length)return n+1;if(!t[n+1].isTabStaff)return n+1}if(++n>t.length)return-1}}(this,r.staffs);if(-1!==m){p.parentIndex=m-1,r.staffs.splice(m,0,p),r.height+=this.tabSize+3;var g=function(e,t){for(var r=t;r>=0;r--)if(!e[r].isTabStaff)return e[r];return null}(r.staffs,m),v=1;(function(e,t){return 1===function(e){for(var t=0,r=0;r1})(r.staffs,g)&&(v=g.voices.length),this.tabStaff.voices=[];for(var b=0;b0&&(y.duplicate=!0);var x=s(this,y)/a.STEP;x=Math.max(x,1),r.staffs[this.staffIndex].top+=1,r.height+=x,y.staff=p;var k=i.length;i.splice(i.length,0,y);var w=h(i,b+this.staffIndex);this.tabStaff.voices[b]=[],this.absolutes.build(this.plugin,i,this.tabStaff.voices[b],b,this.staffIndex,w,k)}!function(e){for(var t=0;t0&&(a[0].invisible=!0);break;case"meter":a[0]=l(i,this.tuneNumber),this.startlimitelem=a[0],r.duplicate&&a.length>0&&(a[0].invisible=!0);break;case"clef":if(a[0]=s(i,this.tuneNumber),!a[0])return null;r.duplicate&&a.length>0&&(a[0].invisible=!0);break;case"key":var h=o(i,this.tuneNumber);h&&(a[0]=h,this.startlimitelem=a[0]),r.duplicate&&a.length>0&&(a[0].invisible=!0);break;case"stem":this.stemdir="auto"===i.direction?void 0:i.direction;break;case"part":var u=new n(i,0,0,"part",this.tuneNumber),d=this.getTextSize.calc(i.title,"partsfont","part");u.addFixedX(new f(i.title,0,0,void 0,{type:"part",height:d.height/p.STEP})),a[0]=u;break;case"tempo":var m=new n(i,0,0,"tempo",this.tuneNumber);m.addFixedX(new g(i,this.tuneNumber,c)),a[0]=m;break;case"style":"normal"===i.head?delete this.style:this.style=i.head;break;case"hint":T=!0,this.saveState();break;case"midi":break;case"scale":this.voiceScale=i.size;break;case"color":this.voiceColor=i.color,r.color=this.voiceColor;break;default:var v=new n(i,0,0,"unsupported",this.tuneNumber);v.addFixed(new f("element type "+i.el_type,0,0,void 0,{type:"debug"})),a[0]=v}return a},_.prototype.createBeam=function(e,t,r){var n=[],a=new i(this.stemHeight*this.voiceScale,this.stemdir,this.flatBeams,r[0]);T&&a.setHint();for(var s=0;se.pitches[r+1].pitch){t=!1;var n=e.pitches[r];e.pitches[r]=e.pitches[r+1],e.pitches[r+1]=n}}while(!t)},A=function(e,t,r,n,i,a,s,o,c){for(var l=r;l>11;l--)l%2!=0||n||e.addFixed(new f(null,o,(i+4)*c,l,{type:"ledger"}));for(l=t;l<1;l++)l%2!=0||n||e.addFixed(new f(null,o,(i+4)*c,l,{type:"ledger"}));for(l=0;l1&&(p=new i(a,"grace",s),T&&p.setHint(),p.mainNote=r);var m=[];for(u=e.gracenotes.length-1;u>=0;u--)o+=10,m[u]=o,e.gracenotes[u].accidental&&(o+=7);for(u=0;u=6?"down":"up";for(n&&(_=n),(i=t.style?t.style:i)&&"normal"!==i||(i="note"),(m=a?S[i].nostem:S[i][-s])||console.log("noteSymbol:",i,s,a),g="down"===_?t.pitches.length-2:1;"down"===_?g>=0:g11||M.verticalPos<1)&&x.push(M.verticalPos-M.verticalPos%2),"down"===_?b=d.getSymbolWidth(m)+2:v=d.getSymbolWidth(m)+2)}var A=t.pitches.length;for(g=0;g0&&(h.bottom=h.bottom-1),e.addHead(h)),b+=z.accidentalshiftx,y=Math.max(y,z.dotshiftx)}if(H){var F=Math.round(70*this.voiceScale)/10,D="down"===_?t.minpitch-F:t.minpitch+1/3;D>6&&!n&&(D=6);var I="down"===_?t.maxpitch-1/3:t.maxpitch+F;I<6&&!n&&(I=6);var j="down"===_||0===e.heads.length?0:e.heads[0].w,V="down"===_?1:-1;h&&"noteheads.slash.quarter"===h.c&&("down"===_?I-=1:D+=1),h&&"noteheads.triangle.quarter"===h.c&&("down"===_?I-=.7:D-=1.2),e.addRight(new f(null,j,0,D,{type:"stem",pitch2:I,linewidth:V,bottom:D-1})),u=Math.min(D,I)}return{noteHead:h,roomTaken:b,roomTakenRight:y,min:u,additionalLedgers:x,dir:_,symbolWidth:T}},_.prototype.addLyric=function(e,t){var r="";t.lyric.forEach((function(e){var t=" "===e.divider?"":e.divider;r+=e.syllable+t+"\n"}));var n=this.getTextSize.calc(r,"vocalfont","lyric"),i=t.positioning?t.positioning.vocalPosition:"below";e.addCentered(new f(r,0,n.width,void 0,{type:"lyric",position:i,height:n.height/p.STEP,dim:this.getTextSize.attr("vocalfont","lyric")}))},_.prototype.createNote=function(e,t,r,i){var a,s=null,o=0,l=0,h=0,u=[],p=C(e),m=!1;0===p&&(m=!0,p=.25,t=!0);for(var g=Math.floor(Math.log(p)/Math.log(2)),v=0,y=Math.pow(2,g),k=y/2;y1,this.stemdir,r,g,this.voiceScale);s=M.noteHead,o=M.roomTaken,l=M.roomTakenRight}else{var N=this.addNoteToAbcElement(E,e,v,this.stemdir,this.style,m,g,t,i);void 0!==N.min&&(this.minY=Math.min(N.min,this.minY)),s=N.noteHead,o=N.roomTaken,l=N.roomTakenRight,u=N.additionalLedgers,a=N.dir,h=N.symbolWidth}if(void 0!==e.lyric&&this.addLyric(E,e),void 0!==e.gracenotes&&(o+=this.addGraceNotes(e,i,E,s,this.stemHeight*this.voiceScale,this.isBagpipes,o)),e.decoration){var B=t?Math.min(-3,E.bottom-6):E.bottom;this.decoration.createDecoration(i,e.decoration,E.top,s?s.w:0,E,o,a,B,e.positioning,this.hasVocals,this.accentAbove)}if(e.barNumber&&E.addFixed(new f(e.barNumber,-10,0,0,{type:"barNumber"})),A(E,e.minpitch,e.maxpitch,e.rest,h,u,a,-2,1),void 0!==e.chord){var P=x(this.getTextSize,E,e,o,l,h,this.jazzchords,this.germanAlphabet);o=P.roomTaken,l=P.roomTakenRight}return e.startTriplet&&(this.triplet=new b(e.startTriplet,s,{flatBeams:this.flatBeams})),e.endTriplet&&this.triplet&&this.triplet.setCloseAnchor(s),!this.triplet||e.startTriplet||e.endTriplet||e.rest&&"spacer"===e.rest.type||this.triplet.middleNote(s),E},_.prototype.addSlursAndTies=function(e,t,r,n,i,a){if(t.endTie&&this.ties.length>0){for(var s=!1,o=0;o10&&"treble"===t.abcelem.type?13:11;t.addFixed(new f(e,n,r.width,i+r.height/p.STEP,{type:"barNumber",dim:this.getTextSize.attr("measurefont","bar-number")}))},_.prototype.createBarLine=function(e,t,r){var i=new n(t,0,10,"bar",this.tuneNumber),a=null,s=0;t.barNumber&&this.addMeasureNumber(t.barNumber,i);var o="bar_right_repeat"===t.type||"bar_dbl_repeat"===t.type,c="bar_left_repeat"!==t.type&&"bar_thick_thin"!==t.type&&"bar_invisible"!==t.type,l="bar_right_repeat"===t.type||"bar_dbl_repeat"===t.type||"bar_left_repeat"===t.type||"bar_thin_thick"===t.type||"bar_thick_thin"===t.type,h="bar_left_repeat"===t.type||"bar_thick_thin"===t.type||"bar_thin_thin"===t.type||"bar_dbl_repeat"===t.type,d="bar_left_repeat"===t.type||"bar_dbl_repeat"===t.type;if(o||d){for(var p in this.slurs)this.slurs.hasOwnProperty(p)&&this.slurs[p].setEndX(i);this.startlimitelem=i}if(o&&(i.addRight(new f("dots.dot",s,1,7)),i.addRight(new f("dots.dot",s,1,5)),s+=6),c&&(a=new f(null,s,1,2,{type:"bar",pitch2:10,linewidth:.6}),i.addRight(a)),"bar_invisible"===t.type&&(a=new f(null,s,1,2,{type:"none",pitch2:10,linewidth:.6}),i.addRight(a)),t.decoration&&this.decoration.createDecoration(e,t.decoration,12,l?3:1,i,0,"down",2,t.positioning,this.hasVocals,this.accentAbove),l&&(a=new f(null,s+=4,4,2,{type:"bar",pitch2:10,linewidth:4}),i.addRight(a),s+=5),this.partstartelem&&t.endEnding&&(this.partstartelem.anchor2=a,this.partstartelem=null),h&&(a=new f(null,s+=3,1,2,{type:"bar",pitch2:10,linewidth:.6}),i.addRight(a)),d&&(s+=3,i.addRight(new f("dots.dot",s,1,7)),i.addRight(new f("dots.dot",s,1,5))),t.startEnding&&r){var m=this.getTextSize.calc(t.startEnding,"repeatfont","").width;i.minspacing+=m+10,this.partstartelem=new u(t.startEnding,a,null),e.addOther(this.partstartelem)}return i.extraw-=5,void 0!==t.chord&&x(this.getTextSize,i,t,0,0,0,!1,this.germanAlphabet),i},e.exports=_},2652:function(e,t,r){var n=r(6658),i=r(4331),a=r(5810);function s(e,t,r,s,o,c,l,h,u,d,f,p,m,g,v){for(var b=e.split("\n"),y=b.length-1;y>=0;y--){var x,k=b[y],w=0;s||(k=a(k,g,v));var C=h.calc(k,o,c),T=C.width,S=C.height/i.STEP;switch(t){case"left":w=-(f+=T+7),x=d.averagepitch,u.addExtra(new n(k,w,T+4,x,{type:"text",height:S,dim:l,position:"left"}));break;case"right":w=p+=4,x=d.averagepitch,u.addRight(new n(k,w,T+4,x,{type:"text",height:S,dim:l,position:"right"}));break;case"below":u.addRight(new n(k,0,0,void 0,{type:"text",position:"below",height:S,dim:l,realWidth:T}));break;case"above":u.addRight(new n(k,0,0,void 0,{type:"text",position:"above",height:S,dim:l,realWidth:T}));break;default:if(r){var _=r.y+3*i.STEP;u.addRight(new n(k,w+r.x,0,d.minpitch+_/i.STEP,{position:"relative",type:"text",height:S,dim:l}))}else{var E="above";d.positioning&&d.positioning.chordPosition&&(E=d.positioning.chordPosition),"hidden"!==E&&u.addCentered(new n(k,m/2,T,void 0,{type:"chord",position:E,height:S,dim:l,realWidth:T}))}}}return{roomTaken:f,roomTakenRight:p}}e.exports=function(e,t,r,n,i,a,o,c){for(var l=0;l0?o.top+3:o.bottom-1,f=s>0?o.top+3:o.bottom-3,p=f-2;"bass-8"===e.type&&(d=3,u=0),o.addRight(new a("8",5+u,i.getSymbolWidth("8")*h,d,{scalex:h,scaley:h,top:f,bottom:p}))}}return o}},3923:function(e,t,r){var n=r(1409),i=r(6020),a=r(6658);e.exports=function(e,t){if(e.el_type="keySignature",!e.accidentals||0===e.accidentals.length)return null;var r=new n(e,0,10,"staff-extra key-signature",t);r.isKeySig=!0;var s=0;return e.accidentals.forEach((function(e){var t,n=0;switch(e.acc){case"sharp":t="accidentals.sharp",n=-3;break;case"natural":t="accidentals.nat";break;case"flat":t="accidentals.flat",n=-1.2;break;case"quartersharp":t="accidentals.halfsharp",n=-2.5;break;case"quarterflat":t="accidentals.halfflat",n=-1.2;break;default:t="accidentals.flat"}r.addRight(new a(t,s,i.getSymbolWidth(t),e.verticalPos,{thickness:i.symbolHeightInPitches(t),top:e.verticalPos+i.symbolHeightInPitches(t)+n,bottom:e.verticalPos+n})),s+=i.getSymbolWidth(t)+2}),this),r}},2143:function(e,t,r){var n=r(6020),i=r(6658);e.exports=function(e,t,r,a){a||(a={});var s,o=void 0!==a.dir?a.dir:null,c=void 0!==a.headx?a.headx:0,l=void 0!==a.extrax?a.extrax:0,h=void 0!==a.flag?a.flag:null,u=void 0!==a.dot?a.dot:0,d=void 0!==a.dotshiftx?a.dotshiftx:0,f=void 0!==a.scale?a.scale:1,p=void 0!==a.accidentalSlot?a.accidentalSlot:[],m=void 0!==a.shouldExtendStem&&a.shouldExtendStem,g=void 0===a.printAccidentals||a.printAccidentals,v=r.verticalPos,b=0,y=0,x=0;if(void 0===t)e.addFixed(new i("pitch is undefined",0,0,0,{type:"debug"}));else if(""===t)s=new i(null,0,0,v);else{var k=c;if(r.printer_shift){var w="same"===r.printer_shift?1:0;k="down"===o?-n.getSymbolWidth(t)*f+w:n.getSymbolWidth(t)*f-w}var C={scalex:f,scaley:f,thickness:n.symbolHeightInPitches(t)*f,name:r.name};if((s=new i(t,k,n.getSymbolWidth(t)*f,v,C)).stemDir=o,h){var T=v+("down"===o?-7:7)*f;m&&("down"===o&&T>6&&(T=6),"up"===o&&T<6&&(T=6));var S="down"===o?c:c+s.w-.6;e.addRight(new i(h,S,n.getSymbolWidth(h)*f,T,{scalex:f,scaley:f}))}for(y=s.w+d-2+5*u;u>0;u--){var _=1-Math.abs(v)%2;e.addRight(new i("dots.dot",s.w+d-2+5*u,n.getSymbolWidth("dots.dot"),v+_))}}if(s&&(s.highestVert=r.highestVert),g&&r.accidental){var E;switch(r.accidental){case"quartersharp":E="accidentals.halfsharp";break;case"dblsharp":E="accidentals.dblsharp";break;case"sharp":E="accidentals.sharp";break;case"quarterflat":E="accidentals.halfflat";break;case"flat":E="accidentals.flat";break;case"dblflat":E="accidentals.dblflat";break;case"natural":E="accidentals.nat"}for(var M=!1,N=l,A=0;A=6){p[A][0]=v,N=p[A][1],M=!0;break}!1===M&&(N-=n.getSymbolWidth(E)*f+2,p.push([v,N]),b=n.getSymbolWidth(E)*f+2);var B=n.symbolHeightInPitches(E);e.addExtra(new i(E,N,n.getSymbolWidth(E),v,{scalex:f,scaley:f,top:v+B/2,bottom:v-B/2})),x=n.getSymbolWidth(E)/2}return{notehead:s,accidentalshiftx:b,dotshiftx:y,extraLeft:x}}},2525:function(e,t,r){var n=r(1409),i=r(6020),a=r(6658);e.exports=function(e,t){e.el_type="timeSignature";var r=new n(e,0,10,"staff-extra time-signature",t);if("specified"===e.type)for(var s=0,o=0;o",n)),o&&e.addOther(new i(o.start,o.stop,"<",n)),c&&e.addOther(new a(c.start,c.stop))},l.prototype.createDecoration=function(e,t,r,i,a,l,u,d,f,p,m){f||(f={ornamentPosition:"above",volumePosition:p?"above":"below",dynamicPosition:p?"above":"below"}),function(e,t,r,i){for(var a=0;a9&&d++;var m=n/2;"center"!==s.getSymbolAlign(p)&&(m-=s.getSymbolWidth(p)/2),i.addFixedX(new o(p,m,s.getSymbolWidth(p),d))}if("slide"===t[f]&&i.heads[0]){var g=i.heads[0].pitch,v=new o("",-a-15,0,(g-=2)-1),b=new o("",-a-5,0,g+1);i.addFixedX(v),i.addFixedX(b),e.addOther(new c({anchor1:v,anchor2:b,fixedY:!0}))}}return void 0===d&&(d=r),{above:d,below:i.bottom}}(e,t,r,i,a,l,u,d,m);g.above=Math.max(g.above,this.minTop),g.below=Math.min(g.below,d),function(e,t,r,n,i,a,c,l){function h(e,t){"above"===e?n.above+=t:n.below-=t}function u(e){var t;return"above"===e?(t=n.above)c&&(t=c),t}function d(e,n,i){var a=u(n);r.addFixedX(new o(e,t/2,0,a+2,{type:"decoration",klass:"ornament",thickness:3,anchor:i})),h(n,5)}function f(e,n){var i=t/2;"center"!==s.getSymbolAlign(e)&&(i-=s.getSymbolWidth(e)/2);var a=s.symbolHeightInPitches(e)+1,c=u(n);c="above"===n?c+a/2:c-a/2,r.addFixedX(new o(e,i,s.getSymbolWidth(e),c,{klass:"ornament",thickness:s.symbolHeightInPitches(e),position:n})),h(n,a)}for(var p={"+":"scripts.stopped",open:"scripts.open",snap:"scripts.snap",wedge:"scripts.wedge",thumb:"scripts.thumb",shortphrase:"scripts.shortphrase",mediumphrase:"scripts.mediumphrase",longphrase:"scripts.longphrase",trill:"scripts.trill",roll:"scripts.roll",irishroll:"scripts.roll",marcato:"scripts.umarcato",dmarcato:"scripts.dmarcato",umarcato:"scripts.umarcato",turn:"scripts.turn",uppermordent:"scripts.prall",pralltriller:"scripts.prall",mordent:"scripts.mordent",lowermordent:"scripts.mordent",downbow:"scripts.downbow",upbow:"scripts.upbow",fermata:"scripts.ufermata",invertedfermata:"scripts.dfermata",breath:",",coda:"scripts.coda",segno:"scripts.segno"},m=0;mthis.w&&(this.w=e.dx+e.w),this.right[this.right.length]=e,this._addChild(e)},a.prototype.addFixed=function(e){this._addChild(e)},a.prototype.addFixedX=function(e){this._addChild(e)},a.prototype.addCentered=function(e){var t=e.w/2;-tthis.w&&(this.w=e.dx+t),this.right[this.right.length]=e,this._addChild(e)},a.prototype.setLimit=function(e,t){t[e]&&(this.specialY[e]?this.specialY[e]=Math.max(this.specialY[e],t[e]):this.specialY[e]=t[e])},a.prototype._addChild=function(e){e.parent=this,this.children[this.children.length]=e,this.pushTop(e.top),this.pushBottom(e.bottom),this.setLimit("tempoHeightAbove",e),this.setLimit("partHeightAbove",e),this.setLimit("volumeHeightAbove",e),this.setLimit("dynamicHeightAbove",e),this.setLimit("endingHeightAbove",e),this.setLimit("chordHeightAbove",e),this.setLimit("lyricHeightAbove",e),this.setLimit("lyricHeightBelow",e),this.setLimit("chordHeightBelow",e),this.setLimit("volumeHeightBelow",e),this.setLimit("dynamicHeightBelow",e)},a.prototype.pushTop=function(e){void 0!==e&&(void 0===this.top?this.top=e:this.top=Math.max(e,this.top))},a.prototype.pushBottom=function(e){void 0!==e&&(void 0===this.bottom?this.bottom=e:this.bottom=Math.min(e,this.bottom))},a.prototype.setX=function(e){this.x=e;for(var t=0;tthis.max)&&(this.max=e.abcelem.maxpitch))},t.prototype.addBeam=function(e){this.beams.push(e)},t.prototype.setStemDirection=function(){this.average=r(this.total,this.count),this.forceup?this.stemsUp=!0:this.forcedown?this.stemsUp=!1:this.stemsUp=this.average<6,delete this.count,this.total=0},t.prototype.calcDir=function(){this.average=r(this.total,this.elems.length),this.forceup?this.stemsUp=!0:this.forcedown?this.stemsUp=!1:this.stemsUp=this.average<6;for(var e=this.stemsUp?"up":"down",t=0;t0&&this.unalignedWords(e.unalignedWords,n,i,a,s),this.extraText(e,n,i,a,s),e.footer&&r&&this.footer(e.footer,t,n,s)}function s(e,t,r,n,a,s,o){r&&(t&&(r="string"==typeof r?t+r:[{text:t}].concat(r)),i(e,r,"historyfont",a=s?"abcjs-extra-text "+a:"","description",n,{absElemType:"extraText",anchor:"start"},o))}function o(e,t,r,a,s,o,c,l,h,u,d,f){if(r){l=d?"abcjs-extra-text "+l:"";var p=f.calc("A",s,l);if("string"==typeof r)t&&(r=t+"\n"+r),n(e,{marginLeft:a,text:r,font:s,absElemType:"extraText",name:h,"dominant-baseline":"middle",klass:l},f);else{e.push({startGroup:c,klass:l,name:h}),e.push({move:u.info}),t&&(n(e,{marginLeft:a,text:t,font:s,absElemType:"extraText",name:h,"dominant-baseline":"middle"},f),e.push({move:3*p.height/4}));for(var m=0;m0&&this.startVoice.staff.voices[0]===e)},e.exports=t},6891:function(e){e.exports=function(e,t,r,n){this.type="CrescendoElem",this.anchor1=e,this.anchor2=t,this.dir=r,"above"===n?this.dynamicHeightAbove=6:this.dynamicHeightBelow=6,this.pitch=void 0}},3185:function(e){e.exports=function(e,t,r){this.type="DynamicDecoration",this.anchor=e,this.dec=t,"below"===r?this.volumeHeightBelow=6:this.volumeHeightAbove=6,this.pitch=void 0}},8256:function(e){e.exports=function(e,t,r){this.type="EndingElem",this.text=e,this.anchor1=t,this.anchor2=r,this.endingHeightAbove=5,this.pitch=void 0}},3736:function(e){e.exports=function(e,t,r,n,i,a){var s,o=e.text;this.rows=[],t&&this.rows.push({move:t});var c=r.calc("textfont","defined-text");if(""===o)this.rows.push({move:2*c.attr["font-size"]});else if("string"==typeof o)this.rows.push({move:c.attr["font-size"]/2}),this.rows.push({left:n,text:o,font:"textfont",klass:"defined-text",anchor:"start",startChar:e.startChar,endChar:e.endChar,absElemType:"freeText",name:"free-text"}),s=a.calc(o,"textfont","defined-text"),this.rows.push({move:s.height});else if(o){for(var l=0,h=n,u="textfont",d=0;dthis.top&&(this.top=this.pitch2),this.bottom=n,void 0!==this.pitch2&&this.pitch20?this.top+=i.stemHeight:this.bottom+=i.stemHeight),i.dim&&(this.dim=i.dim),i.position&&(this.position=i.position),this.height=i.height?i.height:4,i.top&&(this.top=i.top),i.bottom&&(this.bottom=i.bottom),i.name?this.name=i.name:this.c?this.name=this.c:this.name=this.type,i.realWidth?this.realWidth=i.realWidth:this.realWidth=this.w,this.centerVertically=!1,this.type){case"debug":this.chordHeightAbove=this.height;break;case"lyric":i.position&&"below"===i.position?this.lyricHeightBelow=this.height:this.lyricHeightAbove=this.height;break;case"chord":i.position&&"below"===i.position?this.chordHeightBelow=this.height:this.chordHeightAbove=this.height;break;case"text":void 0===this.pitch?i.position&&"below"===i.position?this.chordHeightBelow=this.height:this.chordHeightAbove=this.height:this.centerVertically=!0;break;case"part":this.partHeightAbove=this.height}};t.prototype.getChordDim=function(){if("debug"===this.type)return null;if(!this.chordHeightAbove&&!this.chordHeightBelow)return null;var e="chord"===this.type?this.realWidth/2:0,t=this.x-e-0;return{left:t,right:t+this.realWidth+0}},t.prototype.invertLane=function(e){void 0===this.lane&&(this.lane=0),this.lane=e-this.lane-1},t.prototype.putChordInLane=function(e){this.lane=e,this.chordHeightAbove?this.chordHeightAbove=1.25*this.height*this.lane:this.chordHeightBelow=1.25*this.height*this.lane},t.prototype.getLane=function(){return void 0===this.lane?0:this.lane},t.prototype.setX=function(e){this.x=e+this.dx},e.exports=t},6994:function(e,t,r){var n=r(1716);e.exports=function(e,t,r,i,a,s,o,c){var l=c.calc("i",r,i);if(""===t)e.push({move:l.height});else{if("string"==typeof t)return void n(e,{marginLeft:s,text:t,font:r,klass:i,marginTop:o.marginTop,anchor:o.anchor,absElemType:o.absElemType,info:o.info,name:a},c);o.marginTop&&e.push({move:o.marginTop});var h=0,u={left:s,anchor:o.anchor,phrases:[]};i&&(u.klass=i),e.push(u);for(var d=0;d0)this.above=!1;else{var e;e=this.anchor1?this.anchor1.pitch:this.anchor2?this.anchor2.pitch:14,this.anchor1&&"down"===this.anchor1.stemDir&&this.anchor2&&"down"===this.anchor2.stemDir?this.above=!0:this.anchor1&&"up"===this.anchor1.stemDir&&this.anchor2&&"up"===this.anchor2.stemDir?this.above=!1:this.anchor1&&this.anchor2?this.above=e>=6:this.anchor1?this.above="down"===this.anchor1.stemDir:this.anchor2?this.above="down"===this.anchor2.stemDir:this.above=e>=6}},t.prototype.calcSlurDirection=function(){if(this.isGrace)this.above=!1;else if(0===this.voiceNumber)this.above=!0;else if(this.voiceNumber>0)this.above=!1;else{var e=!1;this.anchor1&&"down"===this.anchor1.stemDir&&(e=!0),this.anchor2&&"down"===this.anchor2.stemDir&&(e=!0);for(var t=0;te&&(e=this.internalNotes[t].highestVert);e>this.startY&&e>this.endY&&(this.startY=this.endY=e-1)}},e.exports=t},1134:function(e,t,r){var n=r(1716),i=r(6994);e.exports=function(e,t,r,a,s,o,c,l,h,u){if(this.rows=[],e.header&&o){var d=u.calc("X","headerfont","abcjs-header abcjs-meta-top").height;n(this.rows,{marginLeft:c,text:e.header.left,font:"headerfont",klass:"header meta-top",marginTop:-d,info:t.header,name:"header"},u),n(this.rows,{marginLeft:c+s/2,text:e.header.center,font:"headerfont",klass:"header meta-top",marginTop:-d,anchor:"middle",info:t.header,name:"header"},u),n(this.rows,{marginLeft:c+s,text:e.header.right,font:"headerfont",klass:"header meta-top",marginTop:-d,anchor:"end",info:t.header,name:"header"},u)}o&&this.rows.push({move:l.top});var f=r.titleleft?"start":"middle",p=r.titleleft?c:c+s/2;if(e.title){var m=h?"abcjs-title":"";i(this.rows,e.title,"titlefont",m,"title",p,{marginTop:l.title,anchor:f,absElemType:"title",info:t.title},u)}if(a.length)for(var g=0;g0){var v=!(!e.composer&&!e.origin);m=h?"abcjs-rhythm":"",n(this.rows,{marginLeft:c,text:e.rhythm,font:"infofont",klass:m,absElemType:"rhythm",noMove:v,info:t.rhythm,name:"rhythm"},u)}e.composer&&e.composer,e.origin&&e.origin;var b=e.composer?e.composer:"";e.origin&&("string"==typeof b&&"string"==typeof e.origin?b+=" ("+e.origin+")":"string"==typeof b&&"string"!=typeof e.origin?((b=[{text:b}]).push({text:" ("}),(b=b.concat(e.origin)).push({text:")"})):(b.push({text:" ("}),(b=b.concat(e.origin)).push({text:")"}))),b&&(m=h?"abcjs-composer":"",i(this.rows,b,"composerfont",m,"composer",c+s,{anchor:"end",absElemType:"composer",info:t.composer,ingroup:!0},u))}e.author&&e.author.length>0&&(m=h?"abcjs-author":"",i(this.rows,e.author,"composerfont",m,"author",c+s,{anchor:"end",absElemType:"author",info:t.author},u)),e.partOrder&&e.partOrder.length>0&&(m=h?"abcjs-part-order":"",i(this.rows,e.partOrder,"partsfont",m,"part-order",c,{absElemType:"partOrder",info:t.partOrder,anchor:"start"},u))}},2096:function(e){var t=function(e,t,r){this.type="TripletElem",this.anchor1=t,this.number=e,this.durationClass=("d"+Math.round(1e3*t.parent.durationClass)/1e3).replace(/\./,"-"),this.middleElems=[],this.flatBeams=r.flatBeams};t.prototype.isClosed=function(){return!!this.anchor2},t.prototype.middleNote=function(e){this.middleElems.push(e)},t.prototype.setCloseAnchor=function(e){this.anchor2=e,this.anchor1.parent.beam&&"up"!==this.anchor1.stemDir||(this.endingHeightAbove=4)},e.exports=t},3197:function(e){var t=function(e,t){this.children=[],this.beams=[],this.otherchildren=[],this.w=0,this.duplicate=!1,this.voicenumber=e,this.voicetotal=t,this.bottom=7,this.top=7,this.specialY={tempoHeightAbove:0,partHeightAbove:0,volumeHeightAbove:0,dynamicHeightAbove:0,endingHeightAbove:0,chordHeightAbove:0,lyricHeightAbove:0,lyricHeightBelow:0,chordHeightBelow:0,volumeHeightBelow:0,dynamicHeightBelow:0}};t.prototype.addChild=function(e){if("bar"===e.type){for(var t=!0,r=0;t&&r0&&"TempoElement"===t.children[0].type;t.elemset=[],o.beginGroup(e.paper,e.controller);for(var u=0;u=0&&f.setAttribute("class","abcjs-notehead")}}var p=t.type;if(("note"===t.type||"rest"===t.type)&&(t.counters=e.controller.classes.getCurrent(),p=(p+=" d"+Math.round(1e3*t.durationClass)/1e3).replace(/\./g,"-"),t.abcelem.pitches))for(var m=0;m0?g.classList[0]+" ":"";g.setAttribute("class",v+t.overrideClasses)}if(h)t.startChar=t.abcelem.startChar,t.endChar=t.abcelem.endChar,c.add(t,g,!1,l);else{t.elemset.push(g);var b=!1;"note"!==t.type&&"tabNumber"!==t.type||(b=!0),c.add(t,g,b,l)}}else t.elemset.length>0&&c.add(t,t.elemset[0],"note"===t.type,l);if(t.klass&&s(t.elemset,"mark","","#00ff00"),t.hint&&s(t.elemset,"abcjs-hint","",null),t.abcelem.abselem=t,t.heads&&t.heads.length>0){t.notePositions=[];for(var y=0;y=1&&l(e,e.spacing.staffSeparation,v[v.length-1],y.staffGroup);var x=c(e,y.staffGroup,m,b);x.line=p+b,v.push(x),e.paper.closeGroup()}else y.nonMusic&&(t.shouldAddClasses&&(g.klass="abcjs-non-music"),e.paper.openGroup(g),a(e,y.nonMusic,m),e.paper.closeGroup())}return t.reset(),r.bottomText&&r.bottomText.rows&&r.bottomText.rows.length>0&&(t.shouldAddClasses&&(g.klass="abcjs-meta-bottom"),e.paper.openGroup(g),e.moveY(24),a(e,r.bottomText,m),e.paper.closeGroup()),i(e,s,u,h),{staffgroups:v,selectables:m.getElements()}}},9879:function(e,t,r){var n=r(4777);e.exports=function(e,t,r){void 0===t.pitch&&window.console.error("Dynamic Element y-coordinate not set.");var i=n(e,t.anchor.x,t.pitch,t.dec,{scalex:1,scaley:1,klass:e.controller.classes.generate("decoration dynamics"),fill:e.foregroundColor,stroke:"none",name:"dynamics"});return r.wrapSvgEl({el_type:"dynamicDecoration",startChar:-1,endChar:-1,decoration:t.dec},i),[i]}},5947:function(e,t,r){var n=r(6764),i=r(5759),a=r(6454),s=r(7199);e.exports=function(e,t,r,o,c){void 0===t.pitch&&window.console.error("Ending Element y-coordinate not set.");var l=s(e.calcY(t.pitch)),h="";t.anchor1&&(r=s(t.anchor1.x+t.anchor1.w),h+=n("M %f %f L %f %f ",r,l,r,s(l+20))),t.anchor2&&(o=s(t.anchor2.x),h+=n("M %f %f L %f %f ",o,l,o,s(l+20))),h+=n("M %f %f L %f %f ",r,l,o,l),e.paper.openGroup({klass:e.controller.classes.generate("ending"),"data-name":"ending"}),a(e,{path:h,stroke:e.foregroundColor,fill:e.foregroundColor,"data-name":"line"}),t.anchor1&&i(e,{x:s(r+5),y:s(e.calcY(t.pitch-.5)),text:t.text,type:"repeatfont",klass:"ending",anchor:"start",noClass:!0,name:t.text});var u=e.paper.closeGroup();return c.wrapSvgEl({el_type:"ending",startChar:-1,endChar:-1},u),[u]}},9045:function(e,t,r){var n=r(6764),i=r(6454),a=r(7199);function s(e,t,r){return a(e+r*t)}var o=[[3.5,-4.8]],c=[[1.5,-1],[.3,-.3],[-3.5,3.8]],l=[[-1.5,2]],h=[[3,4],[3,-4]],u=[[-3,4],[-3,-4]];function d(e,t){for(var r="",n=0;n1&&s.indexOf(".")<0){var p=a.isInGroup()?"":o.klass;e.paper.openGroup({"data-name":o.name,klass:p});for(var m=0,g=0;g0?t.linewidth+e.lineThickness:t.linewidth-e.lineThickness;t.graphelem=i(e,t.x,u,o,e.calcY(t.pitch2),"abcjs-stem","stem");break;case"ledger":t.graphelem=a(e,t.x,t.x+t.w,t.pitch,"abcjs-ledger","ledger",.35+e.lineThickness)}return 1!==t.scalex&&t.graphelem&&function(e,t,r,n,i,a){e.setAttributeOnElement(t,{style:"transform:scale("+r+","+n+");transform-origin:"+i+"px "+a+"px;"})}(e.paper,t.graphelem,t.scalex,t.scaley,t.x,o),t.graphelem}},7199:function(e){e.exports=function(e){return parseFloat(e.toFixed(2))}},3524:function(e,t,r){var n=r(5741),i=r(5829);function a(e,t,r){this.elements=[],this.paper=e,this.tuneNumber=r,this.selectTypes=t}a.prototype.getElements=function(){return this.elements},a.prototype.add=function(e,t,r,n){if(this.canSelect(e)){var i;i=void 0===this.selectTypes?{selectable:!1,"data-index":this.elements.length}:{selectable:!0,tabindex:0,"data-index":this.elements.length},this.paper.setAttributeOnElement(t,i);var a={absEl:e,svgEl:t,isDraggable:r};void 0!==n&&(a.staffPos=n),this.elements.push(a)}},a.prototype.canSelect=function(e){return!(!1===this.selectTypes||!e||!e.abcelem||!0!==this.selectTypes&&!(void 0===this.selectTypes?"note"===e.abcelem.el_type||"tabNumber"===e.abcelem.el_type:this.selectTypes.indexOf(e.abcelem.el_type)>=0))},a.prototype.wrapSvgEl=function(e,t){var r={tuneNumber:this.tuneNumber,abcelem:e,elemset:[t],highlight:n,unhighlight:i};this.add(r,t,!1)},e.exports=a},4169:function(e){e.exports=function(e,t){var r=Math.round(e.y),n=(e.controller.width-t)/2,i=n+t,a="M "+n+" "+r+" L "+i+" "+r+" L "+i+" "+(r+1)+" L "+n+" "+(r+1)+" L "+n+" "+r+" z";e.paper.pathToBack({path:a,stroke:"rgba(0,0,0,0)",fill:"rgba(0,0,0,255)",class:e.controller.classes.generate("defined-text")})}},7611:function(e){e.exports=function(e,t,r,n){var i=(t+e.padding.left+e.padding.right)*r,a=(e.y+e.padding.bottom)*r;if(e.isPrint&&(a=Math.max(a,1056)),""!==e.ariaLabel){var s="Sheet Music";e.abctune&&e.abctune.metaText&&e.abctune.metaText.title&&(s+=' for "'+e.abctune.metaText.title+'"'),e.paper.setTitle(s);var o=e.ariaLabel?e.ariaLabel:s;e.paper.setAttribute("aria-label",o)}e.paper.insertStyles(".abcjs-dragging-in-progress text, .abcjs-dragging-in-progress tspan {"+["-webkit-touch-callout: none;","-webkit-user-select: none;","-khtml-user-select: none;","-moz-user-select: none;","-ms-user-select: none;","user-select: none;"].join(" ")+"}");var c={overflow:"hidden"};"resize"===n?e.paper.setResponsiveWidth(i,a):(c.width="",c.height=a+"px",r<1?(c.width=i+"px",e.paper.setSize(i/r,a/r)):e.paper.setSize(i,a)),e.paper.setScale(r),e.paper.setParentStyles(c)}},6764:function(e){function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t(e)}e.exports=function(){for(var e,r,n,i,a,s=0,o=arguments[s++],c=[];o;){if(r=/^[^\x25]+/.exec(o))c.push(r[0]);else if(r=/^\x25{2}/.exec(o))c.push("%");else{if(!(r=/^\x25(?:(\d+)\$)?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(o)))throw"Huh ?!";if(null==(e=arguments[r[1]||s++])||null==e)throw"Too few arguments.";if(/[^s]/.test(r[7])&&"number"!=typeof e)throw"Expecting number but found "+t(e);switch(r[7]){case"b":e=e.toString(2);break;case"c":e=String.fromCharCode(e);break;case"d":e=parseInt(e);break;case"e":e=r[6]?e.toExponential(r[6]):e.toExponential();break;case"f":e=r[6]?parseFloat(e).toFixed(r[6]):parseFloat(e);break;case"o":e=e.toString(8);break;case"s":e=(e=String(e))&&r[6]?e.substring(0,r[6]):e;break;case"u":e=Math.abs(e);break;case"x":e=e.toString(16);break;case"X":e=e.toString(16).toUpperCase()}e=/[def]/.test(r[7])&&r[2]&&e>0?"+"+e:e,i=r[3]?"0"==r[3]?"0":r[3][1]:" ",a=r[5]-String(e).length,n=r[5]?str_repeat(i,a):"",c.push(r[4]?e+n:n+e)}o=o.substring(r[0].length)}return c.join("")}},5537:function(e,t,r){var n=r(4331),i=r(129),a=r(3145),s=r(7641),o=r(1547),c=r(3624),l=r(5668);function h(e,t,r,a,s){if(r)for(var o=0;o=0&&v.voices&&u(e,t.voices,v.voices),e.showDebug.indexOf("grid")>=0&&(e.paper.dottedLine({x1:e.padding.left,x2:e.padding.left+e.controller.width,y1:m,y2:m,stroke:"#0000ff"}),o(e,{x:e.padding.left,y:e.calcY(v.originalTop),width:e.controller.width,height:e.calcY(v.originalBottom)-e.calcY(v.originalTop),fill:e.foregroundColor,stroke:e.foregroundColor,"fill-opacity":.1,"stroke-opacity":.1}),d=0,E(v,"chordHeightAbove"),E(v,"chordHeightBelow"),E(v,"dynamicHeightAbove"),E(v,"dynamicHeightBelow"),E(v,"endingHeightAbove"),E(v,"lyricHeightAbove"),E(v,"lyricHeightBelow"),E(v,"partHeightAbove"),E(v,"tempoHeightAbove"),E(v,"volumeHeightAbove"),E(v,"volumeHeightBelow"))),e.moveY(n.STEP,-v.bottom),e.showDebug&&e.showDebug.indexOf("grid")>=0&&e.paper.dottedLine({x1:e.padding.left,x2:e.padding.left+e.controller.width,y1:e.y,y2:e.y,stroke:"#0000aa"})}for(var b=2,y=0,x=0;x6&&(d=0)}}_>1&&(f=t.staffs[0].topLine,p=t.staffs[_-1].bottomLine,c(e,t.startx,.6,f,p,null)),e.y=m}},7865:function(e,t,r){var n=r(6637);e.exports=function(e,t,r,i,a,s,o){var c=e.calcY(i);return n(e,t,r,c,a,s,o)}},7641:function(e,t,r){var n=r(7865);e.exports=function(e,t,r,i,a,s){var o="abcjs-top-line",c=2;a&&(c=a),e.paper.openGroup({prepend:!0,klass:e.controller.classes.generate("abcjs-staff")});var l=0,h=0;if(1===i)n(e,t,r,6,o,null,s+e.lineThickness),l=e.calcY(10),h=e.calcY(2);else for(var u=i-1;u>=0;u--){var d=(u+1)*c;h=e.calcY(d),0===l&&(l=h),n(e,t,r,d,o,null,s+e.lineThickness),o=void 0}return e.paper.closeGroup(),[l,h]}},3987:function(e,t,r){var n=r(2435),i=r(5759);e.exports=function(e,t){var r=t.x;void 0===t.pitch&&window.console.error("Tempo Element y-coordinate not set."),t.tempo.el_type="tempo";var a,s=e.calcY(t.pitch)+2;if(t.tempo.preString){a=i(e,{x:r,y:s,text:t.tempo.preString,type:"tempofont",klass:"abcjs-tempo",anchor:"start",noClass:!0,name:"pre"},!0);var o=e.controller.getTextSize.calc(t.tempo.preString,"tempofont","tempo",a).width;r+=o+o/t.tempo.preString.length}if(t.note){t.note.setX(r);for(var c=0;c.1||(this.scale=void 0),t.staffwidth?(this.staffwidthScreen=t.staffwidth,this.staffwidthPrint=t.staffwidth):(this.staffwidthScreen=740,this.staffwidthPrint=680),this.listeners=[],t.clickListener&&this.addSelectListener(t.clickListener),this.renderer=new a(e),this.renderer.setPaddingOverride(t),t.showDebug&&(this.renderer.showDebug=t.showDebug),t.jazzchords&&(this.jazzchords=t.jazzchords),t.accentAbove&&(this.accentAbove=t.accentAbove),t.germanAlphabet&&(this.germanAlphabet=t.germanAlphabet),t.lineThickness&&(this.lineThickness=t.lineThickness),this.renderer.controller=this,this.renderer.foregroundColor=t.foregroundColor?t.foregroundColor:"currentColor",void 0!==t.ariaLabel&&(this.renderer.ariaLabel=t.ariaLabel),this.renderer.minPadding=t.minPadding?t.minPadding:0,this.reset()};function x(e){for(var t=document.createElementNS("http://www.w3.org/2000/svg","svg"),r=0;r0)for(var o=s.staffGroup.voices[0],c=!1,l=0,h=0;hthis.width+1&&(e.topText=new l(e.metaText,e.metaTextInfo,e.formatting,e.lines,a,this.renderer.isPrint,this.renderer.padding.left,this.renderer.spacing,this.classes.shouldAddClasses,this.getTextSize),e.lines&&e.lines.length>0))for(var s=e.lines.length,o=0;o0)for(var h=c.nonMusic.rows.length,f=0;f0&&c.text[0].center)&&(p.left=a/2+this.renderer.padding.left)}}e.tablatures&&v.layoutTablatures(this.renderer,e);var m=g(this.renderer,this.classes,e,this.width,a,this.responsive,i,this.selectTypes,t,r);if(this.staffgroups=m.staffgroups,this.selectables=m.selectables,this.oneSvgPerLine){var b=this.renderer.paper.svg.parentNode;this.svgs=function(e,t,r,n,i){r||(r="Untitled");var a=t.querySelector("svg");"resize"===n&&(t.style.paddingBottom="");for(var s=a.querySelector("style"),o="resize"===n?a.viewBox.baseVal.width:a.getAttribute("width"),c=t.querySelectorAll("svg > g"),l=0,h=[],u=0;u0&&t.push(e),"abcjs-tab-number"===e)return t.join(" ");if("text instrument-name"===e)return"abcjs-text abcjs-instrument-name";if(null!==this.lineNumber&&t.push("l"+this.lineNumber),null!==this.measureNumber&&t.push("m"+this.measureNumber),null!==this.measureNumber&&t.push("mm"+this.measureTotal()),null!==this.voiceNumber&&t.push("v"+this.voiceNumber),e&&(e.indexOf("note")>=0||e.indexOf("rest")>=0||e.indexOf("lyric")>=0)&&null!==this.noteNumber&&t.push("n"+this.noteNumber),t.length>0){t=(t=t.join(" ")).split(" ");for(var r=0;r0&&(t[r]="abcjs-"+t[r])}return t.join(" ")},e.exports=t},1328:function(e){var t=function(e,t){this.formatting=e,this.classes=t};t.prototype.updateFonts=function(e){e.gchordfont&&(this.formatting.gchordfont=e.gchordfont),e.tripletfont&&(this.formatting.tripletfont=e.tripletfont),e.annotationfont&&(this.formatting.annotationfont=e.annotationfont),e.vocalfont&&(this.formatting.vocalfont=e.vocalfont)},t.prototype.getFamily=function(e){return'"'===e[0]&&'"'===e[e.length-1]?e.substring(1,e.length-1):e},t.prototype.calc=function(e,t){var r;r="string"==typeof e?(r=this.formatting[e])?{face:r.face,size:Math.round(4*r.size/3),decoration:r.decoration,style:r.style,weight:r.weight,box:r.box}:{face:"Arial",size:Math.round(16),decoration:"underline",style:"normal",weight:"normal"}:{face:e.face,size:Math.round(4*e.size/3),decoration:e.decoration,style:e.style,weight:e.weight,box:e.box};var n=this.formatting.fontboxpadding?this.formatting.fontboxpadding:.1;return r.padding=r.size*n,{font:r,attr:{"font-size":r.size,"font-style":r.style,"font-family":this.getFamily(r.face),"font-weight":r.weight,"text-decoration":r.decoration,class:this.classes.generate(t)}}},e.exports=t},9799:function(e){var t=function(e,t){this.getFontAndAttr=e,this.svg=t};t.prototype.updateFonts=function(e){this.getFontAndAttr.updateFonts(e)},t.prototype.attr=function(e,t){return this.getFontAndAttr.calc(e,t)},t.prototype.getFamily=function(e){return'"'===e[0]&&'"'===e[e.length-1]?e.substring(1,e.length-1):e},t.prototype.calc=function(e,t,r,n){var i;i="string"==typeof t?this.attr(t,r):{font:{face:t.face,size:t.size,decoration:t.decoration,style:t.style,weight:t.weight},attr:{"font-size":t.size,"font-style":t.style,"font-family":this.getFamily(t.face),"font-weight":t.weight,"text-decoration":t.decoration,class:this.getFontAndAttr.classes.generate(r)}};var a=this.svg.getTextSize(e,i.attr,n);return i.font.box?{height:a.height+4*i.font.padding,width:a.width+4*i.font.padding}:a},t.prototype.baselineToCenter=function(e,t,r,n,i){return.5*this.calc(e,t,r).height+(i-n-2)*this.attr(t,r).font.size},e.exports=t},2187:function(e){e.exports=function(e,t,r,n){if(e)for(var i=0;i0&&(o.length>0&&" "!==o[o.length-1]&&(o+=" "),o+=t),a.setAttribute("class",o)}}},4331:function(e){var t={FONTEM:360,FONTSIZE:30};t.STEP=93*t.FONTSIZE/720,t.SPACE=10,t.TOPNOTE=15,t.STAVEHEIGHT=100,t.INDENT=50,e.exports=t},8123:function(e){function t(e,t,r,n){if(0===e.indexOf(t)){var i=e.replace(t,""),a=parseInt(i,10);""+a===i&&(r[n]=a)}}e.exports=function(e,r){var n=[];if(e.absEl.elemset){for(var i={},a=0;a=0&&r=0?(i=function(e,t,r){return e.x<=t.offsetX&&e.x+e.width>=t.offsetX&&e.y<=t.offsetY&&e.y+e.height>=t.offsetY||Math.abs(t.layerY/r-t.offsetY)<3?[t.offsetX,t.offsetY]:[t.layerX,t.layerY]}(e.selectables[a].svgEl.getBBox(),t,e.scale),r=i[0],n=i[1]):(i=function(e){var t,r,n=1,i=1,a=e.target.closest("svg"),s=0;return a&&a.viewBox&&a.viewBox.baseVal&&(0!==a.viewBox.baseVal.width&&(n=a.viewBox.baseVal.width/a.clientWidth),0!==a.viewBox.baseVal.height&&(i=a.viewBox.baseVal.height/a.clientHeight),s=a.viewBox.baseVal.y),e.target&&"svg"===e.target.tagName?(t=e.offsetX,r=e.offsetY):(t=e.layerX,r=e.layerY),[t*=n,(r*=i)+s]}(t),a=function(e,t,r){for(var n=9999999,i=-1,a=0;a0;a++){var s=e.selectables[a];if(e.getDim(s),s.dim.leftt&&s.dim.topr)i=a,n=0;else if(s.dim.topr){var o=Math.min(Math.abs(s.dim.left-t),Math.abs(s.dim.right-t));ot){var c=Math.min(Math.abs(s.dim.top-r),Math.abs(s.dim.bottom-r));cMath.abs(t-s.dim.right)?Math.abs(t-s.dim.right):Math.abs(t-s.dim.left),h=Math.abs(r-s.dim.top)>Math.abs(r-s.dim.bottom)?Math.abs(r-s.dim.bottom):Math.abs(r-s.dim.top),u=Math.sqrt(l*l+h*h);u=0&&n<=12?i:-1}(e,r=i[0],n=i[1])),{x:r,y:n,clickedOn:a}}function l(e){if(e&&e.target&&e.touches&&!(e.touches.length<1)){var t=e.target.getBoundingClientRect(),r=e.touches[0].pageX-t.left,n=e.touches[0].pageY-t.top;e.touches[0].offsetX=r,e.touches[0].offsetY=n,e.touches[0].layerX=e.touches[0].pageX,e.touches[0].layerY=e.touches[0].pageY}}function h(e){var t=e;"touchstart"===e.type&&(l(e),e.touches.length>0&&(t=e.touches[0]));var r=c(this,t);r.clickedOn>=0&&("touchstart"===e.type||0===e.button)&&this.selectables[r.clickedOn]&&(this.dragTarget=this.selectables[r.clickedOn],this.dragIndex=r.clickedOn,this.dragMechanism="mouse",this.dragMouseStart={x:r.x,y:r.y},this.dragging&&this.dragTarget.isDraggable&&(function(e,t){if(e){var r=v(e.svg);r[t]=!0,b(e.svg,r)}}(this.renderer.paper,"abcjs-dragging-in-progress"),this.dragTarget.absEl.highlight(void 0,this.dragColor)))}function u(e){var t=e;if("touchmove"===e.type&&(l(e),e.touches.length>0&&(t=e.touches[0])),this.lastTouchMove=e,this.dragTarget&&this.dragging&&this.dragTarget.isDraggable&&"mouse"===this.dragMechanism&&this.dragMouseStart){var r=c(this,t),i=Math.round((r.y-this.dragMouseStart.y)/n.STEP);i!==this.dragYStep&&(this.dragYStep=i,this.dragTarget.svgEl.setAttribute("transform","translate(0,"+i*n.STEP+")"))}}function d(e){var t=e;"touchend"===e.type&&this.lastTouchMove&&(l(this.lastTouchMove),this.lastTouchMove&&this.lastTouchMove.touches&&this.lastTouchMove.touches.length>0&&(t=this.lastTouchMove.touches[0])),this.dragTarget&&(m.bind(this)(),this.dragTarget.absEl&&this.dragTarget.absEl.highlight&&(this.selected=[this.dragTarget.absEl],this.dragTarget.absEl.highlight(void 0,this.selectionColor)),p.bind(this)(this.dragTarget,this.dragYStep,this.selectables.length,this.dragIndex,t),this.dragTarget.svgEl&&this.dragTarget.svgEl.focus&&(this.dragTarget.svgEl.focus(),this.dragTarget=null,this.dragIndex=-1),function(e,t){if(e){var r=v(e.svg);delete r[t],b(e.svg,r)}}(this.renderer.svg,"abcjs-dragging-in-progress"))}function f(e){e>=0&&eo&&ea&&(i=a),i<-a&&(i=-a),i}(x,k,v,w),A=M+Math.floor(N/2),B=M+Math.floor(-N/2),S||(y&&M<6||!y&&M>6)&&(A=6,B=6),[A,B]),f=c(e.stemsUp,r,l);e.addBeam({startX:f[0],endX:f[1],startY:d[0],endY:d[1],dy:t});for(var p=function(e,t,r,n,i){for(var o=[],l=[],h=0;h0&&u.abcelem.beambr&&u.abcelem.beambr<=b+1){l[b].split||(l[b].split=[l[b].x]);var y=c(t,e[h-1],u);l[b].split[l[b].split.length-1]>=y[0]&&(y[0]+=u.w),l[b].split.push(y[0]),l[b].split.push(y[1])}}for(var x=l.length-1;x>=0;x--)if(h===e.length-1||s(e[h+1].abcelem.duration)>-x-4){var k=f,w=p+m*(x+1);l[x].single&&(k=0===h?f+5:f-5,w=a(r.startX,r.startY,r.endX,r.endY,k)+m*(x+1));var C={startX:l[x].x,endX:k,startY:l[x].y,endY:w,dy:i};if(void 0!==l[x].split){var T=l[x].split;C.endX<=T[T.length-1]&&(T[T.length-1]-=u.w),T.push(C.endX),C.split=l[x].split}o.push(C),l=l.slice(0,x)}}}return o}(e.elems,e.stemsUp,e.beams[0],e.isgrace,t),m=0;m0?((i=(r-(n-a*i))/a)*s>50&&(i=50/s),i):null}e.exports=function(e,t,r,a,s,l){var h,u,d=r;for(h=0;hMath.round(d)&&(d=f,s&&(h=-1)))}for(h=0;h=0&&(c.originalTop=c.top,c.originalBottom=c.bottom),a(c,l,"lyricHeightAbove"),a(c,l,"chordHeightAbove",c.specialY.chordLines.above),c.specialY.endingHeightAbove&&(c.specialY.chordHeightAbove?c.top+=2:c.top+=c.specialY.endingHeightAbove+i,l.endingHeightAbove=c.top),c.specialY.dynamicHeightAbove&&c.specialY.volumeHeightAbove?(c.top+=Math.max(c.specialY.dynamicHeightAbove,c.specialY.volumeHeightAbove)+i,l.dynamicHeightAbove=c.top,l.volumeHeightAbove=c.top):(a(c,l,"dynamicHeightAbove"),a(c,l,"volumeHeightAbove")),a(c,l,"partHeightAbove"),a(c,l,"tempoHeightAbove"),c.specialY.lyricHeightBelow&&(c.specialY.lyricHeightBelow+=e.spacing.vocal/n.STEP,l.lyricHeightBelow=c.bottom,c.bottom-=c.specialY.lyricHeightBelow+i),c.specialY.chordHeightBelow){l.chordHeightBelow=c.bottom;var h=c.specialY.chordHeightBelow;c.specialY.chordLines.below&&(h*=c.specialY.chordLines.below),c.bottom-=h+i}c.specialY.volumeHeightBelow&&c.specialY.dynamicHeightBelow?(l.volumeHeightBelow=c.bottom,l.dynamicHeightBelow=c.bottom,c.bottom-=Math.max(c.specialY.volumeHeightBelow,c.specialY.dynamicHeightBelow)+i):c.specialY.volumeHeightBelow?(l.volumeHeightBelow=c.bottom,c.bottom-=c.specialY.volumeHeightBelow+i):c.specialY.dynamicHeightBelow&&(l.dynamicHeightBelow=c.bottom,c.bottom-=c.specialY.dynamicHeightBelow+i),e.showDebug&&e.showDebug.indexOf("box")>=0&&(c.positionY=l);for(var u=0;u0&&(c.top+=f)}c.top+=e.spacing.staffTopMargin/n.STEP,r=2-c.bottom}}},735:function(e,t,r){var n=r(937);function i(e){for(var t=0;t0?0:5e-7)}e.exports=function(e,t,r,s,o){var c,l=0,h=1e3,u=o;s.startx=u;var d,f,p=0;for(r&&console.log("init layout",e),c=0;c1e-7?v.push(s.voices[c]):g.push(s.voices[c]);m=0;var b=0;for(c=0;cu&&(u=n.getNextX(g[c]),m=n.getSpacingUnits(g[c]),b=g[c].spacingduration);l+=m,h=Math.min(h,m),r&&console.log("currentduration: ",p,l,h);var y=void 0;for(c=0;c0){u=w;for(var T=0;Tu&&(u=n.getNextX(s.voices[c]),m=n.getSpacingUnits(s.voices[c]));return function(e){for(var t=0,r=0;r0){var i=n.children.length-1,a=n.children[i];if("bar"===a.abcelem.el_type){var s=a.children[0].x;s>t?t=s:a.children[0].x=t}}}}(s.voices),l+=m,s.setWidth(u),{spacingUnits:l,minSpace:h}}},3294:function(e,t,r){var n=r(3721);function i(e){return e.stemsUp}e.exports=function(e){if(e.anchor1&&e.anchor2){e.hasBeam=!!e.anchor1.parent.beam&&e.anchor1.parent.beam===e.anchor2.parent.beam;var t=e.anchor1.parent.beam;if(!e.hasBeam||t.elems[0]===e.anchor1.parent&&t.elems[t.elems.length-1]===e.anchor2.parent||(e.hasBeam=!1),e.hasBeam){var r=i(t)?e.anchor1.x+e.anchor1.w:e.anchor1.x;e.yTextPos=function(e,t,r){if(0===r.beams.length)return 0;r=r.beams[0];var i=e+(t-e)/2;return n(r.startX,r.startY,r.endX,r.endY,i)}(r,e.anchor2.x,t),e.yTextPos+=i(t)?3:-2,e.xTextPos=(o=r,c=e.anchor2.x,o+(c-o)/2),e.top=e.yTextPos+1,e.bottom=e.yTextPos-2,i(t)&&(e.endingHeightAbove=4)}else{e.startNote=Math.max(e.anchor1.parent.top,9)+4,e.endNote=Math.max(e.anchor2.parent.top,9)+4,"rest"===e.anchor1.parent.type&&"rest"!==e.anchor2.parent.type?e.startNote=e.endNote:"rest"===e.anchor2.parent.type&&"rest"!==e.anchor1.parent.type&&(e.endNote=e.startNote);for(var a=0,s=0;se.startNote||a>e.endNote)&&(e.startNote=a,e.endNote=a),e.flatBeams&&(e.startNote=Math.max(e.startNote,e.endNote),e.endNote=Math.max(e.startNote,e.endNote)),e.yTextPos=e.startNote+(e.endNote-e.startNote)/2,e.xTextPos=e.anchor1.x+(e.anchor2.x+e.anchor2.w-e.anchor1.x)/2,e.top=e.yTextPos+1}}var o,c;delete e.middleElems,delete e.flatBeams}},937:function(e){var t=function(){};t.beginLayout=function(e,t){t.i=0,t.durationindex=0,t.startx=e,t.minx=e,t.nextx=e,t.spacingduration=0},t.layoutEnded=function(e){return e.i>=e.children.length},t.getNextX=function(e){return Math.max(e.minx,e.nextx)},t.getSpacingUnits=function(e){return Math.sqrt(8*e.spacingduration)},t.layoutOneItem=function(e,t,r,n,i){var a=r.children[r.i];if(!a)return 0;var s=e-r.minx,o=r.durationindex+a.duration>0?n:0;if("note"===a.abcelem.el_type&&!a.abcelem.rest&&0!==r.voicenumber&&i){var c=i.children[i.i],l=c&&(a.abcelem.maxpitch<=c.abcelem.maxpitch+1&&a.abcelem.maxpitch>=c.abcelem.minpitch-1||a.abcelem.minpitch<=c.abcelem.maxpitch+1&&a.abcelem.minpitch>=c.abcelem.minpitch-1);if(l&&a.abcelem.minpitch===c.abcelem.minpitch&&a.abcelem.maxpitch===c.abcelem.maxpitch&&c.heads&&c.heads.length>0&&a.heads&&a.heads.length>0&&c.heads[0].c===a.heads[0].c&&(l=!1),l){var h=c.heads&&c.heads.length>0?c.heads[0].realWidth:c.fixed.w;a.adjustedWidth||(a.adjustedWidth=h+a.w),a.w=a.adjustedWidth;for(var u=0;u0&&t.putChordInLane(n),void(e[n]=r.right);e.push(r.right),t.putChordInLane(e.length-1)}}function c(e){for(var t=0,r=0;r=0;r--)(n=e[t].children[r]).chordHeightBelow&&o(a,n)}return(i.length>1||a.length>1)&&function(e,t,r){for(var n=0;n=0};a.prototype.reset=function(){this.paper.clear(),this.y=0,this.abctune=null,this.path=null,this.isPrint=!1,this.lineThickness=0,this.initVerticalSpace()},a.prototype.newTune=function(e){this.abctune=e,this.setVerticalSpace(e.formatting),this.isPrint="print"===e.media,this.setPadding(e)},a.prototype.setLineThickness=function(e){this.lineThickness=e},a.prototype.setPaddingOverride=function(e){this.paddingOverride={top:e.paddingtop,bottom:e.paddingbottom,right:e.paddingright,left:e.paddingleft}},a.prototype.setPadding=function(e){function t(t,r,n,i,a){void 0!==e.formatting[n]?t.padding[r]=e.formatting[n]:void 0!==t.paddingOverride[r]?t.padding[r]=t.paddingOverride[r]:t.isPrint?t.padding[r]=i:t.padding[r]=a}t(this,"top","topmargin",38,15),t(this,"bottom","botmargin",38,15),t(this,"left","leftmargin",68,15),t(this,"right","rightmargin",68,15)},a.prototype.adjustNonScaledItems=function(e){this.padding.top/=e,this.padding.bottom/=e,this.padding.left/=e,this.padding.right/=e,this.abctune.formatting.headerfont.size/=e,this.abctune.formatting.footerfont.size/=e},a.prototype.initVerticalSpace=function(){this.spacing={composer:7.56,graceBefore:8.67,graceInside:10.67,graceAfter:16,info:0,lineSkipFactor:1.1,music:7.56,paragraphSkipFactor:.4,parts:11.33,slurHeight:1,staffSeparation:61.33,staffTopMargin:0,stemHeight:36.67,subtitle:3.78,systemStaffSeparation:48,text:18.9,title:7.56,top:30.24,vocal:0,words:0}},a.prototype.setVerticalSpace=function(e){void 0!==e.staffsep&&(this.spacing.staffSeparation=4*e.staffsep/3),void 0!==e.composerspace&&(this.spacing.composer=4*e.composerspace/3),void 0!==e.partsspace&&(this.spacing.parts=4*e.partsspace/3),void 0!==e.textspace&&(this.spacing.text=4*e.textspace/3),void 0!==e.musicspace&&(this.spacing.music=4*e.musicspace/3),void 0!==e.titlespace&&(this.spacing.title=4*e.titlespace/3),void 0!==e.sysstaffsep&&(this.spacing.systemStaffSeparation=4*e.sysstaffsep/3),void 0!==e.stafftopmargin&&(this.spacing.staffTopMargin=4*e.stafftopmargin/3),void 0!==e.subtitlespace&&(this.spacing.subtitle=4*e.subtitlespace/3),void 0!==e.topspace&&(this.spacing.top=4*e.topspace/3),void 0!==e.vocalspace&&(this.spacing.vocal=4*e.vocalspace/3),void 0!==e.wordsspace&&(this.spacing.words=4*e.wordsspace/3)},a.prototype.calcY=function(e){return this.y-e*n.STEP},a.prototype.moveY=function(e,t){void 0===t&&(t=1),this.y+=e*t},a.prototype.absolutemoveY=function(e){this.y=e},e.exports=a},4101:function(e){var t="http://www.w3.org/2000/svg";function r(e){this.svg=s(),this.currentGroup=[],e.appendChild(this.svg)}function n(e,t,r){var n=r-e;return"M "+e+" "+t+" l "+n+" 0 l 0 1 l "+-n+" 0 z "}function i(e,t,r){var n=r-t;return"M "+e+" "+t+" l 0 "+n+" l 1 0 l 0 "+-n+" z "}r.prototype.clear=function(){if(this.svg){var e=this.svg.parentNode;this.svg=s(),this.currentGroup=[],e&&(e.innerHTML="",e.appendChild(this.svg))}},r.prototype.setTitle=function(e){var t=document.createElement("title"),r=document.createTextNode(e);t.appendChild(r),this.svg.insertBefore(t,this.svg.firstChild)},r.prototype.setResponsiveWidth=function(e,t){if(this.svg.setAttribute("viewBox","0 0 "+e+" "+t),this.svg.setAttribute("preserveAspectRatio","xMinYMin meet"),this.svg.removeAttribute("height"),this.svg.removeAttribute("width"),this.svg.style.display="inline-block",this.svg.style.position="absolute",this.svg.style.top="0",this.svg.style.left="0",this.svg.parentNode){var r=this.svg.parentNode.getAttribute("class");r?r.indexOf("abcjs-container")<0&&this.svg.parentNode.setAttribute("class",r+" abcjs-container"):this.svg.parentNode.setAttribute("class","abcjs-container"),this.svg.parentNode.style.display="inline-block",this.svg.parentNode.style.position="relative",this.svg.parentNode.style.width="100%";var n=t/e*100;this.svg.parentNode.style["padding-bottom"]=n+"%",this.svg.parentNode.style["vertical-align"]="middle",this.svg.parentNode.style.overflow="hidden"}},r.prototype.setSize=function(e,t){this.svg.setAttribute("width",e),this.svg.setAttribute("height",t)},r.prototype.setAttribute=function(e,t){this.svg.setAttribute(e,t)},r.prototype.setScale=function(e){1!==e?(this.svg.style.transform="scale("+e+","+e+")",this.svg.style["-ms-transform"]="scale("+e+","+e+")",this.svg.style["-webkit-transform"]="scale("+e+","+e+")",this.svg.style["transform-origin"]="0 0",this.svg.style["-ms-transform-origin-x"]="0",this.svg.style["-ms-transform-origin-y"]="0",this.svg.style["-webkit-transform-origin-x"]="0",this.svg.style["-webkit-transform-origin-y"]="0"):(this.svg.style.transform="",this.svg.style["-ms-transform"]="",this.svg.style["-webkit-transform"]="")},r.prototype.insertStyles=function(e){var r=document.createElementNS(t,"style");r.textContent=e,this.svg.insertBefore(r,this.svg.firstChild)},r.prototype.setParentStyles=function(e){for(var t in e)e.hasOwnProperty(t)&&this.svg.parentNode&&(this.svg.parentNode.style[t]=e[t]);this.dummySvg&&(document.querySelector("body").removeChild(this.dummySvg),this.dummySvg=null)},r.prototype.rect=function(e){var t=[],r=e.x,a=e.y,s=e.x+e.width,o=e.y+e.height;return t.push(n(r,a,s)),t.push(n(r,o,s)),t.push(i(s,a,o)),t.push(i(r,o,a)),this.path({path:t.join(" "),stroke:"none","data-name":e["data-name"]})},r.prototype.dottedLine=function(e){var r=document.createElementNS(t,"line");r.setAttribute("x1",e.x1),r.setAttribute("x2",e.x2),r.setAttribute("y1",e.y1),r.setAttribute("y2",e.y2),r.setAttribute("stroke",e.stroke),r.setAttribute("stroke-dasharray","5,5"),this.svg.insertBefore(r,this.svg.firstChild)},r.prototype.rectBeneath=function(e){var r=document.createElementNS(t,"rect");r.setAttribute("x",e.x),r.setAttribute("width",e.width),r.setAttribute("y",e.y),r.setAttribute("height",e.height),e.stroke&&r.setAttribute("stroke",e.stroke),e["stroke-opacity"]&&r.setAttribute("stroke-opacity",e["stroke-opacity"]),e.fill&&r.setAttribute("fill",e.fill),e["fill-opacity"]&&r.setAttribute("fill-opacity",e["fill-opacity"]),this.svg.insertBefore(r,this.svg.firstChild)},r.prototype.text=function(e,r,n){var i=document.createElementNS(t,"text");for(var a in i.setAttribute("stroke","none"),r)r.hasOwnProperty(a)&&i.setAttribute(a,r[a]);for(var s=(""+e).split("\n"),o=0;o0?this.currentGroup[0].removeChild(r):this.svg.removeChild(r)),n&&(a[n]=i),i},r.prototype.openGroup=function(e){e=e||{};var r=document.createElementNS(t,"g");return e.klass&&r.setAttribute("class",e.klass),e.fill&&r.setAttribute("fill",e.fill),e.stroke&&r.setAttribute("stroke",e.stroke),e["data-name"]&&r.setAttribute("data-name",e["data-name"]),e.prepend?this.prepend(r):this.append(r),this.currentGroup.unshift(r),r},r.prototype.closeGroup=function(){var e=this.currentGroup.shift();return e&&0===e.children.length?(e.parentElement.removeChild(e),null):e},r.prototype.path=function(e){var r=document.createElementNS(t,"path");for(var n in e)e.hasOwnProperty(n)&&("path"===n?r.setAttributeNS(null,"d",e.path):"klass"===n?r.setAttributeNS(null,"class",e[n]):void 0!==e[n]&&r.setAttributeNS(null,n,e[n]));return this.append(r),r},r.prototype.pathToBack=function(e){var r=document.createElementNS(t,"path");for(var n in e)e.hasOwnProperty(n)&&("path"===n?r.setAttributeNS(null,"d",e.path):"klass"===n?r.setAttributeNS(null,"class",e[n]):r.setAttributeNS(null,n,e[n]));return this.prepend(r),r},r.prototype.lineToBack=function(e){for(var r=document.createElementNS(t,"line"),n=Object.keys(e),i=0;i0?this.currentGroup[0].appendChild(e):this.svg.appendChild(e)},r.prototype.prepend=function(e){this.currentGroup.length>0?this.currentGroup[0].appendChild(e):this.svg.insertBefore(e,this.svg.firstChild)},r.prototype.setAttributeOnElement=function(e,t){for(var r in t)t.hasOwnProperty(r)&&e.setAttributeNS(null,r,t[r])},r.prototype.moveElementToChild=function(e,t){e.appendChild(t)},e.exports=r},1185:function(e){e.exports="6.4.0"}},t={},r=function r(n){var i=t[n];if(void 0!==i)return i.exports;var a=t[n]={exports:{}};return e[n](a,a.exports,r),a.exports}(1045),r;var e,t,r})); \ No newline at end of file +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.abcjs=t():e.ABCJS=t()}(this,(function(){return e={1045:function(e,t,r){var n=r(1185),i=r(6306),a=r(1592),s=r(1028),o=r(5633),c={};c.signature="abcjs-basic v"+n,Object.keys(i).forEach((function(e){c[e]=i[e]})),Object.keys(a).forEach((function(e){c[e]=a[e]})),c.renderAbc=r(6859),c.tuneMetrics=r(9989),c.TimingCallbacks=r(5681);var l=r(6020);c.setGlyph=l.setSymbol,c.strTranspose=o;var h=r(5594),u=r(8471),d=r(522),f=r(2029),p=r(6313),m=r(5281),g=r(8702),v=r(5049),b=r(4718),y=r(3450),x=r(562),k=r(9991);c.synth={CreateSynth:h,instrumentIndexToName:u,pitchToNoteName:d,SynthController:y,SynthSequence:f,CreateSynthControl:p,registerAudioContext:m,activeAudioContext:g,supportsAudio:v,playEvent:b,getMidiFile:x,sequence:s,midiRenderer:k},c.Editor=r(5294),c.EditArea=r(2945),e.exports=c},6306:function(e,t,r){var n=r(5681),i={};!function(){"use strict";var e,t;i.startAnimation=function(r,i,a){function s(e){for(var t=0;t0)for(var i=r.length,a=0;a1&&r&&r.length>0)for(i=r.length,a=0;ar.currentEvent&&r.noteTimings[r.currentEvent].millisecondsr.currentLine&&r.lineEndTimings[r.currentLine].milliseconds=r.lastMoment)if(r.eventCallback){var s=r.eventCallback(null);r.shouldStop(s).then((function(e){e&&r.stop()}))}else r.stop()}},r.shouldStop=function(e){return new Promise((function(t){return e?"continue"===e?t(!1):void(e.then&&e.then((function(e){t("continue"!==e)}))):t(!0)}))},r.doBeatCallback=function(e){if(r.beatCallback){for(var t,n,i=r.currentEvent;i=0&&null===r.noteTimings[i].left;)i--;n=r.noteTimings[i]}var a={},s={};if(n){a.top=n.top,a.height=n.height;var o=Math.max(0,e-r.startTime-n.milliseconds),c=t-n.milliseconds,l=n.endX-n.left,h=c?o*l/c:0;a.left=n.left+h,0===r.currentEvent&&n.milliseconds>e-r.startTime&&(a.left=void 0),s={timestamp:e,startTime:r.startTime,ev:n,endMs:t,offMs:o,offPx:h,gapMs:c,gapPx:l}}else s={timestamp:e,startTime:r.startTime};var u=r.startTime;if(r.beatCallback(r.currentBeat/r.beatSubdivisions,r.totalBeats/r.beatSubdivisions,r.lastMoment,a,s),u!==r.startTime)return e-r.startTime;r.currentBeat++}return null},r.animationJogger=function(){r.isRunning&&(r.doTiming(performance.now()),r.joggerTimer=setTimeout(r.animationJogger,60))},r.start=function(e,t){if(r.isRunning=!0,r.isPaused&&(r.isPaused=!1,void 0===e&&(r.justUnpaused=!0)),e)r.setProgress(e,t);else if(0===e)r.reset();else if(null!==r.pausedPercent){var n=performance.now();r.currentTime=r.lastMoment*r.pausedPercent,r.startTime=n-r.currentTime,r.pausedPercent=null,r.reportNext=!0}requestAnimationFrame(r.doTiming),r.joggerTimer=setTimeout(r.animationJogger,60)},r.pause=function(){r.isPaused=!0;var e=performance.now();r.pausedPercent=(e-r.startTime)/r.lastMoment,r.isRunning=!1,r.joggerTimer&&(clearTimeout(r.joggerTimer),r.joggerTimer=null)},r.currentMillisecond=function(){return r.currentTime},r.reset=function(){r.currentBeat=0,r.currentEvent=0,r.currentLine=0,r.startTime=null,r.pausedPercent=null},r.stop=function(){r.pause(),r.reset()},r.setProgress=function(e,t){var n;switch(t){case"seconds":r.currentTime=1e3*e,r.currentTime<0&&(r.currentTime=0),r.currentTime>r.lastMoment&&(r.currentTime=r.lastMoment),n=r.currentTime/r.lastMoment;break;case"beats":r.currentTime=e*r.millisecondsPerBeat*r.beatSubdivisions,r.currentTime<0&&(r.currentTime=0),r.currentTime>r.lastMoment&&(r.currentTime=r.lastMoment),n=r.currentTime/r.lastMoment;break;default:(n=e)<0&&(n=0),n>1&&(n=1),r.currentTime=r.lastMoment*n}r.isRunning||(r.pausedPercent=n);var i=performance.now();for(r.startTime=i-r.currentTime,r.currentEvent,r.currentEvent=0;r.noteTimings.length>r.currentEvent&&r.noteTimings[r.currentEvent].millisecondsr.currentLine&&r.lineEndTimings[r.currentLine].milliseconds+r.lineEndAnticipation=0&&"event"===r.noteTimings[r.currentEvent].type&&r.eventCallback(r.noteTimings[r.currentEvent]),r.lineEndCallback&&r.lineEndCallback(r.lineEndTimings[r.currentLine],r.noteTimings[r.currentEvent],{line:r.currentLine,endTimings:r.lineEndTimings}),r.joggerTimer=setTimeout(r.animationJogger,60)}}},1592:function(e,t,r){function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var i=r(8905),a=r(9565),s=r(4321),o={};!function(){"use strict";o.numberOfTunes=function(e){var t=e.split("\nX:").length;return 0===t&&(t=1),t};var e=o.TuneBook=function(e){var t=a(e);this.header=t.header,this.tunes=t.tunes};e.prototype.getTuneById=function(e){for(var t=0;t=0&&h0,v=0;v=0&&(d=T.startChar,u=void 0===T.chord?h:null),T.chord&&(h=T),"bar"===T.el_type){if(p){var S={abc:a.abc.substring(d,T.endChar)};(h=u&&u.chord&&u.chord.length>0?u.chord[0].name:null)&&(S.lastChord=h),T.startEnding&&(S.startEnding=T.startEnding),T.endEnding&&(S.endEnding=T.endEnding),f.push(S),d=null,p=!1}}else"note"===T.el_type&&(p=!0)}}r.push({header:l,measures:f,hasPickup:g})}return r}}(),e.exports=o},6859:function(e,t,r){var n=r(1592),i=(r(6780),r(5253)),a=r(8905),s=r(1756),o={};function c(){var e=window.innerWidth;for(var t in o)if(o.hasOwnProperty(t)){var r=o[t];e-=2*r.offsetLeft,r.style.width=e+"px"}}try{window.addEventListener("resize",c),window.addEventListener("orientationChange",c)}catch(e){}function l(e,t,r,n,a){r.viewportHorizontal?(e.innerHTML='
',r.scrollHorizontal?(e.style.overflowX="auto",e.style.overflowY="hidden"):e.style.overflow="hidden",o[e.id]=e,e=e.children[0]):r.viewportVertical?(e.innerHTML='
',e.style.overflowX="hidden",e.style.overflowY="auto",e=e.children[0]):e.innerHTML="";var s=new i(e,r);s.engraveABC(t,n,a),t.engraver=s,(r.viewportVertical||r.viewportHorizontal)&&(e.parentNode.style.width=e.style.width)}e.exports=function(e,t,r,o,c){var h,u={};if(r){for(h in r)r.hasOwnProperty(h)&&(u[h]=r[h]);u.warnings_id&&u.tablature&&(u.tablature.warning_id=u.warnings_id)}if(o)for(h in o)o.hasOwnProperty(h)&&("listener"===h?o[h].highlight&&(u.clickListener=o[h].highlight):u[h]=o[h]);if(c)for(h in c)c.hasOwnProperty(h)&&(u[h]=c[h]);return n.renderEngine((function(e,t,r,n){var o=!1;return"*"===e&&(o=!0,(e=document.createElement("div")).setAttribute("style","visibility: hidden;"),document.body.appendChild(e)),!o&&u.wrap&&u.staffwidth?(t=function(e,t,r,n,o){var c=new i(e,o).getMeasureWidths(t),h=s.calcLineWraps(t,c,o);if(h.reParse){var u=new a;u.parse(n,h.revisedParams),t=u.getTune();var d=u.getWarnings();d&&(t.warnings=d)}return o.afterParsing&&o.afterParsing(t,r,n),l(e,t,h.revisedParams,r,0),t.explanation=h.explanation,t}(e,t,r,n,u),t):(u.afterParsing&&u.afterParsing(t,r,n),l(e,t,u,r,0),o&&e.parentNode.removeChild(e),null)}),e,t,u)}},9989:function(e,t,r){var n=r(1592),i=r(5253);e.exports=function(e,t){return n.renderEngine((function(e,r,n,a){(e=document.createElement("div")).setAttribute("style","visibility: hidden;"),document.body.appendChild(e);var s=new i(e,t).getMeasureWidths(r);return e.parentNode.removeChild(e),{sections:s}}),"*",e,t)}},9447:function(e,t,r){var n=r(4914).relativeMajor,i={acc:"sharp",note:"f"},a={acc:"sharp",note:"c"},s={acc:"sharp",note:"g"},o={acc:"sharp",note:"d"},c={acc:"sharp",note:"A"},l={acc:"sharp",note:"e"},h={acc:"flat",note:"B"},u={acc:"flat",note:"e"},d={acc:"flat",note:"A"},f={acc:"flat",note:"d"},p={acc:"flat",note:"G"},m={acc:"flat",note:"c"},g={"C#":[i,a,s,o,c,l,{acc:"sharp",note:"B"}],"F#":[i,a,s,o,c,l],B:[i,a,s,o,c],E:[i,a,s,o],A:[i,a,s],D:[i,a],G:[i],C:[],F:[h],Bb:[h,u],Eb:[h,u,d],Cm:[h,u,d],Ab:[h,u,d,f],Db:[h,u,d,f,p],Gb:[h,u,d,f,p,m],Cb:[h,u,d,f,p,m,{acc:"flat",note:"F"}],"A#":[h,u],"B#":[],"D#":[h,u,d],"E#":[h],"G#":[h,u,d,f],none:[]};e.exports=function(e){var t=g[n(e)];return t?JSON.parse(JSON.stringify(t)):null}},4914:function(e){var t={C:{modes:["CMaj","Amin","Am","GMix","DDor","EPhr","FLyd","BLoc"],stepsFromC:0},Db:{modes:["DbMaj","Bbmin","Bbm","AbMix","EbDor","FPhr","GbLyd","CLoc"],stepsFromC:1},D:{modes:["DMaj","Bmin","Bm","AMix","EDor","F#Phr","GLyd","C#Loc"],stepsFromC:2},Eb:{modes:["EbMaj","Cmin","Cm","BbMix","FDor","GPhr","AbLyd","DLoc"],stepsFromC:3},E:{modes:["EMaj","C#min","C#m","BMix","F#Dor","G#Phr","ALyd","D#Loc"],stepsFromC:4},F:{modes:["FMaj","Dmin","Dm","CMix","GDor","APhr","BbLyd","ELoc"],stepsFromC:5},Gb:{modes:["GbMaj","Ebmin","Ebm","DbMix","AbDor","BbPhr","CbLyd","FLoc"],stepsFromC:6},G:{modes:["GMaj","Emin","Em","DMix","ADor","BPhr","CLyd","F#Loc"],stepsFromC:7},Ab:{modes:["AbMaj","Fmin","Fm","EbMix","BbDor","CPhr","DbLyd","GLoc"],stepsFromC:8},A:{modes:["AMaj","F#min","F#m","EMix","BDor","C#Phr","DLyd","G#Loc"],stepsFromC:9},Bb:{modes:["BbMaj","Gmin","Gm","FMix","CDor","DPhr","EbLyd","ALoc"],stepsFromC:10},B:{modes:["BMaj","G#min","G#m","F#Mix","C#Dor","D#Phr","ELyd","A#Loc"],stepsFromC:11},"C#":{modes:["C#Maj","A#min","A#m","G#Mix","D#Dor","E#Phr","F#Lyd","B#Loc"],stepsFromC:1},"F#":{modes:["F#Maj","D#min","D#m","C#Mix","G#Dor","A#Phr","BLyd","E#Loc"],stepsFromC:6},Cb:{modes:["CbMaj","Abmin","Abm","GbMix","DbDor","EbPhr","FbLyd","BbLoc"],stepsFromC:11}},r=null;e.exports={relativeMajor:function(e){r||function(){r={};for(var e=Object.keys(t),n=0;n=t&&(r-=t),"bar"===s[c].el_type)return r}return r}(this.lines,e);return t<1e-8||e-t<1e-8?0:t},this.getBarLength=function(){var e=this.getMeterFraction();return e.num/e.den},this.getTotalTime=function(){return this.totalTime},this.getTotalBeats=function(){return this.totalBeats},this.millisecondsPerMeasure=function(e){var t;if(e)t=e;else{var r=this.metaText?this.metaText.tempo:null;t=this.getBpm(r)}return t<=0&&(t=1),this.getBeatsPerMeasure()/t*6e4},this.getBeatsPerMeasure=function(){var e=this.getBeatLength();return this.getBarLength()/e},this.getMeter=function(){for(var e=0;ee)return c}}return null},this.addElementToEvents=function(e,t,r,i,a,s,o,c,l,h){if(t.hint)return{isTiedState:void 0,duration:0};var u=t.durationClass?t.durationClass:t.duration;if(t.abcelem.rest&&"spacer"===t.abcelem.rest.type&&(u=0),u>0){for(var d=[],f=0;f0)for(var s=a.staffs[0],o=s.absoluteY,c=o-s.top*i.STEP,l=a.staffs[a.staffs.length-1],h=(o=l.absoluteY)-l.bottom*i.STEP-c,u=a.voices,d=0;d0&&o["event"+p]&&(w="event"+p),p=Math.round(1e3*f),"bar"===C.type){var S=C.abcelem.type,_="bar_right_repeat"===S||"bar_dbl_repeat"===S,E="1"===C.abcelem.startEnding,M="bar_left_repeat"===S||"bar_dbl_repeat"===S||"bar_right_repeat"===S;if(_){x>0&&(o[w].endX=C.x),-1===g&&(g=x);var N=0;y=-1;for(var A=m;A=0;a--){var s=e[a];"bar"===s.type?(s.top=n,s.nextTop=t,t=n,s.bottom=i,s.nextBottom=r,r=i):"event"===s.type&&(n=s.top,i=s.top+s.height)}}(s=function(e){var t=[];for(var r in e)e.hasOwnProperty(r)&&t.push(e[r]);return t.sort((function(e,t){var r=e.milliseconds-t.milliseconds;return 0!==r?r:"bar"===e.type?-1:1}))}(o)),function(e,r){if(!(r.length<1)){for(var n=0;ni.left&&(i.endX=Math.min(i.endX,s)):i.endX=s}}var o=r[r.length-1];o.endX=e[o.line].staffGroup.w}}(this.lines,s),s.push({type:"end",milliseconds:u}),this.addUsefulCallbackInfo(s,b*i),s},this.addUsefulCallbackInfo=function(e,t){for(var r=this.millisecondsPerMeasure(t),n=0;n0?e.duration[0]:r)/r}if(!t){t=180;var n=this.getMeterFraction();n&&3!==n.num&&n.num%3==0&&(t=120)}return t},this.setTiming=function(e,t){if(t=t||0,!this.engraver||!this.engraver.staffgroups)return console.log("setTiming cannot be called before the tune is drawn."),this.noteTimings=[],this.noteTimings;var r=this.metaText?this.metaText.tempo:null,n=this.getBpm(r),i=1;e?r&&(i=e/n):e=n;var a=this.getBeatLength(),s=e/60,o=this.getBarLength()/a*t/s;o&&(o-=this.getPickupLength()/a/s);var c=a*s;return this.noteTimings=this.setupEvents(o,c,e,i),this.noteTimings.length>0?(this.totalTime=this.noteTimings[this.noteTimings.length-1].milliseconds/1e3,this.totalBeats=this.totalTime*s):(this.totalTime=void 0,this.totalBeats=void 0),this.noteTimings},this.setUpAudio=function(e){e||(e={});var t=a(this,e);return s(t,e,this.formatting.percmap,this.formatting.midi)},this.deline=function(e){return o(this.lines,e)},this.findSelectableElement=function(e){return this.engraver&&this.engraver.selectables?this.engraver.findSelectableElement(e):null},this.getSelectableArray=function(){return this.engraver&&this.engraver.selectables?this.engraver.selectables:[]}}},351:function(e){function t(e,t){return"abselem"===e?"abselem":t}function r(e,t){e.el_type="meter",e.startChar=-1,e.endChar=-1;for(var r=0;r0&&(r===t||new RegExp("(^|\\s)"+t+"(\\s|$)").test(r))}(e,t)||(e.className+=(e.className?" ":"")+t),e},this.removeClassName=function(e,t){return e.className=n.strip(e.className.replace(new RegExp("(^|\\s+)"+t+"(\\s+|$)")," ")),e},this.setReadOnly=function(e){var t="abc_textarea_readonly",r=this.editarea.getElem();e?(r.setAttribute("readonly","yes"),this.addClassName(r,t)):(r.removeAttribute("readonly"),this.removeClassName(r,t))}};c.prototype.redrawMidi=function(){if(this.generate_midi&&!this.midiPause){var e=new window.CustomEvent("generateMidi",{detail:{tunes:this.tunes,abcjsParams:this.abcjsParams,downloadMidiEl:this.downloadMidi,inlineMidiEl:this.inlineMidi,engravingEl:this.div}});window.dispatchEvent(e)}if(this.synth){var t=this.synth.synthControl;this.synth.synthControl||(this.synth.synthControl=new i,this.synth.synthControl.load(this.synth.el,this.synth.cursorControl,this.synth.options)),this.synth.synthControl.setTune(this.tunes[0],t,this.synth.options)}},c.prototype.modelChanged=function(){if(!this.bReentry){this.bReentry=!0;try{this.timerId=null,this.synth&&this.synth.synthControl&&this.synth.synthControl.disable(!0),this.tunes=s(this.div,this.currentAbc,this.abcjsParams),this.tunes.length>0&&(this.warnings=this.tunes[0].warnings),this.redrawMidi()}catch(e){console.error("ABCJS error: ",e),this.warnings||(this.warnings=[]),this.warnings.push(e.message)}this.warningsdiv&&(this.warningsdiv.innerHTML=this.warnings?this.warnings.join("
"):"No errors"),this.updateSelection(),this.bReentry=!1}},c.prototype.paramChanged=function(e){if(e)for(var t in e)e.hasOwnProperty(t)&&(this.abcjsParams[t]=e[t]);this.currentAbc="",this.fireChanged()},c.prototype.synthParamChanged=function(e){if(this.synth){if(this.synth.options={},e)for(var t in e)e.hasOwnProperty(t)&&(this.synth.options[t]=e[t]);this.currentAbc="",this.fireChanged()}},c.prototype.parseABC=function(){var e=this.editarea.getString();return e===this.currentAbc?(this.updateSelection(),!1):(this.currentAbc=e,!0)},c.prototype.updateSelection=function(){var e=this.editarea.getSelection();try{this.tunes.length>0&&this.tunes[0].engraver&&this.tunes[0].engraver.rangeHighlight(e.start,e.end)}catch(e){}this.selectionChangeCallback&&this.selectionChangeCallback(e.start,e.end)},c.prototype.fireSelectionChanged=function(){this.updateSelection()},c.prototype.setDirtyStyle=function(e){if(void 0!==this.indicate_changed){var t,r,i="abc_textarea_dirty",a=this.editarea.getElem();e?function(e,t){var r=e.className;return r.length>0&&(r===t||new RegExp("(^|\\s)"+t+"(\\s|$)").test(r))}(t=a,r=i)||(t.className+=(t.className?" ":"")+r):function(e,t){e.className=n.strip(e.className.replace(new RegExp("(^|\\s+)"+t+"(\\s+|$)")," "))}(a,i)}},c.prototype.fireChanged=function(){if(!this.bIsPaused&&this.parseABC()){var e=this;this.timerId&&clearTimeout(this.timerId),this.timerId=setTimeout((function(){e.modelChanged()}),300);var t=this.isDirty();this.wasDirty!==t&&(this.wasDirty=t,this.setDirtyStyle(t)),this.onchangeCallback&&this.onchangeCallback(this)}},c.prototype.setNotDirty=function(){this.editarea.initialText=this.editarea.getString(),this.wasDirty=!1,this.setDirtyStyle(!1)},c.prototype.isDirty=function(){return void 0!==this.indicate_changed&&this.editarea.initialText!==this.editarea.getString()},c.prototype.highlight=function(e,t,r,n,i,a){this.editarea.setSelection(e.startChar,e.endChar),this.selectionChangeCallback&&this.selectionChangeCallback(e.startChar,e.endChar),this.clientClickListener&&this.clientClickListener(e,t,r,n,i,a)},c.prototype.pause=function(e){this.bIsPaused=e,e||this.fireChanged()},c.prototype.millisecondsPerMeasure=function(){return this.synth&&this.synth.synthControl&&this.synth.synthControl.visualObj?this.synth.synthControl.visualObj.millisecondsPerMeasure():0},c.prototype.pauseMidi=function(e){this.midiPause=e,e||this.redrawMidi()},e.exports=c},3284:function(e,t,r){var n,i=r(9991);!function(){"use strict";function e(e,t,r){for(var n=Object.keys(t),i=0;ia){var c=(n[s]-a)*r;e.addRest(c),a=n[s]}for(var l=0;l128&&(s=s.substring(0,124)+"...");var o=t.getKeySignature(),c=t.getMeterFraction(),l=n.tempo/60;a.setGlobalInfo(n.tempo,s,o,c);for(var h=0;hh&&(p=r.pan[h]),128===f.instrument?(a.setChannel(9,p),a.setInstrument(0)):(a.setChannel(f.channel,p),a.setInstrument(f.instrument));break;case"note":var m=f.gap*l,g=f.start,v=g+f.duration-m;u[g]||(u[g]=[]),u[g].push({pitch:f.pitch,volume:f.volume,cents:f.cents}),u[v]||(u[v]=[]),u[v].push({pitch:f.pitch,volume:0});break;default:console.log("MIDI create Unknown: "+f.cmd)}}e(a,u,1920),a.endTrack()}return a.getData()}}(),e.exports=n},5008:function(e){var t={clone:function(e){var t={};for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);return t},cloneArray:function(e){for(var r=[],n=0;n=0&&e.lastIndexOf(t)===r},last:function(e){return 0===e.length?null:e[e.length-1]}};e.exports=t},8905:function(e,t,r){var n=r(5008),i=r(8360),a=r(9928),s=r(6476),o=r(1881),c=r(1756),l=r(6780),h=r(575);e.exports=function(){"use strict";var e,t=new l,r=new h(t),u="",d="";function f(e,t,r){e.positioning||(e.positioning={}),e.positioning[t]=r}function p(e,t,r){e.fonts||(e.fonts={}),e.fonts[t]=r}this.getTune=function(){var e={formatting:t.formatting,lines:t.lines,media:t.media,metaText:t.metaText,metaTextInfo:t.metaTextInfo,version:t.version,addElementToEvents:t.addElementToEvents,addUsefulCallbackInfo:t.addUsefulCallbackInfo,getTotalTime:t.getTotalTime,getTotalBeats:t.getTotalBeats,getBarLength:t.getBarLength,getBeatLength:t.getBeatLength,getBeatsPerMeasure:t.getBeatsPerMeasure,getBpm:t.getBpm,getMeter:t.getMeter,getMeterFraction:t.getMeterFraction,getPickupLength:t.getPickupLength,getKeySignature:t.getKeySignature,getElementFromChar:t.getElementFromChar,makeVoicesArray:t.makeVoicesArray,millisecondsPerMeasure:t.millisecondsPerMeasure,setupEvents:t.setupEvents,setTiming:t.setTiming,setUpAudio:t.setUpAudio,deline:t.deline,findSelectableElement:t.findSelectableElement,getSelectableArray:t.getSelectableArray};return t.lineBreaks&&(e.lineBreaks=t.lineBreaks),t.visualTranspose&&(e.visualTranspose=t.visualTranspose),e};var m,g,v={reset:function(){for(var e in this)this.hasOwnProperty(e)&&"function"!=typeof this[e]&&delete this[e];this.iChar=0,this.key={accidentals:[],root:"none",acc:"",mode:""},this.meter=null,this.origMeter=null,this.hasMainTitle=!1,this.default_length=.125,this.clef={type:"treble",verticalPos:0},this.octave=0,this.next_note_duration=0,this.start_new_line=!0,this.is_in_header=!0,this.partForNextLine={},this.tempoForNextLine=[],this.havent_set_length=!0,this.voices={},this.staves=[],this.macros={},this.currBarNumber=1,this.barCounter={},this.ignoredDecorations=[],this.score_is_present=!1,this.inEnding=!1,this.inTie=[],this.inTieChord={},this.vocalPosition="auto",this.dynamicPosition="auto",this.chordPosition="auto",this.ornamentPosition="auto",this.volumePosition="auto",this.openSlurs=[],this.freegchord=!1,this.endingHoldOver={}},differentFont:function(e,t){return this[e].decoration!==t[e].decoration||this[e].face!==t[e].face||this[e].size!==t[e].size||this[e].style!==t[e].style||this[e].weight!==t[e].weight},addFormattingOptions:function(e,t,r){"note"===r?("auto"!==this.vocalPosition&&f(e,"vocalPosition",this.vocalPosition),"auto"!==this.dynamicPosition&&f(e,"dynamicPosition",this.dynamicPosition),"auto"!==this.chordPosition&&f(e,"chordPosition",this.chordPosition),"auto"!==this.ornamentPosition&&f(e,"ornamentPosition",this.ornamentPosition),"auto"!==this.volumePosition&&f(e,"volumePosition",this.volumePosition),this.differentFont("annotationfont",t)&&p(e,"annotationfont",this.annotationfont),this.differentFont("gchordfont",t)&&p(e,"gchordfont",this.gchordfont),this.differentFont("vocalfont",t)&&p(e,"vocalfont",this.vocalfont),this.differentFont("tripletfont",t)&&p(e,"tripletfont",this.tripletfont)):"bar"===r&&("auto"!==this.dynamicPosition&&f(e,"dynamicPosition",this.dynamicPosition),"auto"!==this.chordPosition&&f(e,"chordPosition",this.chordPosition),"auto"!==this.ornamentPosition&&f(e,"ornamentPosition",this.ornamentPosition),"auto"!==this.volumePosition&&f(e,"volumePosition",this.volumePosition),this.differentFont("measurefont",t)&&p(e,"measurefont",this.measurefont),this.differentFont("repeatfont",t)&&p(e,"repeatfont",this.repeatfont))},duplicateStartEndingHoldOvers:function(){this.endingHoldOver={inTie:[],inTieChord:{}};for(var e=0;e/g,">")},y=function(t,r,n){r||(r=" ");var i=r[n];" "!==i&&i||(i="SPACE");var a,s=b(r.substring(n-64,n))+''+i+""+b(r.substring(n+1).substring(0,64));!function(e){v.warnings||(v.warnings=[]),v.warnings.push(e)}("Music Line:"+e.lineIndex+":"+(n+1)+": "+t+": "+s),a={message:t,line:r,startChar:v.iChar+n,column:n},v.warningObjects||(v.warningObjects=[]),v.warningObjects.push(a)};this.getWarnings=function(){return v.warnings},this.getWarningObjects=function(){return v.warningObjects};var x=function(t,r){if(r.indexOf("")>=0)u+=r;else if(r=u+r,u="",t){"-"!==(r=n.strip(r))[r.length-1]&&(r+=" ");for(var i=[],a=0,s=!1,o=function(t){var o=n.strip(r.substring(a,t));if(o=o.replace(/\\([-_*|~])/g,"$1"),a=t+1,o.length>0){s&&(o=o.replace(/~/g," "));var c=r[t];return"_"!==c&&"-"!==c&&(c=" "),i.push({syllable:e.translateString(o),divider:c}),s=!1,!0}return!1},c=!1,l=0;l0&&(n.last(i).divider="-",i.push({skip:!0,to:"next"}));break;case"_":c||(o(l),i.push({skip:!0,to:"slur"}));break;case"*":c||(o(l),i.push({skip:!0,to:"next"}));break;case"|":c||(o(l),i.push({skip:!0,to:"bar"}));break;case"~":c||(s=!0)}c="\\"===r[l]}t.forEach((function(e){if(0!==i.length)if(i[0].skip){switch(i[0].to){case"next":case"slur":"note"===e.el_type&&null!==e.pitches&&i.shift();break;case"bar":"bar"===e.el_type&&i.shift()}"bar"!==e.el_type&&(void 0===e.lyric?e.lyric=[{syllable:"",divider:" "}]:e.lyric.push({syllable:"",divider:" "}))}else if("note"===e.el_type&&void 0===e.rest){var t=i.shift();t.syllable&&(t.syllable=t.syllable.replace(/ +/g," ")),void 0===e.lyric?e.lyric=[t]:e.lyric.push(t)}}))}else y("Can't add words before the first line of music",t,0)},k=function(t,r){if(r.indexOf("")>=0)d+=r;else if(r=d+r,d="",t){"-"!==(r=n.strip(r))[r.length-1]&&(r+=" ");for(var i=[],a=0,s=!1,o=function(t){var o=n.strip(r.substring(a,t));if(a=t+1,o.length>0){s&&(o=o.replace(/~/g," "));var c=r[t];return"_"!==c&&"-"!==c&&(c=" "),i.push({syllable:e.translateString(o),divider:c}),s=!1,!0}return!1},c=0;c0&&(n.last(i).divider="-",i.push({skip:!0,to:"next"}));break;case"_":o(c),i.push({skip:!0,to:"slur"});break;case"*":o(c),i.push({skip:!0,to:"next"});break;case"|":o(c),i.push({skip:!0,to:"bar"});break;case"~":s=!0}t.forEach((function(e){if(0!==i.length)if(i[0].skip)switch(i[0].to){case"next":case"slur":"note"===e.el_type&&null!==e.pitches&&i.shift();break;case"bar":"bar"===e.el_type&&i.shift()}else if("note"===e.el_type&&void 0===e.rest){var t=i.shift();void 0===e.lyric?e.lyric=[t]:e.lyric.push(t)}}))}else y("Can't add symbols before the first line of music",t,0)},w=function(e){if(n.startsWith(e,"%%")){var t=i.addDirective(e.substring(2));t&&y(t,e,2)}else{var a=e.indexOf("%");if(a>=0&&(e=e.substring(0,a)),0!==(e=e.replace(/\s+$/,"")).length)if(u)x(r.getCurrentVoice(),e.substring(2));else if(d)k(r.getCurrentVoice(),e.substring(2));else if(e.length<2||":"!==e[1]||g.lineContinuation)g.parseMusic(e);else{var s=m.parseHeader(e);s.regular&&g.parseMusic(e),s.newline&&g.startNewLine(),s.words&&x(r.getCurrentVoice(),e.substring(2)),s.symbols&&k(r.getCurrentVoice(),e.substring(2))}}};function C(e,t){e.push({el_type:"hint"});for(var r=0;r1){for(var b=1;b0&&"\n"!==p[b][0];)p[b]=p[b].substr(1),p[b-1]+=" ";l=p.join(" ")}var C=(l=l.replace(/\\([ \t]*)(%.*)*\n/g,(function(e,t,r){return t+""+(r?Array(r.length+1).join(" "):"")+"\n"}))).split("\n");0===n.last(C).length&&C.pop(),e=new o(C,v),m=new a(e,y,v,t,r),g=new s(e,y,v,t,r,m),h.print&&(t.media="print"),v.reset(),v.iChar=f,h.visualTranspose?(v.globalTranspose=parseInt(h.visualTranspose),0===v.globalTranspose?v.globalTranspose=void 0:r.setVisualTranspose(h.visualTranspose)):v.globalTranspose=void 0,h.lineBreaks&&(v.lineBreaks=h.lineBreaks),m.reset(e,y,v,t);try{h.format&&i.globalFormatting(h.format);for(var S=e.nextLine();S;){if(h.header_only&&!1===v.is_in_header)throw"normal_abort";if(h.stop_on_warning&&v.warnings)throw"normal_abort";var _=v.is_in_header;w(S),_&&!v.is_in_header&&(r.setRunningFont("annotationfont",v.annotationfont),r.setRunningFont("gchordfont",v.gchordfont),r.setRunningFont("tripletfont",v.tripletfont),r.setRunningFont("vocalfont",v.vocalfont)),S=e.nextLine()}u&&x(r.getCurrentVoice(),""),d&&k(r.getCurrentVoice(),""),v.openSlurs=r.cleanUp(v.barsperstaff,v.staffnonote,v.openSlurs)}catch(e){if("normal_abort"!==e)throw e}var E=792,M=612;switch(v.papersize){case"legal":E=1008,M=612;break;case"A4":E=842.4,M=597.6}if(v.landscape){var N=E;E=M,M=N}t.formatting.pagewidth||(t.formatting.pagewidth=M),t.formatting.pageheight||(t.formatting.pageheight=E),h.hint_measures&&function(){for(var e=0;e1&&!n.startsWith(o[0].abc,"X:")&&o.shift().abc.split("\n").forEach((function(e){n.startsWith(e,"%%")&&(t+=e+"\n")}));var c=t;return o.forEach((function(e){var r=e.abc.indexOf("\n\n");r>0&&(e.abc=e.abc.substring(0,r)),e.pure=e.abc,e.abc=t+e.abc,e.title="";var i=e.pure.split("T:");i.length>1&&(i=i[1].split("\n"),e.title=n.strip(i[0]));var a=e.pure.substring(2,e.pure.indexOf("\n"));e.id=n.strip(a)})),{header:c,tunes:o}}},8360:function(e,t,r){var n=r(5008),i={};!function(){"use strict";var e,t,r,a,s;i.initialize=function(n,i,o,c,l){e=n,t=i,a=c,s=l,(r=o).annotationfont={face:"Helvetica",size:12,weight:"normal",style:"normal",decoration:"none"},r.gchordfont={face:"Helvetica",size:12,weight:"normal",style:"normal",decoration:"none"},r.historyfont={face:'"Times New Roman"',size:16,weight:"normal",style:"normal",decoration:"none"},r.infofont={face:'"Times New Roman"',size:14,weight:"normal",style:"italic",decoration:"none"},r.measurefont={face:'"Times New Roman"',size:14,weight:"normal",style:"italic",decoration:"none"},r.partsfont={face:'"Times New Roman"',size:15,weight:"normal",style:"normal",decoration:"none"},r.repeatfont={face:'"Times New Roman"',size:13,weight:"normal",style:"normal",decoration:"none"},r.textfont={face:'"Times New Roman"',size:16,weight:"normal",style:"normal",decoration:"none"},r.tripletfont={face:"Times",size:11,weight:"normal",style:"italic",decoration:"none"},r.vocalfont={face:'"Times New Roman"',size:13,weight:"bold",style:"normal",decoration:"none"},r.wordsfont={face:'"Times New Roman"',size:16,weight:"normal",style:"normal",decoration:"none"},a.formatting.composerfont={face:'"Times New Roman"',size:14,weight:"normal",style:"italic",decoration:"none"},a.formatting.subtitlefont={face:'"Times New Roman"',size:16,weight:"normal",style:"normal",decoration:"none"},a.formatting.tempofont={face:'"Times New Roman"',size:15,weight:"bold",style:"normal",decoration:"none"},a.formatting.titlefont={face:'"Times New Roman"',size:20,weight:"normal",style:"normal",decoration:"none"},a.formatting.footerfont={face:'"Times New Roman"',size:12,weight:"normal",style:"normal",decoration:"none"},a.formatting.headerfont={face:'"Times New Roman"',size:12,weight:"normal",style:"normal",decoration:"none"},a.formatting.voicefont={face:'"Times New Roman"',size:13,weight:"bold",style:"normal",decoration:"none"},a.formatting.tablabelfont={face:'"Trebuchet MS"',size:16,weight:"normal",style:"normal",decoration:"none"},a.formatting.tabnumberfont={face:'"Arial"',size:11,weight:"normal",style:"normal",decoration:"none"},a.formatting.tabgracefont={face:'"Arial"',size:8,weight:"normal",style:"normal",decoration:"none"},a.formatting.annotationfont=r.annotationfont,a.formatting.gchordfont=r.gchordfont,a.formatting.historyfont=r.historyfont,a.formatting.infofont=r.infofont,a.formatting.measurefont=r.measurefont,a.formatting.partsfont=r.partsfont,a.formatting.repeatfont=r.repeatfont,a.formatting.textfont=r.textfont,a.formatting.tripletfont=r.tripletfont,a.formatting.vocalfont=r.vocalfont,a.formatting.wordsfont=r.wordsfont};var o={gchordfont:!0,measurefont:!0,partsfont:!0,annotationfont:!0,composerfont:!0,historyfont:!0,infofont:!0,subtitlefont:!0,textfont:!0,titlefont:!0,voicefont:!0},c=function(e,r,n,i,a){function s(){var s=parseInt(e[0].token);return e.shift(),r?0===e.length?{face:r.face,weight:r.weight,style:r.style,decoration:r.decoration,size:s}:1===e.length&&"box"===e[0].token&&o[a]?{face:r.face,weight:r.weight,style:r.style,decoration:r.decoration,size:s,box:!0}:(t("Extra parameters in font definition.",n,i),{face:r.face,weight:r.weight,style:r.style,decoration:r.decoration,size:s}):(t("Can't set just the size of the font since there is no default value.",n,i),{face:'"Times New Roman"',weight:"normal",style:"normal",decoration:"none",size:s})}if("*"===e[0].token){if(e.shift(),"number"===e[0].type)return s();t("Expected font size number after *.",n,i)}if("number"===e[0].type)return s();for(var c,l=[],h="normal",u="normal",d="none",f=!1,p="face",m=!1;e.length;){var g=e.shift(),v=g.token.toLowerCase();switch(p){case"face":m||"utf"!==v&&"number"!==g.type&&"bold"!==v&&"italic"!==v&&"underline"!==v&&"box"!==v?l.length>0&&"-"===g.token?(m=!0,l[l.length-1]=l[l.length-1]+g.token):m?(m=!1,l[l.length-1]=l[l.length-1]+g.token):l.push(g.token):"number"===g.type?(c?t("Font size specified twice in font definition.",n,i):c=g.token,p="modifier"):"bold"===v?h="bold":"italic"===v?u="italic":"underline"===v?d="underline":"box"===v?(o[a]?f=!0:t('This font style doesn\'t support "box"',n,i),p="finished"):"utf"===v?(g=e.shift(),p="size"):t("Unknown parameter "+g.token+" in font definition.",n,i);break;case"size":"number"===g.type?c?t("Font size specified twice in font definition.",n,i):c=g.token:t("Expected font size in font definition.",n,i),p="modifier";break;case"modifier":"bold"===v?h="bold":"italic"===v?u="italic":"underline"===v?d="underline":"box"===v?(o[a]?f=!0:t('This font style doesn\'t support "box"',n,i),p="finished"):t("Unknown parameter "+g.token+" in font definition.",n,i);break;case"finished":t('Extra characters found after "box" in font definition.',n,i)}}void 0===c?r?c=r.size:(t("Must specify the size of the font since there is no default value.",n,i),c=12):c=parseFloat(c),""===(l=l.join(" "))&&(r?l=r.face:(t("Must specify the name of the font since there is no default value.",n,i),l="sans-serif"));var b=function(e){switch(e){case"Arial-Italic":return{face:"Arial",weight:"normal",style:"italic",decoration:"none"};case"Arial-Bold":return{face:"Arial",weight:"bold",style:"normal",decoration:"none"};case"Bookman-Demi":return{face:"Bookman,serif",weight:"bold",style:"normal",decoration:"none"};case"Bookman-DemiItalic":return{face:"Bookman,serif",weight:"bold",style:"italic",decoration:"none"};case"Bookman-Light":return{face:"Bookman,serif",weight:"normal",style:"normal",decoration:"none"};case"Bookman-LightItalic":return{face:"Bookman,serif",weight:"normal",style:"italic",decoration:"none"};case"Courier":return{face:'"Courier New"',weight:"normal",style:"normal",decoration:"none"};case"Courier-Oblique":return{face:'"Courier New"',weight:"normal",style:"italic",decoration:"none"};case"Courier-Bold":return{face:'"Courier New"',weight:"bold",style:"normal",decoration:"none"};case"Courier-BoldOblique":return{face:'"Courier New"',weight:"bold",style:"italic",decoration:"none"};case"AvantGarde-Book":return{face:"AvantGarde,Arial",weight:"normal",style:"normal",decoration:"none"};case"AvantGarde-BookOblique":return{face:"AvantGarde,Arial",weight:"normal",style:"italic",decoration:"none"};case"AvantGarde-Demi":case"Avant-Garde-Demi":return{face:"AvantGarde,Arial",weight:"bold",style:"normal",decoration:"none"};case"AvantGarde-DemiOblique":return{face:"AvantGarde,Arial",weight:"bold",style:"italic",decoration:"none"};case"Helvetica-Oblique":return{face:"Helvetica",weight:"normal",style:"italic",decoration:"none"};case"Helvetica-Bold":return{face:"Helvetica",weight:"bold",style:"normal",decoration:"none"};case"Helvetica-BoldOblique":return{face:"Helvetica",weight:"bold",style:"italic",decoration:"none"};case"Helvetica-Narrow":return{face:'"Helvetica Narrow",Helvetica',weight:"normal",style:"normal",decoration:"none"};case"Helvetica-Narrow-Oblique":return{face:'"Helvetica Narrow",Helvetica',weight:"normal",style:"italic",decoration:"none"};case"Helvetica-Narrow-Bold":return{face:'"Helvetica Narrow",Helvetica',weight:"bold",style:"normal",decoration:"none"};case"Helvetica-Narrow-BoldOblique":return{face:'"Helvetica Narrow",Helvetica',weight:"bold",style:"italic",decoration:"none"};case"Palatino-Roman":return{face:"Palatino",weight:"normal",style:"normal",decoration:"none"};case"Palatino-Italic":return{face:"Palatino",weight:"normal",style:"italic",decoration:"none"};case"Palatino-Bold":return{face:"Palatino",weight:"bold",style:"normal",decoration:"none"};case"Palatino-BoldItalic":return{face:"Palatino",weight:"bold",style:"italic",decoration:"none"};case"NewCenturySchlbk-Roman":return{face:'"New Century",serif',weight:"normal",style:"normal",decoration:"none"};case"NewCenturySchlbk-Italic":return{face:'"New Century",serif',weight:"normal",style:"italic",decoration:"none"};case"NewCenturySchlbk-Bold":return{face:'"New Century",serif',weight:"bold",style:"normal",decoration:"none"};case"NewCenturySchlbk-BoldItalic":return{face:'"New Century",serif',weight:"bold",style:"italic",decoration:"none"};case"Times":case"Times-Roman":case"Times-Narrow":case"Times-Courier":case"Times-New-Roman":return{face:'"Times New Roman"',weight:"normal",style:"normal",decoration:"none"};case"Times-Italic":case"Times-Italics":return{face:'"Times New Roman"',weight:"normal",style:"italic",decoration:"none"};case"Times-Bold":return{face:'"Times New Roman"',weight:"bold",style:"normal",decoration:"none"};case"Times-BoldItalic":return{face:'"Times New Roman"',weight:"bold",style:"italic",decoration:"none"};case"ZapfChancery-MediumItalic":return{face:'"Zapf Chancery",cursive,serif',weight:"normal",style:"normal",decoration:"none"};default:return null}}(l),y={};return b?(y.face=b.face,y.weight=b.weight,y.style=b.style,y.decoration=b.decoration,y.size=c,f&&(y.box=!0),y):(y.face=l,y.weight=h,y.style=u,y.decoration=d,y.size=c,f&&(y.box=!0),y)},l=function(e,t,n){return 0===t.length?'Directive "'+e+'" requires a font as a parameter.':(r[e]=c(t,r[e],n,0,e),r.is_in_header&&(a.formatting[e]=r[e]),null)},h=function(e,t){var r="";t.forEach((function(e){r+=e.token}));var n=parseFloat(r);if(isNaN(n)||0===n)return'Directive "'+e+'" requires a number as a parameter.';a.formatting.scale=n},u=["acoustic-bass-drum","bass-drum-1","side-stick","acoustic-snare","hand-clap","electric-snare","low-floor-tom","closed-hi-hat","high-floor-tom","pedal-hi-hat","low-tom","open-hi-hat","low-mid-tom","hi-mid-tom","crash-cymbal-1","high-tom","ride-cymbal-1","chinese-cymbal","ride-bell","tambourine","splash-cymbal","cowbell","crash-cymbal-2","vibraslap","ride-cymbal-2","hi-bongo","low-bongo","mute-hi-conga","open-hi-conga","low-conga","high-timbale","low-timbale","high-agogo","low-agogo","cabasa","maracas","short-whistle","long-whistle","short-guiro","long-guiro","claves","hi-wood-block","low-wood-block","mute-cuica","open-cuica","mute-triangle","open-triangle"],d=function(e,t,n,i,a){if(1!==n.length||"number"!==n[0].type)return'Directive "'+t+'" requires a number as a parameter.';var s=n[0].intt;return void 0!==i&&sa?'Directive "'+t+'" requires a number less than or equal to '+a+" as a parameter.":(r[e]=s,null)},f=function(e,t,n){if(1===n.length&&("true"===n[0].token||"false"===n[0].token))return r[e]="true"===n[0].token,null;var i=d(e,t,n,0,1);return null!==i?i:(r[e]=1===r[e],null)},p=function(e,t,n,i){if(1!==n.length)return'Directive "'+t+'" requires one of [ '+i.join(", ")+" ] as a parameter.";for(var a=n[0].token,s=!1,o=0;!s&&o1&&r.setfont){var n=[];""!==t[0]&&n.push({text:t[0]});for(var i=1;i=0||e[0].floatt<=1)return{value:e[0].floatt}}else{if("false"===e[0].token)return{value:0};if("true"===e[0].token)return{value:1}}return{error:"Directive stretchlast requires zero or one parameter: false, true, or number between 0 and 1 (received "+e[0].token+")"}}i.addDirective=function(o){var E=e.tokenize(o,0,o.length);if(0===E.length||"alpha"!==E[0].type)return null;var M=o.substring(o.indexOf(E[0].token)+E[0].token.length);M=e.stripComment(M);var N,A=E.shift().token.toLowerCase(),B="";switch(A){case"bagpipes":a.formatting.bagpipes=!0;break;case"flatbeams":a.formatting.flatbeams=!0;break;case"jazzchords":a.formatting.jazzchords=!0;break;case"accentAbove":a.formatting.accentAbove=!0;break;case"germanAlphabet":a.formatting.germanAlphabet=!0;break;case"landscape":r.landscape=!0;break;case"papersize":r.papersize=M;break;case"graceslurs":if(1!==E.length)return"Directive graceslurs requires one parameter: 0 or 1";if("0"===E[0].token||"false"===E[0].token)a.formatting.graceSlurs=!1;else{if("1"!==E[0].token&&"true"!==E[0].token)return"Directive graceslurs requires one parameter: 0 or 1 (received "+E[0].token+")";a.formatting.graceSlurs=!0}break;case"lineThickness":var P=_(E);if(void 0!==P.value&&(a.formatting.lineThickness=P.value),P.error)return P.error;break;case"stretchlast":var L=_(E);if(void 0!==L.value&&(a.formatting.stretchlast=L.value),L.error)return L.error;break;case"titlecaps":r.titlecaps=!0;break;case"titleleft":a.formatting.titleleft=!0;break;case"measurebox":a.formatting.measurebox=!0;break;case"vocal":return p("vocalPosition",A,E,S);case"dynamic":return p("dynamicPosition",A,E,S);case"gchord":return p("chordPosition",A,E,S);case"ornament":return p("ornamentPosition",A,E,S);case"volume":return p("volumePosition",A,E,S);case"botmargin":case"botspace":case"composerspace":case"indent":case"leftmargin":case"linesep":case"musicspace":case"partsspace":case"pageheight":case"pagewidth":case"rightmargin":case"stafftopmargin":case"staffsep":case"staffwidth":case"subtitlespace":case"sysstaffsep":case"systemsep":case"textspace":case"titlespace":case"topmargin":case"topspace":case"vocalspace":case"wordsspace":return function(t,r){var n=e.getMeasurement(r);return 0===n.used||0!==r.length?'Directive "'+t+'" requires a measurement as a parameter.':(a.formatting[t]=n.value,null)}(A,E);case"voicescale":if(1!==E.length||"number"!==E[0].type)return"voicescale requires one float as a parameter";var O=E.shift();return r.currentVoice&&(r.currentVoice.scale=O.floatt,s.changeVoiceScale(r.currentVoice.scale)),null;case"voicecolor":if(1!==E.length)return"voicecolor requires one string as a parameter";var H=E.shift();return r.currentVoice&&(r.currentVoice.color=H.token,s.changeVoiceColor(r.currentVoice.color)),null;case"vskip":var z=Math.round(function(t,r){var n=e.getMeasurement(r);return 0===n.used||0!==r.length?{error:'Directive "'+t+'" requires a measurement as a parameter.'}:n.value}(A,E));return z.error?z.error:(s.addSpacing(z),null);case"scale":h(A,E);break;case"sep":if(0===E.length)s.addSeparator(14,14,85,{startChar:r.iChar,endChar:r.iChar+5});else{var F=e.getMeasurement(E);if(0===F.used)return'Directive "'+A+'" requires 3 numbers: space above, space below, length of line';var D=F.value;if(0===(F=e.getMeasurement(E)).used)return'Directive "'+A+'" requires 3 numbers: space above, space below, length of line';var I=F.value;if(0===(F=e.getMeasurement(E)).used||0!==E.length)return'Directive "'+A+'" requires 3 numbers: space above, space below, length of line';var j=F.value;s.addSeparator(D,I,j,{startChar:r.iChar,endChar:r.iChar+M.length})}break;case"barsperstaff":if(null!==(B=d("barsperstaff",A,E)))return B;break;case"staffnonote":if(1!==E.length)return"Directive staffnonote requires one parameter: 0 or 1";if("0"===E[0].token)r.staffnonote=!0;else{if("1"!==E[0].token)return"Directive staffnonote requires one parameter: 0 or 1 (received "+E[0].token+")";r.staffnonote=!1}break;case"printtempo":if(null!==(B=f("printTempo",A,E)))return B;break;case"partsbox":if(null!==(B=f("partsBox",A,E)))return B;r.partsfont.box=r.partsBox;break;case"freegchord":if(null!==(B=f("freegchord",A,E)))return B;break;case"measurenb":case"barnumbers":if(null!==(B=d("barNumbers",A,E)))return B;break;case"setbarnb":if(1!==E.length||"number"!==E[0].type)return"Directive setbarnb requires a number as a parameter.";r.currBarNumber=s.setBarNumberImmediate(E[0].intt);break;case"begintext":var V="";for(N=e.nextLine();N&&0!==N.indexOf("%%endtext");)n.startsWith(N,"%%")?V+=N.substring(2)+"\n":V+=N+"\n",N=e.nextLine();s.addText(V,{startChar:r.iChar,endChar:r.iChar+V.length+7});break;case"continueall":r.continueall=!0;break;case"beginps":for(N=e.nextLine();N&&0!==N.indexOf("%%endps");)e.nextLine();t("Postscript ignored",o,0);break;case"deco":M.length>0&&r.ignoredDecorations.push(M.substring(0,M.indexOf(" "))),t("Decoration redefinition ignored",o,0);break;case"text":var Y=e.translateString(M);s.addText(i.parseFontChangeLine(Y),{startChar:r.iChar,endChar:r.iChar+M.length+7});break;case"center":var G=e.translateString(M);s.addCentered(i.parseFontChangeLine(G));break;case"font":break;case"setfont":var q=e.tokenize(M,0,M.length);if(q.length>=4&&"-"===q[0].token&&"number"===q[1].type){var W=parseInt(q[1].token);W>=1&&W<=9&&(r.setfont||(r.setfont=[]),q.shift(),q.shift(),r.setfont[W]=c(q,r.setfont[W],o,0,"setfont"))}break;case"gchordfont":case"partsfont":case"tripletfont":case"vocalfont":case"textfont":case"annotationfont":case"historyfont":case"infofont":case"measurefont":case"repeatfont":case"wordsfont":return l(A,E,o);case"composerfont":case"subtitlefont":case"tempofont":case"titlefont":case"voicefont":case"footerfont":case"headerfont":return function(e,t,r){return 0===t.length?'Directive "'+e+'" requires a font as a parameter.':(a.formatting[e]=c(t,a.formatting[e],r,0,e),null)}(A,E,o);case"barlabelfont":case"barnumberfont":case"barnumfont":return l("measurefont",E,o);case"staves":case"score":r.score_is_present=!0;for(var R,X=function(e,t,i,a,s){(t||0===r.staves.length)&&r.staves.push({index:r.staves.length,numVoices:0});var o=n.last(r.staves);void 0!==i&&void 0===o.bracket&&(o.bracket=i),void 0!==a&&void 0===o.brace&&(o.brace=a),s&&(o.connectBarLines="end"),void 0===r.voices[e]&&(r.voices[e]={staffNum:o.index,index:o.numVoices},o.numVoices++)},U=!1,K=!1,$=!1,Q=!1,J=!1,Z=!1,ee=!1,te=function(){if(ee=!0,R){var e="start";R.staffNum>0&&("start"!==r.staves[R.staffNum-1].connectBarLines&&"continue"!==r.staves[R.staffNum-1].connectBarLines||(e="continue")),r.staves[R.staffNum].connectBarLines=e}};E.length;){var re=E.shift();switch(re.token){case"(":U?t("Can't nest parenthesis in %%score",o,re.start):(U=!0,Q=!0);break;case")":!U||Q?t("Unexpected close parenthesis in %%score",o,re.start):U=!1;break;case"[":K?t("Can't nest brackets in %%score",o,re.start):(K=!0,J=!0);break;case"]":!K||J?t("Unexpected close bracket in %%score",o,re.start):(K=!1,r.staves[R.staffNum].bracket="end");break;case"{":$?t("Can't nest braces in %%score",o,re.start):($=!0,Z=!0);break;case"}":!$||Z?t("Unexpected close brace in %%score",o,re.start):($=!1,r.staves[R.staffNum].brace="end");break;case"|":te();break;default:for(var ne="";("alpha"===re.type||"number"===re.type)&&(ne+=re.token,re.continueId);)re=E.shift();X(ne,!U||Q,J?"start":K?"continue":void 0,Z?"start":$?"continue":void 0,ee),Q=!1,J=!1,Z=!1,ee=!1,R=r.voices[ne],"staves"===A&&te()}}break;case"newpage":var ie=e.getInt(M);s.addNewPage(0===ie.digits?-1:ie.value);break;case"abc":var ae=M.split(" ");switch(ae[0]){case"-copyright":case"-creator":case"-edited-by":case"-version":case"-charset":var se=ae.shift();s.addMetaText(A+se,ae.join(" "),{startChar:r.iChar,endChar:r.iChar+M.length+5});break;default:return"Unknown directive: "+A+ae[0]}break;case"header":case"footer":var oe=e.getMeat(M,0,M.length);'"'===(oe=M.substring(oe.start,oe.end))[0]&&'"'===oe[oe.length-1]&&(oe=oe.substring(1,oe.length-1));var ce=oe.split("\t"),le={};le=1===ce.length?{left:"",center:ce[0],right:""}:2===ce.length?{left:ce[0],center:ce[1],right:""}:{left:ce[0],center:ce[1],right:ce[2]},ce.length>3&&t("Too many tabs in "+A+": "+ce.length+" found.",M,0),s.addMetaTextObj(A,le,{startChar:r.iChar,endChar:r.iChar+o.length});break;case"midi":var he=e.tokenize(M,0,M.length,!0);he.length>0&&"="===he[0].token&&he.shift(),0===he.length?t("Expected midi command",M,0):function(e,r,n){var i=e.shift().token,a=[];if(m.indexOf(i)>=0)0!==e.length&&t("Unexpected parameter in MIDI "+i,n,0);else if(g.indexOf(i)>=0)1!==e.length?t("Expected one parameter in MIDI "+i,n,0):a.push(e[0].token);else if(v.indexOf(i)>=0)1!==e.length?t("Expected one parameter in MIDI "+i,n,0):"number"!==e[0].type?t("Expected one integer parameter in MIDI "+i,n,0):a.push(e[0].intt);else if(b.indexOf(i)>=0)1!==e.length&&2!==e.length?t("Expected one or two parameters in MIDI "+i,n,0):"number"!==e[0].type||2===e.length&&"number"!==e[1].type?t("Expected integer parameter in MIDI "+i,n,0):(a.push(e[0].intt),2===e.length&&a.push(e[1].intt));else if(y.indexOf(i)>=0)2!==e.length?t("Expected two parameters in MIDI "+i,n,0):"number"!==e[0].type||"number"!==e[1].type?t("Expected two integer parameters in MIDI "+i,n,0):(a.push(e[0].intt),a.push(e[1].intt));else if(w.indexOf(i)>=0)2!==e.length?t("Expected two parameters in MIDI "+i,n,0):"alpha"!==e[0].type||"number"!==e[1].type?t("Expected one string and one integer parameters in MIDI "+i,n,0):(a.push(e[0].token),a.push(e[1].intt));else if("drummap"===i)2===e.length&&"alpha"===e[0].type&&"number"===e[1].type?(r.formatting||(r.formatting={}),r.formatting.midi||(r.formatting.midi={}),r.formatting.midi.drummap||(r.formatting.midi.drummap={}),r.formatting.midi.drummap[e[0].token]=e[1].intt,a=r.formatting.midi.drummap):3===e.length&&"punct"===e[0].type&&"alpha"===e[1].type&&"number"===e[2].type?(r.formatting||(r.formatting={}),r.formatting.midi||(r.formatting.midi={}),r.formatting.midi.drummap||(r.formatting.midi.drummap={}),r.formatting.midi.drummap[e[0].token+e[1].token]=e[2].intt,a=r.formatting.midi.drummap):t("Expected one note name and one integer parameter in MIDI "+i,n,0);else if(C.indexOf(i)>=0)3!==e.length||"number"!==e[0].type||"/"!==e[1].token||"number"!==e[2].type?t("Expected fraction parameter in MIDI "+i,n,0):(a.push(e[0].intt),a.push(e[2].intt));else if(x.indexOf(i)>=0)4!==e.length?t("Expected four parameters in MIDI "+i,n,0):"number"!==e[0].type||"number"!==e[1].type||"number"!==e[2].type||"number"!==e[3].type?t("Expected four integer parameters in MIDI "+i,n,0):(a.push(e[0].intt),a.push(e[1].intt),a.push(e[2].intt),a.push(e[3].intt));else if(k.indexOf(i)>=0)5!==e.length?t("Expected five parameters in MIDI "+i,n,0):"number"!==e[0].type||"number"!==e[1].type||"number"!==e[2].type||"number"!==e[3].type||"number"!==e[4].type?t("Expected five integer parameters in MIDI "+i,n,0):(a.push(e[0].intt),a.push(e[1].intt),a.push(e[2].intt),a.push(e[3].intt),a.push(e[4].intt));else if(b.indexOf(i)>=0)1!==e.length||4!==e.length?t("Expected one or two parameters in MIDI "+i,n,0):"number"!==e[0].type?t("Expected integer parameter in MIDI "+i,n,0):4===e.length?("octave"!==e[1].token&&t("Expected octave parameter in MIDI "+i,n,0),"="!==e[2].token&&t("Expected octave parameter in MIDI "+i,n,0),"number"!==e[3].type&&t("Expected integer parameter for octave in MIDI "+i,n,0)):(a.push(e[0].intt),4===e.length&&a.push(e[3].intt));else if(T.indexOf(i)>=0)if(e.length<2)t("Expected string parameter and at least one integer parameter in MIDI "+i,n,0);else if("alpha"!==e[0].type)t("Expected string parameter and at least one integer parameter in MIDI "+i,n,0);else{var o=e.shift();for(a.push(o.token);e.length>0;)"number"!==(o=e.shift()).type&&t("Expected integer parameter in MIDI "+i,n,0),a.push(o.intt)}s.hasBeginMusic()?s.appendElement("midi",-1,-1,{cmd:i,params:a}):(void 0===r.formatting.midi&&(r.formatting.midi={}),r.formatting.midi[i]=a)}(he,a,M);break;case"percmap":var ue=function(e){var t=e.split(/\s+/);if(2!==t.length&&3!==t.length)return{error:'Expected parameters "abc-note", "drum-sound", and optionally "note-head"'};var r=t[0],n=parseInt(t[1],10);if((isNaN(n)||n<35||n>81)&&t[1]&&(n=u.indexOf(t[1].toLowerCase())+35),isNaN(n)||n<35||n>81)return{error:'Expected drum name, received "'+t[1]+'"'};var i={sound:n};return 3===t.length&&(i.noteHead=t[2]),{key:r,value:i}}(M);ue.error?t(ue.error,o,8):(a.formatting.percmap||(a.formatting.percmap={}),a.formatting.percmap[ue.key]=ue.value);break;case"map":case"playtempo":case"auquality":case"continuous":case"nobarcheck":a.formatting[A]=M;break;default:return"Unknown directive: "+A}return null},i.globalFormatting=function(n){for(var i in n)if(n.hasOwnProperty(i)){var s,o=""+n[i],c=e.tokenize(o,0,o.length);switch(i){case"titlefont":case"gchordfont":case"composerfont":case"footerfont":case"headerfont":case"historyfont":case"infofont":case"measurefont":case"partsfont":case"repeatfont":case"subtitlefont":case"tempofont":case"textfont":case"voicefont":case"tripletfont":case"vocalfont":case"wordsfont":case"annotationfont":case"tablabelfont":case"tabnumberfont":case"tabgracefont":l(i,c,o);break;case"scale":h(i,c);break;case"partsbox":null!==(s=f("partsBox",i,c))&&t(s),r.partsfont.box=r.partsBox;break;case"freegchord":null!==(s=f("freegchord",i,c))&&t(s);break;case"fontboxpadding":1===c.length&&"number"===c[0].type||t('Directive "'+i+'" requires a number as a parameter.'),a.formatting.fontboxpadding=c[0].floatt;break;case"stafftopmargin":1===c.length&&"number"===c[0].type||t('Directive "'+i+'" requires a number as a parameter.'),a.formatting.stafftopmargin=c[0].floatt;break;case"stretchlast":var u=_(c);if(void 0!==u.value&&(a.formatting.stretchlast=u.value),u.error)return u.error;break;default:t("Formatting directive unrecognized: ",i,0)}}}}(),e.exports=i},9928:function(e,t,r){var n=r(5008),i=r(8360),a=r(9708);e.exports=function(e,t,r,s,o){this.reset=function(e,t,r,n){a.initialize(e,t,r,n,o),i.initialize(e,t,r,n,o)},this.reset(e,t,r,s),this.setTitle=function(e,t){r.hasMainTitle?o.addSubtitle(e,{startChar:r.iChar,endChar:r.iChar+t+2}):(o.addMetaText("title",e,{startChar:r.iChar,endChar:r.iChar+t+2}),r.hasMainTitle=!0)},this.setMeter=function(n){if("C"===(n=e.stripComment(n)))return!0===r.havent_set_length&&(r.default_length=.125,r.havent_set_length=!1),{type:"common_time"};if("C|"===n)return!0===r.havent_set_length&&(r.default_length=.125,r.havent_set_length=!1),{type:"cut_time"};if("o"===n)return!0===r.havent_set_length&&(r.default_length=.125,r.havent_set_length=!1),{type:"tempus_perfectum"};if("c"===n)return!0===r.havent_set_length&&(r.default_length=.125,r.havent_set_length=!1),{type:"tempus_imperfectum"};if("o."===n)return!0===r.havent_set_length&&(r.default_length=.125,r.havent_set_length=!1),{type:"tempus_perfectum_prolatio"};if("c."===n)return!0===r.havent_set_length&&(r.default_length=.125,r.havent_set_length=!1),{type:"tempus_imperfectum_prolatio"};if(0===n.length||"none"===n.toLowerCase())return!0===r.havent_set_length&&(r.default_length=.125,r.havent_set_length=!1),null;var i=e.tokenize(n,0,n.length);try{var a=function(){var e=function(){var e={value:0,num:""},t=i.shift();for("("===t.token&&(t=i.shift());;){if("number"!==t.type)throw"Expected top number of meter";if(e.value+=parseInt(t.token),e.num+=t.token,0===i.length||"/"===i[0].token)return e;if(")"===(t=i.shift()).token){if(0===i.length||"/"===i[0].token)return e;throw"Unexpected paren in meter"}if("."!==t.token&&"+"!==t.token)throw"Expected top number of meter";if(e.num+=t.token,0===i.length)throw"Expected top number of meter";t=i.shift()}return e}();if(0===i.length)return e;var t=i.shift();if("/"!==t.token)throw"Expected slash in meter";if("number"!==(t=i.shift()).type)throw"Expected bottom number of meter";return e.den=t.token,e.value=e.value/parseInt(e.den),e};if(0===i.length)throw"Expected meter definition in M: line";for(var s={type:"specified",value:[]},o=0;;){var c=a();o+=c.value;var l={num:c.num};if(void 0!==c.den&&(l.den=c.den),s.value.push(l),0===i.length)break}return!0===r.havent_set_length&&(r.default_length=o<.75?.0625:.125,r.havent_set_length=!1),s}catch(e){t(e,n,0)}return null},this.calcTempo=function(e){var t=1/4;r.meter&&"specified"===r.meter.type?t=1/parseInt(r.meter.value[0].den):r.origMeter&&"specified"===r.origMeter.type&&(t=1/parseInt(r.origMeter.value[0].den));for(var n=0;n0&&(r.default_length=a/s,r.havent_set_length=!1)}else 1===i.length&&"1"===i[0]&&(r.default_length=1,r.havent_set_length=!1)};var c={larghissimo:20,adagissimo:24,sostenuto:28,grave:32,largo:40,lento:50,larghetto:60,adagio:68,adagietto:74,andante:80,andantino:88,"marcia moderato":84,"andante moderato":100,moderato:112,allegretto:116,"allegro moderato":120,allegro:126,animato:132,agitato:140,veloce:148,"mosso vivo":156,vivace:164,vivacissimo:172,allegrissimo:176,presto:184,prestissimo:210};this.setTempo=function(n,i,a,s){try{var o=e.tokenize(n,i,a);if(0===o.length)throw"Missing parameter in Q: field";var l={startChar:s+i-2,endChar:s+a},h=!0,u=o.shift();if("quote"===u.type&&(l.preString=u.token,u=o.shift(),0===o.length))return c[l.preString.toLowerCase()]&&(l.bpm=c[l.preString.toLowerCase()],l.suppressBpm=!0),{type:"immediate",tempo:l};if("alpha"===u.type&&"C"===u.token){if(0===o.length)throw"Missing tempo after C in Q: field";if("punct"===(u=o.shift()).type&&"="===u.token){if(0===o.length)throw"Missing tempo after = in Q: field";if("number"!==(u=o.shift()).type)throw"Expected number after = in Q: field";l.duration=[1],l.bpm=parseInt(u.token)}else{if("number"!==u.type)throw"Expected number or equal after C in Q: field";if(l.duration=[parseInt(u.token)],0===o.length)throw"Missing = after duration in Q: field";if("punct"!==(u=o.shift()).type||"="!==u.token)throw"Expected = after duration in Q: field";if(0===o.length)throw"Missing tempo after = in Q: field";if("number"!==(u=o.shift()).type)throw"Expected number after = in Q: field";l.bpm=parseInt(u.token)}}else{if("number"!==u.type)throw"Unknown value in Q: field";var d=parseInt(u.token);if(0===o.length||"quote"===o[0].type)l.duration=[1],l.bpm=d;else{if(h=!1,"punct"!==(u=o.shift()).type&&"/"!==u.token)throw"Expected fraction in Q: field";if("number"!==(u=o.shift()).type)throw"Expected fraction in Q: field";var f=parseInt(u.token);for(l.duration=[d/f];o.length>0&&"="!==o[0].token&&"quote"!==o[0].type;){if("number"!==(u=o.shift()).type)throw"Expected fraction in Q: field";if(d=parseInt(u.token),"punct"!==(u=o.shift()).type&&"/"!==u.token)throw"Expected fraction in Q: field";if("number"!==(u=o.shift()).type)throw"Expected fraction in Q: field";f=parseInt(u.token),l.duration.push(d/f)}if("punct"!==(u=o.shift()).type&&"="!==u.token)throw"Expected = in Q: field";if("number"!==(u=o.shift()).type)throw"Expected tempo in Q: field";l.bpm=parseInt(u.token)}}if(0!==o.length&&("quote"===(u=o.shift()).type&&(l.postString=u.token,u=o.shift()),0!==o.length))throw"Unexpected string at end of Q: field";return!1===r.printTempo&&(l.suppress=!0),{type:h?"delaySet":"immediate",tempo:l}}catch(e){return t(e,n,i),{type:"none"}}},this.letter_to_inline_header=function(n,c,l){var h=e.eatWhiteSpace(n,c);if(c+=h,n.length>=c+5&&"["===n[c]&&":"===n[c+2]){var u=n.indexOf("]",c),d=r.iChar+c,f=r.iChar+u+1;switch(n.substring(c,c+3)){case"[I:":var p=i.addDirective(n.substring(c+3,u));return p&&t(p,n,c),[u-c+1+h];case"[M:":var m=this.setMeter(n.substring(c+3,u));return o.hasBeginMusic()&&m?o.appendStartingElement("meter",d,f,m):r.meter=m,[u-c+1+h];case"[K:":var g=a.parseKey(n.substring(c+3,u),!0);return g.foundClef&&o.hasBeginMusic()&&o.appendStartingElement("clef",d,f,r.clef),g.foundKey&&o.hasBeginMusic()&&o.appendStartingElement("key",d,f,a.fixKey(r.clef,r.key)),[u-c+1+h];case"[P:":var v=i.parseFontChangeLine(n.substring(c+3,u));return l||s.lines.length<=s.lineNum?r.partForNextLine={title:v,startChar:d,endChar:f}:o.appendElement("part",d,f,{title:v}),[u-c+1+h];case"[L:":return this.setDefaultLength(n,c+3,u),[u-c+1+h];case"[Q:":if(u>0){var b=this.setTempo(n,c+3,u,r.iChar);return"delaySet"===b.type?o.hasBeginMusic()?o.appendElement("tempo",d,f,this.calcTempo(b.tempo)):r.tempoForNextLine=["tempo",d,f,this.calcTempo(b.tempo)]:"immediate"===b.type&&(!l&&o.hasBeginMusic()?o.appendElement("tempo",d,f,b.tempo):r.tempoForNextLine=["tempo",d,f,b.tempo]),[u-c+1+h,n[c+1],n.substring(c+3,u)]}break;case"[V:":if(u>0)return a.parseVoice(n,c+3,u),[u-c+1+h,n[c+1],n.substring(c+3,u)];break;case"[r:":return[u-c+1+h]}}return[0]},this.letter_to_body_header=function(e,s){if(e.length>=s+3)switch(e.substring(s,s+2)){case"I:":var c=i.addDirective(e.substring(s+2));return c&&t(c,e,s),[e.length];case"M:":var l=this.setMeter(e.substring(s+2));return o.hasBeginMusic()&&l&&o.appendStartingElement("meter",r.iChar+s,r.iChar+e.length,l),[e.length];case"K:":var h=a.parseKey(e.substring(s+2),o.hasBeginMusic());return h.foundClef&&o.hasBeginMusic()&&o.appendStartingElement("clef",r.iChar+s,r.iChar+e.length,r.clef),h.foundKey&&o.hasBeginMusic()&&o.appendStartingElement("key",r.iChar+s,r.iChar+e.length,a.fixKey(r.clef,r.key)),[e.length];case"P:":return o.hasBeginMusic()&&o.appendElement("part",r.iChar+s,r.iChar+e.length,{title:e.substring(s+2)}),[e.length];case"L:":return this.setDefaultLength(e,s+2,e.length),[e.length];case"Q:":var u=e.indexOf("",s+2);-1===u&&(u=e.length);var d=this.setTempo(e,s+2,u,r.iChar);return"delaySet"===d.type?o.appendElement("tempo",r.iChar+s,r.iChar+e.length,this.calcTempo(d.tempo)):"immediate"===d.type&&o.appendElement("tempo",r.iChar+s,r.iChar+e.length,d.tempo),[u,e[s],n.strip(e.substring(s+2))];case"V:":return a.parseVoice(e,s+2,e.length),[e.length,e[s],n.strip(e.substring(s+2))]}return[0]};var l={A:"author",B:"book",C:"composer",D:"discography",F:"url",G:"group",I:"instruction",N:"notes",O:"origin",R:"rhythm",S:"source",W:"unalignedWords",Z:"transcription"};this.parseHeader=function(n){var c=l[n[0]],h=n.length-2,u=e.translateString(e.stripComment(n.substring(2)));if("unalignedWords"===c||"notes"===c)o.addMetaTextArray(c,i.parseFontChangeLine(u),{startChar:r.iChar,endChar:r.iChar+n.length});else if(void 0!==c)o.addMetaText(c,i.parseFontChangeLine(u),{startChar:r.iChar,endChar:r.iChar+n.length});else{var d=r.iChar,f=d+n.length;switch(n[0]){case"H":for(o.addMetaTextArray("history",i.parseFontChangeLine(u),{startChar:r.iChar,endChar:r.iChar+n.length}),n=e.peekLine();n&&":"!==n[1];)e.nextLine(),o.addMetaTextArray("history",i.parseFontChangeLine(e.translateString(e.stripComment(n))),{startChar:r.iChar,endChar:r.iChar+n.length}),n=e.peekLine();break;case"K":this.resolveTempo();var p=a.parseKey(n.substring(2),!1);!r.is_in_header&&o.hasBeginMusic()&&(p.foundClef&&o.appendStartingElement("clef",d,f,r.clef),p.foundKey&&o.appendStartingElement("key",d,f,a.fixKey(r.clef,r.key))),r.is_in_header=!1;break;case"L":this.setDefaultLength(n,2,n.length);break;case"M":r.origMeter=r.meter=this.setMeter(n.substring(2));break;case"P":r.is_in_header?o.addMetaText("partOrder",i.parseFontChangeLine(u),{startChar:r.iChar,endChar:r.iChar+n.length}):r.partForNextLine={title:u,startChar:d,endChar:f};break;case"Q":var m=this.setTempo(n,2,n.length,r.iChar);"delaySet"===m.type?r.tempo=m.tempo:"immediate"===m.type&&(s.metaText.tempo?r.tempoForNextLine=["tempo",d,f,m.tempo]:s.metaText.tempo=m.tempo);break;case"T":r.titlecaps&&(u=u.toUpperCase()),this.setTitle(i.parseFontChangeLine(e.theReverser(u)),h);break;case"U":this.addUserDefinition(n,2,n.length);break;case"V":if(a.parseVoice(n,2,n.length),!r.is_in_header)return{newline:!0};break;case"s":return{symbols:!0};case"w":return{words:!0};case"X":break;case"E":case"m":t("Ignored header",n,0);break;default:return{regular:!0}}}return{}}}},9708:function(e,t,r){var n=r(5008),i=r(8360),a=r(2821),s={};!function(){var e,t,r,o;s.initialize=function(n,i,a,s,c){e=n,t=i,r=a,o=c},s.standardKey=function(e,t,n,i){return a.keySignature(r,e,t,n,i)};var c={treble:{clef:"treble",pitch:4,mid:0},"treble+8":{clef:"treble+8",pitch:4,mid:0},"treble-8":{clef:"treble-8",pitch:4,mid:0},"treble^8":{clef:"treble+8",pitch:4,mid:0},treble_8:{clef:"treble-8",pitch:4,mid:0},treble1:{clef:"treble",pitch:2,mid:2},treble2:{clef:"treble",pitch:4,mid:0},treble3:{clef:"treble",pitch:6,mid:-2},treble4:{clef:"treble",pitch:8,mid:-4},treble5:{clef:"treble",pitch:10,mid:-6},perc:{clef:"perc",pitch:6,mid:0},none:{clef:"none",mid:0},bass:{clef:"bass",pitch:8,mid:-12},"bass+8":{clef:"bass+8",pitch:8,mid:-12},"bass-8":{clef:"bass-8",pitch:8,mid:-12},"bass^8":{clef:"bass+8",pitch:8,mid:-12},bass_8:{clef:"bass-8",pitch:8,mid:-12},"bass+16":{clef:"bass",pitch:8,mid:-12},"bass-16":{clef:"bass",pitch:8,mid:-12},"bass^16":{clef:"bass",pitch:8,mid:-12},bass_16:{clef:"bass",pitch:8,mid:-12},bass1:{clef:"bass",pitch:2,mid:-6},bass2:{clef:"bass",pitch:4,mid:-8},bass3:{clef:"bass",pitch:6,mid:-10},bass4:{clef:"bass",pitch:8,mid:-12},bass5:{clef:"bass",pitch:10,mid:-14},tenor:{clef:"alto",pitch:8,mid:-8},tenor1:{clef:"alto",pitch:2,mid:-2},tenor2:{clef:"alto",pitch:4,mid:-4},tenor3:{clef:"alto",pitch:6,mid:-6},tenor4:{clef:"alto",pitch:8,mid:-8},tenor5:{clef:"alto",pitch:10,mid:-10},alto:{clef:"alto",pitch:6,mid:-6},alto1:{clef:"alto",pitch:2,mid:-2},alto2:{clef:"alto",pitch:4,mid:-4},alto3:{clef:"alto",pitch:6,mid:-6},alto4:{clef:"alto",pitch:8,mid:-8},alto5:{clef:"alto",pitch:10,mid:-10},"alto+8":{clef:"alto+8",pitch:6,mid:-6},"alto-8":{clef:"alto-8",pitch:6,mid:-6},"alto^8":{clef:"alto+8",pitch:6,mid:-6},alto_8:{clef:"alto-8",pitch:6,mid:-6}},l=function(e,t){var r=c[e];return(r?r.mid:0)+t};s.fixClef=function(e){var t=c[e.type];t&&(e.clefPos=t.pitch,e.type=t.clef)},s.deepCopyKey=function(e){var t={accidentals:[],root:e.root,acc:e.acc,mode:e.mode};return e.accidentals.forEach((function(e){t.accidentals.push(n.clone(e))})),t};var h={A:5,B:6,C:0,D:1,E:2,F:3,G:4,a:12,b:13,c:7,d:8,e:9,f:10,g:11};s.addPosToKey=function(e,t){var r=e.verticalPos;t.accidentals.forEach((function(e){var t=h[e.note];t-=r,e.verticalPos=t})),t.impliedNaturals&&t.impliedNaturals.forEach((function(e){var t=h[e.note];t-=r,e.verticalPos=t})),r<-10?(t.accidentals.forEach((function(e){e.verticalPos-=7,(e.verticalPos>=11||10===e.verticalPos&&"flat"===e.acc)&&(e.verticalPos-=7),"A"===e.note&&"sharp"===e.acc&&(e.verticalPos-=7),"G"!==e.note&&"F"!==e.note||"flat"!==e.acc||(e.verticalPos-=7)})),t.impliedNaturals&&t.impliedNaturals.forEach((function(e){e.verticalPos-=7,(e.verticalPos>=11||10===e.verticalPos&&"flat"===e.acc)&&(e.verticalPos-=7),"A"===e.note&&"sharp"===e.acc&&(e.verticalPos-=7),"G"!==e.note&&"F"!==e.note||"flat"!==e.acc||(e.verticalPos-=7)}))):r<-4?(t.accidentals.forEach((function(e){e.verticalPos-=7,-8!==r||"f"!==e.note&&"g"!==e.note||"sharp"!==e.acc||(e.verticalPos-=7)})),t.impliedNaturals&&t.impliedNaturals.forEach((function(e){e.verticalPos-=7,-8!==r||"f"!==e.note&&"g"!==e.note||"sharp"!==e.acc||(e.verticalPos-=7)}))):r>=7&&(t.accidentals.forEach((function(e){e.verticalPos+=7})),t.impliedNaturals&&t.impliedNaturals.forEach((function(e){e.verticalPos+=7})))},s.fixKey=function(e,t){var r=n.clone(t);return s.addPosToKey(e,r),r};var u=function(e){var t=0,r=e[t++];"^"!==r&&"_"!==r||(r=e[t++]);var n=h[r];for(void 0===n&&(n=6);t0){c.foundKey=!0;var u="",d="";o[0].token.length>1?o[0].token=o[0].token.substring(1):o.shift();var f=h.token;if(o.length>0){var p=e.getSharpFlat(o[0].token);if(p.len>0&&(o[0].token.length>1?o[0].token=o[0].token.substring(1):o.shift(),f+=p.token,u=p.token),o.length>0){var m=e.getMode(o[0].token);m.len>0&&(o.shift(),f+=m.token,d=m.token)}if(void 0===s.standardKey(f,h.token,u,0))return t("Unsupported key signature: "+f,n,0),c}var g,v=s.deepCopyKey(r.key),b=!a&&r.globalTranspose?-r.globalTranspose:0;if(a&&(g=r.globalTransposeOrigKeySig),r.key=s.deepCopyKey(s.standardKey(f,h.token,u,b)),a&&(r.globalTransposeOrigKeySig=g),r.key.mode=d,v){for(var y,x=0;x0;)switch(o[0].token){case"m":case"middle":if(o.shift(),0===o.length)return t("Expected = after middle",n,0),c;if("="!==(k=o.shift()).token){t("Expected = after middle",n,k.start);break}if(0===o.length)return t("Expected parameter after middle=",n,0),c;var E=e.getPitchFromTokens(o);E.warn&&t(E.warn,n,0),E.position&&(r.clef.verticalPos=E.position-6);break;case"transpose":if(o.shift(),0===o.length)return t("Expected = after transpose",n,0),c;if("="!==(k=o.shift()).token){t("Expected = after transpose",n,k.start);break}if(0===o.length)return t("Expected parameter after transpose=",n,0),c;if("number"!==o[0].type){t("Expected number after transpose",n,o[0].start);break}r.clef.transpose=o[0].intt,o.shift();break;case"stafflines":if(o.shift(),0===o.length)return t("Expected = after stafflines",n,0),c;if("="!==(k=o.shift()).token){t("Expected = after stafflines",n,k.start);break}if(0===o.length)return t("Expected parameter after stafflines=",n,0),c;if("number"!==o[0].type){t("Expected number after stafflines",n,o[0].start);break}r.clef.stafflines=o[0].intt,o.shift();break;case"staffscale":if(o.shift(),0===o.length)return t("Expected = after staffscale",n,0),c;if("="!==(k=o.shift()).token){t("Expected = after staffscale",n,k.start);break}if(0===o.length)return t("Expected parameter after staffscale=",n,0),c;if("number"!==o[0].type){t("Expected number after staffscale",n,o[0].start);break}r.clef.staffscale=o[0].floatt,o.shift();break;case"octave":if(o.shift(),0===o.length)return t("Expected = after octave",n,0),c;if("="!==(k=o.shift()).token){t("Expected = after octave",n,k.start);break}if(0===o.length)return t("Expected parameter after octave=",n,0),c;if("number"!==o[0].type){t("Expected number after octave",n,o[0].start);break}r.octave=o[0].intt,o.shift();break;case"style":if(o.shift(),0===o.length)return t("Expected = after style",n,0),c;if("="!==(k=o.shift()).token){t("Expected = after style",n,k.start);break}if(0===o.length)return t("Expected parameter after style=",n,0),c;switch(o[0].token){case"normal":case"harmonic":case"rhythm":case"x":case"triangle":r.style=o[0].token,o.shift();break;default:t("error parsing style element: "+o[0].token,n,o[0].start)}break;case"clef":if(o.shift(),0===o.length)return t("Expected = after clef",n,0),c;if("="!==(k=o.shift()).token){t("Expected = after clef",n,k.start);break}if(0===o.length)return t("Expected parameter after clef=",n,0),c;case"treble":case"bass":case"alto":case"tenor":case"perc":case"none":var M=o.shift();switch(M.token){case"treble":case"tenor":case"alto":case"bass":case"perc":case"none":break;case"C":case"c":M.token="alto";break;case"F":case"f":M.token="bass";break;case"G":case"g":M.token="treble";break;default:t("Expected clef name. Found "+M.token,n,M.start)}o.length>0&&"number"===o[0].type&&(M.token+=o[0].token,o.shift()),o.length>1&&("-"===o[0].token||"+"===o[0].token||"^"===o[0].token||"_"===o[0].token)&&"8"===o[1].token&&(M.token+=o[0].token+o[1].token,o.shift(),o.shift()),r.clef={type:M.token,verticalPos:l(M.token,0)},r.currentVoice&&void 0!==r.currentVoice.transpose&&(r.clef.transpose=r.currentVoice.transpose),c.foundClef=!0;break;default:t("Unknown parameter: "+o[0].token,n,o[0].start),o.shift()}return c},s.parseVoice=function(n,i,a){var s=e.getMeat(n,i,a),c=s.start,h=s.end,d=e.getToken(n,c,h);if(0!==d.length){var f=!1;void 0===r.voices[d]&&(r.voices[d]={},f=!0,r.score_is_present&&t("Can't have an unknown V: id when the %score directive is present",n,c)),c+=d.length,c+=e.eatWhiteSpace(n,c);for(var p={startStaff:f},m=function(r){var i=e.getVoiceToken(n,c,h);void 0!==i.warn?t("Expected value for "+r+" in voice: "+i.warn,n,c):void 0!==i.err?t("Expected value for "+r+" in voice: "+i.err,n,c):0===i.token.length&&'"'!==n[c]?t("Expected value for "+r+" in voice",n,c):p[r]=i.token,c+=i.len},g=function(i,a,s){var o=e.getVoiceToken(n,c,h);void 0!==o.warn?t("Expected value for "+a+" in voice: "+o.warn,n,c):void 0!==o.err?t("Expected value for "+a+" in voice: "+o.err,n,c):0===o.token.length&&'"'!==n[c]?t("Expected value for "+a+" in voice",n,c):("number"===s&&(o.token=parseFloat(o.token)),r.voices[i][a]=o.token),c+=o.len},v=function(r,i){var a=e.getVoiceToken(n,c,h);if(void 0!==a.warn)t("Expected value for "+r+" in voice: "+a.warn,n,c);else if(void 0!==a.err)t("Expected value for "+r+" in voice: "+a.err,n,c);else{if(0!==a.token.length||'"'===n[c])return"number"===i&&(a.token=parseFloat(a.token)),a.token;t("Expected value for "+r+" in voice",n,c)}c+=a.len},b=function(i,a){var s=e.getVoiceToken(n,c,h);if(void 0!==s.warn)t("Expected one of (_B, _E, _b, _e) for "+a+" in voice: "+s.warn,n,c);else if(0===s.token.length&&'"'!==n[c])t("Expected one of (_B, _E, _b, _e) for "+a+" in voice",n,c);else{var o={_B:2,_E:9,_b:-10,_e:-3}[s.token];o?r.voices[i][a]=o:t("Expected one of (_B, _E, _b, _e) for "+a+" in voice",n,c)}c+=s.len};c0&&(t+=u[0],"V"===u[1]&&this.startNewLine());for(var d=0;t0)t+=p[0],"V"===p[1]&&(l=!0);else{var m;for((!o.hasBeginMusic()||l&&!this.lineContinuation)&&(this.startNewLine(),l=!1);;)if((m=n.eatWhiteSpace(e,t))>0&&(t+=m),t>0&&""===e[t-1]&&(m=c.letter_to_body_header(e,t))[0]>0&&("V"===m[1]&&this.startNewLine(),t=m[0],a.start_new_line=!1),(m=L(e,t))[0]>0&&(t+=m[0]),(m=M(e,t))[0]>0){_.chord||(_.chord=[]);var g=n.translateString(m[1]);g=g.replace(/;/g,"\n");for(var v=!1,x=0;x<_.chord.length;x++)_.chord[x].position===m[2]&&(v=!0,_.chord[x].name+="\n"+g);!1===v&&(null===m[2]&&m[3]?_.chord.push({name:g,rel_position:m[3]}):_.chord.push({name:g,position:m[2]})),t+=m[0];var k=n.skipWhiteSpace(e.substring(t));k>0&&(_.force_end_beam_last=!0),t+=k}else if((m=-1===b.indexOf(e[t])?P(e,t):[0])[0]>0)null===m[1]?t+10&&(0===m[1].indexOf("style=")?_.style=m[1].substr(6):(void 0===_.decoration&&(_.decoration=[]),"beambr1"===m[1]?_.beambr=1:"beambr2"===m[1]?_.beambr=2:_.decoration.push(m[1]))),t+=m[0];else{if(!((m=N(e,t))[0]>0))break;_.gracenotes=m[1],t+=m[0]}if((m=O(e,t))[0]>0){d=0,void 0!==_.gracenotes&&(_.rest={type:"spacer"},_.duration=.125,a.addFormattingOptions(_,s.formatting,"note"),o.appendElement("note",r+t,r+t+m[0],_),a.measureNotEmpty=!0,_={});var w={type:m[1]};0===w.type.length?i("Unknown bar type",e,t):(a.inEnding&&"bar_thin"!==w.type&&(w.endEnding=!0,a.inEnding=!1),m[2]&&(w.startEnding=m[2],a.inEnding&&(w.endEnding=!0),a.inEnding=!0,"bar_right_repeat"===m[1]?a.restoreStartEndingHoldOvers():a.duplicateStartEndingHoldOvers()),void 0!==_.decoration&&(w.decoration=_.decoration),void 0!==_.chord&&(w.chord=_.chord),w.startEnding&&void 0===a.barFirstEndingNum?a.barFirstEndingNum=a.currBarNumber:w.startEnding&&w.endEnding&&a.barFirstEndingNum?a.currBarNumber=a.barFirstEndingNum:w.endEnding&&(a.barFirstEndingNum=void 0),"bar_invisible"!==w.type&&a.measureNotEmpty&&(void 0===a.currentVoice||0===a.currentVoice.staffNum&&0===a.currentVoice.index)&&(a.currBarNumber++,a.barNumbers&&a.currBarNumber%a.barNumbers==0&&(w.barNumber=a.currBarNumber)),a.addFormattingOptions(_,s.formatting,"bar"),o.appendElement("bar",r+f,r+t+m[0],w),a.measureNotEmpty=!1,_={}),t+=m[0]}else if("&"===e[t])(m=A(e,t))[0]>0&&(o.appendElement("overlay",r,r+1,{}),t+=1,d++);else{if((m=H(e,t)).consumed>0&&(void 0!==m.startSlur&&(_.startSlur=m.startSlur),m.dottedSlur&&(_.dottedSlur=!0),void 0!==m.triplet&&(h>0?i("Can't nest triplets",e,t):(_.startTriplet=m.triplet,_.tripletMultiplier=m.tripletQ/m.triplet,_.tripletR=m.num_notes,h=void 0===m.num_notes?m.triplet:m.num_notes)),t+=m.consumed),"["===e[t]){t++;for(var C=null,T=!1,I=!1;!I;){var j=P(e,t);j[0]>0&&(t+=j[0]);var V=F(e,t,{},!1);if(null!==V&&void 0!==V.pitch)j[0]>0&&0!==j[1].indexOf("style=")&&(void 0===_.decoration&&(_.decoration=[]),_.decoration.push(j[1])),V.end_beam&&(_.end_beam=!0,delete V.end_beam),void 0===_.pitches?(_.duration=V.duration,_.pitches=[V]):_.pitches.push(V),delete V.duration,j[0]>0&&0===j[1].indexOf("style=")&&(_.pitches[_.pitches.length-1].style=j[1].substr(6)),a.inTieChord[_.pitches.length]&&(V.endTie=!0,a.inTieChord[_.pitches.length]=void 0),V.startTie&&(a.inTieChord[_.pitches.length]=!0),t=V.endChar,delete V.endChar;else if(" "===e[t])i("Spaces are not allowed in chords",e,t),t++;else{if(t0&&(!_.rest||"spacer"!==_.rest.type)&&0==--h&&(_.endTriplet=!0);for(var Y=!1;t":case"<":var G=D(e,t);t+=G[0]-1,a.next_note_duration=G[2],C?C*=G[1]:C=G[1];break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":case"/":var q=n.getFraction(e,t);C=q.value;var W=e[t=q.index];" "===W&&(T=!0),"-"===W||")"===W||" "===W||"<"===W||">"===W?t--:Y=!0;break;default:Y=!0}Y||t++}}else i("Expected ']' to end the chords",e,t);void 0!==_.pitches&&(null!==C&&(_.duration=_.duration*C,T&&z(_)),a.addFormattingOptions(_,s.formatting,"note"),o.appendElement("note",r+f,r+t,_),a.measureNotEmpty=!0,_={}),I=!0}}}else{var R={},X=F(e,t,R,!0);void 0!==R.endTie&&E(a,d,!0),null!==X&&(void 0!==X.pitch?(_.pitches=[{}],void 0!==X.accidental&&(_.pitches[0].accidental=X.accidental),_.pitches[0].pitch=X.pitch,_.pitches[0].name=X.name,(X.midipitch||0===X.midipitch)&&(_.pitches[0].midipitch=X.midipitch),void 0!==X.endSlur&&(_.pitches[0].endSlur=X.endSlur),void 0!==X.endTie&&(_.pitches[0].endTie=X.endTie),void 0!==X.startSlur&&(_.pitches[0].startSlur=X.startSlur),void 0!==_.startSlur&&(_.pitches[0].startSlur=_.startSlur),void 0!==_.dottedSlur&&(_.pitches[0].dottedSlur=!0),void 0!==X.startTie&&(_.pitches[0].startTie=X.startTie),void 0!==_.startTie&&(_.pitches[0].startTie=_.startTie)):(_.rest=X.rest,void 0!==X.endSlur&&(_.endSlur=X.endSlur),void 0!==X.endTie&&(_.rest.endTie=X.endTie),void 0!==X.startSlur&&(_.startSlur=X.startSlur),void 0!==X.startTie&&(_.rest.startTie=X.startTie),void 0!==_.startTie&&(_.rest.startTie=_.startTie)),void 0!==X.chord&&(_.chord=X.chord),void 0!==X.duration&&(_.duration=X.duration),void 0!==X.decoration&&(_.decoration=X.decoration),void 0!==X.graceNotes&&(_.graceNotes=X.graceNotes),delete _.startSlur,delete _.dottedSlur,S(a,d,_)&&(void 0!==_.pitches?_.pitches[0].endTie=!0:"spacer"!==_.rest.type&&(_.rest.endTie=!0),E(a,d,!1)),(X.startTie||_.startTie)&&E(a,d,!0),t=X.endChar,h>0&&(!X.rest||"spacer"!==X.rest.type)&&0==--h&&(_.endTriplet=!0),X.end_beam&&z(_),_.rest&&"rest"===_.rest.type&&1===_.duration&&B(a)<=1&&(_.rest.type="whole",_.duration=B(a)),_.duration<1&&-1===y.indexOf(_.duration)&&0!==_.duration&&(_.rest&&"spacer"===_.rest.type||i("Duration not representable: "+e.substring(f,t),e,t)),a.addFormattingOptions(_,s.formatting,"note"),o.appendElement("note",r+f,r+t,_),a.measureNotEmpty=!0,_={})}t===f&&(" "!==e[t]&&"`"!==e[t]&&i("Unknown character ignored",e,t),t++)}}}this.lineContinuation=e.indexOf("")>=0||u[0]>0,this.lineContinuation||(_={})}};var E=function(e,t,r){var n=e.currentVoice?100*e.currentVoice.staffNum+e.currentVoice.index:0;void 0===e.inTie[t]&&(e.inTie[t]=[]),e.inTie[t][n]=r},M=function(e,t){if('"'===e[t]){var r=n.getBrackettedSubstring(e,t,5);if(r[2]||i("Missing the closing quote while parsing the chord symbol",e,t),r[0]>0&&r[1].length>0&&"^"===r[1][0])r[1]=r[1].substring(1),r[2]="above";else if(r[0]>0&&r[1].length>0&&"_"===r[1][0])r[1]=r[1].substring(1),r[2]="below";else if(r[0]>0&&r[1].length>0&&"<"===r[1][0])r[1]=r[1].substring(1),r[2]="left";else if(r[0]>0&&r[1].length>0&&">"===r[1][0])r[1]=r[1].substring(1),r[2]="right";else if(r[0]>0&&r[1].length>0&&"@"===r[1][0]){r[1]=r[1].substring(1);var s=n.getFloat(r[1]);0===s.digits&&i("Missing first position in absolutely positioned annotation.",e,t),r[1]=r[1].substring(s.digits),","!==r[1][0]&&i("Missing comma absolutely positioned annotation.",e,t),r[1]=r[1].substring(1);var o=n.getFloat(r[1]);0===o.digits&&i("Missing second position in absolutely positioned annotation.",e,t),r[1]=r[1].substring(o.digits);var c=n.skipWhiteSpace(r[1]);r[1]=r[1].substring(c),r[2]=null,r[3]={x:s.value,y:o.value}}else!0!==a.freegchord&&(r[1]=r[1].replace(/([ABCDEFG0-9])b/g,"$1♭"),r[1]=r[1].replace(/([ABCDEFG0-9])#/g,"$1♯"),r[1]=r[1].replace(/^([ABCDEFG])([♯♭]?)o([^A-Za-z])/g,"$1$2°$3"),r[1]=r[1].replace(/^([ABCDEFG])([♯♭]?)o$/g,"$1$2°"),r[1]=r[1].replace(/^([ABCDEFG])([♯♭]?)0([^A-Za-z])/g,"$1$2ø$3"),r[1]=r[1].replace(/^([ABCDEFG])([♯♭]?)\^([^A-Za-z])/g,"$1$2∆$3")),r[2]="default",r[1]=u.chordName(a,r[1]);return r}return[0,""]},N=function(e,t){if("{"===e[t]){var r=n.getBrackettedSubstring(e,t,1,"}");r[2]||i("Missing the closing '}' while parsing grace note",e,t),")"===e[t+r[0]]&&(r[0]++,r[1]+=")");for(var s=[],o=0,c=!1;o0&&(s[s.length-1].endBeam=!0):i("Unknown character '"+r[1][o]+"' while parsing grace note",e,t),o++)}if(s.length)return[r[0],s]}return[0]};function A(e,t){if("&"===e[t]){for(var r=t;e[t]&&":"!==e[t]&&"|"!==e[t];)t++;return[t-r,e.substring(r+1,t)]}return[0]}function B(e){var t=e.origMeter;return t&&"specified"===t.type&&t.value&&0!==t.value.length?parseInt(t.value[0].num,10)/parseInt(t.value[0].den,10):1}var P=function(e,t){var r=a.macros[e[t]];if(void 0!==r)return"!"!==r[0]&&"+"!==r[0]||(r=r.substring(1)),"!"!==r[r.length-1]&&"+"!==r[r.length-1]||(r=r.substring(0,r.length-1)),f.includes(r)?[1,r]:p.includes(r)?("hidden"===a.volumePosition&&(r=""),[1,r]):m.includes(r)?("hidden"===a.dynamicPosition&&(r=""),[1,r]):(a.ignoredDecorations.includes(r)||i("Unknown macro: "+r,e,t),[1,""]);switch(e[t]){case".":if("("===e[t+1]||"-"===e[t+1])break;return[1,"staccato"];case"u":return[1,"upbow"];case"v":return[1,"downbow"];case"~":return[1,"irishroll"];case"!":case"+":var s=n.getBrackettedSubstring(e,t,5);if(s[1].length>1&&("^"===s[1][0]||"_"===s[1][0])&&(s[1]=s[1].substring(1)),f.includes(s[1]))return s;if(p.includes(s[1]))return"hidden"===a.volumePosition&&(s[1]=""),s;if(m.includes(s[1]))return"hidden"===a.dynamicPosition&&(s[1]=""),s;var o=g.findIndex((function(e){return s[1]===e[0]}));return o>=0?(s[1]=g[o][1],s):(o=v.findIndex((function(e){return s[1]===e[0]})))>=0?(s[1]=v[o][1],"hidden"===a.dynamicPosition&&(s[1]=""),s):"!"!==e[t]||1!==s[0]&&"!"===e[t+s[0]-1]?(i("Unknown decoration: "+s[1],e,t),s[1]="",s):[1,null];case"H":return[1,"fermata"];case"J":return[1,"slide"];case"L":return[1,"accent"];case"M":return[1,"mordent"];case"O":return[1,"coda"];case"P":return[1,"pralltriller"];case"R":return[1,"roll"];case"S":return[1,"segno"];case"T":return[1,"trill"]}return[0,0]},L=function(e,t){for(var r=t;n.isWhiteSpace(e[t]);)t++;return[t-r]},O=function(e,t){var r=n.getBarLine(e,t);if(0===r.len)return[0,""];if(r.warn)return i(r.warn,e,t),[r.len,""];for(var a=0;a="2"&&e[t+1]<="9"?(void 0!==r.triplet?i("Can't nest triplets",e,t):(r.triplet=e[t+1]-"0",r.tripletQ=C[r.triplet],r.num_notes=r.triplet,t+2="1"&&e[t+4]<="9"?(r.num_notes=e[t+4]-"0",t+=3):i("expected number after the two colons after the triplet to mark the duration",e,t):t+3="1"&&e[t+3]<="9"?(r.tripletQ=e[t+3]-"0",t+4="1"&&e[t+5]<="9"&&(r.num_notes=e[t+5]-"0",t+=4):t+=2):i("expected number after the triplet to mark the duration",e,t))),t++):void 0===r.startSlur?r.startSlur=1:r.startSlur++),t++;return r.consumed=t-a,r};T.prototype.startNewLine=function(){var e={startChar:-1,endChar:-1};a.partForNextLine.title&&(e.part=a.partForNextLine),e.clef=a.currentVoice&&void 0!==a.staves[a.currentVoice.staffNum].clef?l.clone(a.staves[a.currentVoice.staffNum].clef):l.clone(a.clef);var t=a.currentVoice?a.currentVoice.scoreTranspose:0;if(e.key=h.standardKey(a.key.root+a.key.acc+a.key.mode,a.key.root,a.key.acc,t),e.key.mode=a.key.mode,a.key.impliedNaturals&&(e.key.impliedNaturals=a.key.impliedNaturals),a.key.explicitAccidentals)for(var r=0;r=0?(r.duration=s.getBarLength(),r.rest.text=1,h="Zduration"):(i&&0!==a.next_note_duration?(r.duration=a.default_length*a.next_note_duration,a.next_note_duration=0,d=!0):r.duration=a.default_length,h="duration");break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":case"0":case"/":if("octave"===h||"duration"===h){var p=n.getFraction(e,t);for(r.duration=r.duration*p.value,r.endChar=p.index;p.index"!==e[t])return r;t--,h="broken_rhythm";break;case">":case"<":if(!l(h))return null;if(!i)return r.endChar=t,r;var g=D(e,t);t+=g[0]-1,a.next_note_duration=g[2],r.duration=g[1]*r.duration,h="end_slur";break;default:return l(h)?(r.endChar=t,r):null}if(++t===e.length)return l(h)?(r.endChar=t,r):null}return null},D=function(e,t){switch(e[t]){case">":return t"===e[t+1]&&">"===e[t+2]?[3,1.875,.125]:t"===e[t+1]?[2,1.75,.25]:[1,1.5,.5];case"<":return t","accent"],["tr","trill"],["plus","+"],["emphasis","accent"],["^","umarcato"],["marcato","umarcato"]],e.exports.accentDynamicPseudonyms=[["<(","crescendo("],["<)","crescendo)"],[">(","diminuendo("],[">)","diminuendo)"]],e.exports.nonDecorations="ABCDEFGabcdefgxyzZ[]|^_{",e.exports.durations=[.5,.75,.875,.9375,.96875,.984375,.25,.375,.4375,.46875,.484375,.4921875,.125,.1875,.21875,.234375,.2421875,.24609375,.0625,.09375,.109375,.1171875,.12109375,.123046875,.03125,.046875,.0546875,.05859375,.060546875,.0615234375,.015625,.0234375,.02734375,.029296875,.0302734375,.03076171875],e.exports.pitches={A:5,B:6,C:0,D:1,E:2,F:3,G:4,a:12,b:13,c:7,d:8,e:9,f:10,g:11},e.exports.rests={x:"invisible",X:"invisible-multimeasure",y:"spacer",z:"rest",Z:"multimeasure"},e.exports.accMap={dblflat:"__",flat:"_",natural:"=",sharp:"^",dblsharp:"^^",quarterflat:"_/",quartersharp:"^/"},e.exports.tripletQ={2:3,3:2,4:3,5:2,6:2,7:2,8:3,9:2}},1881:function(e,t,r){var n=r(5008),i=function(e,t){this.lineIndex=0,this.lines=e,this.multilineVars=t,this.skipWhiteSpace=function(e){for(var t=0;t=e.length};this.eatWhiteSpace=function(e,t){for(var r=t;r="a"&&e[t]<="z"||e[t]>="A"&&e[t]<="Z");)t++;return t},n=this.skipWhiteSpace(e);if(r(e,n))return{len:0};var i=e.substring(n,n+3).toLowerCase();switch((i.length>1&&" "===i[1]||"^"===i[1]||"_"===i[1]||"="===i[1])&&(i=i[0]),i){case"mix":return{len:t(e,n),token:"Mix"};case"dor":return{len:t(e,n),token:"Dor"};case"phr":return{len:t(e,n),token:"Phr"};case"lyd":return{len:t(e,n),token:"Lyd"};case"loc":return{len:t(e,n),token:"Loc"};case"aeo":case"min":case"m":return{len:t(e,n),token:"m"};case"maj":case"ion":return{len:t(e,n),token:""}}return{len:0}},this.getClef=function(e,t){var i=e,a=this.skipWhiteSpace(e);if(r(e,a))return{len:0};var s=!1,o=e.substring(a);if(n.startsWith(o,"clef=")&&(s=!0,o=o.substring(5),a+=5),0===o.length&&s)return{len:a+5,warn:"No clef specified: "+i};var c=this.skipWhiteSpace(o);if(r(o,c))return{len:0};c>0&&(a+=c,o=o.substring(c));var l=null;if(n.startsWith(o,"treble"))l="treble";else if(n.startsWith(o,"bass3"))l="bass3";else if(n.startsWith(o,"bass"))l="bass";else if(n.startsWith(o,"tenor"))l="tenor";else if(n.startsWith(o,"alto2"))l="alto2";else if(n.startsWith(o,"alto1"))l="alto1";else if(n.startsWith(o,"alto"))l="alto";else if(!t&&s&&n.startsWith(o,"none"))l="none";else if(n.startsWith(o,"perc"))l="perc";else if(!t&&s&&n.startsWith(o,"C"))l="tenor";else if(!t&&s&&n.startsWith(o,"F"))l="bass";else{if(t||!s||!n.startsWith(o,"G"))return{len:a+5,warn:"Unknown clef specified: "+i};l="treble"}return o=o.substring(l.length),(c=this.isMatch(o,"+8"))>0?l+="+8":(c=this.isMatch(o,"-8"))>0&&(l+="-8"),{len:a+l.length,token:l,explicit:s}},this.getBarLine=function(e,t){switch(e[t]){case"]":switch(e[++t]){case"|":return{len:2,token:"bar_thick_thin"};case"[":return e[++t]>="1"&&e[t]<="9"||'"'===e[t]?{len:2,token:"bar_invisible"}:{len:1,warn:"Unknown bar symbol"};default:return{len:1,token:"bar_invisible"}}break;case":":switch(e[++t]){case":":return{len:2,token:"bar_dbl_repeat"};case"|":switch(e[++t]){case"]":return"|"===e[++t]&&":"===e[++t]?{len:5,token:"bar_dbl_repeat"}:{len:3,token:"bar_right_repeat"};case"|":return":"===e[++t]?{len:4,token:"bar_dbl_repeat"}:{len:3,token:"bar_right_repeat"};default:return{len:2,token:"bar_right_repeat"}}break;default:return{len:1,warn:"Unknown bar symbol"}}break;case"[":if("|"!==e[++t])return e[t]>="1"&&e[t]<="9"||'"'===e[t]?{len:1,token:"bar_invisible"}:{len:0};switch(e[++t]){case":":return{len:3,token:"bar_left_repeat"};case"]":return{len:3,token:"bar_invisible"};default:return{len:2,token:"bar_thick_thin"}}break;case"|":switch(e[++t]){case"]":return{len:2,token:"bar_thin_thick"};case"|":return":"===e[++t]?{len:3,token:"bar_left_repeat"}:{len:2,token:"bar_thin_thin"};case":":for(var r=0;":"===e[t+r];)r++;return{len:1+r,token:"bar_left_repeat"};default:return{len:1,token:"bar_thin"}}}return{len:0}},this.getTokenOf=function(e,t){for(var r=0;r0;){var r;if("^"===e[0].token){if(r="sharp",e.shift(),0===e.length)return{accs:t,warn:"Expected note name after "+r};switch(e[0].token){case"^":r="dblsharp",e.shift();break;case"/":r="quartersharp",e.shift()}}else if("="===e[0].token)r="natural",e.shift();else{if("_"!==e[0].token)return{accs:t};if(r="flat",e.shift(),0===e.length)return{accs:t,warn:"Expected note name after "+r};switch(e[0].token){case"_":r="dblflat",e.shift();break;case"/":r="quarterflat",e.shift()}}if(0===e.length)return{accs:t,warn:"Expected note name after "+r};switch(e[0].token[0]){case"a":case"b":case"c":case"d":case"e":case"f":case"g":case"A":case"B":case"C":case"D":case"E":case"F":case"G":void 0===t&&(t=[]),t.push({acc:r,note:e[0].token[0]}),1===e[0].token.length?e.shift():e[0].token=e[0].token.substring(1);break;default:return{accs:t,warn:"Expected note name after "+r+" Found: "+e[0].token}}}return{accs:t}},this.getKeyAccidental=function(e){var t={"^":"sharp","^^":"dblsharp","=":"natural",_:"flat",__:"dblflat","_/":"quarterflat","^/":"quartersharp"},n=this.skipWhiteSpace(e);if(r(e,n))return{len:0};var i=null;switch(e[n]){case"^":case"_":case"=":i=e[n];break;default:return{len:0}}if(n++,r(e,n))return{len:1,warn:"Expected note name after accidental"};switch(e[n]){case"a":case"b":case"c":case"d":case"e":case"f":case"g":case"A":case"B":case"C":case"D":case"E":case"F":case"G":return{len:n+1,token:{acc:t[i],note:e[n]}};case"^":case"_":case"/":if(i+=e[n],n++,r(e,n))return{len:2,warn:"Expected note name after accidental"};switch(e[n]){case"a":case"b":case"c":case"d":case"e":case"f":case"g":case"A":case"B":case"C":case"D":case"E":case"F":case"G":return{len:n+1,token:{acc:t[i],note:e[n]}};default:return{len:2,warn:"Expected note name after accidental"}}break;default:return{len:1,warn:"Expected note name after accidental"}}},this.isWhiteSpace=function(e){return" "===e||"\t"===e||""===e},this.getMeat=function(e,t,r){var n=e.indexOf("%",t);for(n>=0&&n="A"&&e<="Z"||e>="a"&&e<="z"},a=function(e){return e>="0"&&e<="9"};this.tokenize=function(e,t,r,n){var s=this.getMeat(e,t,r);t=s.start,r=s.end;for(var o,c=[];t=r?{len:1,err:"Missing close quote"}:{len:i-t+1,token:this.translateString(e.substring(n+1,i))}}for(var a=n;a=0?n.strip(e.substring(0,t)):n.strip(e)},this.getInt=function(e){var t=parseInt(e);if(isNaN(t))return{digits:0};var r=""+t;return{value:t,digits:e.indexOf(r)+r.length}},this.getFloat=function(e){var t=parseFloat(e);if(isNaN(t))return{digits:0};var r=""+t;return{value:t,digits:e.indexOf(r)+r.length}},this.getMeasurement=function(e){if(0===e.length)return{used:0};var t=1,r="";if("-"===e[0].token)e.shift(),r="-",t++;else if("number"!==e[0].type)return{used:0};if(r+=e.shift().token,0===e.length)return{used:1,value:parseInt(r)};var n=e.shift();if("."===n.token){if(t++,0===e.length)return{used:t,value:parseInt(r)};if("number"===e[0].type&&(r=r+"."+(n=e.shift()).token,t++,0===e.length))return{used:t,value:parseFloat(r)};n=e.shift()}switch(n.token){case"pt":case"px":return{used:t+1,value:parseFloat(r)};case"cm":return{used:t+1,value:parseFloat(r)/2.54*72};case"in":return{used:t+1,value:72*parseFloat(r)};default:return e.unshift(n),{used:t,value:parseFloat(r)}}};var u=function(e){return e=(e=e.replace(/\\n/g,"\n")).replace(/\\"/g,'"')};this.getBrackettedSubstring=function(e,t,r,n){for(var i=n||e[t],a=t+1,s=!1;ae.length-1&&(a=e.length-1),[a-t+1,u(e.substring(t+1,a)),!1])}};i.prototype.peekLine=function(){return this.lines[this.lineIndex]},i.prototype.nextLine=function(){if(this.lineIndex>0&&(this.multilineVars.iChar+=this.lines[this.lineIndex-1].length+1),this.lineIndex11&&(f%=12);var p="m"===t[0]?l[f]:c[f],m=p+t,g=a(m);g.length>0&&"flat"===g[0].acc&&(e.localTransposePreferFlats=!0);var v=m.charCodeAt(0)-h.charCodeAt(0);return e.localTranspose>0?v<0?v+=7:0===v&&("#"!==h[1]&&"b"!==m[1]||(v+=7)):e.localTranspose<0&&(v>0?v-=7:0===v&&("b"!==h[1]&&"#"!==m[1]||(v-=7))),e.localTranspose>0?e.localTransposeVerticalMovement=v+7*Math.floor(e.localTranspose/12):e.localTransposeVerticalMovement=v+7*Math.ceil(e.localTranspose/12),d?{accidentals:g,root:p[0],acc:p.length>1?p[1]:""}:{accidentals:[],root:r,acc:n}},s.chordName=function(e,t){return i(t,e.localTranspose,e.localTransposePreferFlats,e.freegchord)};var h=["c","d","e","f","g","a","b"],u={dblflat:-2,flat:-1,natural:0,sharp:1,dblsharp:2},d={"-2":"dblflat","-1":"flat",0:"natural",1:"sharp",2:"dblsharp"},f={"-2":"__","-1":"_",0:"=",1:"^",2:"^^"};s.note=function(e,t){if(e.localTranspose&&"perc"!==e.clef.type){var r=t.pitch;if(e.localTransposeVerticalMovement&&(t.pitch=t.pitch+e.localTransposeVerticalMovement,t.name)){var i=t.accidental?t.name.substring(1):t.name,a=t.accidental?t.name[0]:"",s=n.pitchIndex(i);t.name=a+n.noteName(s+e.localTransposeVerticalMovement)}if(t.accidental){var o=function(e,t,r,n,i){for(var a=h[(e+49)%7],s=0,o=0;o2&&(t++,p-="b"===l||"e"===l?1:2),[t,p]}(r,t.pitch,t.accidental,e.globalTransposeOrigKeySig,e.targetKey);t.pitch=o[0],t.accidental=d[o[1]],t.name&&(t.name=f[o[1]]+t.name.replace(/[_^=]/g,""))}}},e.exports=s},867:function(e){var t={},r=["C,,,","D,,,","E,,,","F,,,","G,,,","A,,,","B,,,","C,,","D,,","E,,","F,,","G,,","A,,","B,,","C,","D,","E,","F,","G,","A,","B,","C","D","E","F","G","A","B","c","d","e","f","g","a","b","c'","d'","e'","f'","g'","a'","b'","c''","d''","e''","f''","g''","a''","b''","c'''","d'''","e'''","f'''","g'''","a'''","b'''"];t.pitchIndex=function(e){return r.indexOf(e)},t.noteName=function(e){return r[e]},e.exports=t},4208:function(e){var t=["C","C♯","D","D♯","E","F","F♯","G","G♯","A","A♯","B"],r=["C","D♭","D","E♭","E","F","G♭","G","A♭","A","B♭","B"],n=["C","C#","D","D#","E","F","F#","G","G#","A","A#","B"],i=["C","Db","D","Eb","E","F","Gb","G","Ab","A","Bb","B"];e.exports=function(e,a,s,o){if(!a||a%12==0)return e;for(;a<0;)a+=12;a>11&&(a%=12);var c=e.match(/^([A-G][b#♭♯]?)([^\/]+)?\/?([A-G][b#♭♯]?)?(.+)?/);if(!c)return e;var l,h=c[1],u=c[2],d=c[3],f=c[4];return(l=t.indexOf(h))<0&&(l=r.indexOf(h)),l<0&&(l=n.indexOf(h)),l<0&&(l=i.indexOf(h)),l<0||(l+=a,l%=12,e=s?o?i[l]:r[l]:o?n[l]:t[l],u&&(e+=u),d&&((l=t.indexOf(d))<0&&(l=r.indexOf(d)),l<0&&(l=n.indexOf(d)),l<0&&(l=i.indexOf(d)),e+="/",l>=0?(l+=a,l%=12,e+=s?o?i[l]:r[l]:o?n[l]:t[l]):e+=d),f&&(e+=f)),e}},575:function(e,t,r){var n=r(9708),i=r(5008);function a(e){if(!e)return!1;if("string"==typeof e)return!1;for(var t=0;t0&&"bar"!==e[r].el_type;r--);return r}this.setVisualTranspose=function(t){t&&(e.visualTranspose=t)},this.resolveOverlays=function(){for(var t=!1,n=[],a=0;a0&&l[h].voice.push({el_type:"note",duration:d,rest:{type:"invisible"},startChar:v.startChar,endChar:v.endChar}),l[h].voice.push(v)),d=0):"note"===v.el_type?f?l[h].voice.push(v):(d+=v.duration,n[a]+=v.duration):"scale"!==v.el_type&&"stem"!==v.el_type&&"overlay"!==v.el_type&&"style"!==v.el_type&&"transpose"!==v.el_type&&"color"!==v.el_type||l[h].voice.push(v);else{t=!0,f=!0,m=g,l[h].hasOverlay=!0,0===p&&(p=n[a]);for(var b=0;b=e.lines[b].staff[0].voices.length&&e.lines[b].staff[0].voices.push([{el_type:"note",duration:n[b],rest:{type:"invisible"},startChar:v.startChar,endChar:v.endChar}])}}l[h].hasOverlay&&0===l[h].snip.length&&l[h].snip.push({start:m,len:u.length-m})}for(h=0;h=0;x--){var k=y.snip[x];c.voices[h].splice(k.start,k.len),c.voices[h].splice(k.start+1,0,{el_type:"stem",direction:"auto"});var w=r(c.voices[h],k.start);c.voices[h].splice(w,0,{el_type:"stem",direction:"up"})}for(x=0;x=t&&st;){if(e[t].staff)return e[t];t++}return null}for(e.lineNum=0;e.lineNum0&&b[b.length-1].barNumber){var x=g(e.lines,e.lineNum);x&&(x.staff[0].barNumber=b[b.length-1].barNumber),delete b[b.length-1].barNumber}}}return delete e.staffNum,delete e.voiceNum,delete e.lineNum,delete e.potentialStartBeam,delete e.potentialEndBeam,delete e.vskipPending,s},e.reset(),this.getLastNote=function(){if(e.lines[e.lineNum]&&e.lines[e.lineNum].staff&&e.lines[e.lineNum].staff[e.staffNum]&&e.lines[e.lineNum].staff[e.staffNum].voices[e.voiceNum])for(var t=e.lines[e.lineNum].staff[e.staffNum].voices[e.voiceNum].length-1;t>=0;t--){var r=e.lines[e.lineNum].staff[e.staffNum].voices[e.voiceNum][t];if("note"===r.el_type)return r}return null},this.addTieToLastNote=function(e){var t=this.getLastNote();return!!(t&&t.pitches&&t.pitches.length>0)&&(t.pitches[0].startTie={},e&&(t.pitches[0].startTie.style="dotted"),!0)},this.getDuration=function(e){return e.duration?e.duration:0},this.closeLine=function(){e.potentialStartBeam&&e.potentialEndBeam&&(e.potentialStartBeam.startBeam=!0,e.potentialEndBeam.endBeam=!0),delete e.potentialStartBeam,delete e.potentialEndBeam},this.appendElement=function(r,n,i,a){var s=e;a.el_type=r,null!==n&&(a.startChar=n),null!==i&&(a.endChar=i);var o=function(){void 0!==s.potentialStartBeam&&void 0!==s.potentialEndBeam&&(s.potentialStartBeam.startBeam=!0,s.potentialEndBeam.endBeam=!0),delete s.potentialStartBeam,delete s.potentialEndBeam};"note"===r?t.getDuration(a)>=.25||a.force_end_beam_last&&void 0!==s.potentialStartBeam?o():a.end_beam&&void 0!==s.potentialStartBeam?void 0===a.rest?(s.potentialStartBeam.startBeam=!0,a.endBeam=!0,delete s.potentialStartBeam,delete s.potentialEndBeam):o():void 0===a.rest&&(void 0===s.potentialStartBeam?a.end_beam||(s.potentialStartBeam=a,delete s.potentialEndBeam):s.potentialEndBeam=a):o(),delete a.end_beam,delete a.force_end_beam_last,function(e){var t=s.lines[s.lineNum].staff[s.staffNum];if(t){if(void 0!==e.pitches){var r=t.workingClef.verticalPos;e.pitches.forEach((function(e){e.verticalPos=e.pitch-r}))}if(void 0!==e.gracenotes){var n=t.workingClef.verticalPos;e.gracenotes.forEach((function(e){e.verticalPos=e.pitch-n}))}t.voices[s.voiceNum].push(e)}}(a)},this.appendStartingElement=function(t,r,n,a){var s;this.closeLine(),"key"===t&&(s=a.impliedNaturals,delete a.impliedNaturals,delete a.explicitAccidentals);var o=i.clone(a);if(e.lines[e.lineNum]&&e.lines[e.lineNum].staff){e.lines[e.lineNum].staff.length<=e.staffNum&&(e.lines[e.lineNum].staff[e.staffNum]={},e.lines[e.lineNum].staff[e.staffNum].clef=i.clone(e.lines[e.lineNum].staff[0].clef),e.lines[e.lineNum].staff[e.staffNum].key=i.clone(e.lines[e.lineNum].staff[0].key),e.lines[e.lineNum].staff[0].meter&&(e.lines[e.lineNum].staff[e.staffNum].meter=i.clone(e.lines[e.lineNum].staff[0].meter)),e.lines[e.lineNum].staff[e.staffNum].workingClef=i.clone(e.lines[e.lineNum].staff[0].workingClef),e.lines[e.lineNum].staff[e.staffNum].voices=[[]]),"clef"===t&&(e.lines[e.lineNum].staff[e.staffNum].workingClef=o);for(var c=e.lines[e.lineNum].staff[e.staffNum].voices[e.voiceNum],l=0;l0){if(void 0!==r.voices[0]){for(var i=!1,a=0;a0){var r=t[t.length-1];if("bar"!==r.el_type)return e-1;void 0!==r.barNumber&&(r.barNumber=e)}return e},this.hasBeginMusic=function(){for(var t=0;t=0;r--)if(void 0!==e.lines[r].staff)return!1;return!0},this.getCurrentVoice=function(){var t=e.lines[e.lineNum];if(!t)return null;var r=t.staff[e.staffNum];return r&&void 0!==r.voices[e.voiceNum]?r.voices[e.voiceNum]:null},this.setCurrentVoice=function(t,r){e.staffNum=t,e.voiceNum=r;for(var n=0;n0?(r.push(a-1),n.push(Math.round(i-s)),i=s):as&&ds?(l.push(d-1),c++,o=Math.max(o,s),s=Math.abs(n-t[c]),a.push(i-f),i=f):s=p}a.push(i)}function i(e,t,r,i){for(var a=Math.ceil(e.total/t),s=Math.floor(e.total/a),o=[],c=0;ct&&(s=!0),o%r==r-1&&(o!==e.length-1&&n.push(o),i.push(Math.round(a)),a=0);return{failed:s,totals:i,lineBreaks:n}}e.exports={wrapLines:function(e,t,r){if(t&&0!==e.lines.length){var n=e.deline({lineBreaks:!1}),i=function(e,t){for(var r=[],n=0,i=0,a=0,s=0;s0&&(n[c.line].staff[c.staff].barNumber=s);for(var h=Object.keys(l),u=0;u=0;p--)if("key"===f[p].el_type){i[c.staff]={root:f[p].root,acc:f[p].acc,mode:f[p].mode,accidentals:f[p].accidentals.filter((function(e){return"natural"!==e.acc}))};break}for(p=f.length-1;p>=0;p--)if("stem"===f[p].el_type){a[10*c.staff+c.voice]={direction:f[p].direction};break}if(void 0!==r&&0===c.staff&&0===c.voice)for(p=0;p0&&p.measureWidths.length<25&&(k=i(p,g,0,b),b.attempts.push({type:"Optimize",failed:k.failed,reason:k.reason,lineBreaks:k.lineBreaks,totals:k.totals}),k.failed||(y=k.lineBreaks))}u.push(y),d.push(b)}var w=function(e,t,r){var n={lineBreaks:e,staffwidth:t};for(var i in r)r.hasOwnProperty(i)&&"wrap"!==i&&"staffwidth"!==i&&(n[i]=r[i]);return{revisedParams:n}}(u,n.staffwidth,n);return w.explanation=d,w.reParse=!0,w}}},5633:function(e,t,r){var n,i=r(9447),a=r(4914),s=a.relativeMajor,o=a.transposeKey,c=a.relativeMode,l=r(4208);!function(){"use strict";function e(e,r,n){var i=[],a=r.getKeySignature();if("Hp"===a.root||"HP"===a.root)return i;i=i.concat(function(e,t){for(var r=[],n=e.split("K:"),i=n[0].length,a=1;a2?n+=7:-12===r&&(n-=7):r>0&&n<0?n+=7:r<0&&n>0&&(n-=7),r>12?n+=7:r<-12&&(n-=7),n}function h(e,t,n,i,s,o){for(var c=[],h=a(s,n,o),u={},d={},m=0;m1?a[1]:"",accidentals:l}}function p(e,t,r,n){for(var i=e.pitch,a=u.indexOf(e.name),s=(u.indexOf(t.root)+i)%7,o=a+r,c=e.oct;o>6;)c++,o-=7;for(;o<0;)c--,o+=7;for(var l=u[s],h="",d=e.adj,f="=",m=0;m4&&(l=l.toLowerCase()),{acc:h,name:l,upper:l.toUpperCase()}}var m=/([_^=]*)([A-Ga-g])([,']*)/,g=/([_^=]*[A-Ga-g][,']*)(\d*\/*\d*)([\>\<\-\)\.\s\\]*)/,v=/([_^=]*[A-Ga-g][,']*)?(\d*\/*\d*)?([\>\<\-\)]*)?/,b=/(\s*)$/;function y(e,t,r,n){var i="none"===t?0:u.indexOf(t),a=e.match(m),s=a[2].toUpperCase(),o=u.indexOf(s)-i;o<0&&(o+=7);var c=d.indexOf(a[3]);s===a[2]&&c--;var l=n[s]||r[s]||"=";return{acc:a[1],name:s,pitch:o,oct:c,adj:C(a[1],r[s],n[s]),courtesy:a[1]===l}}function x(e,t,r,n,i){var a=e.substring(t,r),s=a.match(new RegExp(g.source+b.source),"");if(s){var o=s[1].length,c=s[2].length+s[3].length+s[4].length;t+=r-t-o-c,r-=c}else if(s=a.match(new RegExp(/([^\[]*)/.source+/\[/.source+v.source+v.source+v.source+v.source+v.source+v.source+v.source+v.source+/\-?](\d*\/*\d*)?([\>\<\-\)]*)/.source+b.source))){for(var l=1+s[1].length,h=0;h=0;t--)if("program"===u[t].cmd)return void(u[t].channel=e)}function L(e){return e/1e6}function O(e){return Math.round(e*k*1e6)/1e6}function H(e){switch(parseInt(e.den,10)){case 2:return.5;case 4:return.25;case 8:return e.num%3==0?.375:.125;case 16:return.125}return.25}function z(e,t){var r=t.start,n=t.duration,i=O(1/32);switch(e){case"trill":for(var a=1;n>0;)u.push({cmd:"note",pitch:t.pitch+a,volume:t.volume,start:r,duration:i,gap:0,instrument:h,style:"decoration"}),a=1===a?0:1,n-=i,r+=i;break;case"mordent":u.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r,duration:i,gap:0,instrument:h,style:"decoration"}),n-=i,r+=i,u.push({cmd:"note",pitch:t.pitch+1,volume:t.volume,start:r,duration:i,gap:0,instrument:h,style:"decoration"}),n-=i,r+=i,u.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r,duration:n,gap:0,instrument:h});break;case"lowermordent":u.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r,duration:i,gap:0,instrument:h,style:"decoration"}),n-=i,r+=i,u.push({cmd:"note",pitch:t.pitch-1,volume:t.volume,start:r,duration:i,gap:0,instrument:h,style:"decoration"}),n-=i,r+=i,u.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r,duration:n,gap:0,instrument:h});break;case"turn":i=t.duration/5,u.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r,duration:i,gap:0,instrument:h,style:"decoration"}),u.push({cmd:"note",pitch:t.pitch+1,volume:t.volume,start:r+i,duration:i,gap:0,instrument:h,style:"decoration"}),u.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r+2*i,duration:i,gap:0,instrument:h,style:"decoration"}),u.push({cmd:"note",pitch:t.pitch+1,volume:t.volume,start:r+3*i,duration:i,gap:0,instrument:h,style:"decoration"}),u.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r+4*i,duration:i,gap:0,instrument:h});break;case"roll":for(;n>0;)u.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r,duration:i,gap:0,instrument:h,style:"decoration"}),n-=2*i,r+=2*i}}function F(e,t){var r,n=function(e,t){if(t)return 0;var r;if(g)r=g,g=void 0;else if(T)if(B>e)r=E;else{var n=(e-m)/H(w);r=0===n?S:parseInt(n,10)===n?_:E}else r=_;return v&&(r+=v,v=void 0),r<0&&(r=0),r>127&&(r=127),t?0:r}(L(e.time),t);if(p.processChord(e),e.gracenotes&&e.pitches&&e.pitches.length>0&&e.pitches[0]&&(r=function(e,t){for(var r,n=0,i=[],s=0;s0?D.endType="tenuto":d&&(D.endType=d),D.endType){case"tenuto":D.gap=-.001;break;case"staccato":var j=.4*D.duration;D.gap=o/60*j;break;default:D.gap=0}u.push(D)}}}u.length}var Y=function(e){return e.pitches&&e.pitches.length>0&&e.pitches[0]?e.pitches[0].duration:e.elem?e.elem.duration:e.duration}(e);f=Math.max(f,L(e.time)+O(Y))}n=function(n,a,C,O){a||(a={}),O||(O={}),e=[],t=[0,0,0,0,0,0,0],s=[],o=a.qpm,c=void 0,k=1,l=void 0,h=void 0,u=void 0,d=void 0,f=0,x=C,w={num:4,den:4},T=!0,S=105,_=95,E=85,M=.25,g=void 0,v=void 0,N=0,b=[],A={},y=1,n.length>0&&n[0].length>0&&(B=n[0][0].pickupLength),void 0===a.bassprog||O.bassprog||(O.bassprog=[a.bassprog]),void 0===a.bassvol||O.bassvol||(O.bassvol=[a.bassvol]),void 0===a.chordprog||O.chordprog||(O.chordprog=[a.chordprog]),void 0===a.chordvol||O.chordvol||(O.chordvol=[a.chordvol]),void 0===a.gchord||O.gchord||(O.gchord=[a.gchord]),p=new i(n.length,a.chordsOff,O,w),function(e,t){for(var r=0;r=0)&&(I=!0);for(var V=0;V0&&"program"===u[u.length-1].cmd)u[u.length-1].instrument=Y.program;else{var R;for(R=u.length-1;R>=0&&"program"!==u[R].cmd;R--);(R<0||u[R].instrument!==Y.program)&&u.push({cmd:"program",channel:0,instrument:Y.program})}break;case"channel":P(Y.channel);break;case"drum":A=G(Y.params),q();break;case"gchordOn":p.gChordOn(Y);break;case"beat":S=Y.beats[0],_=Y.beats[1],E=Y.beats[2];break;case"vol":g=Y.volume;break;case"volinc":v=Y.volume;break;case"beataccents":T=Y.value;break;case"gchord":case"bassprog":case"chordprog":case"bassvol":case"chordvol":p.paramChange(Y);break;default:console.log("MIDI creation. Unknown el_type: "+Y.el_type+"\n")}}void 0===u[0].instrument&&(u[0].instrument=l||0),d&&u.unshift(d),s.push(u),p.finish(),b.length}return a.detuneOctave&&function(e,t){for(var r={},n=0;n1){var c=(o=o.sort((function(e,t){return e.pitch-t.pitch})))[o.length-1],l=c.pitch%12,h=!1;for(i=0;!h&&i0&&s.push(b),{tempo:o,instrument:l,tracks:s,totalDuration:f}};var D=[0,2,4,5,7,9,11];function I(n){if(void 0!==n.midipitch)return n.midipitch;var i=n.pitch;if(n.accidental)switch(n.accidental){case"sharp":e[i]=1;break;case"flat":e[i]=-1;break;case"natural":e[i]=0;break;case"dblsharp":e[i]=2;break;case"dblflat":e[i]=-2;break;case"quartersharp":e[i]=.25;break;case"quarterflat":e[i]=-.25}var a=12*function(e){return Math.floor(e/7)}(i)+D[Y(i)]+60;return void 0!==e[i]?a+=e[i]:a+=t[Y(i)],a+=r}function j(e){var t=[0,0,0,0,0,0,0];if(!e.accidentals)return t;for(var r=0;r=0?(e.pitch=Math.round(e.pitch),e.cents=-50):t.indexOf(".25")>=0&&(e.pitch=Math.round(e.pitch),e.cents=50),e}function Y(e){return(e%=7)<0&&(e+=7),e}function G(e){if(0===e.pattern.length||!1===e.on)return{on:!1};for(var t=e.pattern[0],r=[],n="",i=0,a=0;at&&(r=r.substring(0,t)),function(e){for(var t="",r=0;r>=7;for(var n=r.length-1;n>=0;n--){t<<=8;var i=r[n];0!==n&&(i|=128),t|=i}var s=t.toString(16).length;return a(t,s+=s%2)}t.prototype.setTempo=function(e){0===this.trackcount&&(this.startTrack(),this.track+="%00%FF%51%03"+a(Math.round(6e7/e),6),this.endTrack())},t.prototype.setGlobalInfo=function(e,t,n,i){if(0===this.trackcount){this.startTrack();var s=Math.round(6e7/e);this.track+="%00%FF%51%03"+a(s,6),n&&(this.track+=function(e){if(!e||!e.accidentals)return"";for(var t="%00%FF%59%02",r=0,n=256,i=0;i=0)return n;return n}function a(e,t,r){for(var n=Math.min(e.length,t+3),i=t;i=0)return e[i].decoration[a];return null}function s(e){for(var t=0;t=0&&"bar"!==r[n].el_type;)r[n].noChordVoice=!0,n--}function o(e,t){if(e&&!(e.length<=t)&&e[t].title)return e[t].title.join(" ")}function c(e,t){var r=1/4;e.duration&&(r=e.duration[0]);var n=60;return e.bpm&&(n=e.bpm),r*n/t}function l(t){var r;switch(t.type){case"common_time":r={el_type:"meter",num:4,den:4};break;case"cut_time":r={el_type:"meter",num:2,den:2};break;case"specified":r={el_type:"meter",num:t.value[0].num,den:t.value[0].den};break;default:r={el_type:"meter"}}return e=r.num/r.den,r}function h(e){for(var t=[],r=0;r=0;r--)if(e[r].el_type===t.el_type)return void(JSON.stringify(e[r])!==JSON.stringify(t)&&e.push(t));e.push(t)}n=function(n,h){var p,m=(h=h||{}).program||0,g=h.midiTranspose||0;n.visualTranspose&&(g-=n.visualTranspose);var v=h.channel||0,b=!1,y=h.drum||"",x=h.drumBars||1,k=h.drumIntro||0,w=""!==y,C=!!h.drumOff,T=[];m=parseInt(m,10),g=parseInt(g,10),10===(v=parseInt(v,10))&&(m=t),y=y.split(" "),x=parseInt(x,10),k=parseInt(k,10);var S=n.formatting.bagpipes;S&&(m=71);var _=[];if(n.formatting.midi){var E=n.formatting.midi;E.program&&E.program.length>0&&(m=E.program[0],E.program.length>1&&(m=E.program[1],v=E.program[0]),b=!0),E.transpose&&(g=E.transpose[0]),E.channel&&(v=E.channel[0],b=!0),E.drum&&(y=E.drum),E.drumbars&&(x=E.drumbars[0]),E.drumon&&(w=!0),10===v&&(m=t),E.beat&&_.push({el_type:"beat",beats:E.beat}),E.nobeataccents&&_.push({el_type:"beataccents",value:!1})}p=h.qpm?parseInt(h.qpm,10):n.metaText.tempo?c(n.metaText.tempo,n.getBeatLength()):h.defaultQpm?h.defaultQpm:180;var M=[];S&&M.push({el_type:"bagpipes"}),M.push({el_type:"instrument",program:m}),v&&M.push({el_type:"channel",channel:v}),g&&M.push({el_type:"transpose",transpose:g}),M.push({el_type:"tempo",qpm:p});for(var N=0;N<_.length;N++)M.push(_[N]);var A,B=[],P=[],L=[],O=[0],H={};H[0]={el_type:"tempo",qpm:p,timing:0};for(var z=[],F=[],D=!1,I=n.lines,j=0;j=0?t="pppp":e.decoration.indexOf("ppp")>=0?t="ppp":e.decoration.indexOf("pp")>=0?t="pp":e.decoration.indexOf("p")>=0?t="p":e.decoration.indexOf("mp")>=0?t="mp":e.decoration.indexOf("mf")>=0?t="mf":e.decoration.indexOf("f")>=0?t="f":e.decoration.indexOf("ff")>=0?t="ff":e.decoration.indexOf("fff")>=0?t="fff":e.decoration.indexOf("ffff")>=0&&(t="ffff"),t&&(A=n[t].slice(0),B[q].push({el_type:"beat",beats:A.slice(0)}),P[X]=!1,L[X]=!1),e.decoration.indexOf("crescendo(")>=0){var i=r(U,te,"crescendo)"),s=Math.min(127,A[0]+50),o=a(U,te+i+1,Object.keys(n));o&&(s=n[o][0]),P[X]=i>0&&Math.floor((s-A[0])/i),L[X]=!1}else if(e.decoration.indexOf("crescendo)")>=0)P[X]=!1;else if(e.decoration.indexOf("diminuendo(")>=0){var c=r(U,te,"diminuendo)"),l=Math.max(15,A[0]-50),h=a(U,te+c+1,Object.keys(n));h&&(l=n[h][0]),P[X]=!1,L[X]=c>0&&Math.floor((l-A[0])/c)}else e.decoration.indexOf("diminuendo)")>=0&&(L[X]=!1)},G=V.staff,q=0,W=0;W=0?B[q].push({el_type:"transpose",transpose:-12}):R.clef.type.indexOf("+8")>=0&&B[q].push({el_type:"transpose",transpose:12})),n.formatting.midi&&n.formatting.midi.drumoff&&(B[q].push({el_type:"bar"}),B[q].push({el_type:"drum",params:{pattern:"",on:!1}}));var Q=0,J=0,Z=0,ee=0;A=[105,95,85,1];for(var te=0;te=0?B[q].push({el_type:"transpose",transpose:-12}):re.type.indexOf("+8")>=0&&B[q].push({el_type:"transpose",transpose:12}));break;case"tempo":p=c(re,n.getBeatLength()),B[q].push({el_type:"tempo",qpm:p,timing:O[q]}),H[""+O[q]]={el_type:"tempo",qpm:p,timing:O[q]};break;case"bar":Q>0&&B[q].push({el_type:"bar"}),Y(re),Q=0;var se="bar_right_repeat"===re.type||"bar_dbl_repeat"===re.type,oe="1"===re.startEnding,ce="bar_left_repeat"===re.type||"bar_dbl_repeat"===re.type||"bar_right_repeat"===re.type;if(se){var le=z[q];le||(le=0);var he=F[q];he||(he=B[q].length);for(var ue=le;ue=0&&a!==t[""+o.timing].qpm&&(a=t[""+o.timing].qpm,"tempo"===o.el_type?(o.qpm=t[""+o.timing].qpm,s++):(e[n].splice(s,0,{el_type:"tempo",qpm:t[""+o.timing].qpm,timing:o.timing}),s+=2))}}(B,H),k)for(var pe=n.getPickupLength(),me=0;mege;)ge++;if(B[me].length>ge){for(ae=0;ae0&&B[0].length>0&&(B[0][0].pickupLength=n.getPickupLength()),B}}(),e.exports=n},8702:function(e,t,r){var n=r(5281);e.exports=function(){return window.abcjsAudioContext||n(),window.abcjsAudioContext}},2710:function(e){e.exports=function(e){return Math.pow(2,e/1200)}},7207:function(e,t,r){var n=r(5008),i=function(e,t,r,n){this.chordTrack=[],this.chordTrackFinished=!1,this.chordChannel=e,this.currentChords=[],this.lastChord,this.chordLastBar,this.chordsOff=!!t,this.gChordTacet=this.chordsOff,this.hasRhythmHead=!1,this.transpose=0,this.lastBarTime=0,this.meter=n,this.tempoChangeFactor=1,this.bassInstrument=r.bassprog&&1===r.bassprog.length?r.bassprog[0]:0,this.chordInstrument=r.chordprog&&1===r.chordprog.length?r.chordprog[0]:0,this.boomVolume=r.bassvol&&1===r.bassvol.length?r.bassvol[0]:64,this.chickVolume=r.chordvol&&1===r.chordvol.length?r.chordvol[0]:48,this.overridePattern=r.gchord?s(r.gchord[0]):void 0};function a(e,t,r,n){var i=[];if(!e)return i;if(t.indexOf("boom")>=0?i.push(r?e.boom:e.boom2):n&&i.push(e.boom),t.indexOf("chick")>=0)for(var a=0;a3?i.push(e.chick[2]):i.push(e.chick[0]+12);break;case"TOP":e.chick.length>4?i.push(e.chick[2]):i.push(e.chick[1]+12);break;case"do":i.push(e.chick[0]+12);break;case"mi":i.push(e.chick[1]+12);break;case"sol":i.push(e.chick[2]+12);break;case"ti":e.chick.length>3?i.push(e.chick[2]+12):i.push(e.chick[0]+24);break;case"top":e.chick.length>4?i.push(e.chick[2]+12):i.push(e.chick[1]+24)}return i}function s(e){for(var t=[],r=0;r0&&!this.chordTrackFinished&&(this.resolveChords(this.lastBarTime,o(e.time)),this.currentChords=[]),this.chordLastBar=this.lastChord},i.prototype.gChordOn=function(e){this.chordsOff||(this.gChordTacet=e.tacet)},i.prototype.paramChange=function(e){switch(e.el_type){case"gchord":this.overridePattern=s(e.param);break;case"bassprog":this.bassInstrument=e.param;break;case"chordprog":this.chordInstrument=e.param;break;case"bassvol":this.boomVolume=e.param;break;case"chordvol":this.chickVolume=e.param;break;default:console.log("unhandled midi param",e)}},i.prototype.finish=function(){this.chordTrackEmpty()||(this.chordTrackFinished=!0)},i.prototype.addTrack=function(e){this.chordTrackEmpty()||e.push(this.chordTrack)},i.prototype.findChord=function(e){if(this.gChordTacet)return"break";if(this.chordTrackFinished||!e.chord||0===e.chord.length)return null;for(var t=0;t=0)return"break"}return null},i.prototype.interpretChord=function(e){if(0!==e.length){if("break"===e)return{chick:[]};var t=e.substring(0,1);if("("===t){if(0===(e=e.substring(1,e.length-2)).length)return;t=e.substring(0,1)}var r=this.basses[t];if(r){for(var n=this.transpose;n<-8;)n+=12;for(;n>8;)n-=12;var i,a=(r+=n)-5;1===e.length&&(i=this.chordNotes(r,""));var s=e.substring(1),o=s.substring(0,1);"b"===o||"♭"===o?(r--,a--,s=s.substring(1)):"#"!==o&&"♯"!==o||(r++,a++,s=s.substring(1));var c=s.split("/");if((i=this.chordNotes(r,c[0])).length>=3&&(a=a+(i[2]-i[0])-7),2===c.length&&this.basses[c[1].substring(0,1)]){var l={"#":1,"♯":1,b:-1,"♭":-1}[c[1].substring(1)]||0;a=r=this.basses[c[1].substring(0,1)]+l+n}return{boom:r,boom2:a,chick:i}}}},i.prototype.chordNotes=function(e,t){var r=this.chordIntervals[t];r||(r="ma"===t.slice(0,2).toLowerCase()||"M"===t[0]?this.chordIntervals.M:"m"===t[0]||"-"===t[0]?this.chordIntervals.m:this.chordIntervals.M),e+=12;for(var n=[],i=0;i0&&c[u-1]&&c[u]&&c[u-1].boom!==c[u].boom&&(d=!0);var p=l[u],m=p.indexOf("boom")>=0,g=!m&&0!==u&&l[0].indexOf("boom")>=0&&(!c[u-1]||c[u-1].boom!==c[u].boom),v=a(c[u],p,d,g);m&&(d=!1);for(var b=0;b0){var s=e.gap?e.gap:0,o=e.duration;s=Math.min(s,2*o/3);var c={pitch:e.pitch,instrument:a,start:Math.round(1e6*e.start)/1e6,end:Math.round(1e6*(e.start+o-s))/1e6,volume:e.volume};e.startChar&&(c.startChar=e.startChar),e.endChar&&(c.endChar=e.endChar),e.style&&(c.style=e.style),e.cents&&(c.cents=e.cents),t[r].push(c)}break;case"program":i=n[e.instrument];break;case"text":break;default:console.log("Unhandled midi event",e)}}))})),t}},6313:function(e,t,r){var n=r(5049),i=r(5281),a=r(8702),s=r(5008),o=r(1225),c=r(9733),l=r(5075),h=r(5343),u=r(6987);function d(e,t,r,s,o){var c=!0;if(a()?c="suspended"===a().state:i(),!n())throw{status:"NotSupported",message:"This browser does not support audio."};(c||o)&&r&&r.classList.add("abcjs-loading"),c?a().resume().then((function(){s?s().then((function(n){f(e,t,r,o)})):f(e,t,r,o)})):f(e,t,r,o)}function f(e,t,r,n){n?e(t).then((function(){r&&r.classList.remove("abcjs-loading")})):(e(t),r&&r.classList.remove("abcjs-loading"))}e.exports=function(e,t){var r=this;if("string"==typeof e){var n=e;if(!(e=document.querySelector(n)))throw new Error('Cannot find element "'+n+'" in the DOM.')}else if(!(e instanceof HTMLElement))throw new Error("The first parameter must be a valid element or selector in the DOM.");if(r.parent=e,r.options={},t&&(r.options=s.clone(t)),r.options.ac&&i(r.options.ac),function(e,t){var r=!!t.loopHandler,n=!!t.restartHandler,i=!!t.playHandler||!!t.playPromiseHandler,a=!!t.progressHandler,s=!!t.warpHandler,d=!1!==t.hasClock,f='
\n';if(r){var p=t.repeatTitle?t.repeatTitle:"Click to toggle play once/repeat.";f+='\n"}if(n){var m=t.restartTitle?t.restartTitle:"Click to go to beginning.";f+='\n"}if(i){var g=t.playTitle?t.playTitle:"Click to play/pause.";f+='\n"}if(a){var v=t.randomTitle?t.randomTitle:"Click to change the playback position.";f+='\n'}if(d&&(f+='\n'),s){var b=t.warpTitle?t.warpTitle:"Change the playback speed.";f+=' ( '+(t.bpm?t.bpm:"BPM")+")\n"}f+='
CSS required: load abcjs-audio.css
',f+="
\n",e.innerHTML=f}(r.parent,r.options),function(e){var t=!!e.options.loopHandler,r=!!e.options.restartHandler,n=!!e.options.playHandler||!!e.options.playPromiseHandler,i=!!e.options.progressHandler,a=!!e.options.warpHandler,s=e.parent.querySelector(".abcjs-midi-start");t&&e.parent.querySelector(".abcjs-midi-loop").addEventListener("click",(function(t){d(e.options.loopHandler,t,s,e.options.afterResume)})),r&&e.parent.querySelector(".abcjs-midi-reset").addEventListener("click",(function(t){d(e.options.restartHandler,t,s,e.options.afterResume)})),n&&s.addEventListener("click",(function(t){d(e.options.playPromiseHandler||e.options.playHandler,t,s,e.options.afterResume,!!e.options.playPromiseHandler)})),i&&e.parent.querySelector(".abcjs-midi-progress-background").addEventListener("click",(function(t){d(e.options.progressHandler,t,s,e.options.afterResume)})),a&&e.parent.querySelector(".abcjs-midi-tempo").addEventListener("change",(function(t){d(e.options.warpHandler,t,s,e.options.afterResume)}))}(r),r.disable=function(e){var t=r.parent.querySelector(".abcjs-inline-audio");e?t.classList.add("abcjs-disabled"):t.classList.remove("abcjs-disabled")},r.setWarp=function(e,t){r.parent.querySelector(".abcjs-midi-tempo").value=Math.round(t),r.setTempo(e)},r.setTempo=function(e){var t=r.parent.querySelector(".abcjs-midi-current-tempo");t&&(t.innerHTML=Math.round(e))},r.resetAll=function(){for(var e=r.parent.querySelectorAll(".abcjs-pushed"),t=0;t0){if(e.debugCallback&&e.debugCallback("pending "+JSON.stringify(l)),a?a*=2:a=50,a<9e4)return new Promise((function(t,n){setTimeout((function(){var s=[];for(u=0;u75&&(t=75),t=t/50-1;var i=0,a=.25;8===r.den&&(a/=2);for(var s=a/2,o=s*t,c=0;c=l[h].start+s)){var d=u.start;u.start+=o,u.volume*=1+i,h>0&&l[h-1].end==d&&(l[h-1].end=u.start,l[h-1].volume*=1-i)}}}}(c,e.options.swing,e.meterFraction,e.pickupLength),e.sequenceCallback&&e.sequenceCallback(c,e.callbackContext);var l=function(e,t){if(null==t)return null;var r=[];if(t.length){for(var n=0;n1&&(i=1),r.push(i)}else r.push(0);return r}var a=parseFloat(t);if(a*(e-1)>2)return null;for(var s=e%2==0,o=s?0-a/2:0,c=o+a,l=0;lr?l[r]:0;t.forEach((function(t){var r=t.instrument+":"+t.pitch+":"+t.volume+":"+Math.round(1e3*(t.end-t.start))/1e3+":"+n+":"+a+":"+(t.cents?t.cents:0);e.debugCallback&&e.debugCallback("noteMapTrack "+r),h[r]||(h[r]=[]),h[r].push(t.start)}))}));for(var d=[],f=s().createBuffer(2,o,s().sampleRate),p=0;p0?e.audioBuffers[0].duration:0;return{status:s().state,duration:t}}e.audioBuffers=[f],e.debugCallback&&(e.debugCallback("sampleRate = "+s().sampleRate),e.debugCallback("totalSamples = "+o),e.debugCallback("creationTime = "+Math.floor(1e3*(s().currentTime-n))+"ms")),Promise.all(d).then((function(){"suspended"===s().state?s().resume().then((function(){r(b(e))})):"interrupted"===s().state?s().suspend().then((function(){s().resume().then((function(){r(b(e))}))})):r(b(e))}))}))):Promise.reject(new Error(f))},e.start=function(){if(!e.audioBufferPossible)throw new Error(f);e.debugCallback&&e.debugCallback("start called");var t=e.pausedTimeSec?e.pausedTimeSec:0;e._kickOffSound(t),e.startTimeSec=s().currentTime-t,e.pausedTimeSec=void 0,e.debugCallback&&e.debugCallback("MIDI STARTED",e.startTimeSec)},e.pause=function(){if(!e.audioBufferPossible)throw new Error(f);return e.debugCallback&&e.debugCallback("pause called"),e.pausedTimeSec=e.stop(),e.pausedTimeSec},e.resume=function(){e.start()},e.seek=function(t,r){var n;switch(r){case"seconds":n=t;break;case"beats":n=t*e.millisecondsPerMeasure/e.beatsPerMeasure/1e3;break;default:n=(e.duration-e.fadeLength/1e3)*t}if(!e.audioBufferPossible)throw new Error(f);e.debugCallback&&e.debugCallback("seek called sec="+n),e.isRunning?(e.stop(),e._kickOffSound(n)):e.pausedTimeSec=n,e.pausedTimeSec=n},e.stop=function(){return e.isRunning=!1,e.pausedTimeSec=void 0,e.directSource.forEach((function(e){try{e.stop()}catch(e){console.log("direct source didn't stop:",e)}})),e.directSource=[],s().currentTime-e.startTimeSec},e.finished=function(){e.startTimeSec=void 0,e.pausedTimeSec=void 0,e.isRunning=!1},e.download=function(){return h(e)},e.getAudioBuffer=function(){return e.audioBuffers[0]},e.getIsRunning=function(){return e.isRunning},e._deviceCapable=function(){return!!o()||(console.warn(f),e.debugCallback&&e.debugCallback(f),!1)},e._kickOffSound=function(t){e.isRunning=!0,e.directSource=[],e.audioBuffers.forEach((function(t,r){e.directSource[r]=s().createBufferSource(),e.directSource[r].buffer=t,e.directSource[r].connect(s().destination)})),e.directSource.forEach((function(e){e.start(0,t)})),e.onEnded&&(e.directSource[0].onended=function(){e.onEnded(e.callbackContext)})}}},873:function(e){e.exports=function(e){return window.URL.createObjectURL(function(e){var t,r,n=e[0],i=n.numberOfChannels,a=n.length*i*2+44,s=new ArrayBuffer(a),o=new DataView(s),c=[],l=0,h=0;for(d(1179011410),d(a-8),d(1163280727),d(544501094),d(16),u(1),u(i),d(n.sampleRate),d(2*n.sampleRate*i),u(2*i),u(16),d(1635017060),d(a-h-4),t=0;t';t.preTextDownload&&(a+=t.preTextDownload);var s,o,c=e.metaText&&e.metaText.title?e.metaText.title:"Untitled";return s=t.downloadLabel&&(o=t.downloadLabel)&&"[object Function]"==={}.toString.call(o)?t.downloadLabel(e,n):t.downloadLabel?t.downloadLabel.replace(/%T/,c):'Download MIDI for "'+c+'"',c=c.toLowerCase().replace(/'/g,"").replace(/\W/g,"_").replace(/__/g,"_"),a+=''+s+"",t.postTextDownload&&(a+=t.postTextDownload),a+""};e.exports=function(e,t){var r={};if(t)for(var s in t)t.hasOwnProperty(s)&&(r[s]=t[s]);function o(e,t,n){var s=i(t,r);switch(r.midiOutputType){case"encoded":return s;case"binary":var o=s.replace("data:audio/midi,","");o=(o=o.replace(/MThd/g,"%4d%54%68%64")).replace(/MTrk/g,"%4d%54%72%6b");for(var c=new ArrayBuffer(o.length/3),l=new Uint8Array(c),h=0;h4)for(i=i.toLowerCase(),t-=5;t>0;)i+="'",t--;else for(;t<4;)i+=",",t++;return i}}},522:function(e){e.exports={21:"A0",22:"Bb0",23:"B0",24:"C1",25:"Db1",26:"D1",27:"Eb1",28:"E1",29:"F1",30:"Gb1",31:"G1",32:"Ab1",33:"A1",34:"Bb1",35:"B1",36:"C2",37:"Db2",38:"D2",39:"Eb2",40:"E2",41:"F2",42:"Gb2",43:"G2",44:"Ab2",45:"A2",46:"Bb2",47:"B2",48:"C3",49:"Db3",50:"D3",51:"Eb3",52:"E3",53:"F3",54:"Gb3",55:"G3",56:"Ab3",57:"A3",58:"Bb3",59:"B3",60:"C4",61:"Db4",62:"D4",63:"Eb4",64:"E4",65:"F4",66:"Gb4",67:"G4",68:"Ab4",69:"A4",70:"Bb4",71:"B4",72:"C5",73:"Db5",74:"D5",75:"Eb5",76:"E5",77:"F5",78:"Gb5",79:"G5",80:"Ab5",81:"A5",82:"Bb5",83:"B5",84:"C6",85:"Db6",86:"D6",87:"Eb6",88:"E6",89:"F6",90:"Gb6",91:"G6",92:"Ab6",93:"A6",94:"Bb6",95:"B6",96:"C7",97:"Db7",98:"D7",99:"Eb7",100:"E7",101:"F7",102:"Gb7",103:"G7",104:"Ab7",105:"A7",106:"Bb7",107:"B7",108:"C8",109:"Db8",110:"D8",111:"Eb8",112:"E8",113:"F8",114:"Gb8",115:"G8",116:"Ab8",117:"A8",118:"Bb8",119:"B8",120:"C9",121:"Db9"}},5058:function(e){var t={f0:"_C",n0:"=C",s0:"^C",x0:"C",f1:"_D",n1:"=D",s1:"^D",x1:"D",f2:"_E",n2:"=E",s2:"^E",x2:"E",f3:"_F",n3:"=F",s3:"^F",x3:"F",f4:"_G",n4:"=G",s4:"^G",x4:"G",f5:"_A",n5:"=A",s5:"^A",x5:"A",f6:"_B",n6:"=B",s6:"^B",x6:"B",f7:"_c",n7:"=c",s7:"^c",x7:"c",f8:"_d",n8:"=d",s8:"^d",x8:"d",f9:"_e",n9:"=e",s9:"^e",x9:"e",f10:"_f",n10:"=f",s10:"^f",x10:"f",f11:"_g",n11:"=g",s11:"^g",x11:"g",f12:"_a",n12:"=a",s12:"^a",x12:"a",f13:"_b",n13:"=b",s13:"^b",x13:"b",f14:"_c'",n14:"=c'",s14:"^c'",x14:"c'",f15:"_d'",n15:"=d'",s15:"^d'",x15:"d'",f16:"_e'",n16:"=e'",s16:"^e'",x16:"e'"};e.exports=function(e){var r=(e.accidental?e.accidental[0]:"x")+e.verticalPos;return t[r]}},4586:function(e,t,r){var n=r(4771),i=r(522),a=r(2710),s=function(e,t,r){for(var n=0;n<2;n++)for(var i=t.getChannelData(n),a=e.getChannelData(n),s=0;s=1&&parseInt(e.cursorControl.beatSubdivisions,10)<=64&&(r=parseInt(e.cursorControl.beatSubdivisions,10)),e.timer=new a(e.visualObj,{beatCallback:e.beatCallback,eventCallback:e.eventCallback,lineEndCallback:e.lineEndCallback,qpm:e.currentTempo,extraMeasuresAtBeginning:e.cursorControl?e.cursorControl.extraMeasuresAtBeginning:void 0,lineEndAnticipation:e.cursorControl?e.cursorControl.lineEndAnticipation:0,beatSubdivisions:r}),e.cursorControl&&e.cursorControl.onReady&&"function"==typeof e.cursorControl.onReady&&e.cursorControl.onReady(e),e.isLoaded=!0,e.isLoading=!1,Promise.resolve({status:"created",notesStatus:t})}))},e.destroy=function(){e.timer&&(e.timer.reset(),e.timer.stop(),e.timer=null),e.midiBuffer&&(e.midiBuffer.stop(),e.midiBuffer=null),e.setProgress(0,1),e.control&&e.control.resetAll()},e.play=function(){return e.runWhenReady(e._play,void 0)},e.runWhenReady=function(t,r){return e.visualObj?e.isLoading?(n=500,new Promise((function(e){setTimeout(e,n)}))).then((function(){return e.isLoading?e.runWhenReady(t,r):t(r)})):e.isLoaded?t(r):e.go().then((function(){return t(r)})):Promise.resolve({status:"loading"});var n},e._play=function(){return s().resume().then((function(){return e.isStarted=!e.isStarted,e.isStarted?(e.cursorControl&&e.cursorControl.onStart&&"function"==typeof e.cursorControl.onStart&&e.cursorControl.onStart(),e.midiBuffer.start(),e.timer.start(e.percent),e.control&&e.control.pushPlay(!0)):e.pause(),Promise.resolve({status:"ok"})}))},e.pause=function(){e.timer&&(e.timer.pause(),e.midiBuffer.pause(),e.control&&e.control.pushPlay(!1))},e.toggleLoop=function(){e.isLooping=!e.isLooping,e.control&&e.control.pushLoop(e.isLooping)},e.restart=function(){e.timer&&(e.timer.setProgress(0),e.midiBuffer.seek(0))},e.randomAccess=function(t){return e.runWhenReady(e._randomAccess,t)},e._randomAccess=function(t){var r=t.target.classList.contains("abcjs-midi-progress-indicator")?t.target.parentNode:t.target,n=(t.x-r.getBoundingClientRect().left)/r.offsetWidth;return n<0&&(n=0),n>1&&(n=1),e.seek(n),Promise.resolve({status:"ok"})},e.seek=function(t,r){e.timer&&e.midiBuffer&&(e.timer.setProgress(t,r),e.midiBuffer.seek(t,r))},e.setWarp=function(t){if(parseInt(t,10)>0){e.warp=parseInt(t,10);var r=e.isStarted,n=e.percent;return e.destroy(),e.isStarted=!1,e.go().then((function(){return e.setProgress(n,1e3*e.midiBuffer.duration),e.control&&e.control.setWarp(e.currentTempo,e.warp),r?e.play().then((function(){return e.seek(n),Promise.resolve()})):(e.seek(n),Promise.resolve())}))}return Promise.resolve()},e.onWarp=function(t){var r=t.target.value;return e.setWarp(r)},e.setProgress=function(t,r){e.percent=t,e.control&&e.control.setProgress(t,r)},e.finished=function(){if(e.timer.reset(),e.isLooping)return e.timer.start(0),e.midiBuffer.finished(),e.midiBuffer.start(),"continue";e.timer.stop(),e.isStarted&&(e.control&&e.control.pushPlay(!1),e.isStarted=!1,e.midiBuffer.finished(),e.cursorControl&&e.cursorControl.onFinished&&"function"==typeof e.cursorControl.onFinished&&e.cursorControl.onFinished(),e.setProgress(0,1))},e.beatCallback=function(t,r,n,i){var a=t/r;e.setProgress(a,n),e.cursorControl&&e.cursorControl.onBeat&&"function"==typeof e.cursorControl.onBeat&&e.cursorControl.onBeat(t,r,n,i)},e.eventCallback=function(t){if(!t)return e.finished();e.cursorControl&&e.cursorControl.onEvent&&"function"==typeof e.cursorControl.onEvent&&e.cursorControl.onEvent(t)},e.lineEndCallback=function(t,r){e.cursorControl&&e.cursorControl.onLineEnd&&"function"==typeof e.cursorControl.onLineEnd&&e.cursorControl.onLineEnd(t,r)},e.getUrl=function(){return e.midiBuffer.download()},e.download=function(t){var r=e.getUrl(),n=document.createElement("a");document.body.appendChild(n),n.setAttribute("style","display: none;"),n.href=r,n.download=t||"output.wav",n.click(),window.URL.revokeObjectURL(r),document.body.removeChild(n)}}},2029:function(e){e.exports=function(){var e=this;e.tracks=[],e.totalDuration=0,e.currentInstrument=[],e.starts=[],e.addTrack=function(){return e.tracks.push([]),e.currentInstrument.push(0),e.starts.push(0),e.tracks.length-1},e.setInstrument=function(t,r){e.tracks[t].push({channel:0,cmd:"program",instrument:r}),e.currentInstrument[t]=r},e.appendNote=function(t,r,n,i,a){var s={cmd:"note",duration:n,gap:0,instrument:e.currentInstrument[t],pitch:r,start:e.starts[t],volume:i};a&&(s.cents=a),e.tracks[t].push(s),e.starts[t]+=n,e.totalDuration=Math.max(e.totalDuration,e.starts[t])}}},1921:function(e,t,r){var n=r(2842).noteToMidi,i=r(6776),a=r(6629);function s(e,t){for(var r=[],n=0;n=0;n--)if(t.pitch+t.pitchAltered>=e.stringPitches[n]){var i=t.pitch+t.pitchAltered-e.stringPitches[n];return"^"===t.quarter?i-=.5:"v"===t.quarter&&(i+=.5),{num:Math.round(i),str:e.stringPitches.length-1-n,note:t}}return{num:"?",str:e.stringPitches.length-1,note:t}}function l(e,t){var r={num:"?",str:0,note:t};e.push(r),e.error=t.emit()+": unexpected note for instrument"}function h(e){var t=e.tuning,r=e.capo,s=e._super.params.highestNote;this.linePitch=e.linePitch,this.highestNote="a'",s&&(this.highestNote=s),this.measureAccidentals={},this.capo=0,r&&(this.capo=parseInt(r,10)),this.transpose=e.transpose?e.transpose:0,this.tuning=t,this.stringPitches=[];for(var o=0;o0&&(this.capoTuning=function(e){var t=null,r=e.tuning;if(e.capo>0){t=[];for(var n=0;n0&&(r=e.capoTuning);for(var n=r.length-1,i=0;i1?(o=s(this,e)).error&&(a=o.error):e[0].endTie||((r=new i.TabNote(e[0].name,this.clefTranspose)).checkKeyAccidentals(this.accidentals,this.measureAccidentals),(n=c(this,r))?o.push(n):(l(o,r),a=o.error))),a)return o;var h=null;if(t){h=[];for(var u=0;u0&&(r+=" capo:"+e.capo),t=t.replace("%T",r)),t}return""},h.prototype.suppress=function(e){return!!e._super.params.suppress},e.exports=h},8918:function(e){function t(e,t){this.numLines=e,this.lineSpace=t,this.verticalSize=this.numLines*this.lineSpace,this.bar={pitch:3,pitch2:t*e,height:5}}t.prototype.bypass=function(e){var t=e.staffGroup.voices;return!!(t.length>0&&t[0].isPercussion)},t.prototype.setRelative=function(e,t,r){switch(e.type){case"bar":t.pitch=this.bar.pitch,t.pitch2=this.bar.pitch2,t.height=this.height;break;case"symbol":var n=this.bar.pitch2/2;if("dots.dot"==e.name)return r?(t.pitch=n,!1):(t.pitch=n+this.lineSpace,!0)}return r},e.exports=t},6776:function(e,t,r){var n=r(2842),i=n.noteToMidi,a=n.midiToNote;function s(e,t){var r=i(e);t&&(r+=t);var n,s=a(r),o=!1,c=!1,l=null,h=null,u=!1,d=0;e.startsWith("_")?(o=!0,d=-1,"/"==e[1]?(o=!1,h="v",d=0):"_"==e[1]&&(u=!0,d-=1)):e.startsWith("^")?(c=!0,d=1,"/"==e[1]?(c=!1,h="^",d=0):"^"==e[1]&&(u=!0,d+=1)):e.startsWith("=")&&(l=!0,d=0),((n=o||c||null!=h)||l)&&(s=null!=h||u?e.slice(2):e.slice(1));var f=(s.match(/,/g)||[]).length,p=(s.match(/'/g)||[]).length;this.pitch=r,this.pitchAltered=0,this.name=s,this.acc=d,this.isSharp=c,this.isKeySharp=!1,this.isDouble=u,this.isAltered=n,this.isFlat=o,this.isKeyFlat=!1,this.natural=l,this.quarter=h,this.isLower=this.name==this.name.toLowerCase(),this.name=this.name[0].toUpperCase(),this.hasComma=f,this.isQuoted=p}s.prototype.sameNoteAs=function(e){return e.pitch===this.pitch},s.prototype.isLowerThan=function(e){return e.pitch>this.pitch},s.prototype.checkKeyAccidentals=function(e,t){if(!this.isAltered&&!this.natural)if(t[this.name.toUpperCase()])switch(t[this.name.toUpperCase()]){case"__":return this.acc=-2,void(this.pitchAltered=-2);case"_":return this.acc=-1,void(this.pitchAltered=-1);case"=":return this.acc=0,void(this.pitchAltered=0);case"^":return this.acc=1,void(this.pitchAltered=1);case"^^":return this.acc=2,void(this.pitchAltered=2)}else if(e)for(var r=this.name,n=0;n=0){if(r===t)return e.extra[n].x+e.extra[n].w/2;r++}return-1}function f(e){if(e.abcelem){var t=e.abcelem;if(t.rest)return t.gracenotes}return null}function p(e,t,r){var n=e.semantics.notesToNumber(t,r);if(n.error)return e._super.setError(n.error),n;if(n.graces&&n.notes){var i=n.notes.length-1;n.notes[i].graces=n.graces}return n}function m(e,t,r,n,i){for(var a=0;a=0&&(e.semantics.strings.clefTranspose=-12),k.abcelem.type.indexOf("+8")>=0&&(e.semantics.strings.clefTranspose=12)),k.type){case"staff-extra key-signature":this.accidentals=k.abcelem.accidentals,e.semantics.strings.accidentals=this.accidentals;break;case"bar":e.semantics.strings.measureAccidentals={};var T=!1;x===g.children.length-1&&(T=!0);var S=o(k,e);if(S.abcelem.barNumber){delete S.abcelem.barNumber;for(var _=0;_0&&(y.abselem=M,r.push(y),v.children.push(M))}}},e.exports=h},8660:function(e){function t(e,t,r){this.tune=e,this.params=r,this.tuneNumber=t,this.inError=!1}t.prototype.setError=function(e){var t=this.tune;e&&(this.error=e,this.inError=!0,t.warnings?t.warnings.push(e):t.warnings=[e])},e.exports=t},676:function(e,t,r){var n=r(3197),i=r(1696),a=r(4331);function s(e,t){var r=e.plugin.semantics.strings,n=e.renderer.controller.getTextSize,i=r.tabInfos(e.plugin),a=!0;if(r.suppress(e.plugin)&&(a=!1),a){var s=n.calc(i,"tablabelfont","text instrumentname");return t.tabNameInfos={textSize:{height:s.height,width:s.width},name:i},s.height}return 0}function o(e,t,r,n){this.renderer=t,this.plugin=e,this.line=r,this.absolutes=new i,this.staffIndex=n,this.tabStaff={clef:{type:"TAB"}},this.tabSize=e.linePitch*e.nbLines}function c(e,t){return!(!t[e].isTabStaff||e!==t.length-1&&t[e+1].isTabStaff)}function l(e,t){for(var r=t;r>=0;r--)if(!e[r].isTabStaff)return r;return-1}function h(e,t){return"clef"===e[t].children[0].abcelem.el_type?null:0==t?"none":e[t-1].children[0]}o.prototype.doLayout=function(){var e=this.line.staff;if(e){var t=e[0];if(t&&t.clef&&0==t.clef.stafflines)return void this.plugin._super.setError("No tablatures when stafflines=0");e.splice(e.length,0,this.tabStaff)}var r=this.line.staffGroup,i=r.voices,o=function(e){for(var t=0,r=0;rt&&(t=n.specialY.lyricHeightBelow)}return t}(i[0]),u=this.staffIndex,d=r.staffs[u],f=this.tabSize+3-d.bottom-o;d.isTabStaff&&(f=d.top);var p={bottom:-1,isTabStaff:!0,specialY:{tempoHeightAbove:0,partHeightAbove:0,volumeHeightAbove:0,dynamicHeightAbove:0,endingHeightAbove:0,chordHeightAbove:0,lyricHeightAbove:0,lyricHeightBelow:0,chordHeightBelow:0,volumeHeightBelow:0,dynamicHeightBelow:0},lines:this.plugin.nbLines,linePitch:this.plugin.linePitch,dy:.15,top:f},m=function(e,t){for(var r=e.staffIndex,n=0,i=0,a=0;;){if(!t[n])return-1;if(t[n].isTabStaff||(a=t[n].voices.length),t[n].isTabStaff){if(i++,c(n,t)&&i=r){if(n+1==t.length)return n+1;if(!t[n+1].isTabStaff)return n+1}if(++n>t.length)return-1}}(this,r.staffs);if(-1!==m){p.parentIndex=m-1,r.staffs.splice(m,0,p),r.height+=this.tabSize+3;var g=function(e,t){for(var r=t;r>=0;r--)if(!e[r].isTabStaff)return e[r];return null}(r.staffs,m),v=1;(function(e,t){return 1===function(e){for(var t=0,r=0;r1})(r.staffs,g)&&(v=g.voices.length),this.tabStaff.voices=[];for(var b=0;b0&&(y.duplicate=!0);var x=s(this,y)/a.STEP;x=Math.max(x,1),r.staffs[this.staffIndex].top+=1,r.height+=x,y.staff=p;var k=i.length;i.splice(i.length,0,y);var w=h(i,b+this.staffIndex);this.tabStaff.voices[b]=[],this.absolutes.build(this.plugin,i,this.tabStaff.voices[b],b,this.staffIndex,w,k)}!function(e){for(var t=0;t0&&(a[0].invisible=!0);break;case"meter":a[0]=l(i,this.tuneNumber),this.startlimitelem=a[0],r.duplicate&&a.length>0&&(a[0].invisible=!0);break;case"clef":if(a[0]=s(i,this.tuneNumber),!a[0])return null;r.duplicate&&a.length>0&&(a[0].invisible=!0);break;case"key":var h=o(i,this.tuneNumber);h&&(a[0]=h,this.startlimitelem=a[0]),r.duplicate&&a.length>0&&(a[0].invisible=!0);break;case"stem":this.stemdir="auto"===i.direction?void 0:i.direction;break;case"part":var u=new n(i,0,0,"part",this.tuneNumber),d=this.getTextSize.calc(i.title,"partsfont","part");u.addFixedX(new f(i.title,0,0,void 0,{type:"part",height:d.height/p.STEP})),a[0]=u;break;case"tempo":var m=new n(i,0,0,"tempo",this.tuneNumber);m.addFixedX(new g(i,this.tuneNumber,c)),a[0]=m;break;case"style":"normal"===i.head?delete this.style:this.style=i.head;break;case"hint":T=!0,this.saveState();break;case"midi":break;case"scale":this.voiceScale=i.size;break;case"color":this.voiceColor=i.color,r.color=this.voiceColor;break;default:var v=new n(i,0,0,"unsupported",this.tuneNumber);v.addFixed(new f("element type "+i.el_type,0,0,void 0,{type:"debug"})),a[0]=v}return a},_.prototype.createBeam=function(e,t,r){var n=[],a=new i(this.stemHeight*this.voiceScale,this.stemdir,this.flatBeams,r[0]);T&&a.setHint();for(var s=0;se.pitches[r+1].pitch){t=!1;var n=e.pitches[r];e.pitches[r]=e.pitches[r+1],e.pitches[r+1]=n}}while(!t)},A=function(e,t,r,n,i,a,s,o,c){for(var l=r;l>11;l--)l%2!=0||n||e.addFixed(new f(null,o,(i+4)*c,l,{type:"ledger"}));for(l=t;l<1;l++)l%2!=0||n||e.addFixed(new f(null,o,(i+4)*c,l,{type:"ledger"}));for(l=0;l1&&(p=new i(a,"grace",s),T&&p.setHint(),p.mainNote=r);var m=[];for(u=e.gracenotes.length-1;u>=0;u--)o+=10,m[u]=o,e.gracenotes[u].accidental&&(o+=7);for(u=0;u=6?"down":"up";for(n&&(_=n),(i=t.style?t.style:i)&&"normal"!==i||(i="note"),(m=a?S[i].nostem:S[i][-s])||console.log("noteSymbol:",i,s,a),g="down"===_?t.pitches.length-2:1;"down"===_?g>=0:g11||M.verticalPos<1)&&x.push(M.verticalPos-M.verticalPos%2),"down"===_?b=d.getSymbolWidth(m)+2:v=d.getSymbolWidth(m)+2)}var A=t.pitches.length;for(g=0;g0&&(h.bottom=h.bottom-1),e.addHead(h)),b+=z.accidentalshiftx,y=Math.max(y,z.dotshiftx)}if(H){var F=Math.round(70*this.voiceScale)/10,D="down"===_?t.minpitch-F:t.minpitch+1/3;D>6&&!n&&(D=6);var I="down"===_?t.maxpitch-1/3:t.maxpitch+F;I<6&&!n&&(I=6);var j="down"===_||0===e.heads.length?0:e.heads[0].w,V="down"===_?1:-1;h&&"noteheads.slash.quarter"===h.c&&("down"===_?I-=1:D+=1),h&&"noteheads.triangle.quarter"===h.c&&("down"===_?I-=.7:D-=1.2),e.addRight(new f(null,j,0,D,{type:"stem",pitch2:I,linewidth:V,bottom:D-1})),u=Math.min(D,I)}return{noteHead:h,roomTaken:b,roomTakenRight:y,min:u,additionalLedgers:x,dir:_,symbolWidth:T}},_.prototype.addLyric=function(e,t){var r="";t.lyric.forEach((function(e){var t=" "===e.divider?"":e.divider;r+=e.syllable+t+"\n"}));var n=this.getTextSize.calc(r,"vocalfont","lyric"),i=t.positioning?t.positioning.vocalPosition:"below";e.addCentered(new f(r,0,n.width,void 0,{type:"lyric",position:i,height:n.height/p.STEP,dim:this.getTextSize.attr("vocalfont","lyric")}))},_.prototype.createNote=function(e,t,r,i){var a,s=null,o=0,l=0,h=0,u=[],p=C(e),m=!1;0===p&&(m=!0,p=.25,t=!0);for(var g=Math.floor(Math.log(p)/Math.log(2)),v=0,y=Math.pow(2,g),k=y/2;y1,this.stemdir,r,g,this.voiceScale);s=M.noteHead,o=M.roomTaken,l=M.roomTakenRight}else{var N=this.addNoteToAbcElement(E,e,v,this.stemdir,this.style,m,g,t,i);void 0!==N.min&&(this.minY=Math.min(N.min,this.minY)),s=N.noteHead,o=N.roomTaken,l=N.roomTakenRight,u=N.additionalLedgers,a=N.dir,h=N.symbolWidth}if(void 0!==e.lyric&&this.addLyric(E,e),void 0!==e.gracenotes&&(o+=this.addGraceNotes(e,i,E,s,this.stemHeight*this.voiceScale,this.isBagpipes,o)),e.decoration){var B=t?Math.min(-3,E.bottom-6):E.bottom;this.decoration.createDecoration(i,e.decoration,E.top,s?s.w:0,E,o,a,B,e.positioning,this.hasVocals,this.accentAbove)}if(e.barNumber&&E.addFixed(new f(e.barNumber,-10,0,0,{type:"barNumber"})),A(E,e.minpitch,e.maxpitch,e.rest,h,u,a,-2,1),void 0!==e.chord){var P=x(this.getTextSize,E,e,o,l,h,this.jazzchords,this.germanAlphabet);o=P.roomTaken,l=P.roomTakenRight}return e.startTriplet&&(this.triplet=new b(e.startTriplet,s,{flatBeams:this.flatBeams})),e.endTriplet&&this.triplet&&this.triplet.setCloseAnchor(s),!this.triplet||e.startTriplet||e.endTriplet||e.rest&&"spacer"===e.rest.type||this.triplet.middleNote(s),E},_.prototype.addSlursAndTies=function(e,t,r,n,i,a){if(t.endTie&&this.ties.length>0){for(var s=!1,o=0;o10&&"treble"===t.abcelem.type?13:11;t.addFixed(new f(e,n,r.width,i+r.height/p.STEP,{type:"barNumber",dim:this.getTextSize.attr("measurefont","bar-number")}))},_.prototype.createBarLine=function(e,t,r){var i=new n(t,0,10,"bar",this.tuneNumber),a=null,s=0;t.barNumber&&this.addMeasureNumber(t.barNumber,i);var o="bar_right_repeat"===t.type||"bar_dbl_repeat"===t.type,c="bar_left_repeat"!==t.type&&"bar_thick_thin"!==t.type&&"bar_invisible"!==t.type,l="bar_right_repeat"===t.type||"bar_dbl_repeat"===t.type||"bar_left_repeat"===t.type||"bar_thin_thick"===t.type||"bar_thick_thin"===t.type,h="bar_left_repeat"===t.type||"bar_thick_thin"===t.type||"bar_thin_thin"===t.type||"bar_dbl_repeat"===t.type,d="bar_left_repeat"===t.type||"bar_dbl_repeat"===t.type;if(o||d){for(var p in this.slurs)this.slurs.hasOwnProperty(p)&&this.slurs[p].setEndX(i);this.startlimitelem=i}if(o&&(i.addRight(new f("dots.dot",s,1,7)),i.addRight(new f("dots.dot",s,1,5)),s+=6),c&&(a=new f(null,s,1,2,{type:"bar",pitch2:10,linewidth:.6}),i.addRight(a)),"bar_invisible"===t.type&&(a=new f(null,s,1,2,{type:"none",pitch2:10,linewidth:.6}),i.addRight(a)),t.decoration&&this.decoration.createDecoration(e,t.decoration,12,l?3:1,i,0,"down",2,t.positioning,this.hasVocals,this.accentAbove),l&&(a=new f(null,s+=4,4,2,{type:"bar",pitch2:10,linewidth:4}),i.addRight(a),s+=5),this.partstartelem&&t.endEnding&&(this.partstartelem.anchor2=a,this.partstartelem=null),h&&(a=new f(null,s+=3,1,2,{type:"bar",pitch2:10,linewidth:.6}),i.addRight(a)),d&&(s+=3,i.addRight(new f("dots.dot",s,1,7)),i.addRight(new f("dots.dot",s,1,5))),t.startEnding&&r){var m=this.getTextSize.calc(t.startEnding,"repeatfont","").width;i.minspacing+=m+10,this.partstartelem=new u(t.startEnding,a,null),e.addOther(this.partstartelem)}return i.extraw-=5,void 0!==t.chord&&x(this.getTextSize,i,t,0,0,0,!1,this.germanAlphabet),i},e.exports=_},2652:function(e,t,r){var n=r(6658),i=r(4331),a=r(5810);function s(e,t,r,s,o,c,l,h,u,d,f,p,m,g,v){for(var b=e.split("\n"),y=b.length-1;y>=0;y--){var x,k=b[y],w=0;s||(k=a(k,g,v));var C=h.calc(k,o,c),T=C.width,S=C.height/i.STEP;switch(t){case"left":w=-(f+=T+7),x=d.averagepitch,u.addExtra(new n(k,w,T+4,x,{type:"text",height:S,dim:l,position:"left"}));break;case"right":w=p+=4,x=d.averagepitch,u.addRight(new n(k,w,T+4,x,{type:"text",height:S,dim:l,position:"right"}));break;case"below":u.addRight(new n(k,0,0,void 0,{type:"text",position:"below",height:S,dim:l,realWidth:T}));break;case"above":u.addRight(new n(k,0,0,void 0,{type:"text",position:"above",height:S,dim:l,realWidth:T}));break;default:if(r){var _=r.y+3*i.STEP;u.addRight(new n(k,w+r.x,0,d.minpitch+_/i.STEP,{position:"relative",type:"text",height:S,dim:l}))}else{var E="above";d.positioning&&d.positioning.chordPosition&&(E=d.positioning.chordPosition),"hidden"!==E&&u.addCentered(new n(k,m/2,T,void 0,{type:"chord",position:E,height:S,dim:l,realWidth:T}))}}}return{roomTaken:f,roomTakenRight:p}}e.exports=function(e,t,r,n,i,a,o,c){for(var l=0;l0?o.top+3:o.bottom-1,f=s>0?o.top+3:o.bottom-3,p=f-2;"bass-8"===e.type&&(d=3,u=0),o.addRight(new a("8",5+u,i.getSymbolWidth("8")*h,d,{scalex:h,scaley:h,top:f,bottom:p}))}}return o}},3923:function(e,t,r){var n=r(1409),i=r(6020),a=r(6658);e.exports=function(e,t){if(e.el_type="keySignature",!e.accidentals||0===e.accidentals.length)return null;var r=new n(e,0,10,"staff-extra key-signature",t);r.isKeySig=!0;var s=0;return e.accidentals.forEach((function(e){var t,n=0;switch(e.acc){case"sharp":t="accidentals.sharp",n=-3;break;case"natural":t="accidentals.nat";break;case"flat":t="accidentals.flat",n=-1.2;break;case"quartersharp":t="accidentals.halfsharp",n=-2.5;break;case"quarterflat":t="accidentals.halfflat",n=-1.2;break;default:t="accidentals.flat"}r.addRight(new a(t,s,i.getSymbolWidth(t),e.verticalPos,{thickness:i.symbolHeightInPitches(t),top:e.verticalPos+i.symbolHeightInPitches(t)+n,bottom:e.verticalPos+n})),s+=i.getSymbolWidth(t)+2}),this),r}},2143:function(e,t,r){var n=r(6020),i=r(6658);e.exports=function(e,t,r,a){a||(a={});var s,o=void 0!==a.dir?a.dir:null,c=void 0!==a.headx?a.headx:0,l=void 0!==a.extrax?a.extrax:0,h=void 0!==a.flag?a.flag:null,u=void 0!==a.dot?a.dot:0,d=void 0!==a.dotshiftx?a.dotshiftx:0,f=void 0!==a.scale?a.scale:1,p=void 0!==a.accidentalSlot?a.accidentalSlot:[],m=void 0!==a.shouldExtendStem&&a.shouldExtendStem,g=void 0===a.printAccidentals||a.printAccidentals,v=r.verticalPos,b=0,y=0,x=0;if(void 0===t)e.addFixed(new i("pitch is undefined",0,0,0,{type:"debug"}));else if(""===t)s=new i(null,0,0,v);else{var k=c;if(r.printer_shift){var w="same"===r.printer_shift?1:0;k="down"===o?-n.getSymbolWidth(t)*f+w:n.getSymbolWidth(t)*f-w}var C={scalex:f,scaley:f,thickness:n.symbolHeightInPitches(t)*f,name:r.name};if((s=new i(t,k,n.getSymbolWidth(t)*f,v,C)).stemDir=o,h){var T=v+("down"===o?-7:7)*f;m&&("down"===o&&T>6&&(T=6),"up"===o&&T<6&&(T=6));var S="down"===o?c:c+s.w-.6;e.addRight(new i(h,S,n.getSymbolWidth(h)*f,T,{scalex:f,scaley:f}))}for(y=s.w+d-2+5*u;u>0;u--){var _=1-Math.abs(v)%2;e.addRight(new i("dots.dot",s.w+d-2+5*u,n.getSymbolWidth("dots.dot"),v+_))}}if(s&&(s.highestVert=r.highestVert),g&&r.accidental){var E;switch(r.accidental){case"quartersharp":E="accidentals.halfsharp";break;case"dblsharp":E="accidentals.dblsharp";break;case"sharp":E="accidentals.sharp";break;case"quarterflat":E="accidentals.halfflat";break;case"flat":E="accidentals.flat";break;case"dblflat":E="accidentals.dblflat";break;case"natural":E="accidentals.nat"}for(var M=!1,N=l,A=0;A=6){p[A][0]=v,N=p[A][1],M=!0;break}!1===M&&(N-=n.getSymbolWidth(E)*f+2,p.push([v,N]),b=n.getSymbolWidth(E)*f+2);var B=n.symbolHeightInPitches(E);e.addExtra(new i(E,N,n.getSymbolWidth(E),v,{scalex:f,scaley:f,top:v+B/2,bottom:v-B/2})),x=n.getSymbolWidth(E)/2}return{notehead:s,accidentalshiftx:b,dotshiftx:y,extraLeft:x}}},2525:function(e,t,r){var n=r(1409),i=r(6020),a=r(6658);e.exports=function(e,t){e.el_type="timeSignature";var r=new n(e,0,10,"staff-extra time-signature",t);if("specified"===e.type)for(var s=0,o=0;o",n)),o&&e.addOther(new i(o.start,o.stop,"<",n)),c&&e.addOther(new a(c.start,c.stop))},l.prototype.createDecoration=function(e,t,r,i,a,l,u,d,f,p,m){f||(f={ornamentPosition:"above",volumePosition:p?"above":"below",dynamicPosition:p?"above":"below"}),function(e,t,r,i){for(var a=0;a9&&d++;var m=n/2;"center"!==s.getSymbolAlign(p)&&(m-=s.getSymbolWidth(p)/2),i.addFixedX(new o(p,m,s.getSymbolWidth(p),d))}if("slide"===t[f]&&i.heads[0]){var g=i.heads[0].pitch,v=new o("",-a-15,0,(g-=2)-1),b=new o("",-a-5,0,g+1);i.addFixedX(v),i.addFixedX(b),e.addOther(new c({anchor1:v,anchor2:b,fixedY:!0}))}}return void 0===d&&(d=r),{above:d,below:i.bottom}}(e,t,r,i,a,l,u,d,m);g.above=Math.max(g.above,this.minTop),g.below=Math.min(g.below,d),function(e,t,r,n,i,a,c,l){function h(e,t){"above"===e?n.above+=t:n.below-=t}function u(e){var t;return"above"===e?(t=n.above)c&&(t=c),t}function d(e,n,i){var a=u(n);r.addFixedX(new o(e,t/2,0,a+2,{type:"decoration",klass:"ornament",thickness:3,anchor:i})),h(n,5)}function f(e,n){var i=t/2;"center"!==s.getSymbolAlign(e)&&(i-=s.getSymbolWidth(e)/2);var a=s.symbolHeightInPitches(e)+1,c=u(n);c="above"===n?c+a/2:c-a/2,r.addFixedX(new o(e,i,s.getSymbolWidth(e),c,{klass:"ornament",thickness:s.symbolHeightInPitches(e),position:n})),h(n,a)}for(var p={"+":"scripts.stopped",open:"scripts.open",snap:"scripts.snap",wedge:"scripts.wedge",thumb:"scripts.thumb",shortphrase:"scripts.shortphrase",mediumphrase:"scripts.mediumphrase",longphrase:"scripts.longphrase",trill:"scripts.trill",roll:"scripts.roll",irishroll:"scripts.roll",marcato:"scripts.umarcato",dmarcato:"scripts.dmarcato",umarcato:"scripts.umarcato",turn:"scripts.turn",uppermordent:"scripts.prall",pralltriller:"scripts.prall",mordent:"scripts.mordent",lowermordent:"scripts.mordent",downbow:"scripts.downbow",upbow:"scripts.upbow",fermata:"scripts.ufermata",invertedfermata:"scripts.dfermata",breath:",",coda:"scripts.coda",segno:"scripts.segno"},m=0;mthis.w&&(this.w=e.dx+e.w),this.right[this.right.length]=e,this._addChild(e)},a.prototype.addFixed=function(e){this._addChild(e)},a.prototype.addFixedX=function(e){this._addChild(e)},a.prototype.addCentered=function(e){var t=e.w/2;-tthis.w&&(this.w=e.dx+t),this.right[this.right.length]=e,this._addChild(e)},a.prototype.setLimit=function(e,t){t[e]&&(this.specialY[e]?this.specialY[e]=Math.max(this.specialY[e],t[e]):this.specialY[e]=t[e])},a.prototype._addChild=function(e){e.parent=this,this.children[this.children.length]=e,this.pushTop(e.top),this.pushBottom(e.bottom),this.setLimit("tempoHeightAbove",e),this.setLimit("partHeightAbove",e),this.setLimit("volumeHeightAbove",e),this.setLimit("dynamicHeightAbove",e),this.setLimit("endingHeightAbove",e),this.setLimit("chordHeightAbove",e),this.setLimit("lyricHeightAbove",e),this.setLimit("lyricHeightBelow",e),this.setLimit("chordHeightBelow",e),this.setLimit("volumeHeightBelow",e),this.setLimit("dynamicHeightBelow",e)},a.prototype.pushTop=function(e){void 0!==e&&(void 0===this.top?this.top=e:this.top=Math.max(e,this.top))},a.prototype.pushBottom=function(e){void 0!==e&&(void 0===this.bottom?this.bottom=e:this.bottom=Math.min(e,this.bottom))},a.prototype.setX=function(e){this.x=e;for(var t=0;tthis.max)&&(this.max=e.abcelem.maxpitch))},t.prototype.addBeam=function(e){this.beams.push(e)},t.prototype.setStemDirection=function(){this.average=r(this.total,this.count),this.forceup?this.stemsUp=!0:this.forcedown?this.stemsUp=!1:this.stemsUp=this.average<6,delete this.count,this.total=0},t.prototype.calcDir=function(){this.average=r(this.total,this.elems.length),this.forceup?this.stemsUp=!0:this.forcedown?this.stemsUp=!1:this.stemsUp=this.average<6;for(var e=this.stemsUp?"up":"down",t=0;t0&&this.unalignedWords(e.unalignedWords,n,i,a,s),this.extraText(e,n,i,a,s),e.footer&&r&&this.footer(e.footer,t,n,s)}function s(e,t,r,n,a,s,o){r&&(t&&(r="string"==typeof r?t+r:[{text:t}].concat(r)),i(e,r,"historyfont",a=s?"abcjs-extra-text "+a:"","description",n,{absElemType:"extraText",anchor:"start"},o))}function o(e,t,r,a,s,o,c,l,h,u,d,f){if(r){l=d?"abcjs-extra-text "+l:"";var p=f.calc("A",s,l);if("string"==typeof r)t&&(r=t+"\n"+r),n(e,{marginLeft:a,text:r,font:s,absElemType:"extraText",name:h,"dominant-baseline":"middle",klass:l},f);else{e.push({startGroup:c,klass:l,name:h}),e.push({move:u.info}),t&&(n(e,{marginLeft:a,text:t,font:s,absElemType:"extraText",name:h,"dominant-baseline":"middle"},f),e.push({move:3*p.height/4}));for(var m=0;m0&&this.startVoice.staff.voices[0]===e)},e.exports=t},6891:function(e){e.exports=function(e,t,r,n){this.type="CrescendoElem",this.anchor1=e,this.anchor2=t,this.dir=r,"above"===n?this.dynamicHeightAbove=6:this.dynamicHeightBelow=6,this.pitch=void 0}},3185:function(e){e.exports=function(e,t,r){this.type="DynamicDecoration",this.anchor=e,this.dec=t,"below"===r?this.volumeHeightBelow=6:this.volumeHeightAbove=6,this.pitch=void 0}},8256:function(e){e.exports=function(e,t,r){this.type="EndingElem",this.text=e,this.anchor1=t,this.anchor2=r,this.endingHeightAbove=5,this.pitch=void 0}},3736:function(e){e.exports=function(e,t,r,n,i,a){var s,o=e.text;this.rows=[],t&&this.rows.push({move:t});var c=r.calc("textfont","defined-text");if(""===o)this.rows.push({move:2*c.attr["font-size"]});else if("string"==typeof o)this.rows.push({move:c.attr["font-size"]/2}),this.rows.push({left:n,text:o,font:"textfont",klass:"defined-text",anchor:"start",startChar:e.startChar,endChar:e.endChar,absElemType:"freeText",name:"free-text"}),s=a.calc(o,"textfont","defined-text"),this.rows.push({move:s.height});else if(o){for(var l=0,h=n,u="textfont",d=0;dthis.top&&(this.top=this.pitch2),this.bottom=n,void 0!==this.pitch2&&this.pitch20?this.top+=i.stemHeight:this.bottom+=i.stemHeight),i.dim&&(this.dim=i.dim),i.position&&(this.position=i.position),this.height=i.height?i.height:4,i.top&&(this.top=i.top),i.bottom&&(this.bottom=i.bottom),i.name?this.name=i.name:this.c?this.name=this.c:this.name=this.type,i.realWidth?this.realWidth=i.realWidth:this.realWidth=this.w,this.centerVertically=!1,this.type){case"debug":this.chordHeightAbove=this.height;break;case"lyric":i.position&&"below"===i.position?this.lyricHeightBelow=this.height:this.lyricHeightAbove=this.height;break;case"chord":i.position&&"below"===i.position?this.chordHeightBelow=this.height:this.chordHeightAbove=this.height;break;case"text":void 0===this.pitch?i.position&&"below"===i.position?this.chordHeightBelow=this.height:this.chordHeightAbove=this.height:this.centerVertically=!0;break;case"part":this.partHeightAbove=this.height}};t.prototype.getChordDim=function(){if("debug"===this.type)return null;if(!this.chordHeightAbove&&!this.chordHeightBelow)return null;var e="chord"===this.type?this.realWidth/2:0,t=this.x-e-0;return{left:t,right:t+this.realWidth+0}},t.prototype.invertLane=function(e){void 0===this.lane&&(this.lane=0),this.lane=e-this.lane-1},t.prototype.putChordInLane=function(e){this.lane=e,this.chordHeightAbove?this.chordHeightAbove=1.25*this.height*this.lane:this.chordHeightBelow=1.25*this.height*this.lane},t.prototype.getLane=function(){return void 0===this.lane?0:this.lane},t.prototype.setX=function(e){this.x=e+this.dx},e.exports=t},6994:function(e,t,r){var n=r(1716);e.exports=function(e,t,r,i,a,s,o,c){var l=c.calc("i",r,i);if(""===t)e.push({move:l.height});else{if("string"==typeof t)return void n(e,{marginLeft:s,text:t,font:r,klass:i,marginTop:o.marginTop,anchor:o.anchor,absElemType:o.absElemType,info:o.info,name:a},c);o.marginTop&&e.push({move:o.marginTop});var h=0,u={left:s,anchor:o.anchor,phrases:[]};i&&(u.klass=i),e.push(u);for(var d=0;d0)this.above=!1;else{var e;e=this.anchor1?this.anchor1.pitch:this.anchor2?this.anchor2.pitch:14,this.anchor1&&"down"===this.anchor1.stemDir&&this.anchor2&&"down"===this.anchor2.stemDir?this.above=!0:this.anchor1&&"up"===this.anchor1.stemDir&&this.anchor2&&"up"===this.anchor2.stemDir?this.above=!1:this.anchor1&&this.anchor2?this.above=e>=6:this.anchor1?this.above="down"===this.anchor1.stemDir:this.anchor2?this.above="down"===this.anchor2.stemDir:this.above=e>=6}},t.prototype.calcSlurDirection=function(){if(this.isGrace)this.above=!1;else if(0===this.voiceNumber)this.above=!0;else if(this.voiceNumber>0)this.above=!1;else{var e=!1;this.anchor1&&"down"===this.anchor1.stemDir&&(e=!0),this.anchor2&&"down"===this.anchor2.stemDir&&(e=!0);for(var t=0;te&&(e=this.internalNotes[t].highestVert);e>this.startY&&e>this.endY&&(this.startY=this.endY=e-1)}},e.exports=t},1134:function(e,t,r){var n=r(1716),i=r(6994);e.exports=function(e,t,r,a,s,o,c,l,h,u){if(this.rows=[],e.header&&o){var d=u.calc("X","headerfont","abcjs-header abcjs-meta-top").height;n(this.rows,{marginLeft:c,text:e.header.left,font:"headerfont",klass:"header meta-top",marginTop:-d,info:t.header,name:"header"},u),n(this.rows,{marginLeft:c+s/2,text:e.header.center,font:"headerfont",klass:"header meta-top",marginTop:-d,anchor:"middle",info:t.header,name:"header"},u),n(this.rows,{marginLeft:c+s,text:e.header.right,font:"headerfont",klass:"header meta-top",marginTop:-d,anchor:"end",info:t.header,name:"header"},u)}o&&this.rows.push({move:l.top});var f=r.titleleft?"start":"middle",p=r.titleleft?c:c+s/2;if(e.title){var m=h?"abcjs-title":"";i(this.rows,e.title,"titlefont",m,"title",p,{marginTop:l.title,anchor:f,absElemType:"title",info:t.title},u)}if(a.length)for(var g=0;g0){var v=!(!e.composer&&!e.origin);m=h?"abcjs-rhythm":"",n(this.rows,{marginLeft:c,text:e.rhythm,font:"infofont",klass:m,absElemType:"rhythm",noMove:v,info:t.rhythm,name:"rhythm"},u)}e.composer&&e.composer,e.origin&&e.origin;var b=e.composer?e.composer:"";e.origin&&("string"==typeof b&&"string"==typeof e.origin?b+=" ("+e.origin+")":"string"==typeof b&&"string"!=typeof e.origin?((b=[{text:b}]).push({text:" ("}),(b=b.concat(e.origin)).push({text:")"})):(b.push({text:" ("}),(b=b.concat(e.origin)).push({text:")"}))),b&&(m=h?"abcjs-composer":"",i(this.rows,b,"composerfont",m,"composer",c+s,{anchor:"end",absElemType:"composer",info:t.composer,ingroup:!0},u))}e.author&&e.author.length>0&&(m=h?"abcjs-author":"",i(this.rows,e.author,"composerfont",m,"author",c+s,{anchor:"end",absElemType:"author",info:t.author},u)),e.partOrder&&e.partOrder.length>0&&(m=h?"abcjs-part-order":"",i(this.rows,e.partOrder,"partsfont",m,"part-order",c,{absElemType:"partOrder",info:t.partOrder,anchor:"start"},u))}},2096:function(e){var t=function(e,t,r){this.type="TripletElem",this.anchor1=t,this.number=e,this.durationClass=("d"+Math.round(1e3*t.parent.durationClass)/1e3).replace(/\./,"-"),this.middleElems=[],this.flatBeams=r.flatBeams};t.prototype.isClosed=function(){return!!this.anchor2},t.prototype.middleNote=function(e){this.middleElems.push(e)},t.prototype.setCloseAnchor=function(e){this.anchor2=e,this.anchor1.parent.beam&&"up"!==this.anchor1.stemDir||(this.endingHeightAbove=4)},e.exports=t},3197:function(e){var t=function(e,t){this.children=[],this.beams=[],this.otherchildren=[],this.w=0,this.duplicate=!1,this.voicenumber=e,this.voicetotal=t,this.bottom=7,this.top=7,this.specialY={tempoHeightAbove:0,partHeightAbove:0,volumeHeightAbove:0,dynamicHeightAbove:0,endingHeightAbove:0,chordHeightAbove:0,lyricHeightAbove:0,lyricHeightBelow:0,chordHeightBelow:0,volumeHeightBelow:0,dynamicHeightBelow:0}};t.prototype.addChild=function(e){if("bar"===e.type){for(var t=!0,r=0;t&&r0&&"TempoElement"===t.children[0].type;t.elemset=[],o.beginGroup(e.paper,e.controller);for(var u=0;u=0&&f.setAttribute("class","abcjs-notehead")}}var p=t.type;if(("note"===t.type||"rest"===t.type)&&(t.counters=e.controller.classes.getCurrent(),p=(p+=" d"+Math.round(1e3*t.durationClass)/1e3).replace(/\./g,"-"),t.abcelem.pitches))for(var m=0;m0?g.classList[0]+" ":"";g.setAttribute("class",v+t.overrideClasses)}if(h)t.startChar=t.abcelem.startChar,t.endChar=t.abcelem.endChar,c.add(t,g,!1,l);else{t.elemset.push(g);var b=!1;"note"!==t.type&&"tabNumber"!==t.type||(b=!0),c.add(t,g,b,l)}}else t.elemset.length>0&&c.add(t,t.elemset[0],"note"===t.type,l);if(t.klass&&s(t.elemset,"mark","","#00ff00"),t.hint&&s(t.elemset,"abcjs-hint","",null),t.abcelem.abselem=t,t.heads&&t.heads.length>0){t.notePositions=[];for(var y=0;y=1&&l(e,e.spacing.staffSeparation,v[v.length-1],y.staffGroup);var x=c(e,y.staffGroup,m,b);x.line=p+b,v.push(x),e.paper.closeGroup()}else y.nonMusic&&(t.shouldAddClasses&&(g.klass="abcjs-non-music"),e.paper.openGroup(g),a(e,y.nonMusic,m),e.paper.closeGroup())}return t.reset(),r.bottomText&&r.bottomText.rows&&r.bottomText.rows.length>0&&(t.shouldAddClasses&&(g.klass="abcjs-meta-bottom"),e.paper.openGroup(g),e.moveY(24),a(e,r.bottomText,m),e.paper.closeGroup()),i(e,s,u,h),{staffgroups:v,selectables:m.getElements()}}},9879:function(e,t,r){var n=r(4777);e.exports=function(e,t,r){void 0===t.pitch&&window.console.error("Dynamic Element y-coordinate not set.");var i=n(e,t.anchor.x,t.pitch,t.dec,{scalex:1,scaley:1,klass:e.controller.classes.generate("decoration dynamics"),fill:e.foregroundColor,stroke:"none",name:"dynamics"});return r.wrapSvgEl({el_type:"dynamicDecoration",startChar:-1,endChar:-1,decoration:t.dec},i),[i]}},5947:function(e,t,r){var n=r(6764),i=r(5759),a=r(6454),s=r(7199);e.exports=function(e,t,r,o,c){void 0===t.pitch&&window.console.error("Ending Element y-coordinate not set.");var l=s(e.calcY(t.pitch)),h="";t.anchor1&&(r=s(t.anchor1.x+t.anchor1.w),h+=n("M %f %f L %f %f ",r,l,r,s(l+20))),t.anchor2&&(o=s(t.anchor2.x),h+=n("M %f %f L %f %f ",o,l,o,s(l+20))),h+=n("M %f %f L %f %f ",r,l,o,l),e.paper.openGroup({klass:e.controller.classes.generate("ending"),"data-name":"ending"}),a(e,{path:h,stroke:e.foregroundColor,fill:e.foregroundColor,"data-name":"line"}),t.anchor1&&i(e,{x:s(r+5),y:s(e.calcY(t.pitch-.5)),text:t.text,type:"repeatfont",klass:"ending",anchor:"start",noClass:!0,name:t.text});var u=e.paper.closeGroup();return c.wrapSvgEl({el_type:"ending",startChar:-1,endChar:-1},u),[u]}},9045:function(e,t,r){var n=r(6764),i=r(6454),a=r(7199);function s(e,t,r){return a(e+r*t)}var o=[[3.5,-4.8]],c=[[1.5,-1],[.3,-.3],[-3.5,3.8]],l=[[-1.5,2]],h=[[3,4],[3,-4]],u=[[-3,4],[-3,-4]];function d(e,t){for(var r="",n=0;n1&&s.indexOf(".")<0){var p=a.isInGroup()?"":o.klass;e.paper.openGroup({"data-name":o.name,klass:p});for(var m=0,g=0;g0?t.linewidth+e.lineThickness:t.linewidth-e.lineThickness;t.graphelem=i(e,t.x,u,o,e.calcY(t.pitch2),"abcjs-stem","stem");break;case"ledger":t.graphelem=a(e,t.x,t.x+t.w,t.pitch,"abcjs-ledger","ledger",.35+e.lineThickness)}return 1!==t.scalex&&t.graphelem&&function(e,t,r,n,i,a){e.setAttributeOnElement(t,{style:"transform:scale("+r+","+n+");transform-origin:"+i+"px "+a+"px;"})}(e.paper,t.graphelem,t.scalex,t.scaley,t.x,o),t.graphelem}},7199:function(e){e.exports=function(e){return parseFloat(e.toFixed(2))}},3524:function(e,t,r){var n=r(5741),i=r(5829);function a(e,t,r){this.elements=[],this.paper=e,this.tuneNumber=r,this.selectTypes=t}a.prototype.getElements=function(){return this.elements},a.prototype.add=function(e,t,r,n){if(this.canSelect(e)){var i;i=void 0===this.selectTypes?{selectable:!1,"data-index":this.elements.length}:{selectable:!0,tabindex:0,"data-index":this.elements.length},this.paper.setAttributeOnElement(t,i);var a={absEl:e,svgEl:t,isDraggable:r};void 0!==n&&(a.staffPos=n),this.elements.push(a)}},a.prototype.canSelect=function(e){return!(!1===this.selectTypes||!e||!e.abcelem||!0!==this.selectTypes&&!(void 0===this.selectTypes?"note"===e.abcelem.el_type||"tabNumber"===e.abcelem.el_type:this.selectTypes.indexOf(e.abcelem.el_type)>=0))},a.prototype.wrapSvgEl=function(e,t){var r={tuneNumber:this.tuneNumber,abcelem:e,elemset:[t],highlight:n,unhighlight:i};this.add(r,t,!1)},e.exports=a},4169:function(e){e.exports=function(e,t){var r=Math.round(e.y),n=(e.controller.width-t)/2,i=n+t,a="M "+n+" "+r+" L "+i+" "+r+" L "+i+" "+(r+1)+" L "+n+" "+(r+1)+" L "+n+" "+r+" z";e.paper.pathToBack({path:a,stroke:"rgba(0,0,0,0)",fill:"rgba(0,0,0,255)",class:e.controller.classes.generate("defined-text")})}},7611:function(e){e.exports=function(e,t,r,n){var i=(t+e.padding.left+e.padding.right)*r,a=(e.y+e.padding.bottom)*r;if(e.isPrint&&(a=Math.max(a,1056)),""!==e.ariaLabel){var s="Sheet Music";e.abctune&&e.abctune.metaText&&e.abctune.metaText.title&&(s+=' for "'+e.abctune.metaText.title+'"'),e.paper.setTitle(s);var o=e.ariaLabel?e.ariaLabel:s;e.paper.setAttribute("aria-label",o)}e.paper.insertStyles(".abcjs-dragging-in-progress text, .abcjs-dragging-in-progress tspan {"+["-webkit-touch-callout: none;","-webkit-user-select: none;","-khtml-user-select: none;","-moz-user-select: none;","-ms-user-select: none;","user-select: none;"].join(" ")+"}");var c={overflow:"hidden"};"resize"===n?e.paper.setResponsiveWidth(i,a):(c.width="",c.height=a+"px",r<1?(c.width=i+"px",e.paper.setSize(i/r,a/r)):e.paper.setSize(i,a)),e.paper.setScale(r),e.paper.setParentStyles(c)}},6764:function(e){function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t(e)}e.exports=function(){for(var e,r,n,i,a,s=0,o=arguments[s++],c=[];o;){if(r=/^[^\x25]+/.exec(o))c.push(r[0]);else if(r=/^\x25{2}/.exec(o))c.push("%");else{if(!(r=/^\x25(?:(\d+)\$)?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(o)))throw"Huh ?!";if(null==(e=arguments[r[1]||s++])||null==e)throw"Too few arguments.";if(/[^s]/.test(r[7])&&"number"!=typeof e)throw"Expecting number but found "+t(e);switch(r[7]){case"b":e=e.toString(2);break;case"c":e=String.fromCharCode(e);break;case"d":e=parseInt(e);break;case"e":e=r[6]?e.toExponential(r[6]):e.toExponential();break;case"f":e=r[6]?parseFloat(e).toFixed(r[6]):parseFloat(e);break;case"o":e=e.toString(8);break;case"s":e=(e=String(e))&&r[6]?e.substring(0,r[6]):e;break;case"u":e=Math.abs(e);break;case"x":e=e.toString(16);break;case"X":e=e.toString(16).toUpperCase()}e=/[def]/.test(r[7])&&r[2]&&e>0?"+"+e:e,i=r[3]?"0"==r[3]?"0":r[3][1]:" ",a=r[5]-String(e).length,n=r[5]?str_repeat(i,a):"",c.push(r[4]?e+n:n+e)}o=o.substring(r[0].length)}return c.join("")}},5537:function(e,t,r){var n=r(4331),i=r(129),a=r(3145),s=r(7641),o=r(1547),c=r(3624),l=r(5668);function h(e,t,r,a,s){if(r)for(var o=0;o=0&&v.voices&&u(e,t.voices,v.voices),e.showDebug.indexOf("grid")>=0&&(e.paper.dottedLine({x1:e.padding.left,x2:e.padding.left+e.controller.width,y1:m,y2:m,stroke:"#0000ff"}),o(e,{x:e.padding.left,y:e.calcY(v.originalTop),width:e.controller.width,height:e.calcY(v.originalBottom)-e.calcY(v.originalTop),fill:e.foregroundColor,stroke:e.foregroundColor,"fill-opacity":.1,"stroke-opacity":.1}),d=0,E(v,"chordHeightAbove"),E(v,"chordHeightBelow"),E(v,"dynamicHeightAbove"),E(v,"dynamicHeightBelow"),E(v,"endingHeightAbove"),E(v,"lyricHeightAbove"),E(v,"lyricHeightBelow"),E(v,"partHeightAbove"),E(v,"tempoHeightAbove"),E(v,"volumeHeightAbove"),E(v,"volumeHeightBelow"))),e.moveY(n.STEP,-v.bottom),e.showDebug&&e.showDebug.indexOf("grid")>=0&&e.paper.dottedLine({x1:e.padding.left,x2:e.padding.left+e.controller.width,y1:e.y,y2:e.y,stroke:"#0000aa"})}for(var b=2,y=0,x=0;x6&&(d=0)}}_>1&&(f=t.staffs[0].topLine,p=t.staffs[_-1].bottomLine,c(e,t.startx,.6,f,p,null)),e.y=m}},7865:function(e,t,r){var n=r(6637);e.exports=function(e,t,r,i,a,s,o){var c=e.calcY(i);return n(e,t,r,c,a,s,o)}},7641:function(e,t,r){var n=r(7865);e.exports=function(e,t,r,i,a,s){var o="abcjs-top-line",c=2;a&&(c=a),e.paper.openGroup({prepend:!0,klass:e.controller.classes.generate("abcjs-staff")});var l=0,h=0;if(1===i)n(e,t,r,6,o,null,s+e.lineThickness),l=e.calcY(10),h=e.calcY(2);else for(var u=i-1;u>=0;u--){var d=(u+1)*c;h=e.calcY(d),0===l&&(l=h),n(e,t,r,d,o,null,s+e.lineThickness),o=void 0}return e.paper.closeGroup(),[l,h]}},3987:function(e,t,r){var n=r(2435),i=r(5759);e.exports=function(e,t){var r=t.x;void 0===t.pitch&&window.console.error("Tempo Element y-coordinate not set."),t.tempo.el_type="tempo";var a,s=e.calcY(t.pitch)+2;if(t.tempo.preString){a=i(e,{x:r,y:s,text:t.tempo.preString,type:"tempofont",klass:"abcjs-tempo",anchor:"start",noClass:!0,name:"pre"},!0);var o=e.controller.getTextSize.calc(t.tempo.preString,"tempofont","tempo",a).width;r+=o+o/t.tempo.preString.length}if(t.note){t.note.setX(r);for(var c=0;c.1||(this.scale=void 0),t.staffwidth?(this.staffwidthScreen=t.staffwidth,this.staffwidthPrint=t.staffwidth):(this.staffwidthScreen=740,this.staffwidthPrint=680),this.listeners=[],t.clickListener&&this.addSelectListener(t.clickListener),this.renderer=new a(e),this.renderer.setPaddingOverride(t),t.showDebug&&(this.renderer.showDebug=t.showDebug),t.jazzchords&&(this.jazzchords=t.jazzchords),t.accentAbove&&(this.accentAbove=t.accentAbove),t.germanAlphabet&&(this.germanAlphabet=t.germanAlphabet),t.lineThickness&&(this.lineThickness=t.lineThickness),this.renderer.controller=this,this.renderer.foregroundColor=t.foregroundColor?t.foregroundColor:"currentColor",void 0!==t.ariaLabel&&(this.renderer.ariaLabel=t.ariaLabel),this.renderer.minPadding=t.minPadding?t.minPadding:0,this.reset()};function x(e){for(var t=document.createElementNS("http://www.w3.org/2000/svg","svg"),r=0;r0)for(var o=s.staffGroup.voices[0],c=!1,l=0,h=0;hthis.width+1&&(e.topText=new l(e.metaText,e.metaTextInfo,e.formatting,e.lines,a,this.renderer.isPrint,this.renderer.padding.left,this.renderer.spacing,this.classes.shouldAddClasses,this.getTextSize),e.lines&&e.lines.length>0))for(var s=e.lines.length,o=0;o0)for(var h=c.nonMusic.rows.length,f=0;f0&&c.text[0].center)&&(p.left=a/2+this.renderer.padding.left)}}e.tablatures&&v.layoutTablatures(this.renderer,e);var m=g(this.renderer,this.classes,e,this.width,a,this.responsive,i,this.selectTypes,t,r);if(this.staffgroups=m.staffgroups,this.selectables=m.selectables,this.oneSvgPerLine){var b=this.renderer.paper.svg.parentNode;this.svgs=function(e,t,r,n,i){r||(r="Untitled");var a=t.querySelector("svg");"resize"===n&&(t.style.paddingBottom="");for(var s=a.querySelector("style"),o="resize"===n?a.viewBox.baseVal.width:a.getAttribute("width"),c=t.querySelectorAll("svg > g"),l=0,h=[],u=0;u0&&t.push(e),"abcjs-tab-number"===e)return t.join(" ");if("text instrument-name"===e)return"abcjs-text abcjs-instrument-name";if(null!==this.lineNumber&&t.push("l"+this.lineNumber),null!==this.measureNumber&&t.push("m"+this.measureNumber),null!==this.measureNumber&&t.push("mm"+this.measureTotal()),null!==this.voiceNumber&&t.push("v"+this.voiceNumber),e&&(e.indexOf("note")>=0||e.indexOf("rest")>=0||e.indexOf("lyric")>=0)&&null!==this.noteNumber&&t.push("n"+this.noteNumber),t.length>0){t=(t=t.join(" ")).split(" ");for(var r=0;r0&&(t[r]="abcjs-"+t[r])}return t.join(" ")},e.exports=t},1328:function(e){var t=function(e,t){this.formatting=e,this.classes=t};t.prototype.updateFonts=function(e){e.gchordfont&&(this.formatting.gchordfont=e.gchordfont),e.tripletfont&&(this.formatting.tripletfont=e.tripletfont),e.annotationfont&&(this.formatting.annotationfont=e.annotationfont),e.vocalfont&&(this.formatting.vocalfont=e.vocalfont)},t.prototype.getFamily=function(e){return'"'===e[0]&&'"'===e[e.length-1]?e.substring(1,e.length-1):e},t.prototype.calc=function(e,t){var r;r="string"==typeof e?(r=this.formatting[e])?{face:r.face,size:Math.round(4*r.size/3),decoration:r.decoration,style:r.style,weight:r.weight,box:r.box}:{face:"Arial",size:Math.round(16),decoration:"underline",style:"normal",weight:"normal"}:{face:e.face,size:Math.round(4*e.size/3),decoration:e.decoration,style:e.style,weight:e.weight,box:e.box};var n=this.formatting.fontboxpadding?this.formatting.fontboxpadding:.1;return r.padding=r.size*n,{font:r,attr:{"font-size":r.size,"font-style":r.style,"font-family":this.getFamily(r.face),"font-weight":r.weight,"text-decoration":r.decoration,class:this.classes.generate(t)}}},e.exports=t},9799:function(e){var t=function(e,t){this.getFontAndAttr=e,this.svg=t};t.prototype.updateFonts=function(e){this.getFontAndAttr.updateFonts(e)},t.prototype.attr=function(e,t){return this.getFontAndAttr.calc(e,t)},t.prototype.getFamily=function(e){return'"'===e[0]&&'"'===e[e.length-1]?e.substring(1,e.length-1):e},t.prototype.calc=function(e,t,r,n){var i;i="string"==typeof t?this.attr(t,r):{font:{face:t.face,size:t.size,decoration:t.decoration,style:t.style,weight:t.weight},attr:{"font-size":t.size,"font-style":t.style,"font-family":this.getFamily(t.face),"font-weight":t.weight,"text-decoration":t.decoration,class:this.getFontAndAttr.classes.generate(r)}};var a=this.svg.getTextSize(e,i.attr,n);return i.font.box?{height:a.height+4*i.font.padding,width:a.width+4*i.font.padding}:a},t.prototype.baselineToCenter=function(e,t,r,n,i){return.5*this.calc(e,t,r).height+(i-n-2)*this.attr(t,r).font.size},e.exports=t},2187:function(e){e.exports=function(e,t,r,n){if(e)for(var i=0;i0&&(o.length>0&&" "!==o[o.length-1]&&(o+=" "),o+=t),a.setAttribute("class",o)}}},4331:function(e){var t={FONTEM:360,FONTSIZE:30};t.STEP=93*t.FONTSIZE/720,t.SPACE=10,t.TOPNOTE=15,t.STAVEHEIGHT=100,t.INDENT=50,e.exports=t},8123:function(e){function t(e,t,r,n){if(0===e.indexOf(t)){var i=e.replace(t,""),a=parseInt(i,10);""+a===i&&(r[n]=a)}}e.exports=function(e,r){var n=[];if(e.absEl.elemset){for(var i={},a=0;a=0&&r=0?(i=function(e,t,r){return e.x<=t.offsetX&&e.x+e.width>=t.offsetX&&e.y<=t.offsetY&&e.y+e.height>=t.offsetY||Math.abs(t.layerY/r-t.offsetY)<3?[t.offsetX,t.offsetY]:[t.layerX,t.layerY]}(e.selectables[a].svgEl.getBBox(),t,e.scale),r=i[0],n=i[1]):(i=function(e){var t,r,n=1,i=1,a=e.target.closest("svg"),s=0;return a&&a.viewBox&&a.viewBox.baseVal&&(0!==a.viewBox.baseVal.width&&(n=a.viewBox.baseVal.width/a.clientWidth),0!==a.viewBox.baseVal.height&&(i=a.viewBox.baseVal.height/a.clientHeight),s=a.viewBox.baseVal.y),e.target&&"svg"===e.target.tagName?(t=e.offsetX,r=e.offsetY):(t=e.layerX,r=e.layerY),[t*=n,(r*=i)+s]}(t),a=function(e,t,r){for(var n=9999999,i=-1,a=0;a0;a++){var s=e.selectables[a];if(e.getDim(s),s.dim.leftt&&s.dim.topr)i=a,n=0;else if(s.dim.topr){var o=Math.min(Math.abs(s.dim.left-t),Math.abs(s.dim.right-t));ot){var c=Math.min(Math.abs(s.dim.top-r),Math.abs(s.dim.bottom-r));cMath.abs(t-s.dim.right)?Math.abs(t-s.dim.right):Math.abs(t-s.dim.left),h=Math.abs(r-s.dim.top)>Math.abs(r-s.dim.bottom)?Math.abs(r-s.dim.bottom):Math.abs(r-s.dim.top),u=Math.sqrt(l*l+h*h);u=0&&n<=12?i:-1}(e,r=i[0],n=i[1])),{x:r,y:n,clickedOn:a}}function l(e){if(e&&e.target&&e.touches&&!(e.touches.length<1)){var t=e.target.getBoundingClientRect(),r=e.touches[0].pageX-t.left,n=e.touches[0].pageY-t.top;e.touches[0].offsetX=r,e.touches[0].offsetY=n,e.touches[0].layerX=e.touches[0].pageX,e.touches[0].layerY=e.touches[0].pageY}}function h(e){var t=e;"touchstart"===e.type&&(l(e),e.touches.length>0&&(t=e.touches[0]));var r=c(this,t);r.clickedOn>=0&&("touchstart"===e.type||0===e.button)&&this.selectables[r.clickedOn]&&(this.dragTarget=this.selectables[r.clickedOn],this.dragIndex=r.clickedOn,this.dragMechanism="mouse",this.dragMouseStart={x:r.x,y:r.y},this.dragging&&this.dragTarget.isDraggable&&(function(e,t){if(e){var r=v(e.svg);r[t]=!0,b(e.svg,r)}}(this.renderer.paper,"abcjs-dragging-in-progress"),this.dragTarget.absEl.highlight(void 0,this.dragColor)))}function u(e){var t=e;if("touchmove"===e.type&&(l(e),e.touches.length>0&&(t=e.touches[0])),this.lastTouchMove=e,this.dragTarget&&this.dragging&&this.dragTarget.isDraggable&&"mouse"===this.dragMechanism&&this.dragMouseStart){var r=c(this,t),i=Math.round((r.y-this.dragMouseStart.y)/n.STEP);i!==this.dragYStep&&(this.dragYStep=i,this.dragTarget.svgEl.setAttribute("transform","translate(0,"+i*n.STEP+")"))}}function d(e){var t=e;"touchend"===e.type&&this.lastTouchMove&&(l(this.lastTouchMove),this.lastTouchMove&&this.lastTouchMove.touches&&this.lastTouchMove.touches.length>0&&(t=this.lastTouchMove.touches[0])),this.dragTarget&&(m.bind(this)(),this.dragTarget.absEl&&this.dragTarget.absEl.highlight&&(this.selected=[this.dragTarget.absEl],this.dragTarget.absEl.highlight(void 0,this.selectionColor)),p.bind(this)(this.dragTarget,this.dragYStep,this.selectables.length,this.dragIndex,t),this.dragTarget.svgEl&&this.dragTarget.svgEl.focus&&(this.dragTarget.svgEl.focus(),this.dragTarget=null,this.dragIndex=-1),function(e,t){if(e){var r=v(e.svg);delete r[t],b(e.svg,r)}}(this.renderer.svg,"abcjs-dragging-in-progress"))}function f(e){e>=0&&eo&&ea&&(i=a),i<-a&&(i=-a),i}(x,k,v,w),A=M+Math.floor(N/2),B=M+Math.floor(-N/2),S||(y&&M<6||!y&&M>6)&&(A=6,B=6),[A,B]),f=c(e.stemsUp,r,l);e.addBeam({startX:f[0],endX:f[1],startY:d[0],endY:d[1],dy:t});for(var p=function(e,t,r,n,i){for(var o=[],l=[],h=0;h0&&u.abcelem.beambr&&u.abcelem.beambr<=b+1){l[b].split||(l[b].split=[l[b].x]);var y=c(t,e[h-1],u);l[b].split[l[b].split.length-1]>=y[0]&&(y[0]+=u.w),l[b].split.push(y[0]),l[b].split.push(y[1])}}for(var x=l.length-1;x>=0;x--)if(h===e.length-1||s(e[h+1].abcelem.duration)>-x-4){var k=f,w=p+m*(x+1);l[x].single&&(k=0===h?f+5:f-5,w=a(r.startX,r.startY,r.endX,r.endY,k)+m*(x+1));var C={startX:l[x].x,endX:k,startY:l[x].y,endY:w,dy:i};if(void 0!==l[x].split){var T=l[x].split;C.endX<=T[T.length-1]&&(T[T.length-1]-=u.w),T.push(C.endX),C.split=l[x].split}o.push(C),l=l.slice(0,x)}}}return o}(e.elems,e.stemsUp,e.beams[0],e.isgrace,t),m=0;m0?((i=(r-(n-a*i))/a)*s>50&&(i=50/s),i):null}e.exports=function(e,t,r,a,s,l){var h,u,d=r;for(h=0;hMath.round(d)&&(d=f,s&&(h=-1)))}for(h=0;h=0&&(c.originalTop=c.top,c.originalBottom=c.bottom),a(c,l,"lyricHeightAbove"),a(c,l,"chordHeightAbove",c.specialY.chordLines.above),c.specialY.endingHeightAbove&&(c.specialY.chordHeightAbove?c.top+=2:c.top+=c.specialY.endingHeightAbove+i,l.endingHeightAbove=c.top),c.specialY.dynamicHeightAbove&&c.specialY.volumeHeightAbove?(c.top+=Math.max(c.specialY.dynamicHeightAbove,c.specialY.volumeHeightAbove)+i,l.dynamicHeightAbove=c.top,l.volumeHeightAbove=c.top):(a(c,l,"dynamicHeightAbove"),a(c,l,"volumeHeightAbove")),a(c,l,"partHeightAbove"),a(c,l,"tempoHeightAbove"),c.specialY.lyricHeightBelow&&(c.specialY.lyricHeightBelow+=e.spacing.vocal/n.STEP,l.lyricHeightBelow=c.bottom,c.bottom-=c.specialY.lyricHeightBelow+i),c.specialY.chordHeightBelow){l.chordHeightBelow=c.bottom;var h=c.specialY.chordHeightBelow;c.specialY.chordLines.below&&(h*=c.specialY.chordLines.below),c.bottom-=h+i}c.specialY.volumeHeightBelow&&c.specialY.dynamicHeightBelow?(l.volumeHeightBelow=c.bottom,l.dynamicHeightBelow=c.bottom,c.bottom-=Math.max(c.specialY.volumeHeightBelow,c.specialY.dynamicHeightBelow)+i):c.specialY.volumeHeightBelow?(l.volumeHeightBelow=c.bottom,c.bottom-=c.specialY.volumeHeightBelow+i):c.specialY.dynamicHeightBelow&&(l.dynamicHeightBelow=c.bottom,c.bottom-=c.specialY.dynamicHeightBelow+i),e.showDebug&&e.showDebug.indexOf("box")>=0&&(c.positionY=l);for(var u=0;u0&&(c.top+=f)}c.top+=e.spacing.staffTopMargin/n.STEP,r=2-c.bottom}}},735:function(e,t,r){var n=r(937);function i(e){for(var t=0;t0?0:5e-7)}e.exports=function(e,t,r,s,o){var c,l=0,h=1e3,u=o;s.startx=u;var d,f,p=0;for(r&&console.log("init layout",e),c=0;c1e-7?v.push(s.voices[c]):g.push(s.voices[c]);m=0;var b=0;for(c=0;cu&&(u=n.getNextX(g[c]),m=n.getSpacingUnits(g[c]),b=g[c].spacingduration);l+=m,h=Math.min(h,m),r&&console.log("currentduration: ",p,l,h);var y=void 0;for(c=0;c0){u=w;for(var T=0;Tu&&(u=n.getNextX(s.voices[c]),m=n.getSpacingUnits(s.voices[c]));return function(e){for(var t=0,r=0;r0){var i=n.children.length-1,a=n.children[i];if("bar"===a.abcelem.el_type){var s=a.children[0].x;s>t?t=s:a.children[0].x=t}}}}(s.voices),l+=m,s.setWidth(u),{spacingUnits:l,minSpace:h}}},3294:function(e,t,r){var n=r(3721);function i(e){return e.stemsUp}e.exports=function(e){if(e.anchor1&&e.anchor2){e.hasBeam=!!e.anchor1.parent.beam&&e.anchor1.parent.beam===e.anchor2.parent.beam;var t=e.anchor1.parent.beam;if(!e.hasBeam||t.elems[0]===e.anchor1.parent&&t.elems[t.elems.length-1]===e.anchor2.parent||(e.hasBeam=!1),e.hasBeam){var r=i(t)?e.anchor1.x+e.anchor1.w:e.anchor1.x;e.yTextPos=function(e,t,r){if(0===r.beams.length)return 0;r=r.beams[0];var i=e+(t-e)/2;return n(r.startX,r.startY,r.endX,r.endY,i)}(r,e.anchor2.x,t),e.yTextPos+=i(t)?3:-2,e.xTextPos=(o=r,c=e.anchor2.x,o+(c-o)/2),e.top=e.yTextPos+1,e.bottom=e.yTextPos-2,i(t)&&(e.endingHeightAbove=4)}else{e.startNote=Math.max(e.anchor1.parent.top,9)+4,e.endNote=Math.max(e.anchor2.parent.top,9)+4,"rest"===e.anchor1.parent.type&&"rest"!==e.anchor2.parent.type?e.startNote=e.endNote:"rest"===e.anchor2.parent.type&&"rest"!==e.anchor1.parent.type&&(e.endNote=e.startNote);for(var a=0,s=0;se.startNote||a>e.endNote)&&(e.startNote=a,e.endNote=a),e.flatBeams&&(e.startNote=Math.max(e.startNote,e.endNote),e.endNote=Math.max(e.startNote,e.endNote)),e.yTextPos=e.startNote+(e.endNote-e.startNote)/2,e.xTextPos=e.anchor1.x+(e.anchor2.x+e.anchor2.w-e.anchor1.x)/2,e.top=e.yTextPos+1}}var o,c;delete e.middleElems,delete e.flatBeams}},937:function(e){var t=function(){};t.beginLayout=function(e,t){t.i=0,t.durationindex=0,t.startx=e,t.minx=e,t.nextx=e,t.spacingduration=0},t.layoutEnded=function(e){return e.i>=e.children.length},t.getNextX=function(e){return Math.max(e.minx,e.nextx)},t.getSpacingUnits=function(e){return Math.sqrt(8*e.spacingduration)},t.layoutOneItem=function(e,t,r,n,i){var a=r.children[r.i];if(!a)return 0;var s=e-r.minx,o=r.durationindex+a.duration>0?n:0;if("note"===a.abcelem.el_type&&!a.abcelem.rest&&0!==r.voicenumber&&i){var c=i.children[i.i],l=c&&(a.abcelem.maxpitch<=c.abcelem.maxpitch+1&&a.abcelem.maxpitch>=c.abcelem.minpitch-1||a.abcelem.minpitch<=c.abcelem.maxpitch+1&&a.abcelem.minpitch>=c.abcelem.minpitch-1);if(l&&a.abcelem.minpitch===c.abcelem.minpitch&&a.abcelem.maxpitch===c.abcelem.maxpitch&&c.heads&&c.heads.length>0&&a.heads&&a.heads.length>0&&c.heads[0].c===a.heads[0].c&&(l=!1),l){var h=c.heads&&c.heads.length>0?c.heads[0].realWidth:c.fixed.w;a.adjustedWidth||(a.adjustedWidth=h+a.w),a.w=a.adjustedWidth;for(var u=0;u0&&t.putChordInLane(n),void(e[n]=r.right);e.push(r.right),t.putChordInLane(e.length-1)}}function c(e){for(var t=0,r=0;r=0;r--)(n=e[t].children[r]).chordHeightBelow&&o(a,n)}return(i.length>1||a.length>1)&&function(e,t,r){for(var n=0;n=0};a.prototype.reset=function(){this.paper.clear(),this.y=0,this.abctune=null,this.path=null,this.isPrint=!1,this.lineThickness=0,this.initVerticalSpace()},a.prototype.newTune=function(e){this.abctune=e,this.setVerticalSpace(e.formatting),this.isPrint="print"===e.media,this.setPadding(e)},a.prototype.setLineThickness=function(e){this.lineThickness=e},a.prototype.setPaddingOverride=function(e){this.paddingOverride={top:e.paddingtop,bottom:e.paddingbottom,right:e.paddingright,left:e.paddingleft}},a.prototype.setPadding=function(e){function t(t,r,n,i,a){void 0!==e.formatting[n]?t.padding[r]=e.formatting[n]:void 0!==t.paddingOverride[r]?t.padding[r]=t.paddingOverride[r]:t.isPrint?t.padding[r]=i:t.padding[r]=a}t(this,"top","topmargin",38,15),t(this,"bottom","botmargin",38,15),t(this,"left","leftmargin",68,15),t(this,"right","rightmargin",68,15)},a.prototype.adjustNonScaledItems=function(e){this.padding.top/=e,this.padding.bottom/=e,this.padding.left/=e,this.padding.right/=e,this.abctune.formatting.headerfont.size/=e,this.abctune.formatting.footerfont.size/=e},a.prototype.initVerticalSpace=function(){this.spacing={composer:7.56,graceBefore:8.67,graceInside:10.67,graceAfter:16,info:0,lineSkipFactor:1.1,music:7.56,paragraphSkipFactor:.4,parts:11.33,slurHeight:1,staffSeparation:61.33,staffTopMargin:0,stemHeight:36.67,subtitle:3.78,systemStaffSeparation:48,text:18.9,title:7.56,top:30.24,vocal:0,words:0}},a.prototype.setVerticalSpace=function(e){void 0!==e.staffsep&&(this.spacing.staffSeparation=4*e.staffsep/3),void 0!==e.composerspace&&(this.spacing.composer=4*e.composerspace/3),void 0!==e.partsspace&&(this.spacing.parts=4*e.partsspace/3),void 0!==e.textspace&&(this.spacing.text=4*e.textspace/3),void 0!==e.musicspace&&(this.spacing.music=4*e.musicspace/3),void 0!==e.titlespace&&(this.spacing.title=4*e.titlespace/3),void 0!==e.sysstaffsep&&(this.spacing.systemStaffSeparation=4*e.sysstaffsep/3),void 0!==e.stafftopmargin&&(this.spacing.staffTopMargin=4*e.stafftopmargin/3),void 0!==e.subtitlespace&&(this.spacing.subtitle=4*e.subtitlespace/3),void 0!==e.topspace&&(this.spacing.top=4*e.topspace/3),void 0!==e.vocalspace&&(this.spacing.vocal=4*e.vocalspace/3),void 0!==e.wordsspace&&(this.spacing.words=4*e.wordsspace/3)},a.prototype.calcY=function(e){return this.y-e*n.STEP},a.prototype.moveY=function(e,t){void 0===t&&(t=1),this.y+=e*t},a.prototype.absolutemoveY=function(e){this.y=e},e.exports=a},4101:function(e){var t="http://www.w3.org/2000/svg";function r(e){this.svg=s(),this.currentGroup=[],e.appendChild(this.svg)}function n(e,t,r){var n=r-e;return"M "+e+" "+t+" l "+n+" 0 l 0 1 l "+-n+" 0 z "}function i(e,t,r){var n=r-t;return"M "+e+" "+t+" l 0 "+n+" l 1 0 l 0 "+-n+" z "}r.prototype.clear=function(){if(this.svg){var e=this.svg.parentNode;this.svg=s(),this.currentGroup=[],e&&(e.innerHTML="",e.appendChild(this.svg))}},r.prototype.setTitle=function(e){var t=document.createElement("title"),r=document.createTextNode(e);t.appendChild(r),this.svg.insertBefore(t,this.svg.firstChild)},r.prototype.setResponsiveWidth=function(e,t){if(this.svg.setAttribute("viewBox","0 0 "+e+" "+t),this.svg.setAttribute("preserveAspectRatio","xMinYMin meet"),this.svg.removeAttribute("height"),this.svg.removeAttribute("width"),this.svg.style.display="inline-block",this.svg.style.position="absolute",this.svg.style.top="0",this.svg.style.left="0",this.svg.parentNode){var r=this.svg.parentNode.getAttribute("class");r?r.indexOf("abcjs-container")<0&&this.svg.parentNode.setAttribute("class",r+" abcjs-container"):this.svg.parentNode.setAttribute("class","abcjs-container"),this.svg.parentNode.style.display="inline-block",this.svg.parentNode.style.position="relative",this.svg.parentNode.style.width="100%";var n=t/e*100;this.svg.parentNode.style["padding-bottom"]=n+"%",this.svg.parentNode.style["vertical-align"]="middle",this.svg.parentNode.style.overflow="hidden"}},r.prototype.setSize=function(e,t){this.svg.setAttribute("width",e),this.svg.setAttribute("height",t)},r.prototype.setAttribute=function(e,t){this.svg.setAttribute(e,t)},r.prototype.setScale=function(e){1!==e?(this.svg.style.transform="scale("+e+","+e+")",this.svg.style["-ms-transform"]="scale("+e+","+e+")",this.svg.style["-webkit-transform"]="scale("+e+","+e+")",this.svg.style["transform-origin"]="0 0",this.svg.style["-ms-transform-origin-x"]="0",this.svg.style["-ms-transform-origin-y"]="0",this.svg.style["-webkit-transform-origin-x"]="0",this.svg.style["-webkit-transform-origin-y"]="0"):(this.svg.style.transform="",this.svg.style["-ms-transform"]="",this.svg.style["-webkit-transform"]="")},r.prototype.insertStyles=function(e){var r=document.createElementNS(t,"style");r.textContent=e,this.svg.insertBefore(r,this.svg.firstChild)},r.prototype.setParentStyles=function(e){for(var t in e)e.hasOwnProperty(t)&&this.svg.parentNode&&(this.svg.parentNode.style[t]=e[t]);this.dummySvg&&(document.querySelector("body").removeChild(this.dummySvg),this.dummySvg=null)},r.prototype.rect=function(e){var t=[],r=e.x,a=e.y,s=e.x+e.width,o=e.y+e.height;return t.push(n(r,a,s)),t.push(n(r,o,s)),t.push(i(s,a,o)),t.push(i(r,o,a)),this.path({path:t.join(" "),stroke:"none","data-name":e["data-name"]})},r.prototype.dottedLine=function(e){var r=document.createElementNS(t,"line");r.setAttribute("x1",e.x1),r.setAttribute("x2",e.x2),r.setAttribute("y1",e.y1),r.setAttribute("y2",e.y2),r.setAttribute("stroke",e.stroke),r.setAttribute("stroke-dasharray","5,5"),this.svg.insertBefore(r,this.svg.firstChild)},r.prototype.rectBeneath=function(e){var r=document.createElementNS(t,"rect");r.setAttribute("x",e.x),r.setAttribute("width",e.width),r.setAttribute("y",e.y),r.setAttribute("height",e.height),e.stroke&&r.setAttribute("stroke",e.stroke),e["stroke-opacity"]&&r.setAttribute("stroke-opacity",e["stroke-opacity"]),e.fill&&r.setAttribute("fill",e.fill),e["fill-opacity"]&&r.setAttribute("fill-opacity",e["fill-opacity"]),this.svg.insertBefore(r,this.svg.firstChild)},r.prototype.text=function(e,r,n){var i=document.createElementNS(t,"text");for(var a in i.setAttribute("stroke","none"),r)r.hasOwnProperty(a)&&i.setAttribute(a,r[a]);for(var s=(""+e).split("\n"),o=0;o0?this.currentGroup[0].removeChild(r):this.svg.removeChild(r)),n&&(a[n]=i),i},r.prototype.openGroup=function(e){e=e||{};var r=document.createElementNS(t,"g");return e.klass&&r.setAttribute("class",e.klass),e.fill&&r.setAttribute("fill",e.fill),e.stroke&&r.setAttribute("stroke",e.stroke),e["data-name"]&&r.setAttribute("data-name",e["data-name"]),e.prepend?this.prepend(r):this.append(r),this.currentGroup.unshift(r),r},r.prototype.closeGroup=function(){var e=this.currentGroup.shift();return e&&0===e.children.length?(e.parentElement.removeChild(e),null):e},r.prototype.path=function(e){var r=document.createElementNS(t,"path");for(var n in e)e.hasOwnProperty(n)&&("path"===n?r.setAttributeNS(null,"d",e.path):"klass"===n?r.setAttributeNS(null,"class",e[n]):void 0!==e[n]&&r.setAttributeNS(null,n,e[n]));return this.append(r),r},r.prototype.pathToBack=function(e){var r=document.createElementNS(t,"path");for(var n in e)e.hasOwnProperty(n)&&("path"===n?r.setAttributeNS(null,"d",e.path):"klass"===n?r.setAttributeNS(null,"class",e[n]):r.setAttributeNS(null,n,e[n]));return this.prepend(r),r},r.prototype.lineToBack=function(e){for(var r=document.createElementNS(t,"line"),n=Object.keys(e),i=0;i0?this.currentGroup[0].appendChild(e):this.svg.appendChild(e)},r.prototype.prepend=function(e){this.currentGroup.length>0?this.currentGroup[0].appendChild(e):this.svg.insertBefore(e,this.svg.firstChild)},r.prototype.setAttributeOnElement=function(e,t){for(var r in t)t.hasOwnProperty(r)&&e.setAttributeNS(null,r,t[r])},r.prototype.moveElementToChild=function(e,t){e.appendChild(t)},e.exports=r},1185:function(e){e.exports="6.4.1"}},t={},r=function r(n){var i=t[n];if(void 0!==i)return i.exports;var a=t[n]={exports:{}};return e[n](a,a.exports,r),a.exports}(1045),r;var e,t,r})); \ No newline at end of file diff --git a/dist/abcjs-basic.js b/dist/abcjs-basic.js index 6fc4e2998..31be0a03a 100644 --- a/dist/abcjs-basic.js +++ b/dist/abcjs-basic.js @@ -13577,8 +13577,8 @@ ChordTrack.prototype.resolveChords = function (startTime, endTime) { if (p > 0 && currentChordsExpanded[p - 1] && currentChordsExpanded[p] && currentChordsExpanded[p - 1].boom !== currentChordsExpanded[p].boom) firstBoom = true; var type = thisPattern[p]; var isBoom = type.indexOf('boom') >= 0; - // If we changed chords at a time when we're not expecting a bass note, then add an extra bass note in. - var newBass = !isBoom && p !== 0 && (!currentChordsExpanded[p - 1] || currentChordsExpanded[p - 1].boom !== currentChordsExpanded[p].boom); + // If we changed chords at a time when we're not expecting a bass note, then add an extra bass note in if the first thing in the pattern is a bass note. + var newBass = !isBoom && p !== 0 && thisPattern[0].indexOf('boom') >= 0 && (!currentChordsExpanded[p - 1] || currentChordsExpanded[p - 1].boom !== currentChordsExpanded[p].boom); var pitches = resolvePitch(currentChordsExpanded[p], type, firstBoom, newBass); if (isBoom) firstBoom = false; for (var oo = 0; oo < pitches.length; oo++) { @@ -14261,7 +14261,10 @@ function CreateSynth() { self.sequenceCallback = params.sequenceCallback; self.callbackContext = params.callbackContext; self.onEnded = params.onEnded; - self.meterFraction = options.visualObj.getMeterFraction(); + self.meterFraction = options.visualObj ? options.visualObj.getMeterFraction() : { + den: 1 + }; // If we are given a sequence instead of a regular visual obj, then don't do the swing + var allNotes = {}; var cached = []; var errorNotes = []; @@ -26376,7 +26379,7 @@ module.exports = Svg; \********************/ /***/ (function(module) { -var version = '6.4.0'; +var version = '6.4.1'; module.exports = version; /***/ }) diff --git a/dist/abcjs-basic.js.map b/dist/abcjs-basic.js.map index baf505f01..daef60b1e 100644 --- a/dist/abcjs-basic.js.map +++ b/dist/abcjs-basic.js.map @@ -1 +1 @@ -{"version":3,"file":"abcjs-basic.js","mappings":"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EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,KAAK,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAC7G,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,KAAK,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IACvF,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,KAAK,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAC5E,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,KAAK,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IACvF,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,KAAK,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAClG,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,KAAK,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAC7G,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,KAAK,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IACv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I;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAA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AAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAC9+B,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,IAAI;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAC3zC,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAM,CAAC;EAC/2D,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAChqE,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACx2D,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACv1D,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACtvD,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACnwD,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACtsD,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC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C,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACz9C,WAAW,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACx+B,YAAY,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAC1iD,YAAY,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAChlE,YAAY,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACtiF,aAAa,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACzvG,mBAAmB,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,IAAI;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAC/+E,uBAAuB,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,IAAI;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAClvD,iBAAiB,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,GAAG;IAAE2O,CAAC,EAAE;EAAK,CAAC;EAC3sC,kBAAkB,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,IAAI;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACzwC,sBAAsB,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAChuC,qBAAqB,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,IAAI;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAC/9E,sBAAsB,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,IAAI;IAAE2O,CAAC,EAAE;EAAM,CAAC;EAClnE,UAAU,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,IAAI;IAAE2O,CAAC,EAAE;EAAK,CAAC;EACpS,eAAe,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAM,CAAC;EACz+D,iBAAiB,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAM,CAAC;EACviC,gBAAgB,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAA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,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAM,CAAC;EACzrC,kBAAkB,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI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,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI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AAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAM,CAAC;EAC1lC,eAAe,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAA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EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAM,CAAC;EACz8C,eAAe,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAM,CAAC;EAC3/F,eAAe,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,EAAE;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACl1F,cAAc,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,G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IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAM,CAAC;EAC3gC,eAAe,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAI,CAAC;EACplC,kBAAkB,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,CAAC;IAAE2O,CAAC,EAAE;EAAG,CAAC;EAC7R,iBAAiB,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAChmD,YAAY,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAM,CAAC;EACv0B,aAAa,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACn7C,aAAa,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAClgE,aAAa,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAC3uF,YAAY,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAA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,CAAC;EAC5b,aAAa,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACh/C,aAAa,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAC/6D,aAAa,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACt/E,SAAS,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAM,CAAC;EACzkI,SAAS,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAC3rD,SAAS,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACllI,YAAY,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,EAAE;IAAE2O,CAAC,EAAE;EAAM,CAAC;EAC3qB,SAAS,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACl9L,UAAU,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAChxL,gBAAgB,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAC/+C,aAAa,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE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IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAClxD,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAM,CAAC;EAChyE,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACr9D,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,IAAI;IAAE2O,CAAC,EAAE;EAAM,CAAC;EACrxC,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAM,CAAC;EACz5C,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAM,CAAC;EAC3xC,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IA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AC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,IAAI;IAAE2O,CAAC,EAAE;EAAM,CAAC;EAClnB,eAAe,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI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AAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,G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","sources":["webpack://ABCJS/webpack/universalModuleDefinition","webpack://ABCJS/./index.js","webpack://ABCJS/./src/api/abc_animation.js","webpack://ABCJS/./src/api/abc_tablatures.js","webpack://ABCJS/./src/api/abc_timing_callbacks.js","webpack://ABCJS/./src/api/abc_tunebook.js","webpack://ABCJS/./src/api/abc_tunebook_svg.js","webpack://ABCJS/./src/api/tune-metrics.js","webpack://ABCJS/./src/const/key-accidentals.js","webpack://ABCJS/./src/const/relative-major.js","webpack://ABCJS/./src/data/abc_tune.js","webpack://ABCJS/./src/data/deline-tune.js","webpack://ABCJS/./src/edit/abc_editarea.js","webpack://ABCJS/./src/edit/abc_editor.js","webpack://ABCJS/./src/midi/abc_midi_create.js","webpack://ABCJS/./src/parse/abc_common.js","webpack://ABCJS/./src/parse/abc_parse.js","webpack://ABCJS/./src/parse/abc_parse_book.js","webpack://ABCJS/./src/parse/abc_parse_directive.js","webpack://ABCJS/./src/parse/abc_parse_header.js","webpack://ABCJS/./src/parse/abc_parse_key_voice.js","webpack://ABCJS/./src/parse/abc_parse_music.js","webpack://ABCJS/./src/parse/abc_parse_settings.js","webpack://ABCJS/./src/parse/abc_tokenizer.js","webpack://ABCJS/./src/parse/abc_transpose.js","webpack://ABCJS/./src/parse/all-notes.js","webpack://ABCJS/./src/parse/transpose-chord.js","webpack://ABCJS/./src/parse/tune-builder.js","webpack://ABCJS/./src/parse/wrap_lines.js","webpack://ABCJS/./src/str/output.js","webpack://ABCJS/./src/synth/abc_midi_flattener.js","webpack://ABCJS/./src/synth/abc_midi_renderer.js","webpack://ABCJS/./src/synth/abc_midi_sequencer.js","webpack://ABCJS/./src/synth/active-audio-context.js","webpack://ABCJS/./src/synth/cents-to-factor.js","webpack://ABCJS/./src/synth/chord-track.js","webpack://ABCJS/./src/synth/create-note-map.js","webpack://ABCJS/./src/synth/create-synth-control.js","webpack://ABCJS/./src/synth/create-synth.js","webpack://ABCJS/./src/synth/download-buffer.js","webpack://ABCJS/./src/synth/get-midi-file.js","webpack://ABCJS/./src/synth/images/loading.svg.js","webpack://ABCJS/./src/synth/images/loop.svg.js","webpack://ABCJS/./src/synth/images/pause.svg.js","webpack://ABCJS/./src/synth/images/play.svg.js","webpack://ABCJS/./src/synth/images/reset.svg.js","webpack://ABCJS/./src/synth/instrument-index-to-name.js","webpack://ABCJS/./src/synth/load-note.js","webpack://ABCJS/./src/synth/note-to-midi.js","webpack://ABCJS/./src/synth/pitch-to-note-name.js","webpack://ABCJS/./src/synth/pitches-to-perc.js","webpack://ABCJS/./src/synth/place-note.js","webpack://ABCJS/./src/synth/play-event.js","webpack://ABCJS/./src/synth/register-audio-context.js","webpack://ABCJS/./src/synth/sounds-cache.js","webpack://ABCJS/./src/synth/supports-audio.js","webpack://ABCJS/./src/synth/synth-controller.js","webpack://ABCJS/./src/synth/synth-sequence.js","webpack://ABCJS/./src/tablatures/instruments/string-patterns.js","webpack://ABCJS/./src/tablatures/instruments/string-tablature.js","webpack://ABCJS/./src/tablatures/instruments/tab-note.js","webpack://ABCJS/./src/tablatures/instruments/tab-notes.js","webpack://ABCJS/./src/tablatures/instruments/tab-string-patterns.js","webpack://ABCJS/./src/tablatures/instruments/tab-string.js","webpack://ABCJS/./src/tablatures/tab-absolute-elements.js","webpack://ABCJS/./src/tablatures/tab-common.js","webpack://ABCJS/./src/tablatures/tab-renderer.js","webpack://ABCJS/./src/write/creation/abstract-engraver.js","webpack://ABCJS/./src/write/creation/add-chord.js","webpack://ABCJS/./src/write/creation/add-text-if.js","webpack://ABCJS/./src/write/creation/calc-height.js","webpack://ABCJS/./src/write/creation/create-clef.js","webpack://ABCJS/./src/write/creation/create-key-signature.js","webpack://ABCJS/./src/write/creation/create-note-head.js","webpack://ABCJS/./src/write/creation/create-time-signature.js","webpack://ABCJS/./src/write/creation/decoration.js","webpack://ABCJS/./src/write/creation/elements/absolute-element.js","webpack://ABCJS/./src/write/creation/elements/beam-element.js","webpack://ABCJS/./src/write/creation/elements/bottom-text.js","webpack://ABCJS/./src/write/creation/elements/brace-element.js","webpack://ABCJS/./src/write/creation/elements/crescendo-element.js","webpack://ABCJS/./src/write/creation/elements/dynamic-decoration.js","webpack://ABCJS/./src/write/creation/elements/ending-element.js","webpack://ABCJS/./src/write/creation/elements/free-text.js","webpack://ABCJS/./src/write/creation/elements/glissando-element.js","webpack://ABCJS/./src/write/creation/elements/relative-element.js","webpack://ABCJS/./src/write/creation/elements/rich-text.js","webpack://ABCJS/./src/write/creation/elements/separator.js","webpack://ABCJS/./src/write/creation/elements/staff-group-element.js","webpack://ABCJS/./src/write/creation/elements/subtitle.js","webpack://ABCJS/./src/write/creation/elements/tempo-element.js","webpack://ABCJS/./src/write/creation/elements/tie-element.js","webpack://ABCJS/./src/write/creation/elements/top-text.js","webpack://ABCJS/./src/write/creation/elements/triplet-element.js","webpack://ABCJS/./src/write/creation/elements/voice-element.js","webpack://ABCJS/./src/write/creation/glyphs.js","webpack://ABCJS/./src/write/creation/translate-chord.js","webpack://ABCJS/./src/write/draw/absolute.js","webpack://ABCJS/./src/write/draw/beam.js","webpack://ABCJS/./src/write/draw/brace.js","webpack://ABCJS/./src/write/draw/crescendo.js","webpack://ABCJS/./src/write/draw/debug-box.js","webpack://ABCJS/./src/write/draw/draw.js","webpack://ABCJS/./src/write/draw/dynamics.js","webpack://ABCJS/./src/write/draw/ending.js","webpack://ABCJS/./src/write/draw/glissando.js","webpack://ABCJS/./src/write/draw/group-elements.js","webpack://ABCJS/./src/write/draw/non-music.js","webpack://ABCJS/./src/write/draw/print-line.js","webpack://ABCJS/./src/write/draw/print-path.js","webpack://ABCJS/./src/write/draw/print-stem.js","webpack://ABCJS/./src/write/draw/print-symbol.js","webpack://ABCJS/./src/write/draw/relative.js","webpack://ABCJS/./src/write/draw/round-number.js","webpack://ABCJS/./src/write/draw/selectables.js","webpack://ABCJS/./src/write/draw/separator.js","webpack://ABCJS/./src/write/draw/set-paper-size.js","webpack://ABCJS/./src/write/draw/sprintf.js","webpack://ABCJS/./src/write/draw/staff-group.js","webpack://ABCJS/./src/write/draw/staff-line.js","webpack://ABCJS/./src/write/draw/staff.js","webpack://ABCJS/./src/write/draw/tempo.js","webpack://ABCJS/./src/write/draw/text.js","webpack://ABCJS/./src/write/draw/tie.js","webpack://ABCJS/./src/write/draw/triplet.js","webpack://ABCJS/./src/write/draw/voice.js","webpack://ABCJS/./src/write/engraver-controller.js","webpack://ABCJS/./src/write/helpers/classes.js","webpack://ABCJS/./src/write/helpers/get-font-and-attr.js","webpack://ABCJS/./src/write/helpers/get-text-size.js","webpack://ABCJS/./src/write/helpers/set-class.js","webpack://ABCJS/./src/write/helpers/spacing.js","webpack://ABCJS/./src/write/interactive/create-analysis.js","webpack://ABCJS/./src/write/interactive/find-selectable-element.js","webpack://ABCJS/./src/write/interactive/highlight.js","webpack://ABCJS/./src/write/interactive/selection.js","webpack://ABCJS/./src/write/interactive/unhighlight.js","webpack://ABCJS/./src/write/layout/beam.js","webpack://ABCJS/./src/write/layout/get-bar-y-at.js","webpack://ABCJS/./src/write/layout/get-left-edge-of-staff.js","webpack://ABCJS/./src/write/layout/layout-in-grid.js","webpack://ABCJS/./src/write/layout/layout.js","webpack://ABCJS/./src/write/layout/set-upper-and-lower-elements.js","webpack://ABCJS/./src/write/layout/staff-group.js","webpack://ABCJS/./src/write/layout/triplet.js","webpack://ABCJS/./src/write/layout/voice-elements.js","webpack://ABCJS/./src/write/layout/voice.js","webpack://ABCJS/./src/write/renderer.js","webpack://ABCJS/./src/write/svg.js","webpack://ABCJS/./version.js","webpack://ABCJS/webpack/bootstrap","webpack://ABCJS/webpack/before-startup","webpack://ABCJS/webpack/startup","webpack://ABCJS/webpack/after-startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"abcjs\"] = factory();\n\telse\n\t\troot[\"ABCJS\"] = factory();\n})(this, function() {\nreturn ","/**!\nCopyright (c) 2009-2023 Paul Rosen and Gregory Dyke\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n **This text is from: http://opensource.org/licenses/MIT**\n!**/\nvar version = require('./version');\nvar animation = require('./src/api/abc_animation');\nvar tuneBook = require('./src/api/abc_tunebook');\nvar sequence = require('./src/synth/abc_midi_sequencer');\nvar strTranspose = require('./src/str/output');\n\nvar abcjs = {};\n\nabcjs.signature = \"abcjs-basic v\" + version;\n\nObject.keys(animation).forEach(function (key) {\n\tabcjs[key] = animation[key];\n});\n\nObject.keys(tuneBook).forEach(function (key) {\n\tabcjs[key] = tuneBook[key];\n});\n\nabcjs.renderAbc = require('./src/api/abc_tunebook_svg');\nabcjs.tuneMetrics = require('./src/api/tune-metrics');\nabcjs.TimingCallbacks = require('./src/api/abc_timing_callbacks');\n\nvar glyphs = require('./src/write/creation/glyphs');\nabcjs.setGlyph = glyphs.setSymbol;\nabcjs.strTranspose = strTranspose;\n\nvar CreateSynth = require('./src/synth/create-synth');\nvar instrumentIndexToName = require('./src/synth/instrument-index-to-name');\nvar pitchToNoteName = require('./src/synth/pitch-to-note-name');\nvar SynthSequence = require('./src/synth/synth-sequence');\nvar CreateSynthControl = require('./src/synth/create-synth-control');\nvar registerAudioContext = require('./src/synth/register-audio-context');\nvar activeAudioContext = require('./src/synth/active-audio-context');\nvar supportsAudio = require('./src/synth/supports-audio');\nvar playEvent = require('./src/synth/play-event');\nvar SynthController = require('./src/synth/synth-controller');\nvar getMidiFile = require('./src/synth/get-midi-file');\nvar midiRenderer = require('./src/synth/abc_midi_renderer');\n\nabcjs.synth = {\n\tCreateSynth: CreateSynth,\n\tinstrumentIndexToName: instrumentIndexToName,\n\tpitchToNoteName: pitchToNoteName,\n\tSynthController: SynthController,\n\tSynthSequence: SynthSequence,\n\tCreateSynthControl: CreateSynthControl,\n\tregisterAudioContext: registerAudioContext,\n\tactiveAudioContext: activeAudioContext,\n\tsupportsAudio: supportsAudio,\n\tplayEvent: playEvent,\n\tgetMidiFile: getMidiFile,\n\tsequence: sequence,\n\tmidiRenderer: midiRenderer,\n};\n\nabcjs['Editor'] = require('./src/edit/abc_editor');\nabcjs['EditArea'] = require('./src/edit/abc_editarea');\n\nmodule.exports = abcjs;\n","// abc_animation.js: handles animating the music in real time.\n\nvar TimingCallbacks = require('./abc_timing_callbacks');\n\nvar animation = {};\n\n(function() {\n\t\"use strict\";\n\n\tvar timer;\n\tvar cursor;\n\tanimation.startAnimation = function(paper, tune, options) {\n\t\t//options.bpm\n\t\t//options.showCursor\n\t\t//options.hideCurrentMeasure\n\t\t//options.hideFinishedMeasures\n\t\tif (timer) {\n\t\t\ttimer.stop();\n\t\t\ttimer = undefined;\n\t\t}\n\n\t\tif (options.showCursor) {\n\t\t\tcursor = paper.querySelector('.abcjs-cursor');\n\t\t\tif (!cursor) {\n\t\t\t\tcursor = document.createElement('DIV');\n\t\t\t\tcursor.className = 'abcjs-cursor cursor';\n\t\t\t\tcursor.style.position = 'absolute';\n\n\t\t\t\tpaper.appendChild(cursor);\n\t\t\t\tpaper.style.position = 'relative';\n\t\t\t}\n\t\t}\n\n\t\tfunction hideMeasures(elements) {\n\t\t\tfor (var i = 0; i < elements.length; i++) {\n\t\t\t\tvar element = elements[i];\n\t\t\t\tif (!element.classList.contains('abcjs-bar'))\n\t\t\t\t\telement.style.display = \"none\";\n\t\t\t}\n\t\t}\n\n\t\tvar lastMeasure;\n\t\tfunction disappearMeasuresAfter(selector) {\n\t\t\tif (lastMeasure) {\n\t\t\t\tvar elements = paper.querySelectorAll(lastMeasure);\n\t\t\t\thideMeasures(elements);\n\t\t\t}\n\t\t\tlastMeasure = selector;\n\t\t}\n\n\t\tfunction disappearMeasuresBefore(selector) {\n\t\t\tvar elements = paper.querySelectorAll(selector);\n\t\t\thideMeasures(elements);\n\t\t}\n\n\t\tfunction measureCallback(selector) {\n\t\t\tif (options.hideCurrentMeasure) {\n\t\t\t\tdisappearMeasuresBefore(selector);\n\t\t\t} else if (options.hideFinishedMeasures) {\n\t\t\t\tdisappearMeasuresAfter(selector);\n\t\t\t}\n\t\t}\n\n\t\tfunction getLineAndMeasure(element) {\n\t\t\treturn '.abcjs-l' + element.line + '.abcjs-m' + element.measureNumber;\n\t\t}\n\n\t\tfunction setCursor(range) {\n\t\t\tif (range) {\n\t\t\t\tif (range.measureStart) {\n\t\t\t\t\tvar selector = getLineAndMeasure(range);\n\t\t\t\t\tif (selector)\n\t\t\t\t\t\tmeasureCallback(selector);\n\t\t\t\t}\n\t\t\t\tif (cursor) {\n\t\t\t\t\tcursor.style.left = range.left + \"px\";\n\t\t\t\t\tcursor.style.top = range.top + \"px\";\n\t\t\t\t\tcursor.style.width = range.width + \"px\";\n\t\t\t\t\tcursor.style.height = range.height + \"px\";\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttimer.stop();\n\t\t\t\ttimer = undefined;\n\t\t\t}\n\t\t}\n\n\t\ttimer = new TimingCallbacks(tune, {\n\t\t\tqpm: options.bpm,\n\t\t\teventCallback: setCursor\n\t\t});\n\t\ttimer.start();\n\t};\n\n\tanimation.pauseAnimation = function(pause) {\n\t\tif (timer) {\n\t\t\tif (pause)\n\t\t\t\ttimer.pause();\n\t\t\telse\n\t\t\t\ttimer.start();\n\t\t}\n\t};\n\n\tanimation.stopAnimation = function() {\n\t\tif (timer) {\n\t\t\ttimer.stop();\n\t\t\ttimer = undefined;\n\t\t}\n\t};\n\n})();\n\nmodule.exports = animation;\n","/*\n * Tablature Plugins\n * tablature are defined dynamically and registered inside abcjs\n * by calling abcTablatures.register(plugin) \n * where plugin represents a plugin instance \n * \n */\nvar StringTablature = require('../tablatures/instruments/tab-string');\n\n/* extend the table below when adding a new instrument plugin */\n\n// Existing tab classes \nvar pluginTab = {\n 'violin': { name: 'StringTab', defaultTuning: ['G,', 'D', 'A', 'e'], isTabBig: false, tabSymbolOffset: 0},\n 'fiddle': { name: 'StringTab', defaultTuning: ['G,', 'D', 'A', 'e'], isTabBig: false, tabSymbolOffset: 0},\n 'mandolin': { name: 'StringTab', defaultTuning: ['G,', 'D', 'A', 'e'], isTabBig: false, tabSymbolOffset: 0},\n 'guitar': { name: 'StringTab', defaultTuning: ['E,', 'A,', 'D', 'G' , 'B' , 'e'], isTabBig: true, tabSymbolOffset: 0},\n 'fiveString': { name: 'StringTab', defaultTuning: ['C,', 'G,', 'D', 'A', 'e'], isTabBig: false, tabSymbolOffset: -.95},\n};\n\nvar abcTablatures = {\n\n inited: false,\n plugins: {},\n\n \n /**\n * to be called once per plugin for registration \n * @param {*} plugin \n */\n register: function (plugin) {\n var name = plugin.name;\n var tablature = plugin.tablature;\n this.plugins[name] = tablature;\n },\n\n setError: function (tune, msg) {\n if (tune.warnings) {\n tune.warning.push(msg);\n } else {\n tune.warnings = [msg];\n }\n },\n\n /**\n * handle params for current processed score\n * @param {*} tune current tune \n * @param {*} tuneNumber number in tune list\n * @param {*} params params to be processed for tablature\n * @return prepared tablatures plugin instances for current tune\n */\n preparePlugins: function (tune, tuneNumber, params) {\n var returned = null;\n var nbPlugins = 0;\n if (params.tablature) {\n // validate requested plugins \n var tabs = params.tablature;\n returned = [];\n for (var ii = 0; ii < tabs.length; ii++) {\n var args = tabs[ii];\n var instrument = args['instrument'];\n if (instrument == null) {\n this.setError(tune, \"tablature 'instrument' is missing\");\n return returned;\n }\n var tabName = pluginTab[instrument];\n var plugin = null;\n if (tabName) {\n plugin = this.plugins[tabName.name];\n }\n if (plugin) {\n if (params.visualTranspose != 0) {\n // populate transposition request to tabs\n args.visualTranspose = params.visualTranspose;\n }\n args.abcSrc = params.tablature.abcSrc;\n var pluginInstance = {\n classz: plugin,\n tuneNumber: tuneNumber,\n params: args,\n instance: null,\n tabType: tabName,\n };\n // proceed with tab plugin init \n // plugin.init(tune, tuneNumber, args, ii);\n returned.push(pluginInstance);\n nbPlugins++;\n } else if (instrument === '') {\n // create a placeholder - there is no tab for this staff\n returned.push(null)\n } else {\n // unknown tab plugin \n //this.emit_error('Undefined tablature plugin: ' + tabName)\n this.setError(tune, 'Undefined tablature plugin: ' + instrument);\n return returned;\n }\n }\n }\n return returned;\n },\n\n /**\n * Call requested plugin\n * @param {*} renderer \n * @param {*} abcTune \n */\n layoutTablatures: function layoutTablatures(renderer, abcTune) {\n var tabs = abcTune.tablatures;\n\n // chack tabs request for each staffs\n var staffLineCount = 0;\n \n // Clear the suppression flag\n if (tabs && (tabs.length > 0)){\n var nTabs = tabs.length;\n for (var kk=0;kk 1){\n if (tabs && (tabs.length > 0)){\n var nTabs = tabs.length;\n for (var kk=0;kk self.currentEvent && self.noteTimings[self.currentEvent].milliseconds < self.currentTime) {\n\t\t\t\tif (self.eventCallback && self.noteTimings[self.currentEvent].type === 'event') {\n\t\t\t\t\tvar thisStartTime = self.startTime; // the event callback can call seek and change the position from beneath us.\n\t\t\t\t\tself.eventCallback(self.noteTimings[self.currentEvent]);\n\t\t\t\t\tif (thisStartTime !== self.startTime) {\n\t\t\t\t\t\tself.currentTime = timestamp - self.startTime;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tself.currentEvent++;\n\t\t\t}\n\t\t\tif (self.lineEndCallback && self.lineEndTimings.length > self.currentLine && self.lineEndTimings[self.currentLine].milliseconds < self.currentTime && self.currentEvent < self.noteTimings.length) {\n\t\t\t\tvar leftEvent = self.noteTimings[self.currentEvent].milliseconds === self.currentTime ? self.noteTimings[self.currentEvent] : self.noteTimings[self.currentEvent-1]\n\t\t\t\tself.lineEndCallback(self.lineEndTimings[self.currentLine], leftEvent, { line: self.currentLine, endTimings: self.lineEndTimings, currentTime: self.currentTime });\n\t\t\t\tself.currentLine++;\n\t\t\t}\n\t\t\tif (self.currentTime < self.lastMoment) {\n\t\t\t\trequestAnimationFrame(self.doTiming);\n\t\t\t\tif (self.currentBeat * self.millisecondsPerBeat < self.currentTime) {\n\t\t\t\t\tvar ret = self.doBeatCallback(timestamp);\n\t\t\t\t\tif (ret !== null)\n\t\t\t\t\t\tself.currentTime = ret;\n\t\t\t\t}\n\t\t\t} else if (self.currentBeat <= self.totalBeats) {\n\t\t\t\t// Because of timing issues (for instance, if the browser tab isn't active), the beat callbacks might not have happened when they are supposed to. To keep the client programs from having to deal with that, this will keep calling the loop until all of them have been sent.\n\t\t\t\tif (self.beatCallback) {\n\t\t\t\t\tvar ret2 = self.doBeatCallback(timestamp);\n\t\t\t\t\tif (ret2 !== null)\n\t\t\t\t\t\tself.currentTime = ret2;\n\t\t\t\t\trequestAnimationFrame(self.doTiming);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (self.currentTime >= self.lastMoment) {\n\t\t\t\tif (self.eventCallback) {\n\t\t\t\t\t// At the end, the event callback can return \"continue\" to keep from stopping.\n\t\t\t\t\t// The event callback can either be a promise or not.\n\t\t\t\t\tvar promise = self.eventCallback(null);\n\t\t\t\t\tself.shouldStop(promise).then(function(shouldStop) {\n\t\t\t\t\t\tif (shouldStop)\n\t\t\t\t\t\t\tself.stop();\n\t\t\t\t\t})\n\t\t\t\t} else\n\t\t\t\t\tself.stop();\n\t\t\t}\n\t\t}\n\t};\n\n\tself.shouldStop = function(promise) {\n\t\t// The return of the last event callback can be \"continue\" or a promise that returns \"continue\".\n\t\t// If it is then don't call stop. Any other value calls stop.\n\t\treturn new Promise(function (resolve) {\n\t\t\tif (!promise)\n\t\t\t\treturn resolve(true);\n\t\t\tif (promise === \"continue\")\n\t\t\t\treturn resolve(false);\n\t\t\tif (promise.then) {\n\t\t\t\tpromise.then(function (result) {\n\t\t\t\t\tresolve(result !== \"continue\");\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t};\n\n\tself.doBeatCallback = function(timestamp) {\n\t\tif (self.beatCallback) {\n\t\t\tvar next = self.currentEvent;\n\t\t\twhile (next < self.noteTimings.length && self.noteTimings[next].left === null)\n\t\t\t\tnext++;\n\t\t\tvar endMs;\n\t\t\tvar ev;\n\t\t\tif (next < self.noteTimings.length) {\n\t\t\t\tendMs = self.noteTimings[next].milliseconds;\n\t\t\t\tnext = Math.max(0, self.currentEvent - 1);\n\t\t\t\twhile (next >= 0 && self.noteTimings[next].left === null)\n\t\t\t\t\tnext--;\n\n\t\t\t\tev = self.noteTimings[next];\n\t\t\t}\n\n\t\t\tvar position = {};\n\t\t\tvar debugInfo = {};\n\t\t\tif (ev) {\n\t\t\t\tposition.top = ev.top;\n\t\t\t\tposition.height = ev.height;\n\n\t\t\t\t// timestamp = the time passed in from the animation timer\n\t\t\t\t// self.startTime = the time that the tune was started (if there was seeking or pausing, it is adjusted to keep the math the same)\n\t\t\t\t// ev = the event that is either happening now or has most recently passed.\n\t\t\t\t// ev.milliseconds = the time that the current event starts (relative to self.startTime)\n\t\t\t\t// endMs = the time that the next event starts\n\t\t\t\t// ev.endX = the x coordinate that the next event happens (or the end of the line or repeat measure)\n\t\t\t\t// ev.left = the x coordinate of the current event\n\t\t\t\t//\n\t\t\t\t// The output is the X coordinate of the current cursor location. It is calculated with the ratio of the length of the event and the width of it.\n\t\t\t\tvar offMs = Math.max(0, timestamp-self.startTime-ev.milliseconds); // Offset in time from the last beat\n\t\t\t\tvar gapMs = endMs - ev.milliseconds; // Length of this event in time\n\t\t\t\tvar gapPx = ev.endX - ev.left; // The length in pixels\n\t\t\t\tvar offPx = gapMs ? offMs * gapPx / gapMs : 0;\n\t\t\t\tposition.left = ev.left + offPx;\n\t\t\t\t// See if this is before the first event - that is the case where there are \"prep beats\"\n\t\t\t\tif (self.currentEvent === 0 && ev.milliseconds > timestamp-self.startTime)\n\t\t\t\t\tposition.left = undefined\n\t\t\t\t\n\t\t\t\tdebugInfo = {\n\t\t\t\t\ttimestamp: timestamp,\n\t\t\t\t\tstartTime: self.startTime,\n\t\t\t\t\tev: ev,\n\t\t\t\t\tendMs: endMs,\n\t\t\t\t\toffMs: offMs,\n\t\t\t\t\toffPx: offPx,\n\t\t\t\t\tgapMs: gapMs,\n\t\t\t\t\tgapPx: gapPx\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tdebugInfo = {\n\t\t\t\t\ttimestamp: timestamp,\n\t\t\t\t\tstartTime: self.startTime,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tvar thisStartTime = self.startTime; // the beat callback can call seek and change the position from beneath us.\n\t\t\tself.beatCallback(\n\t\t\t\tself.currentBeat / self.beatSubdivisions,\n\t\t\t\tself.totalBeats / self.beatSubdivisions,\n\t\t\t\tself.lastMoment,\n\t\t\t\tposition,\n\t\t\t\tdebugInfo);\n\t\t\tif (thisStartTime !== self.startTime) {\n\t\t\t\treturn timestamp - self.startTime;\n\t\t\t} else\n\t\t\t\tself.currentBeat++;\n\t\t}\n\t\treturn null;\n\t};\n\n\t// In general music doesn't need a timer at 60 fps because notes don't happen that fast.\n\t// For instance, at 120 beats per minute, a sixteenth note takes 125ms. So just as a\n\t// compromise value between performance and jank this is set about half that.\n\tvar JOGGING_INTERVAL = 60;\n\n\tself.animationJogger = function() {\n\t\t// There are some cases where the animation timer doesn't work: for instance when\n\t\t// this isn't running in a visible tab and sometimes on mobile devices. We compensate\n\t\t// by having a backup timer using setTimeout. This won't be accurate so the performance\n\t\t// will be jerky, but without it the requestAnimationFrame might be skipped and so\n\t\t// not called again.\n\t\tif (self.isRunning) {\n\t\t\tself.doTiming(performance.now());\n\t\t\tself.joggerTimer = setTimeout(self.animationJogger, JOGGING_INTERVAL);\n\t\t}\n\t};\n\n\tself.start = function(offsetPercent, units) {\n\t\tself.isRunning = true;\n\t\tif (self.isPaused) {\n\t\t\tself.isPaused = false;\n\t\t\tif (offsetPercent === undefined)\n\t\t\t\tself.justUnpaused = true;\n\t\t}\n\t\tif (offsetPercent) {\n\t\t\tself.setProgress(offsetPercent, units);\n\t\t} else if (offsetPercent === 0) {\n\t\t\tself.reset();\n\t\t} else if (self.pausedPercent !== null) {\n\t\t\tvar now = performance.now();\n\t\t\tself.currentTime = self.lastMoment * self.pausedPercent;\n\t\t\tself.startTime = now - self.currentTime;\n\t\t\tself.pausedPercent = null;\n\t\t\tself.reportNext = true;\n\t\t}\n\t\trequestAnimationFrame(self.doTiming);\n\t\tself.joggerTimer = setTimeout(self.animationJogger, JOGGING_INTERVAL);\n\t};\n\tself.pause = function() {\n\t\tself.isPaused = true;\n\t\tvar now = performance.now();\n\t\tself.pausedPercent = (now - self.startTime) / self.lastMoment;\n\t\tself.isRunning = false;\n\t\tif (self.joggerTimer) {\n\t\t\tclearTimeout(self.joggerTimer);\n\t\t\tself.joggerTimer = null;\n\t\t}\n\t};\n\tself.currentMillisecond = function() {\n\t\treturn self.currentTime;\n\t};\n\tself.reset = function() {\n\t\tself.currentBeat = 0;\n\t\tself.currentEvent = 0;\n\t\tself.currentLine = 0;\n\t\tself.startTime = null;\n\t\tself.pausedPercent = null;\n\t};\n\tself.stop = function() {\n\t\tself.pause();\n\t\tself.reset();\n\t};\n\tself.setProgress = function(position, units) {\n\t\t// the effect of this function is to move startTime so that the callbacks happen correctly for the new seek.\n\t\tvar percent;\n\t\tswitch (units) {\n\t\t\tcase \"seconds\":\n\t\t\t\tself.currentTime = position * 1000;\n\t\t\t\tif (self.currentTime < 0) self.currentTime = 0;\n\t\t\t\tif (self.currentTime > self.lastMoment) self.currentTime = self.lastMoment;\n\t\t\t\tpercent = self.currentTime / self.lastMoment;\n\t\t\t\tbreak;\n\t\t\tcase \"beats\":\n\t\t\t\tself.currentTime = position * self.millisecondsPerBeat * self.beatSubdivisions;\n\t\t\t\tif (self.currentTime < 0) self.currentTime = 0;\n\t\t\t\tif (self.currentTime > self.lastMoment) self.currentTime = self.lastMoment;\n\t\t\t\tpercent = self.currentTime / self.lastMoment;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// this is \"percent\" or any illegal value\n\t\t\t\t// this is passed a value between 0 and 1.\n\t\t\t\tpercent = position;\n\t\t\t\tif (percent < 0) percent = 0;\n\t\t\t\tif (percent > 1) percent = 1;\n\t\t\t\tself.currentTime = self.lastMoment * percent;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (!self.isRunning)\n\t\t\tself.pausedPercent = percent;\n\n\t\tvar now = performance.now();\n\t\tself.startTime = now - self.currentTime;\n\n\t\tvar oldEvent = self.currentEvent;\n\t\tself.currentEvent = 0;\n\t\twhile (self.noteTimings.length > self.currentEvent && self.noteTimings[self.currentEvent].milliseconds < self.currentTime) {\n\t\t\tself.currentEvent++;\n\t\t}\n\n\t\tif (self.lineEndCallback) {\n\t\t\tself.currentLine = 0;\n\t\t\twhile (self.lineEndTimings.length > self.currentLine && self.lineEndTimings[self.currentLine].milliseconds + self.lineEndAnticipation < self.currentTime) {\n\t\t\t\tself.currentLine++;\n\t\t\t}\n\t\t}\n\n\t\tvar oldBeat = self.currentBeat;\n\t\tself.currentBeat = Math.floor(self.currentTime / self.millisecondsPerBeat);\n\t\tif (self.beatCallback && oldBeat !== self.currentBeat) // If the movement caused the beat to change, then immediately report it to the client.\n\t\t\tself.doBeatCallback(self.startTime+self.currentTime);\n\n\t\tif (self.eventCallback && self.currentEvent >= 0 && self.noteTimings[self.currentEvent].type === 'event')\n\t\t\tself.eventCallback(self.noteTimings[self.currentEvent]);\n\t\tif (self.lineEndCallback)\n\t\t\tself.lineEndCallback(self.lineEndTimings[self.currentLine], self.noteTimings[self.currentEvent], { line: self.currentLine, endTimings: self.lineEndTimings });\n\n\t\tself.joggerTimer = setTimeout(self.animationJogger, JOGGING_INTERVAL);\n\t};\n};\n\nfunction getLineEndTimings(timings, anticipation) {\n\t// Returns an array of milliseconds to call the lineEndCallback.\n\t// This figures out the timing of the beginning of each line and subtracts the anticipation from it.\n\tvar callbackTimes = [];\n\tvar lastTop = null;\n\tfor (var i = 0; i < timings.length; i++) {\n\t\tvar timing = timings[i];\n\t\tif (timing.type !== 'end' && timing.top !== lastTop) {\n\t\t\tcallbackTimes.push({ measureNumber: timing.measureNumber, milliseconds: timing.milliseconds-anticipation, top: timing.top, bottom: timing.top+timing.height });\n\t\t\tlastTop = timing.top;\n\t\t}\n\t}\n\treturn callbackTimes;\n}\n\nmodule.exports = TimingCallbacks;\n\n","// abc_tunebook.js: splits a string representing ABC Music Notation into individual tunes.\n\nvar Parse = require('../parse/abc_parse');\nvar bookParser = require('../parse/abc_parse_book');\nvar tablatures = require('./abc_tablatures');\n\n\nvar tunebook = {};\n\n(function() {\n\t\"use strict\";\n\n\ttunebook.numberOfTunes = function(abc) {\n\t\tvar tunes = abc.split(\"\\nX:\");\n\t\tvar num = tunes.length;\n\t\tif (num === 0) num = 1;\n\t\treturn num;\n\t};\n\n\tvar TuneBook = tunebook.TuneBook = function(book) {\n\t\tvar parsed = bookParser(book);\n\t\tthis.header = parsed.header;\n\t\tthis.tunes = parsed.tunes;\n\t};\n\n\tTuneBook.prototype.getTuneById = function(id) {\n\t\tfor (var i = 0; i < this.tunes.length; i++) {\n\t\t\tif (this.tunes[i].id === ''+id)\n\t\t\t\treturn this.tunes[i];\n\t\t}\n\t\treturn null;\n\t};\n\n\tTuneBook.prototype.getTuneByTitle = function(title) {\n\t\tfor (var i = 0; i < this.tunes.length; i++) {\n\t\t\tif (this.tunes[i].title === title)\n\t\t\t\treturn this.tunes[i];\n\t\t}\n\t\treturn null;\n\t};\n\n\ttunebook.parseOnly = function(abc, params) {\n\t\tvar numTunes = tunebook.numberOfTunes(abc);\n\n\t\t// this just needs to be passed in because this tells the engine how many tunes to process.\n\t\tvar output = [];\n\t\tfor (var i = 0; i < numTunes; i++) {\n\t\t\toutput.push(1);\n\t\t}\n\t\tfunction callback() {\n\t\t\t// Don't need to do anything with the parsed tunes.\n\t\t}\n\t\treturn tunebook.renderEngine(callback, output, abc, params);\n\t};\n\n\ttunebook.renderEngine = function (callback, output, abc, params) {\n\t\tvar ret = [];\n\t\tvar isArray = function(testObject) {\n\t\t\treturn testObject && !(testObject.propertyIsEnumerable('length')) && typeof testObject === 'object' && typeof testObject.length === 'number';\n\t\t};\n\n\t\t// check and normalize input parameters\n\t\tif (output === undefined || abc === undefined)\n\t\t\treturn;\n\t\tif (!isArray(output))\n\t\t\toutput = [ output ];\n\t\tif (params === undefined)\n\t\t\tparams = {};\n\t\tvar currentTune = params.startingTune ? parseInt(params.startingTune, 10) : 0;\n\n\t\t// parse the abc string\n\t\tvar book = new TuneBook(abc);\n\t\tvar abcParser = new Parse();\n\n\t\t// output each tune, if it exists. Otherwise clear the div.\n\t\tfor (var i = 0; i < output.length; i++) {\n\t\t\tvar div = output[i];\n\t\t\tif (div === \"*\") {\n\t\t\t\t// This is for \"headless\" rendering: doing the work but not showing the svg.\n\t\t\t} else if (typeof(div) === \"string\")\n\t\t\t\tdiv = document.getElementById(div);\n\t\t\tif (div) {\n\t\t\t\tif (currentTune >= 0 && currentTune < book.tunes.length) {\n\t\t\t\t\tabcParser.parse(book.tunes[currentTune].abc, params, book.tunes[currentTune].startPos - book.header.length);\n\t\t\t\t\tvar tune = abcParser.getTune();\n\t\t\t\t\t//\n\t\t\t\t\t// Init tablatures plugins\n\t\t\t\t\t//\n\t\t\t\t\tif (params.tablature) {\n\t\t\t\t\t\ttablatures.init();\n\t\t\t\t\t\ttune.tablatures = tablatures.preparePlugins(tune, currentTune, params);\n\t\t\t\t\t}\n\t\t\t\t\tvar warnings = abcParser.getWarnings();\n\t\t\t\t\tif (warnings)\n\t\t\t\t\t\ttune.warnings = warnings;\n\t\t\t\t\tvar override = callback(div, tune, i, book.tunes[currentTune].abc);\n\t\t\t\t\tret.push(override ? override : tune);\n\t\t\t\t} else {\n\t\t\t\t\tif (div['innerHTML'])\n\t\t\t\t\t\tdiv.innerHTML = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tcurrentTune++;\n\t\t}\n\t return ret;\n\t};\n\n\tfunction flattenTune(tuneObj) {\n\t\t// This removes the line breaks and removes the non-music lines.\n\t\tvar staves = [];\n\t\tfor (var j = 0; j < tuneObj.lines.length; j++) {\n\t\t\tvar line = tuneObj.lines[j];\n\t\t\tif (line.staff) {\n\t\t\t\tfor (var k = 0; k < line.staff.length; k++) {\n\t\t\t\t\tvar staff = line.staff[k];\n\t\t\t\t\tif (!staves[k])\n\t\t\t\t\t\tstaves[k] = staff;\n\t\t\t\t\telse {\n\t\t\t\t\t\tfor (var i = 0; i < staff.voices.length; i++) {\n\t\t\t\t\t\t\tif (staves[k].voices[i])\n\t\t\t\t\t\t\t\tstaves[k].voices[i] = staves[k].voices[i].concat(staff.voices[i]);\n\t\t\t\t\t\t\t// TODO-PER: If staves[k].voices[i] doesn't exist, that means a voice appeared in the middle of the tune. That isn't handled yet.\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn staves;\n\t}\n\n\tfunction measuresParser(staff, tune) {\n\t\tvar voices = [];\n\t\tvar lastChord = null;\n\t\tvar measureStartChord = null;\n\t\tvar fragStart = null;\n\t\tvar hasNotes = false;\n\n\t\tfor (var i = 0; i < staff.voices.length; i++) {\n\t\t\tvar voice = staff.voices[i];\n\t\t\tvoices.push([]);\n\t\t\tfor (var j = 0; j < voice.length; j++) {\n\t\t\t\tvar elem = voice[j];\n\t\t\t\tif (fragStart === null && elem.startChar >= 0) {\n\t\t\t\t\tfragStart = elem.startChar;\n\t\t\t\t\tif (elem.chord === undefined)\n\t\t\t\t\t\tmeasureStartChord = lastChord;\n\t\t\t\t\telse\n\t\t\t\t\t\tmeasureStartChord = null;\n\t\t\t\t}\n\t\t\t\tif (elem.chord)\n\t\t\t\t\tlastChord = elem;\n\t\t\t\tif (elem.el_type === 'bar') {\n\t\t\t\t\tif (hasNotes) {\n\t\t\t\t\t\tvar frag = tune.abc.substring(fragStart, elem.endChar);\n\t\t\t\t\t\tvar measure = {abc: frag};\n\t\t\t\t\t\tlastChord = measureStartChord && measureStartChord.chord && measureStartChord.chord.length > 0 ? measureStartChord.chord[0].name : null;\n\t\t\t\t\t\tif (lastChord)\n\t\t\t\t\t\t\tmeasure.lastChord = lastChord;\n\t\t\t\t\t\tif (elem.startEnding)\n\t\t\t\t\t\t\tmeasure.startEnding = elem.startEnding;\n\t\t\t\t\t\tif (elem.endEnding)\n\t\t\t\t\t\t\tmeasure.endEnding = elem.endEnding;\n\t\t\t\t\t\tvoices[i].push(measure);\n\t\t\t\t\t\tfragStart = null;\n\t\t\t\t\t\thasNotes = false;\n\t\t\t\t\t}\n\t\t\t\t} else if (elem.el_type === 'note') {\n\t\t\t\t\thasNotes = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn voices;\n\t}\n\n\ttunebook.extractMeasures = function(abc) {\n\t\tvar tunes = [];\n\t\tvar book = new TuneBook(abc);\n\t\tfor (var i = 0; i < book.tunes.length; i++) {\n\t\t\tvar tune = book.tunes[i];\n\t\t\tvar arr = tune.abc.split(\"K:\");\n\t\t\tvar arr2 = arr[1].split(\"\\n\");\n\t\t\tvar header = arr[0] + \"K:\" + arr2[0] + \"\\n\";\n\t\t\tvar lastChord = null;\n\t\t\tvar measureStartChord = null;\n\t\t\tvar fragStart = null;\n\t\t\tvar measures = [];\n\t\t\tvar hasNotes = false;\n\t\t\tvar tuneObj = tunebook.parseOnly(tune.abc)[0];\n\t\t\tvar hasPickup = tuneObj.getPickupLength() > 0;\n\t\t\t// var staves = flattenTune(tuneObj);\n\t\t\t// for (var s = 0; s < staves.length; s++) {\n\t\t\t// \tvar voices = measuresParser(staves[s], tune);\n\t\t\t// \tif (s === 0)\n\t\t\t// \t\tmeasures = voices;\n\t\t\t// \telse {\n\t\t\t// \t\tfor (var ss = 0; ss < voices.length; ss++) {\n\t\t\t// \t\t\tvar voice = voices[ss];\n\t\t\t// \t\t\tif (measures.length <= ss)\n\t\t\t// \t\t\t\tmeasures.push([]);\n\t\t\t// \t\t\tvar measureVoice = measures[ss];\n\t\t\t// \t\t\tfor (var sss = 0; sss < voice.length; sss++) {\n\t\t\t// \t\t\t\tif (measureVoice.length > sss)\n\t\t\t// \t\t\t\t\tmeasureVoice[sss].abc += \"\\n\" + voice[sss].abc;\n\t\t\t// \t\t\t\telse\n\t\t\t// \t\t\t\t\tmeasures.push(voice[sss]);\n\t\t\t// \t\t\t}\n\t\t\t// \t\t}\n\t\t\t// \t}\n\t\t\t// \tconsole.log(voices);\n\t\t\t// }\n\t\t\t// measures = measures[0];\n\n\t\t\tfor (var j = 0; j < tuneObj.lines.length; j++) {\n\t\t\t\tvar line = tuneObj.lines[j];\n\t\t\t\tif (line.staff) {\n\t\t\t\t\tfor (var k = 0; k < 1 /*line.staff.length*/; k++) {\n\t\t\t\t\t\tvar staff = line.staff[k];\n\t\t\t\t\t\tfor (var kk = 0; kk < 1 /*staff.voices.length*/; kk++) {\n\t\t\t\t\t\t\tvar voice = staff.voices[kk];\n\t\t\t\t\t\t\tfor (var kkk = 0; kkk < voice.length; kkk++) {\n\t\t\t\t\t\t\t\tvar elem = voice[kkk];\n\t\t\t\t\t\t\t\tif (fragStart === null && elem.startChar >= 0) {\n\t\t\t\t\t\t\t\t\tfragStart = elem.startChar;\n\t\t\t\t\t\t\t\t\tif (elem.chord === undefined)\n\t\t\t\t\t\t\t\t\t\tmeasureStartChord = lastChord;\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\tmeasureStartChord = null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (elem.chord)\n\t\t\t\t\t\t\t\t\tlastChord = elem;\n\t\t\t\t\t\t\t\tif (elem.el_type === 'bar') {\n\t\t\t\t\t\t\t\t\tif (hasNotes) {\n\t\t\t\t\t\t\t\t\t\tvar frag = tune.abc.substring(fragStart, elem.endChar);\n\t\t\t\t\t\t\t\t\t\tvar measure = {abc: frag};\n\t\t\t\t\t\t\t\t\t\tlastChord = measureStartChord && measureStartChord.chord && measureStartChord.chord.length > 0 ? measureStartChord.chord[0].name : null;\n\t\t\t\t\t\t\t\t\t\tif (lastChord)\n\t\t\t\t\t\t\t\t\t\t\tmeasure.lastChord = lastChord;\n\t\t\t\t\t\t\t\t\t\tif (elem.startEnding)\n\t\t\t\t\t\t\t\t\t\t\tmeasure.startEnding = elem.startEnding;\n\t\t\t\t\t\t\t\t\t\tif (elem.endEnding)\n\t\t\t\t\t\t\t\t\t\t\tmeasure.endEnding = elem.endEnding;\n\t\t\t\t\t\t\t\t\t\tmeasures.push(measure);\n\t\t\t\t\t\t\t\t\t\tfragStart = null;\n\t\t\t\t\t\t\t\t\t\thasNotes = false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (elem.el_type === 'note') {\n\t\t\t\t\t\t\t\t\thasNotes = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ttunes.push({\n\t\t\t\theader: header,\n\t\t\t\tmeasures: measures,\n\t\t\t\thasPickup: hasPickup\n\t\t\t});\n\t\t}\n\t\treturn tunes;\n\t};\n})();\n\nmodule.exports = tunebook;\n","var tunebook = require('./abc_tunebook');\nvar Tune = require('../data/abc_tune');\n\nvar EngraverController = require('../write/engraver-controller');\nvar Parse = require('../parse/abc_parse');\nvar wrap = require('../parse/wrap_lines');\n// var tablatures = require('./abc_tablatures');\n\n\nvar resizeDivs = {};\nfunction resizeOuter() {\n var width = window.innerWidth;\n for (var id in resizeDivs) {\n if (resizeDivs.hasOwnProperty(id)) {\n var outer = resizeDivs[id];\n var ofs = outer.offsetLeft;\n width -= ofs * 2;\n outer.style.width = width + \"px\";\n }\n }\n}\n\ntry {\n window.addEventListener(\"resize\", resizeOuter);\n window.addEventListener(\"orientationChange\", resizeOuter);\n} catch(e) {\n // if we aren't in a browser, this code will crash, but it is not needed then either.\n}\n\nfunction renderOne(div, tune, params, tuneNumber, lineOffset) {\n if (params.viewportHorizontal) {\n // Create an inner div that holds the music, so that the passed in div will be the viewport.\n div.innerHTML = '
';\n if (params.scrollHorizontal) {\n div.style.overflowX = \"auto\";\n div.style.overflowY = \"hidden\";\n } else\n div.style.overflow = \"hidden\";\n resizeDivs[div.id] = div; // We use a hash on the element's id so that multiple calls won't keep adding to the list.\n div = div.children[0]; // The music should be rendered in the inner div.\n }\n else if (params.viewportVertical) {\n // Create an inner div that holds the music, so that the passed in div will be the viewport.\n div.innerHTML = '
';\n div.style.overflowX = \"hidden\";\n div.style.overflowY = \"auto\";\n div = div.children[0]; // The music should be rendered in the inner div.\n }\n else\n\t div.innerHTML = \"\";\n var engraver_controller = new EngraverController(div, params);\n engraver_controller.engraveABC(tune, tuneNumber, lineOffset);\n tune.engraver = engraver_controller;\n if (params.viewportVertical || params.viewportHorizontal) {\n // If we added a wrapper around the div, then we need to size the wrapper, too.\n var parent = div.parentNode;\n parent.style.width = div.style.width;\n }\n}\n\n// A quick way to render a tune from javascript when interactivity is not required.\n// This is used when a javascript routine has some abc text that it wants to render\n// in a div or collection of divs. One tune or many can be rendered.\n//\n// parameters:\n// output: an array of divs that the individual tunes are rendered to.\n// If the number of tunes exceeds the number of divs in the array, then\n// only the first tunes are rendered. If the number of divs exceeds the number\n// of tunes, then the unused divs are cleared. The divs can be passed as either\n// elements or strings of ids. If ids are passed, then the div MUST exist already.\n// (if a single element is passed, then it is an implied array of length one.)\n// (if a null is passed for an element, or the element doesn't exist, then that tune is skipped.)\n// abc: text representing a tune or an entire tune book in ABC notation.\n// renderParams: hash of:\n// startingTune: an index, starting at zero, representing which tune to start rendering at.\n// (If this element is not present, then rendering starts at zero.)\n// width: 800 by default. The width in pixels of the output paper\nvar renderAbc = function(output, abc, parserParams, engraverParams, renderParams) {\n // Note: all parameters have been condensed into the first ones. It doesn't hurt anything to allow the old format, so just copy them here.\n var params = {};\n var key;\n if (parserParams) {\n for (key in parserParams) {\n if (parserParams.hasOwnProperty(key)) {\n params[key] = parserParams[key];\n }\n }\n if (params.warnings_id && params.tablature) {\n params.tablature.warning_id = params.warnings_id;\n }\n }\n if (engraverParams) {\n for (key in engraverParams) {\n if (engraverParams.hasOwnProperty(key)) {\n\t // There is a conflict with the name of the parameter \"listener\". If it is in the second parameter, then it is for click.\n\t if (key === \"listener\") {\n\t \tif (engraverParams[key].highlight)\n\t\t params.clickListener = engraverParams[key].highlight;\n\t } else\n params[key] = engraverParams[key];\n }\n }\n }\n if (renderParams) {\n for (key in renderParams) {\n if (renderParams.hasOwnProperty(key)) {\n params[key] = renderParams[key];\n }\n }\n }\n\n function callback(div, tune, tuneNumber, abcString) {\n var removeDiv = false;\n if (div === \"*\") {\n removeDiv = true;\n div = document.createElement(\"div\");\n div.setAttribute(\"style\", \"visibility: hidden;\");\n document.body.appendChild(div);\n }\n if (!removeDiv && params.wrap && params.staffwidth) {\n tune = doLineWrapping(div, tune, tuneNumber, abcString, params);\n\t return tune;\n }\n if (params.afterParsing)\n params.afterParsing(tune, tuneNumber, abcString);\n renderOne(div, tune, params, tuneNumber, 0);\n if (removeDiv)\n div.parentNode.removeChild(div);\n return null;\n }\n\n return tunebook.renderEngine(callback, output, abc, params);\n};\n\nfunction doLineWrapping(div, tune, tuneNumber, abcString, params) {\n\tvar engraver_controller = new EngraverController(div, params);\n\tvar widths = engraver_controller.getMeasureWidths(tune);\n\n\tvar ret = wrap.calcLineWraps(tune, widths, params);\n\tif (ret.reParse) {\n var abcParser = new Parse();\n abcParser.parse(abcString, ret.revisedParams);\n tune = abcParser.getTune();\n var warnings = abcParser.getWarnings();\n if (warnings)\n tune.warnings = warnings;\n }\n if (params.afterParsing)\n params.afterParsing(tune, tuneNumber, abcString);\n renderOne(div, tune, ret.revisedParams, tuneNumber, 0);\n\ttune.explanation = ret.explanation;\n\treturn tune;\n}\n\nmodule.exports = renderAbc;\n","var tunebook = require('./abc_tunebook');\nvar EngraverController = require('../write/engraver-controller');\n\nvar tuneMetrics = function(abc, params) {\n function callback(div, tune, tuneNumber, abcString) {\n\t\tdiv = document.createElement(\"div\");\n\t\tdiv.setAttribute(\"style\", \"visibility: hidden;\");\n\t\tdocument.body.appendChild(div);\n\t\tvar engraver_controller = new EngraverController(div, params);\n\t\tvar widths = engraver_controller.getMeasureWidths(tune);\n div.parentNode.removeChild(div);\n return {sections: widths};\n }\n\n return tunebook.renderEngine(callback, \"*\", abc, params);\n};\n\nmodule.exports = tuneMetrics;\n","var { relativeMajor } = require(\"./relative-major\");\n\nvar key1sharp = { acc: 'sharp', note: 'f' };\nvar key2sharp = { acc: 'sharp', note: 'c' };\nvar key3sharp = { acc: 'sharp', note: 'g' };\nvar key4sharp = { acc: 'sharp', note: 'd' };\nvar key5sharp = { acc: 'sharp', note: 'A' };\nvar key6sharp = { acc: 'sharp', note: 'e' };\nvar key7sharp = { acc: 'sharp', note: 'B' };\nvar key1flat = { acc: 'flat', note: 'B' };\nvar key2flat = { acc: 'flat', note: 'e' };\nvar key3flat = { acc: 'flat', note: 'A' };\nvar key4flat = { acc: 'flat', note: 'd' };\nvar key5flat = { acc: 'flat', note: 'G' };\nvar key6flat = { acc: 'flat', note: 'c' };\nvar key7flat = { acc: 'flat', note: 'F' };\n\nvar keys = {\n\t'C#': [key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp, key7sharp],\n\t'F#': [key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp],\n\t'B': [key1sharp, key2sharp, key3sharp, key4sharp, key5sharp],\n\t'E': [key1sharp, key2sharp, key3sharp, key4sharp],\n\t'A': [key1sharp, key2sharp, key3sharp],\n\t'D': [key1sharp, key2sharp],\n\t'G': [key1sharp],\n\t'C': [],\n\t'F': [key1flat],\n\t'Bb': [key1flat, key2flat],\n\t'Eb': [key1flat, key2flat, key3flat],\n\t'Cm': [key1flat, key2flat, key3flat],\n\t'Ab': [key1flat, key2flat, key3flat, key4flat],\n\t'Db': [key1flat, key2flat, key3flat, key4flat, key5flat],\n\t'Gb': [key1flat, key2flat, key3flat, key4flat, key5flat, key6flat],\n\t'Cb': [key1flat, key2flat, key3flat, key4flat, key5flat, key6flat, key7flat],\n\n\t// The following are not in the 2.0 spec, but seem normal enough.\n\t// TODO-PER: These SOUND the same as what's written, but they aren't right\n\t'A#': [key1flat, key2flat],\n\t'B#': [],\n\t'D#': [key1flat, key2flat, key3flat],\n\t'E#': [key1flat],\n\t'G#': [key1flat, key2flat, key3flat, key4flat],\n\t'none': [],\n};\n\nfunction keyAccidentals(key) {\n\tvar newKey = keys[relativeMajor(key)]\n\tif (!newKey) // If we don't recognize the key then there is no change\n\t\treturn null\n\treturn JSON.parse(JSON.stringify(newKey))\n};\n\nmodule.exports = keyAccidentals;\n","// All these keys have the same number of accidentals\nvar keys = {\n\t'C': { modes: ['CMaj', 'Amin', 'Am', 'GMix', 'DDor', 'EPhr', 'FLyd', 'BLoc'], stepsFromC: 0 },\n\t'Db': { modes: ['DbMaj', 'Bbmin', 'Bbm', 'AbMix', 'EbDor', 'FPhr', 'GbLyd', 'CLoc'], stepsFromC: 1 },\n\t'D': { modes: ['DMaj', 'Bmin', 'Bm', 'AMix', 'EDor', 'F#Phr', 'GLyd', 'C#Loc'], stepsFromC: 2 },\n\t'Eb': { modes: ['EbMaj', 'Cmin', 'Cm', 'BbMix', 'FDor', 'GPhr', 'AbLyd', 'DLoc'], stepsFromC: 3 },\n\t'E': { modes: ['EMaj', 'C#min', 'C#m', 'BMix', 'F#Dor', 'G#Phr', 'ALyd', 'D#Loc'], stepsFromC: 4 },\n\t'F': { modes: ['FMaj', 'Dmin', 'Dm', 'CMix', 'GDor', 'APhr', 'BbLyd', 'ELoc'], stepsFromC: 5 },\n\t'Gb': { modes: ['GbMaj', 'Ebmin', 'Ebm', 'DbMix', 'AbDor', 'BbPhr', 'CbLyd', 'FLoc'], stepsFromC: 6 },\n\t'G': { modes: ['GMaj', 'Emin', 'Em', 'DMix', 'ADor', 'BPhr', 'CLyd', 'F#Loc'], stepsFromC: 7 },\n\t'Ab': { modes: ['AbMaj', 'Fmin', 'Fm', 'EbMix', 'BbDor', 'CPhr', 'DbLyd', 'GLoc'], stepsFromC: 8 },\n\t'A': { modes: ['AMaj', 'F#min', 'F#m', 'EMix', 'BDor', 'C#Phr', 'DLyd', 'G#Loc'], stepsFromC: 9 },\n\t'Bb': { modes: ['BbMaj', 'Gmin', 'Gm', 'FMix', 'CDor', 'DPhr', 'EbLyd', 'ALoc'], stepsFromC: 10 },\n\t'B': { modes: ['BMaj', 'G#min', 'G#m', 'F#Mix', 'C#Dor', 'D#Phr', 'ELyd', 'A#Loc'], stepsFromC: 11 },\n\t// Enharmonic keys\n\t'C#': { modes: ['C#Maj', 'A#min', 'A#m', 'G#Mix', 'D#Dor', 'E#Phr', 'F#Lyd', 'B#Loc'], stepsFromC: 1 },\n\t'F#': { modes: ['F#Maj', 'D#min', 'D#m', 'C#Mix', 'G#Dor', 'A#Phr', 'BLyd', 'E#Loc'], stepsFromC: 6 },\n\t'Cb': { modes: ['CbMaj', 'Abmin', 'Abm', 'GbMix', 'DbDor', 'EbPhr', 'FbLyd', 'BbLoc'], stepsFromC: 11 },\n}\n\nvar keyReverse = null\n\nfunction createKeyReverse() {\n\tkeyReverse = {}\n\tvar allKeys = Object.keys(keys)\n\tfor (var i = 0 ; i < allKeys.length; i++) {\n\t\tvar keyObj = keys[allKeys[i]]\n\t\tkeyReverse[allKeys[i].toLowerCase()] = allKeys[i];\n\t\tfor (var j = 0; j < keyObj.modes.length; j++) {\n\t\t\tvar mode = keyObj.modes[j].toLowerCase()\n\t\t\tkeyReverse[mode] = allKeys[i];\n\t\t}\n\t}\n}\n\nfunction relativeMajor(key) {\n\t// Translate a key to its relative major. If it doesn't exist, do the best we can\n\t// by just returning the original key.\n\t// There are alternate spellings of these - so the search needs to be case insensitive.\n\t// To make this efficient, the first time this is called the \"keys\" object is reversed so this search is fast in the future\n\tif (!keyReverse) {\n\t\tcreateKeyReverse()\n\t}\n\t// get the key portion itself - there might be other stuff, like extra sharps and flats, or the mode written out.\n\tvar mode = key.toLowerCase().match(/([a-g][b#]?)(maj|min|mix|dor|phr|lyd|loc|m)?/)\n\tif (!mode || !mode[2])\n\t\treturn key;\n\tmode = mode[1] + mode[2]\n\tvar maj = keyReverse[mode]\n\tif (maj)\n\t\treturn maj;\n\treturn key;\n}\n\nfunction relativeMode(majorKey, mode) {\n\t// The reverse of the relativeMajor. Translate it back to the original mode.\n\t// If it isn't a recognized mode or it is already major, then just return the major key.\n\tvar group = keys[majorKey]\n\tif (!group)\n\t\treturn majorKey;\n\tif (mode === '')\n\t\treturn majorKey;\n\tvar match = mode.toLowerCase().match(/^(maj|min|mix|dor|phr|lyd|loc|m)/)\t\n\tif (!match)\n\t\treturn majorKey\n\tvar regMode = match[1]\t\n\tfor (var i = 0; i < group.modes.length; i++) {\n\t\tvar thisMode = group.modes[i]\n\t\tvar ind = thisMode.toLowerCase().indexOf(regMode)\n\t\tif (ind !== -1 && ind === thisMode.length - regMode.length)\n\t\t\treturn thisMode.substring(0, thisMode.length - regMode.length)\n\t}\n\treturn majorKey;\n}\n\nfunction transposeKey(key, steps) {\n\t// This takes a major key and adds the desired steps.\n\t// It assigns each key a number that is the number of steps from C so that there can just be arithmetic.\n\tvar match = keys[key]\n\tif (!match)\n\t\treturn key;\n\twhile (steps < 0) steps += 12;\n\tvar fromC = (match.stepsFromC + steps) % 12;\n\tfor (var i = 0; i < Object.keys(keys).length; i++) {\n\t\tvar k = Object.keys(keys)[i]\n\t\tif (keys[k].stepsFromC === fromC)\n\t\t\treturn k;\n\t}\n\treturn key;\n}\n\nmodule.exports = {relativeMajor: relativeMajor, relativeMode: relativeMode, transposeKey: transposeKey};\n","// abc_tune.js: a computer usable internal structure representing one tune.\n\nvar parseCommon = require('../parse/abc_common');\nvar spacing = require('../write/helpers/spacing');\nvar sequence = require('../synth/abc_midi_sequencer');\nvar flatten = require('../synth/abc_midi_flattener');\nvar delineTune = require(\"./deline-tune\");\n\n/**\n * This is the data for a single ABC tune. It is created and populated by the window.ABCJS.parse.Parse class.\n * Also known as the ABCJS Abstract Syntax Tree\n * @alternateClassName ABCJS.Tune\n */\nvar Tune = function() {\n\tthis.reset = function () {\n\t\tthis.version = \"1.1.0\";\n\t\tthis.media = \"screen\";\n\t\tthis.metaText = {};\n\t\tthis.metaTextInfo = {};\n\t\tthis.formatting = {};\n\t\tthis.lines = [];\n\t\tthis.staffNum = 0;\n\t\tthis.voiceNum = 0;\n\t\tthis.lineNum = 0;\n\t\tthis.runningFonts = {};\n\t\tdelete this.visualTranspose;\n\t};\n\tthis.reset();\n\n\tfunction copy(dest, src, prop, attrs) {\n\t\tfor (var i = 0; i < attrs.length; i++)\n\t\t\tdest[prop][attrs[i]] = src[prop][attrs[i]];\n\t}\n\n\tthis.copyTopInfo = function(src) {\n\t\tvar attrs = ['tempo', 'title', 'header', 'rhythm', 'origin', 'composer', 'author', 'partOrder'];\n\t\tcopy(this, src, \"metaText\", attrs);\n\t\tcopy(this, src, \"metaTextInfo\", attrs);\n\t};\n\n\tthis.copyBottomInfo = function(src) {\n\t\tvar attrs = ['unalignedWords',\n\t\t\t'book',\n\t\t\t'source',\n\t\t\t'discography',\n\t\t\t'notes',\n\t\t\t'transcription',\n\t\t\t'history',\n\t\t\t'abc-copyright',\n\t\t\t'abc-creator',\n\t\t\t'abc-edited-by',\n\t\t\t'footer']\n\t\tcopy(this, src, \"metaText\", attrs);\n\t\tcopy(this, src, \"metaTextInfo\", attrs);\n\t};\n\n\t// The structure consists of a hash with the following two items:\n\t// metaText: a hash of {key, value}, where key is one of: title, author, rhythm, source, transcription, unalignedWords, etc...\n\t// tempo: { noteLength: number (e.g. .125), bpm: number }\n\t// lines: an array of elements, or one of the following:\n\t//\n\t// STAFF: array of elements\n\t// SUBTITLE: string\n\t//\n\t// TODO: actually, the start and end char should modify each part of the note type\n\t// The elements all have a type field and a start and end char\n\t// field. The rest of the fields depend on the type and are listed below:\n\t// REST: duration=1,2,4,8; chord: string\n\t// NOTE: accidental=none,dbl_flat,flat,natural,sharp,dbl_sharp\n\t//\t\tpitch: \"C\" is 0. The numbers refer to the pitch letter.\n\t//\t\tduration: .5 (sixteenth), .75 (dotted sixteenth), 1 (eighth), 1.5 (dotted eighth)\n\t//\t\t\t2 (quarter), 3 (dotted quarter), 4 (half), 6 (dotted half) 8 (whole)\n\t//\t\tchord: { name:chord, position: one of 'default', 'above', 'below' }\n\t//\t\tend_beam = true or undefined if this is the last note in a beam.\n\t//\t\tlyric: array of { syllable: xxx, divider: one of \" -_\" }\n\t//\t\tstartTie = true|undefined\n\t//\t\tendTie = true|undefined\n\t//\t\tstartTriplet = num <- that is the number to print\n\t//\t\tendTriplet = true|undefined (the last note of the triplet)\n\t// TODO: actually, decoration should be an array.\n\t//\t\tdecoration: upbow, downbow, accent\n\t// BAR: type=bar_thin, bar_thin_thick, bar_thin_thin, bar_thick_thin, bar_right_repeat, bar_left_repeat, bar_double_repeat\n\t//\tnumber: 1 or 2: if it is the start of a first or second ending\n\t// CLEF: type=treble,bass\n\t// KEY-SIG:\n\t//\t\taccidentals[]: { acc:sharp|dblsharp|natural|flat|dblflat, note:a|b|c|d|e|f|g }\n\t// METER: type: common_time,cut_time,specified\n\t//\t\tif specified, { num: 99, den: 99 }\n\n\tthis.getBeatLength = function() {\n\t\t// This returns a fraction: for instance 1/4 for a quarter\n\t\t// There are two types of meters: compound and regular. Compound meter has 3 beats counted as one.\n\t\tvar meter = this.getMeterFraction();\n\t\tvar multiplier = 1;\n\t\tif (meter.num === 6 || meter.num === 9 || meter.num === 12)\n\t\t\tmultiplier = 3;\n\t\telse if (meter.num === 3 && meter.den === 8)\n\t\t\tmultiplier = 3;\n\n\t\treturn multiplier / meter.den;\n\t};\n\n\tfunction computePickupLength(lines, barLength) {\n\t\tvar pickupLength = 0;\n\t\tfor (var i = 0; i < lines.length; i++) {\n\t\t\tif (lines[i].staff) {\n\t\t\t\tfor (var j = 0; j < lines[i].staff.length; j++) {\n\t\t\t\t\tfor (var v = 0; v < lines[i].staff[j].voices.length; v++) {\n\t\t\t\t\t\tvar voice = lines[i].staff[j].voices[v];\n\t\t\t\t\t\tvar tripletMultiplier = 1;\n\t\t\t\t\t\tfor (var el = 0; el < voice.length; el++) {\n\t\t\t\t\t\t\tvar isSpacer = voice[el].rest && voice[el].rest.type === \"spacer\";\n\t\t\t\t\t\t\tif (voice[el].startTriplet)\n\t\t\t\t\t\t\t\ttripletMultiplier = voice[el].tripletMultiplier;\n\t\t\t\t\t\t\tif (voice[el].duration && !isSpacer && voice[el].el_type !== \"tempo\")\n\t\t\t\t\t\t\t\tpickupLength += voice[el].duration * tripletMultiplier;\n\t\t\t\t\t\t\tif (voice[el].endTriplet)\n\t\t\t\t\t\t\t\ttripletMultiplier = 1;\n\t\t\t\t\t\t\tif (pickupLength >= barLength)\n\t\t\t\t\t\t\t\tpickupLength -= barLength;\n\t\t\t\t\t\t\tif (voice[el].el_type === 'bar')\n\t\t\t\t\t\t\t\treturn pickupLength;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn pickupLength;\n\t}\n\tthis.getPickupLength = function() {\n\t\tvar barLength = this.getBarLength();\n\t\tvar pickupLength = computePickupLength(this.lines, barLength);\n\n\t\t// If computed pickup length is very close to 0 or the bar length, we assume\n\t\t// that we actually have a full bar and hence no pickup.\n\t\treturn (pickupLength < 1e-8 || barLength-pickupLength < 1e-8) ? 0 : pickupLength;\n\t};\n\n\tthis.getBarLength = function() {\n\t\tvar meter = this.getMeterFraction();\n\t\treturn meter.num / meter.den;\n\t};\n\n\tthis.getTotalTime = function() {\n\t\treturn this.totalTime;\n\t};\n\n\tthis.getTotalBeats = function() {\n\t\treturn this.totalBeats;\n\t};\n\n\tthis.millisecondsPerMeasure = function(bpmOverride) {\n\t\tvar bpm;\n\t\tif (bpmOverride) {\n\t\t\tbpm = bpmOverride;\n\t\t} else {\n\t\t\tvar tempo = this.metaText ? this.metaText.tempo : null;\n\t\t\tbpm = this.getBpm(tempo);\n\t\t}\n\t\tif (bpm <= 0)\n\t\t\tbpm = 1; // I don't think this can happen, but we don't want a possibility of dividing by zero.\n\n\t\tvar beatsPerMeasure = this.getBeatsPerMeasure();\n\n\t\tvar minutesPerMeasure = beatsPerMeasure / bpm;\n\t\treturn minutesPerMeasure * 60000;\n\t};\n\n\tthis.getBeatsPerMeasure = function() {\n\t\tvar beatLen = this.getBeatLength();\n\t\tvar barLen = this.getBarLength();\n\t\treturn barLen / beatLen;\n\t};\n\n\tthis.getMeter = function() {\n\t\tfor (var i = 0; i < this.lines.length; i++) {\n\t\t\tvar line = this.lines[i];\n\t\t\tif (line.staff) {\n\t\t\t\tfor (var j = 0; j < line.staff.length; j++) {\n\t\t\t\t\tvar meter = line.staff[j].meter;\n\t\t\t\t\tif (meter) {\n\t\t\t\t\t\treturn meter;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn { type: \"common_time\" };\n\t};\n\n\tthis.getMeterFraction = function() {\n\t\tvar meter = this.getMeter();\n\t\tvar num = 4;\n\t\tvar den = 4;\n\t\tif (meter) {\n\t\t\tif (meter.type === 'specified') {\n\t\t\t\tnum = parseInt(meter.value[0].num, 10);\n\t\t\t\tden = parseInt(meter.value[0].den,10);\n\t\t\t} else if (meter.type === 'cut_time') {\n\t\t\t\tnum = 2;\n\t\t\t\tden = 2;\n\t\t\t} else if (meter.type === 'common_time') {\n\t\t\t\tnum = 4;\n\t\t\t\tden = 4;\n\t\t\t}\n\t\t}\n\t\tthis.meter = { num: num, den: den };\n\t\treturn this.meter; // TODO-PER: is this saved value used anywhere? A get function shouldn't change state.\n\t};\n\n\tthis.getKeySignature = function() {\n\t\tfor (var i = 0; i < this.lines.length; i++) {\n\t\t\tvar line = this.lines[i];\n\t\t\tif (line.staff) {\n\t\t\t\tfor (var j = 0; j < line.staff.length; j++) {\n\t\t\t\t\tif (line.staff[j].key)\n\t\t\t\t\t\treturn line.staff[j].key;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn { };\n\t};\n\n\tthis.getElementFromChar = function(char) {\n\t\tfor (var i = 0; i < this.lines.length; i++) {\n\t\t\tvar line = this.lines[i];\n\t\t\tif (line.staff) {\n\t\t\t\tfor (var j = 0; j < line.staff.length; j++) {\n\t\t\t\t\tvar staff = line.staff[j];\n\t\t\t\t\tfor (var k = 0; k < staff.voices.length; k++) {\n\t\t\t\t\t\tvar voice = staff.voices[k];\n\t\t\t\t\t\tfor (var ii = 0; ii < voice.length; ii++) {\n\t\t\t\t\t\t\tvar elem = voice[ii];\n\t\t\t\t\t\t\tif (elem.startChar && elem.endChar &&\n\t\t\t\t\t\t\t\telem.startChar <= char && elem.endChar > char)\n\t\t\t\t\t\t\t\treturn elem;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\n\tfunction addVerticalInfo(timingEvents) {\n\t\t// Add vertical info to the bar events: put the next event's top, and the event after the next measure's top.\n\t\tvar lastBarTop;\n\t\tvar lastBarBottom;\n\t\tvar lastEventTop;\n\t\tvar lastEventBottom;\n\t\tfor (var e = timingEvents.length - 1; e >= 0; e--) {\n\t\t\tvar ev = timingEvents[e];\n\t\t\tif (ev.type === 'bar') {\n\t\t\t\tev.top = lastEventTop;\n\t\t\t\tev.nextTop = lastBarTop;\n\t\t\t\tlastBarTop = lastEventTop;\n\n\t\t\t\tev.bottom = lastEventBottom;\n\t\t\t\tev.nextBottom = lastBarBottom;\n\t\t\t\tlastBarBottom = lastEventBottom;\n\t\t\t} else if (ev.type === 'event') {\n\t\t\t\tlastEventTop = ev.top;\n\t\t\t\tlastEventBottom = ev.top + ev.height;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction makeSortedArray(hash) {\n\t\tvar arr = [];\n\t\tfor (var k in hash) {\n\t\t\tif (hash.hasOwnProperty(k))\n\t\t\t\tarr.push(hash[k]);\n\t\t}\n\t\tarr = arr.sort(function (a, b) {\n\t\t\tvar diff = a.milliseconds - b.milliseconds;\n\t\t\t// if the events have the same time, make sure a bar comes before a note\n\t\t\tif (diff !== 0) {\n\t\t\t\treturn diff;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn a.type === \"bar\" ? -1 : 1;\n\t\t\t}\n\t\t});\n\t\treturn arr;\n\t}\n\n\tthis.addElementToEvents = function(eventHash, element, voiceTimeMilliseconds, top, height, line, measureNumber, timeDivider, isTiedState, nextIsBar) {\n\t\tif (element.hint)\n\t\t\treturn { isTiedState: undefined, duration: 0 };\n\t\tvar realDuration = element.durationClass ? element.durationClass : element.duration;\n\t\tif (element.abcelem.rest && element.abcelem.rest.type === \"spacer\")\n\t\t\trealDuration = 0;\n\t\tif (realDuration > 0) {\n\t\t\tvar es = [];\n\t\t\t// If there is an invisible rest, then there are not elements, so don't push a null one.\n\t\t\tfor (var i = 0; i < element.elemset.length; i++) {\n\t\t\t\tif (element.elemset[i] !== null)\n\t\t\t\t\tes.push(element.elemset[i]);\n\t\t\t}\n\t\t\tvar isTiedToNext = element.startTie;\n\t\t\tif (isTiedState !== undefined) {\n\t\t\t\teventHash[\"event\" + isTiedState].elements.push(es); // Add the tied note to the first note that it is tied to\n\t\t\t\tif (nextIsBar) {\n\t\t\t\t\tif (!eventHash[\"event\" + voiceTimeMilliseconds]) {\n\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds] = {\n\t\t\t\t\t\t\ttype: \"event\",\n\t\t\t\t\t\t\tmilliseconds: voiceTimeMilliseconds,\n\t\t\t\t\t\t\tline: line,\n\t\t\t\t\t\t\tmeasureNumber: measureNumber,\n\t\t\t\t\t\t\ttop: top,\n\t\t\t\t\t\t\theight: height,\n\t\t\t\t\t\t\tleft: null,\n\t\t\t\t\t\t\twidth: 0,\n\t\t\t\t\t\t\telements: [],\n\t\t\t\t\t\t\tstartChar: null,\n\t\t\t\t\t\t\tendChar: null,\n\t\t\t\t\t\t\tstartCharArray: [],\n\t\t\t\t\t\t\tendCharArray: []\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].measureStart = true;\n\t\t\t\t\tnextIsBar = false;\n\t\t\t\t}\n\t\t\t\tif (!isTiedToNext)\n\t\t\t\t\tisTiedState = undefined;\n\t\t\t} else {\n\t\t\t\t// the last note wasn't tied.\n\t\t\t\tif (!eventHash[\"event\" + voiceTimeMilliseconds]) {\n\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds] = {\n\t\t\t\t\t\ttype: \"event\",\n\t\t\t\t\t\tmilliseconds: voiceTimeMilliseconds,\n\t\t\t\t\t\tline: line,\n\t\t\t\t\t\tmeasureNumber: measureNumber,\n\t\t\t\t\t\ttop: top,\n\t\t\t\t\t\theight: height,\n\t\t\t\t\t\tleft: element.x,\n\t\t\t\t\t\twidth: element.w,\n\t\t\t\t\t\telements: [es],\n\t\t\t\t\t\tstartChar: element.abcelem.startChar,\n\t\t\t\t\t\tendChar: element.abcelem.endChar,\n\t\t\t\t\t\tstartCharArray: [element.abcelem.startChar],\n\t\t\t\t\t\tendCharArray: [element.abcelem.endChar],\n\t\t\t\t\t\tmidiPitches: element.abcelem.midiPitches ? parseCommon.cloneArray(element.abcelem.midiPitches) : []\n\t\t\t\t\t};\n\t\t\t\t\tif (element.abcelem.midiGraceNotePitches)\n\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].midiGraceNotePitches = parseCommon.cloneArray(element.abcelem.midiGraceNotePitches);\n\t\t\t\t} else {\n\t\t\t\t\t// If there is more than one voice then two notes can fall at the same time. Usually they would be lined up in the same place, but if it is a whole rest, then it is placed funny. In any case, the left most element wins.\n\t\t\t\t\tif (eventHash[\"event\" + voiceTimeMilliseconds].left)\n\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].left = Math.min(eventHash[\"event\" + voiceTimeMilliseconds].left, element.x);\n\t\t\t\t\telse\n\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].left = element.x;\n\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].elements.push(es);\n\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].startCharArray.push(element.abcelem.startChar);\n\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].endCharArray.push(element.abcelem.endChar);\n\t\t\t\t\tif (eventHash[\"event\" + voiceTimeMilliseconds].startChar === null)\n\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].startChar =element.abcelem.startChar;\n\t\t\t\t\tif (eventHash[\"event\" + voiceTimeMilliseconds].endChar === null)\n\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].endChar =element.abcelem.endChar;\n\t\t\t\t\tif (element.abcelem.midiPitches && element.abcelem.midiPitches.length) {\n\t\t\t\t\t\tif (!eventHash[\"event\" + voiceTimeMilliseconds].midiPitches)\n\t\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].midiPitches = [];\n\t\t\t\t\t\tfor (var i = 0; i < element.abcelem.midiPitches.length; i++)\n\t\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].midiPitches.push(element.abcelem.midiPitches[i]);\n\t\t\t\t\t}\n\t\t\t\t\tif (element.abcelem.midiGraceNotePitches && element.abcelem.midiGraceNotePitches.length) {\n\t\t\t\t\t\tif (!eventHash[\"event\" + voiceTimeMilliseconds].midiGraceNotePitches)\n\t\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].midiGraceNotePitches = [];\n\t\t\t\t\t\tfor (var j = 0; j < element.abcelem.midiGraceNotePitches.length; j++)\n\t\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].midiGraceNotePitches.push(element.abcelem.midiGraceNotePitches[j]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (nextIsBar) {\n\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].measureStart = true;\n\t\t\t\t\tnextIsBar = false;\n\t\t\t\t}\n\t\t\t\t// TODO-PER: There doesn't seem to be a harm in letting ties be two different notes and it fixes a bug when a tie goes to a new line. If there aren't other problems with this change, then the variable can be removed completely. \n\t\t\t\t// if (isTiedToNext)\n\t\t\t\t// \tisTiedState = voiceTimeMilliseconds;\n\t\t\t}\n\t\t}\n\t\treturn { isTiedState: isTiedState, duration: realDuration / timeDivider, nextIsBar: nextIsBar || element.type === 'bar' };\n\t};\n\n\tthis.makeVoicesArray = function() {\n\t\t// First make a new array that is arranged by voice so that the repeats that span different lines are handled correctly.\n\t\tvar voicesArr = [];\n\t\tvar measureNumber = [];\n\t\tvar tempos = {};\n\t\tfor (var line = 0; line < this.engraver.staffgroups.length; line++) {\n\t\t\tvar group = this.engraver.staffgroups[line];\n\t\t\tif (group && group.staffs && group.staffs.length > 0) {\n\t\t\t\tvar firstStaff = group.staffs[0];\n\t\t\t\tvar middleC = firstStaff.absoluteY;\n\t\t\t\tvar top = middleC - firstStaff.top * spacing.STEP;\n\t\t\t\tvar lastStaff = group.staffs[group.staffs.length - 1];\n\t\t\t\tmiddleC = lastStaff.absoluteY;\n\t\t\t\tvar bottom = middleC - lastStaff.bottom * spacing.STEP;\n\t\t\t\tvar height = bottom - top;\n\n\t\t\t\tvar voices = group.voices;\n\t\t\t\tfor (var v = 0; v < voices.length; v++) {\n\t\t\t\t\tif (voices[v].staff && voices[v].staff.isTabStaff)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tvar noteFound = false;\n\t\t\t\t\tif (!voicesArr[v])\n\t\t\t\t\t\tvoicesArr[v] = [];\n\t\t\t\t\tif (measureNumber[v] === undefined)\n\t\t\t\t\t\tmeasureNumber[v] = 0;\n\t\t\t\t\tvar elements = voices[v].children;\n\t\t\t\t\tfor (var elem = 0; elem < elements.length; elem++) {\n\t\t\t\t\t\tif (elements[elem].type === \"tempo\")\n\t\t\t\t\t\t\ttempos[measureNumber[v]] = this.getBpm(elements[elem].abcelem);\n\t\t\t\t\t\tvoicesArr[v].push({top: top, height: height, line: group.line, measureNumber: measureNumber[v], elem: elements[elem]});\n\t\t\t\t\t\tif (elements[elem].type === 'bar' && noteFound) // Count the measures by counting the bar lines, but skip a bar line that appears at the left of the music, before any notes.\n\t\t\t\t\t\t\tmeasureNumber[v]++;\n\t\t\t\t\t\tif (elements[elem].type === 'note' || elements[elem].type === 'rest')\n\t\t\t\t\t\t\tnoteFound = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.tempoLocations = tempos; // This should be passed back, but the function is accessible publicly so that would break the interface.\n\t\treturn voicesArr;\n\t};\n\n\tthis.setupEvents = function(startingDelay, timeDivider, startingBpm, warp) {\n\t\tif (!warp) warp = 1;\n\t\tvar timingEvents = [];\n\n\t\tvar eventHash = {};\n\t\t// The time is the number of seconds from the beginning of the piece.\n\t\t// The units we are scanning are in notation units (i.e. 0.25 is a quarter note)\n\t\tvar time = startingDelay;\n\t\tvar isTiedState;\n\t\tvar nextIsBar = true;\n\t\tvar voices = this.makeVoicesArray();\n\t\tvar maxVoiceTimeMilliseconds = 0;\n\t\tfor (var v = 0; v < voices.length; v++) {\n\t\t\tvar voiceTime = time;\n\t\t\tvar voiceTimeMilliseconds = Math.round(voiceTime * 1000);\n\t\t\tvar startingRepeatElem = 0;\n\t\t\tvar endingRepeatElem = -1;\n\t\t\tvar elements = voices[v];\n\t\t\tvar bpm = startingBpm;\n\t\t\ttimeDivider = this.getBeatLength() * bpm / 60;\n\t\t\tvar tempoDone = -1;\n\t\t\tfor (var elem = 0; elem < elements.length; elem++) {\n\t\t\t\tvar thisMeasure = elements[elem].measureNumber;\n\t\t\t\tif (tempoDone !== thisMeasure && this.tempoLocations[thisMeasure]) {\n\t\t\t\t\tbpm = this.tempoLocations[thisMeasure];\n\t\t\t\t\ttimeDivider = warp * this.getBeatLength() * bpm / 60;\n\t\t\t\t\ttempoDone = thisMeasure;\n\t\t\t\t}\n\t\t\t\tvar element = elements[elem].elem;\n\t\t\t\tvar ret = this.addElementToEvents(eventHash, element, voiceTimeMilliseconds, elements[elem].top, elements[elem].height, elements[elem].line, elements[elem].measureNumber, timeDivider, isTiedState, nextIsBar);\n\t\t\t\tisTiedState = ret.isTiedState;\n\t\t\t\tnextIsBar = ret.nextIsBar;\n\t\t\t\tvoiceTime += ret.duration;\n\t\t\t\tvar lastHash;\n\t\t\t\tif (element.duration > 0 && eventHash[\"event\" + voiceTimeMilliseconds]) // This won't exist if this is the end of a tie.\n\t\t\t\t\tlastHash = \"event\" + voiceTimeMilliseconds;\n\t\t\t\tvoiceTimeMilliseconds = Math.round(voiceTime * 1000);\n\t\t\t\tif (element.type === 'bar') {\n\t\t\t\t\tvar barType = element.abcelem.type;\n\t\t\t\t\tvar endRepeat = (barType === \"bar_right_repeat\" || barType === \"bar_dbl_repeat\");\n\t\t\t\t\tvar startEnding = (element.abcelem.startEnding === '1');\n\t\t\t\t\tvar startRepeat = (barType === \"bar_left_repeat\" || barType === \"bar_dbl_repeat\" || barType === \"bar_right_repeat\");\n\t\t\t\t\tif (endRepeat) {\n\t\t\t\t\t\t// Force the end of the previous note to the position of the measure - the cursor won't go past the end repeat\n\t\t\t\t\t\tif (elem > 0) {\n\t\t\t\t\t\t\teventHash[lastHash].endX = element.x;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (endingRepeatElem === -1)\n\t\t\t\t\t\t\tendingRepeatElem = elem;\n\t\t\t\t\t\tvar lastVoiceTimeMilliseconds = 0;\n\t\t\t\t\t\ttempoDone = -1;\n\t\t\t\t\t\tfor (var el2 = startingRepeatElem; el2 < endingRepeatElem; el2++) {\n\t\t\t\t\t\t\tthisMeasure = elements[el2].measureNumber;\n\t\t\t\t\t\t\tif (tempoDone !== thisMeasure && this.tempoLocations[thisMeasure]) {\n\t\t\t\t\t\t\t\tbpm = this.tempoLocations[thisMeasure];\n\t\t\t\t\t\t\t\ttimeDivider = warp * this.getBeatLength() * bpm / 60;\n\t\t\t\t\t\t\t\ttempoDone = thisMeasure;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvar element2 = elements[el2].elem;\n\t\t\t\t\t\t\tret = this.addElementToEvents(eventHash, element2, voiceTimeMilliseconds, elements[el2].top, elements[el2].height, elements[el2].line, elements[el2].measureNumber, timeDivider, isTiedState, nextIsBar);\n\t\t\t\t\t\t\tisTiedState = ret.isTiedState;\n\t\t\t\t\t\t\tnextIsBar = ret.nextIsBar;\n\t\t\t\t\t\t\tvoiceTime += ret.duration;\n\t\t\t\t\t\t\tlastVoiceTimeMilliseconds = voiceTimeMilliseconds;\n\t\t\t\t\t\t\tvoiceTimeMilliseconds = Math.round(voiceTime * 1000);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (eventHash[\"event\" + lastVoiceTimeMilliseconds]) // This won't exist if it is the beginning of the next line. That's ok because we will just count the end of the last line as the end.\n\t\t\t\t\t\t\teventHash[\"event\" + lastVoiceTimeMilliseconds].endX = elements[endingRepeatElem].elem.x;\n\t\t\t\t\t\tnextIsBar = true;\n\t\t\t\t\t\tendingRepeatElem = -1;\n\t\t\t\t\t}\n\t\t\t\t\tif (startEnding)\n\t\t\t\t\t\tendingRepeatElem = elem;\n\t\t\t\t\tif (startRepeat)\n\t\t\t\t\t\tstartingRepeatElem = elem;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmaxVoiceTimeMilliseconds = Math.max(maxVoiceTimeMilliseconds, voiceTimeMilliseconds)\n\t\t}\n\t\t// now we have all the events, but if there are multiple voices then there may be events out of order or duplicated, so normalize it.\n\t\ttimingEvents = makeSortedArray(eventHash);\n\t\taddVerticalInfo(timingEvents);\n\t\taddEndPoints(this.lines, timingEvents)\n\t\ttimingEvents.push({ type: \"end\", milliseconds: maxVoiceTimeMilliseconds });\n\t\tthis.addUsefulCallbackInfo(timingEvents, bpm*warp);\n\t\treturn timingEvents;\n\t};\n\n\tthis.addUsefulCallbackInfo = function(timingEvents, bpm) {\n\t\tvar millisecondsPerMeasure = this.millisecondsPerMeasure(bpm);\n\t\tfor (var i = 0; i < timingEvents.length; i++) {\n\t\t\tvar ev = timingEvents[i];\n\t\t\tev.millisecondsPerMeasure = millisecondsPerMeasure;\n\t\t}\n\t};\n\n\tfunction skipTies(elements, index) {\n\t\twhile (index < elements.length && elements[index].left === null)\n\t\t\tindex++;\n\t\treturn elements[index];\n\t}\n\tfunction addEndPoints(lines, elements) {\n\t\tif (elements.length < 1)\n\t\t\treturn;\n\t\tfor (var i = 0; i < elements.length-1; i++) {\n\t\t\tvar el = elements[i];\n\t\t\tvar next = skipTies(elements, i+1);\n\t\t\tif (el.left !== null) {\n\t\t\t\t// If there is no left element that is because this is a tie so it should be skipped.\n\t\t\t\tvar endX = (next && el.top === next.top) ? next.left : lines[el.line].staffGroup.w;\n\t\t\t\t// If this is already set, it is because the notes aren't sequential here, like the next thing is a repeat bar line.\n\t\t\t\t// In that case, the right-most position is passed in. There could still be an intervening note in another voice, so always look for the closest position.\n\t\t\t\t// If there is a repeat that stays on the same line, the endX set above won't be right because the next note will be before. In that case, use the endX that was calculated.\n\t\t\t\tif (el.endX !== undefined) {\n\t\t\t\t\tif (endX > el.left)\n\t\t\t\t\t\tel.endX = Math.min(el.endX, endX);\n\t\t\t\t} else\n\t\t\t\t\tel.endX = endX;\n\t\t\t}\n\t\t}\n\t\tvar lastEl = elements[elements.length-1];\n\t\tlastEl.endX = lines[lastEl.line].staffGroup.w;\n\t}\n\n\tthis.getBpm = function(tempo) {\n\t\tvar bpm;\n\t\tif (tempo) {\n\t\t\tbpm = tempo.bpm;\n\t\t\tvar beatLength = this.getBeatLength();\n\t\t\tvar statedBeatLength = tempo.duration && tempo.duration.length > 0 ? tempo.duration[0] : beatLength;\n\t\t\tbpm = bpm * statedBeatLength / beatLength;\n\t\t}\n\t\tif (!bpm) {\n\t\t\tbpm = 180;\n\t\t\t// Compensate for compound meter, where the beat isn't a beat.\n\t\t\tvar meter = this.getMeterFraction();\n\t\t\tif (meter && meter.num !== 3 && (meter.num % 3 === 0)) {\n\t\t\t\tbpm = 120;\n\t\t\t}\n\t\t}\n\t\treturn bpm;\n\t};\n\n\tthis.setTiming = function (bpm, measuresOfDelay) {\n\t\tmeasuresOfDelay = measuresOfDelay || 0;\n\t\tif (!this.engraver || !this.engraver.staffgroups) {\n\t\t\tconsole.log(\"setTiming cannot be called before the tune is drawn.\");\n\t\t\tthis.noteTimings = [];\n\t\t\treturn this.noteTimings;\n\t\t}\n\n\t\tvar tempo = this.metaText ? this.metaText.tempo : null;\n\t\tvar naturalBpm = this.getBpm(tempo);\n\t\tvar warp = 1;\n\t\tif (bpm) {\n\t\t\tif (tempo)\n\t\t\t\twarp = bpm / naturalBpm;\n\t\t} else\n\t\t\tbpm = naturalBpm;\n\n\t\t// Calculate the basic midi data. We only care about the qpm variable here.\n\t\t//this.setUpAudio({qpm: bpm});\n\n\t\tvar beatLength = this.getBeatLength();\n\t\tvar beatsPerSecond = bpm / 60;\n\n\t\tvar measureLength = this.getBarLength();\n\n\t\tvar startingDelay = measureLength / beatLength * measuresOfDelay / beatsPerSecond;\n\t\tif (startingDelay)\n\t\t\tstartingDelay -= this.getPickupLength() / beatLength / beatsPerSecond;\n\t\tvar timeDivider = beatLength * beatsPerSecond;\n\n\t\tthis.noteTimings = this.setupEvents(startingDelay, timeDivider, bpm, warp);\n\t\tif (this.noteTimings.length > 0) {\n\t\t\tthis.totalTime = this.noteTimings[this.noteTimings.length - 1].milliseconds / 1000;\n\t\t\tthis.totalBeats = this.totalTime * beatsPerSecond;\n\t\t} else {\n\t\t\tthis.totalTime = undefined;\n\t\t\tthis.totalBeats = undefined;\n\t\t}\n\t\treturn this.noteTimings;\n\t};\n\n\tthis.setUpAudio = function(options) {\n\t\tif (!options) options = {};\n\t\tvar seq = sequence(this, options);\n\t\treturn flatten(seq, options, this.formatting.percmap, this.formatting.midi);\n\t};\n\tthis.deline = function(options) {\n\t\treturn delineTune(this.lines, options);\n\t}\n\tthis.findSelectableElement = function(target) {\n\t\tif (this.engraver && this.engraver.selectables)\n\t\t\treturn this.engraver.findSelectableElement(target)\n\t\treturn null\n\t}\n\tthis.getSelectableArray = function() {\n\t\tif (this.engraver && this.engraver.selectables)\n\t\t\treturn this.engraver.selectables\n\t\treturn []\n\t}\n};\n\nmodule.exports = Tune;\n","function delineTune(inputLines, options) {\n\tif (!options) options = {};\n\tvar lineBreaks = !!options.lineBreaks;\n\tvar outputLines = [];\n\tvar inMusicLine = false;\n\tvar currentMeter = [];\n\tvar currentKey = [];\n\tvar currentClef = [];\n\tvar currentVocalFont = [];\n\tvar currentGChordFont = [];\n\tvar currentTripletFont = [];\n\tvar currentAnnotationFont = [];\n\tfor (var i = 0; i < inputLines.length; i++) {\n\t\tvar inputLine = inputLines[i];\n\t\tif (inputLine.staff) {\n\t\t\tif (inMusicLine && !inputLine.vskip) {\n\t\t\t\tvar outputLine = outputLines[outputLines.length-1];\n\t\t\t\t//findMismatchKeys(inputLine, outputLine, [\"staff\", \"staffGroup\"], \"line\", i)\n\t\t\t\tfor (var s = 0; s < outputLine.staff.length; s++) {\n\t\t\t\t\tvar inputStaff = inputLine.staff[s];\n\t\t\t\t\tvar outputStaff = outputLine.staff[s];\n\t\t\t\t\tif (inputStaff) {\n\t\t\t\t\t\tif (!objEqual(inputStaff.meter, currentMeter[s])) {\n\t\t\t\t\t\t\t// The meter changed for this line, otherwise it wouldn't have been set\n\t\t\t\t\t\t\taddMeterToVoices(inputStaff.meter, inputStaff.voices)\n\t\t\t\t\t\t\tcurrentMeter[s] = inputStaff.meter;\n\t\t\t\t\t\t\tdelete inputStaff.meter;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!objEqual(inputStaff.key, currentKey[s])) {\n\t\t\t\t\t\t\taddKeyToVoices(inputStaff.key, inputStaff.voices);\n\t\t\t\t\t\t\tcurrentKey[s] = inputStaff.key;\n\t\t\t\t\t\t\tdelete inputStaff.key;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (inputStaff.title)\n\t\t\t\t\t\t\toutputStaff.abbrevTitle = inputStaff.title;\n\t\t\t\t\t\tif (!objEqual(inputStaff.clef, currentClef[s])) {\n\t\t\t\t\t\t\taddClefToVoices(inputStaff.clef, inputStaff.voices);\n\t\t\t\t\t\t\tcurrentClef[s] = inputStaff.clef;\n\t\t\t\t\t\t\tdelete inputStaff.clef;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!objEqual(inputStaff.vocalfont, currentVocalFont[s])) {\n\t\t\t\t\t\t\taddFontToVoices(inputStaff.vocalfont, inputStaff.voices, 'vocalfont')\n\t\t\t\t\t\t\tcurrentVocalFont[s] = inputStaff.vocalfont;\n\t\t\t\t\t\t\tdelete inputStaff.vocalfont;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!objEqual(inputStaff.gchordfont, currentGChordFont[s])) {\n\t\t\t\t\t\t\taddFontToVoices(inputStaff.gchordfont, inputStaff.voices, 'gchordfont')\n\t\t\t\t\t\t\tcurrentGChordFont[s] = inputStaff.gchordfont;\n\t\t\t\t\t\t\tdelete inputStaff.gchordfont;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!objEqual(inputStaff.tripletfont, currentTripletFont[s])) {\n\t\t\t\t\t\t\taddFontToVoices(inputStaff.tripletfont, inputStaff.voices, 'tripletfont')\n\t\t\t\t\t\t\tcurrentTripletFont[s] = inputStaff.tripletfont;\n\t\t\t\t\t\t\tdelete inputStaff.tripletfont;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!objEqual(inputStaff.annotationfont, currentAnnotationFont[s])) {\n\t\t\t\t\t\t\taddFontToVoices(inputStaff.annotationfont, inputStaff.voices, 'annotationfont')\n\t\t\t\t\t\t\tcurrentAnnotationFont[s] = inputStaff.annotationfont;\n\t\t\t\t\t\t\tdelete inputStaff.annotationfont;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//findMismatchKeys(inputStaff, outputStaff, [\"voices\", \"title\", \"abbrevTitle\", \"barNumber\", \"meter\", \"key\", \"clef\", \"vocalfont\", \"gchordfont\", \"tripletfont\", \"annotationfont\"], \"staff\", i + ' ' + s)\n\t\t\t\t\tif (inputStaff) {\n\t\t\t\t\t\tfor (var v = 0; v < outputStaff.voices.length; v++) {\n\t\t\t\t\t\t\tvar outputVoice = outputStaff.voices[v];\n\t\t\t\t\t\t\tvar inputVoice = inputStaff.voices[v];\n\t\t\t\t\t\t\tif (lineBreaks)\n\t\t\t\t\t\t\t\toutputVoice.push({el_type: \"break\"});\n\t\t\t\t\t\t\tif (inputVoice)\n\t\t\t\t\t\t\t\toutputStaff.voices[v] = outputVoice.concat(inputVoice)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (var ii = 0; ii < inputLine.staff.length; ii++) {\n\t\t\t\t\tcurrentKey[ii] = inputLine.staff[ii].key;\n\t\t\t\t\tcurrentMeter[ii] = inputLine.staff[ii].meter;\n\t\t\t\t\tcurrentClef[ii] = inputLine.staff[ii].clef;\n\t\t\t\t}\n\t\t\t\t// copy this because we are going to change it and we don't want to change the original.\n\t\t\t\toutputLines.push(cloneLine(inputLine));\n\t\t\t}\n\t\t\tinMusicLine = true;\n\t\t} else {\n\t\t\tinMusicLine = false;\n\t\t\toutputLines.push(inputLine);\n\t\t}\n\t}\n\treturn outputLines;\n}\n// function findMismatchKeys(input, output, ignore, context, context2) {\n// \tif (!input) {\n// \t\treturn;\n// \t}\n// \tvar outputKeys = Object.keys(output);\n// \tvar inputKeys = Object.keys(input);\n// \tfor (var ii = 0; ii < ignore.length; ii++) {\n// \t\tif (outputKeys.indexOf(ignore[ii]) >= 0) {\n// \t\t\toutputKeys.splice(outputKeys.indexOf(ignore[ii]), 1);\n// \t\t}\n// \t\tif (inputKeys.indexOf(ignore[ii]) >= 0) {\n// \t\t\tinputKeys.splice(inputKeys.indexOf(ignore[ii]), 1);\n// \t\t}\n// \t}\n// \tif (inputKeys.join(\",\") !== outputKeys.join(\",\")) {\n// \t\tconsole.log(\"keys mismatch \"+context + ' ' + context2, input, output);\n// \t}\n// \tfor (var k = 0; k < inputKeys.length; k++) {\n// \t\tvar key = inputKeys[k];\n// \t\tif (ignore.indexOf(key) < 0) {\n// \t\t\tvar inputValue = JSON.stringify(input[key], replacer);\n// \t\t\tvar outputValue = JSON.stringify(output[key], replacer);\n// \t\t\tif (inputValue !== outputValue)\n// \t\t\t\tconsole.log(\"value mismatch \"+context + ' ' + context2 + ' ' + key, inputValue, outputValue)\n// \t\t}\n// \t}\n// }\nfunction replacer(key, value) {\n\t// Filtering out properties\n\tif (key === 'abselem') {\n\t\treturn 'abselem';\n\t}\n\treturn value;\n}\n\nfunction addMeterToVoices(meter, voices) {\n\tmeter.el_type = \"meter\";\n\tmeter.startChar = -1;\n\tmeter.endChar = -1;\n\tfor (var i = 0; i < voices.length; i++) {\n\t\tvoices[i].unshift(meter);\n\t}\n}\n\nfunction addKeyToVoices(key, voices) {\n\tkey.el_type = \"key\";\n\tkey.startChar = -1;\n\tkey.endChar = -1;\n\tfor (var i = 0; i < voices.length; i++) {\n\t\tvoices[i].unshift(key);\n\t}\n}\n\nfunction addClefToVoices(clef, voices) {\n\tclef.el_type = \"clef\";\n\tclef.startChar = -1;\n\tclef.endChar = -1;\n\tfor (var i = 0; i < voices.length; i++) {\n\t\tvoices[i].unshift(clef);\n\t}\n}\n\nfunction addFontToVoices(font, voices, type) {\n\tfont.el_type = \"font\";\n\tfont.type = type;\n\tfont.startChar = -1;\n\tfont.endChar = -1;\n\tfor (var i = 0; i < voices.length; i++) {\n\t\tvoices[i].unshift(font);\n\t}\n}\n\nfunction objEqual(input, output) {\n\tif (!input)\n\t\treturn true; // the default is whatever the old output is.\n\tvar inputValue = JSON.stringify(input, replacer);\n\tvar outputValue = JSON.stringify(output, replacer);\n\treturn inputValue === outputValue;\n}\n\nfunction cloneLine(line) {\n\tvar output = {};\n\tvar keys = Object.keys(line);\n\tfor (var i = 0; i < keys.length; i++) {\n\t\tif (keys[i] !== \"staff\")\n\t\t\toutput[keys[i]] = line[keys[i]];\n\t\telse {\n\t\t\toutput.staff = [];\n\t\t\tfor (var j = 0; j < line.staff.length; j++) {\n\t\t\t\tvar staff = {};\n\t\t\t\tvar keys2 = Object.keys(line.staff[j]);\n\t\t\t\tfor (var k = 0; k < keys2.length; k++) {\n\t\t\t\t\tif (keys2[k] !== \"voices\")\n\t\t\t\t\t\tstaff[keys2[k]] = line.staff[j][keys2[k]];\n\t\t\t\t\telse {\n\t\t\t\t\t\tstaff.voices = [];\n\t\t\t\t\t\tfor (var v = 0; v < line.staff[j].voices.length; v++) {\n\t\t\t\t\t\t\tstaff.voices.push([].concat(line.staff[j].voices[v]));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\toutput.staff.push(staff)\n\t\t\t}\n\t\t}\n\t}\n\treturn output;\n}\n\nmodule.exports = delineTune;\n","// abc_editor.js\n\n// window.ABCJS.Editor is the interface class for the area that contains the ABC text. It is responsible for\n// holding the text of the tune and calling the parser and the rendering engines.\n//\n// EditArea is an example of using a textarea as the control that is shown to the user. As long as\n// the same interface is used, window.ABCJS.Editor can use a different type of object.\n//\n// EditArea:\n// - constructor(textareaid)\n//\t\tThis contains the id of a textarea control that will be used.\n// - addSelectionListener(listener)\n//\t\tA callback class that contains the entry point fireSelectionChanged()\n// - addChangeListener(listener)\n//\t\tA callback class that contains the entry point fireChanged()\n// - getSelection()\n//\t\treturns the object { start: , end: } with the current selection in characters\n// - setSelection(start, end)\n//\t\tstart and end are the character positions that should be selected.\n// - getString()\n//\t\treturns the ABC text that is currently displayed.\n// - setString(str)\n//\t\tsets the ABC text that is currently displayed, and resets the initialText variable\n// - getElem()\n//\t\treturns the textarea element\n// - string initialText\n//\t\tContains the starting text. This can be compared against the current text to see if anything changed.\n//\n\n// Polyfill for CustomEvent for old IE versions\ntry {\n\tif (typeof window.CustomEvent !== \"function\") {\n\t\tvar CustomEvent = function (event, params) {\n\t\t\tparams = params || {bubbles: false, cancelable: false, detail: undefined};\n\t\t\tvar evt = document.createEvent('CustomEvent');\n\t\t\tevt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n\t\t\treturn evt;\n\t\t};\n\t\tCustomEvent.prototype = window.Event.prototype;\n\t\twindow.CustomEvent = CustomEvent;\n\t}\n} catch (e) {\n\t// if we aren't in a browser, this code will crash, but it is not needed then either.\n}\n\nvar EditArea = function(textareaid) {\n if (typeof textareaid === \"string\")\n this.textarea = document.getElementById(textareaid);\n else\n this.textarea = textareaid;\n this.initialText = this.textarea.value;\n this.isDragging = false;\n}\n\nEditArea.prototype.addSelectionListener = function(listener) {\n this.textarea.onmousemove = function(ev) {\n\t if (this.isDragging)\n\t listener.fireSelectionChanged();\n };\n};\n\nEditArea.prototype.addChangeListener = function(listener) {\n this.changelistener = listener;\n this.textarea.onkeyup = function() {\n listener.fireChanged();\n };\n this.textarea.onmousedown = function() {\n\tthis.isDragging = true;\n listener.fireSelectionChanged();\n };\n this.textarea.onmouseup = function() {\n\tthis.isDragging = false;\n listener.fireChanged();\n };\n this.textarea.onchange = function() {\n listener.fireChanged();\n };\n};\n\n//TODO won't work under IE?\nEditArea.prototype.getSelection = function() {\n return {start: this.textarea.selectionStart, end: this.textarea.selectionEnd};\n};\n\nEditArea.prototype.setSelection = function(start, end) {\n\tif(this.textarea.setSelectionRange)\n\t this.textarea.setSelectionRange(start, end);\n\telse if(this.textarea.createTextRange) {\n\t\t// For IE8\n\t var e = this.textarea.createTextRange();\n\t e.collapse(true);\n\t e.moveEnd('character', end);\n\t e.moveStart('character', start);\n\t e.select();\n\t}\n this.textarea.focus();\n};\n\nEditArea.prototype.getString = function() {\n return this.textarea.value;\n};\n\nEditArea.prototype.setString = function(str) {\n this.textarea.value = str;\n this.initialText = this.getString();\n if (this.changelistener) {\n this.changelistener.fireChanged();\n }\n};\n\nEditArea.prototype.getElem = function() {\n return this.textarea;\n};\n\nmodule.exports = EditArea;\n","// window.ABCJS.Editor:\n//\n// constructor(editarea, params)\n//\t\tif editarea is a string, then it is an HTML id of a textarea control.\n//\t\tOtherwise, it should be an instantiation of an object that expresses the EditArea interface.\n//\n//\t\tparams is a hash of:\n//\t\tcanvas_id: or paper_id: HTML id to draw in. If not present, then the drawing happens just below the editor.\n//\t\tgenerate_midi: if present, then midi is generated.\n//\t\tmidi_id: if present, the HTML id to place the midi control. Otherwise it is placed in the same div as the paper.\n//\t\tmidi_download_id: if present, the HTML id to place the midi download link. Otherwise it is placed in the same div as the paper.\n//\t\tgenerate_warnings: if present, then parser warnings are displayed on the page.\n//\t\twarnings_id: if present, the HTML id to place the warnings. Otherwise they are placed in the same div as the paper.\n//\t\tonchange: if present, the callback function to call whenever there has been a change.\n//\t\tgui: if present, the paper can send changes back to the editor (presumably because the user changed something directly.)\n//\t\tparser_options: options to send to the parser engine.\n//\t\tmidi_options: options to send to the midi engine.\n//\t\trender_options: options to send to the render engine.\n//\t\tindicate_changed: the dirty flag is set if this is true.\n//\n// - setReadOnly(bool)\n//\t\tadds or removes the class abc_textarea_readonly, and adds or removes the attribute readonly=yes\n// - setDirtyStyle(bool)\n//\t\tadds or removes the class abc_textarea_dirty\n// - modelChanged()\n//\t\tCalled when the model has been changed to trigger re-rendering\n// - parseABC()\n//\t\tCalled internally by fireChanged()\n//\t\treturns true if there has been a change since last call.\n// - updateSelection()\n//\t\tCalled when the user has changed the selection. This calls the engraver to show the selection.\n// - fireSelectionChanged()\n//\t\tCalled by the textarea object when the user has changed the selection.\n// - paramChanged(engraverparams)\n//\t\tCalled to signal that the engraver params have changed, so re-rendering should occur.\n// - fireChanged()\n//\t\tCalled by the textarea object when the user has changed something.\n// - setNotDirty()\n//\t\tCalled by the client app to reset the dirty flag\n// - isDirty()\n//\t\tReturns true or false, whether the textarea contains the same text that it started with.\n// - highlight(abcelem)\n//\t\tCalled by the engraver to highlight an area.\n// - pause(bool)\n//\t\tStops the automatic rendering when the user is typing.\n//\nvar parseCommon = require('../parse/abc_common');\nvar SynthController = require('../synth/synth-controller');\nvar supportsAudio = require('../synth/supports-audio');\nvar renderAbc = require('../api/abc_tunebook_svg');\nvar EditArea = require('./abc_editarea');\n\nfunction gatherAbcParams(params) {\n\t// There used to be a bunch of ways parameters can be passed in. This just simplifies it.\n\tvar abcjsParams = {};\n\tvar key;\n\tif (params.abcjsParams) {\n\t\tfor (key in params.abcjsParams) {\n\t\t\tif (params.abcjsParams.hasOwnProperty(key)) {\n\t\t\t\tabcjsParams[key] = params.abcjsParams[key];\n\t\t\t}\n\t\t}\n\t}\n\tif (params.midi_options) {\n\t\tfor (key in params.midi_options) {\n\t\t\tif (params.midi_options.hasOwnProperty(key)) {\n\t\t\t\tabcjsParams[key] = params.midi_options[key];\n\t\t\t}\n\t\t}\n\t}\n\tif (params.parser_options) {\n\t\tfor (key in params.parser_options) {\n\t\t\tif (params.parser_options.hasOwnProperty(key)) {\n\t\t\t\tabcjsParams[key] = params.parser_options[key];\n\t\t\t}\n\t\t}\n\t}\n\tif (params.render_options) {\n\t\tfor (key in params.render_options) {\n\t\t\tif (params.render_options.hasOwnProperty(key)) {\n\t\t\t\tabcjsParams[key] = params.render_options[key];\n\t\t\t}\n\t\t}\n\t}\n\t/*\n\tif (params.tablature_options) {\n\t\tabcjsParams['tablatures'] = params.tablature_options;\n\t}\n\t*/\n\tif (abcjsParams.tablature) {\n\t\tif (params.warnings_id) {\n\t\t\t// store for plugin error handling\n\t\t\tabcjsParams.tablature.warnings_id = params.warnings_id;\n\t\t}\n\t}\n\treturn abcjsParams;\n}\n\nvar Editor = function(editarea, params) {\n\t// Copy all the options that will be passed through\n\tthis.abcjsParams = gatherAbcParams(params);\n\n\tif (params.indicate_changed)\n\t\tthis.indicate_changed = true;\n if (typeof editarea === \"string\") {\n this.editarea = new EditArea(editarea);\n } else {\n this.editarea = editarea;\n }\n this.editarea.addSelectionListener(this);\n this.editarea.addChangeListener(this);\n\n if (params.canvas_id) {\n this.div = params.canvas_id;\n } else if (params.paper_id) {\n this.div = params.paper_id;\n } else {\n this.div = document.createElement(\"DIV\");\n this.editarea.getElem().parentNode.insertBefore(this.div, this.editarea.getElem());\n }\n if (typeof this.div === 'string')\n\t this.div = document.getElementById(this.div);\n\n if (params.selectionChangeCallback) {\n \tthis.selectionChangeCallback = params.selectionChangeCallback;\n }\n\n this.clientClickListener = this.abcjsParams.clickListener;\n this.abcjsParams.clickListener = this.highlight.bind(this);\n\n if (params.synth) {\n \tif (supportsAudio()) {\n\t this.synth = {\n\t\t el: params.synth.el,\n\t\t cursorControl: params.synth.cursorControl,\n\t\t options: params.synth.options\n\t };\n }\n }\n\t// If the user wants midi, then store the elements that it will be written to. The element could either be passed in as an id,\n\t// an element, or nothing. If nothing is passed in, then just put the midi on top of the generated music.\n\tif (params.generate_midi) {\n\t \tthis.generate_midi = params.generate_midi;\n\t\tif (this.abcjsParams.generateDownload) {\n\t\t\tif (typeof params.midi_download_id === 'string')\n\t\t\t\tthis.downloadMidi = document.getElementById(params.midi_download_id);\n\t\t\telse if (params.midi_download_id) // assume, if the var is not a string it is an element. If not, it will crash soon enough.\n\t\t\t\tthis.downloadMidi = params.midi_download_id;\n\t\t}\n\t\tif (this.abcjsParams.generateInline !== false) { // The default for this is true, so undefined is also true.\n\t\t\tif (typeof params.midi_id === 'string')\n\t\t\t\tthis.inlineMidi = document.getElementById(params.midi_id);\n\t\t\telse if (params.midi_id) // assume, if the var is not a string it is an element. If not, it will crash soon enough.\n\t\t\t\tthis.inlineMidi = params.midi_id;\n\t\t}\n\t}\n\n if (params.warnings_id) {\n \tif (typeof(params.warnings_id) === \"string\")\n this.warningsdiv = document.getElementById(params.warnings_id);\n \telse\n\t\tthis.warningsdiv = params.warnings_id;\n } else if (params.generate_warnings) {\n\t this.warningsdiv = document.createElement(\"div\");\n\t this.div.parentNode.insertBefore(this.warningsdiv, this.div);\n }\n\n this.onchangeCallback = params.onchange;\n\n this.currentAbc = \"\";\n this.tunes = [];\n this.bReentry = false;\n this.parseABC();\n this.modelChanged();\n\n this.addClassName = function(element, className) {\n var hasClassName = function(element, className) {\n var elementClassName = element.className;\n return (elementClassName.length > 0 && (elementClassName === className ||\n new RegExp(\"(^|\\\\s)\" + className + \"(\\\\s|$)\").test(elementClassName)));\n };\n\n if (!hasClassName(element, className))\n element.className += (element.className ? ' ' : '') + className;\n return element;\n };\n\n this.removeClassName = function(element, className) {\n element.className = parseCommon.strip(element.className.replace(\n new RegExp(\"(^|\\\\s+)\" + className + \"(\\\\s+|$)\"), ' '));\n return element;\n };\n\n this.setReadOnly = function(readOnly) {\n\t var readonlyClass = 'abc_textarea_readonly';\n\t var el = this.editarea.getElem();\n if (readOnly) {\n el.setAttribute('readonly', 'yes');\n\t this.addClassName(el, readonlyClass);\n\t} else {\n el.removeAttribute('readonly');\n\t this.removeClassName(el, readonlyClass);\n }\n };\n};\n\nEditor.prototype.redrawMidi = function() {\n\tif (this.generate_midi && !this.midiPause) {\n\t\tvar event = new window.CustomEvent(\"generateMidi\", {\n\t\t\tdetail: {\n\t\t\t\ttunes: this.tunes,\n\t\t\t\tabcjsParams: this.abcjsParams,\n\t\t\t\tdownloadMidiEl: this.downloadMidi,\n\t\t\t\tinlineMidiEl: this.inlineMidi,\n\t\t\t\tengravingEl: this.div\n\t\t\t}\n\t\t});\n\t\twindow.dispatchEvent(event);\n\t}\n\tif (this.synth) {\n\t\tvar userAction = this.synth.synthControl; // Can't really tell if there was a user action before drawing, but we assume that if the synthControl was created already there was a user action.\n\t\tif (!this.synth.synthControl) {\n\t\t\tthis.synth.synthControl = new SynthController();\n\t\t\tthis.synth.synthControl.load(this.synth.el, this.synth.cursorControl, this.synth.options);\n\t\t}\n\t\tthis.synth.synthControl.setTune(this.tunes[0], userAction, this.synth.options);\n\t}\n};\n\nEditor.prototype.modelChanged = function() {\n if (this.bReentry)\n return; // TODO is this likely? maybe, if we rewrite abc immediately w/ abc2abc\n\tthis.bReentry = true;\n\ttry {\n\t\tthis.timerId = null;\n\t\tif (this.synth && this.synth.synthControl)\n\t\t\tthis.synth.synthControl.disable(true);\n\n\t\tthis.tunes = renderAbc(this.div, this.currentAbc, this.abcjsParams);\n\t\tif (this.tunes.length > 0) {\n\t\t\tthis.warnings = this.tunes[0].warnings;\n\t\t}\n\t\tthis.redrawMidi();\n\t} catch(error) {\n\t\tconsole.error(\"ABCJS error: \", error);\n\t\tif (!this.warnings)\n\t\t\tthis.warnings = [];\n\t\tthis.warnings.push(error.message);\n\t}\n\n if (this.warningsdiv) {\n this.warningsdiv.innerHTML = (this.warnings) ? this.warnings.join(\"
\") : \"No errors\";\n }\n this.updateSelection();\n this.bReentry = false;\n};\n\n// Call this to reparse in response to the client changing the parameters on the fly\nEditor.prototype.paramChanged = function(engraverParams) {\n\tif (engraverParams) {\n\t\tfor (var key in engraverParams) {\n\t\t\tif (engraverParams.hasOwnProperty(key)) {\n\t\t\t\tthis.abcjsParams[key] = engraverParams[key];\n\t\t\t}\n\t\t}\n\t}\n\tthis.currentAbc = \"\";\n\tthis.fireChanged();\n};\n\nEditor.prototype.synthParamChanged = function(options) {\n\tif (!this.synth)\n\t\treturn;\n\tthis.synth.options = {};\n\tif (options) {\n\t\tfor (var key in options) {\n\t\t\tif (options.hasOwnProperty(key)) {\n\t\t\t\tthis.synth.options[key] = options[key];\n\t\t\t}\n\t\t}\n\t}\n\tthis.currentAbc = \"\";\n\tthis.fireChanged();\n};\n\n// return true if the model has changed\nEditor.prototype.parseABC = function() {\n var t = this.editarea.getString();\n if (t===this.currentAbc) {\n this.updateSelection();\n return false;\n }\n\n this.currentAbc = t;\n return true;\n};\n\nEditor.prototype.updateSelection = function() {\n var selection = this.editarea.getSelection();\n try {\n \tif (this.tunes.length > 0 && this.tunes[0].engraver)\n\t this.tunes[0].engraver.rangeHighlight(selection.start, selection.end);\n } catch (e) {} // maybe printer isn't defined yet?\n\tif (this.selectionChangeCallback)\n\t\tthis.selectionChangeCallback(selection.start, selection.end);\n};\n\n// Called when the textarea's selection is in the process of changing (after mouse down, dragging, or keyboard arrows)\nEditor.prototype.fireSelectionChanged = function() {\n this.updateSelection();\n};\n\nEditor.prototype.setDirtyStyle = function(isDirty) {\n\tif (this.indicate_changed === undefined)\n\t\treturn;\n var addClassName = function(element, className) {\n var hasClassName = function(element, className) {\n var elementClassName = element.className;\n return (elementClassName.length > 0 && (elementClassName === className ||\n new RegExp(\"(^|\\\\s)\" + className + \"(\\\\s|$)\").test(elementClassName)));\n };\n\n if (!hasClassName(element, className))\n element.className += (element.className ? ' ' : '') + className;\n return element;\n };\n\n var removeClassName = function(element, className) {\n element.className = parseCommon.strip(element.className.replace(\n new RegExp(\"(^|\\\\s+)\" + className + \"(\\\\s+|$)\"), ' '));\n return element;\n };\n\n\tvar readonlyClass = 'abc_textarea_dirty';\n\tvar el = this.editarea.getElem();\n\tif (isDirty) {\n\t\taddClassName(el, readonlyClass);\n\t} else {\n\t\tremoveClassName(el, readonlyClass);\n }\n};\n\n// call when the textarea alerts us that the abc text is changed and needs re-parsing\nEditor.prototype.fireChanged = function() {\n if (this.bIsPaused)\n return;\n if (this.parseABC()) {\n var self = this;\n if (this.timerId)\t// If the user is still typing, cancel the update\n clearTimeout(this.timerId);\n this.timerId = setTimeout(function () {\n self.modelChanged();\n }, 300);\t// Is this a good compromise between responsiveness and not redrawing too much?\n\t var isDirty = this.isDirty();\n\t if (this.wasDirty !== isDirty) {\n\t\t this.wasDirty = isDirty;\n\t\t this.setDirtyStyle(isDirty);\n\t }\n\t if (this.onchangeCallback)\n\t\t this.onchangeCallback(this);\n\t }\n};\n\nEditor.prototype.setNotDirty = function() {\n\tthis.editarea.initialText = this.editarea.getString();\n\tthis.wasDirty = false;\n\tthis.setDirtyStyle(false);\n};\n\nEditor.prototype.isDirty = function() {\n\tif (this.indicate_changed === undefined)\n\t\treturn false;\n\treturn this.editarea.initialText !== this.editarea.getString();\n};\n\nEditor.prototype.highlight = function(abcelem, tuneNumber, classes, analysis, drag, mouseEvent) {\n\t// TODO-PER: The marker appears to get off by one for each tune parsed. I'm not sure why, but adding the tuneNumber in corrects it for the time being.\n//\tvar offset = (tuneNumber !== undefined) ? this.startPos[tuneNumber] + tuneNumber : 0;\n\n this.editarea.setSelection(abcelem.startChar, abcelem.endChar);\n\tif (this.selectionChangeCallback)\n\t\tthis.selectionChangeCallback(abcelem.startChar, abcelem.endChar);\n\tif (this.clientClickListener)\n\t\tthis.clientClickListener(abcelem, tuneNumber, classes, analysis, drag, mouseEvent);\n};\n\nEditor.prototype.pause = function(shouldPause) {\n\tthis.bIsPaused = shouldPause;\n\tif (!shouldPause)\n\t\tthis.fireChanged();\n};\n\nEditor.prototype.millisecondsPerMeasure = function() {\n\tif (!this.synth || !this.synth.synthControl || !this.synth.synthControl.visualObj)\n\t\treturn 0;\n\treturn this.synth.synthControl.visualObj.millisecondsPerMeasure();\n};\n\nEditor.prototype.pauseMidi = function(shouldPause) {\n\tthis.midiPause = shouldPause;\n\tif (!shouldPause)\n\t\tthis.redrawMidi();\n};\n\nmodule.exports = Editor;\n","// abc_midi_create.js: Turn a linear series of events into a midi file.\n\nvar rendererFactory = require('../synth/abc_midi_renderer');\n\nvar create;\n\n(function() {\n\t\"use strict\";\n\n\tvar baseDuration = 480*4; // nice and divisible, equals 1 whole note\n\n\tcreate = function(abcTune, options) {\n\t\tif (options === undefined) options = {};\n\t\tvar commands = abcTune.setUpAudio(options);\n\t\tvar midi = rendererFactory();\n\n\t\tvar title = abcTune.metaText ? abcTune.metaText.title : undefined;\n\t\tif (title && title.length > 128)\n\t\t\ttitle = title.substring(0,124) + '...';\n\t\tvar key = abcTune.getKeySignature();\n\t\tvar time = abcTune.getMeterFraction();\n\t\tvar beatsPerSecond = commands.tempo / 60;\n\t\t//var beatLength = abcTune.getBeatLength();\n\t\tmidi.setGlobalInfo(commands.tempo, title, key, time);\n\n\t\tfor (var i = 0; i < commands.tracks.length; i++) {\n\t\t\tmidi.startTrack();\n\t\t\tvar notePlacement = {};\n\t\t\tfor (var j = 0; j < commands.tracks[i].length; j++) {\n\t\t\t\tvar event = commands.tracks[i][j];\n\t\t\t\tswitch (event.cmd) {\n\t\t\t\t\tcase 'text':\n\t\t\t\t\t\tmidi.setText(event.type, event.text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'program':\n\t\t\t\t\t\tvar pan = 0;\n\t\t\t\t\t\tif (options.pan && options.pan.length > i)\n\t\t\t\t\t\t\tpan = options.pan[i];\n\t\t\t\t\t\tif (event.instrument === 128) {\n\t\t\t\t\t\t\t// If we're using the percussion voice, change to Channel 10\n\t\t\t\t\t\t\tmidi.setChannel(9, pan);\n\t\t\t\t\t\t\tmidi.setInstrument(0);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tmidi.setChannel(event.channel, pan);\n\t\t\t\t\t\t\tmidi.setInstrument(event.instrument);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'note':\n\t\t\t\t\t\tvar gapLengthInBeats = event.gap * beatsPerSecond;\n\t\t\t\t\t\tvar start = event.start;\n\t\t\t\t\t\t// The staccato and legato are indicated by event.gap.\n\t\t\t\t\t\t// event.gap is in seconds but the durations are in whole notes.\n\t\t\t\t\t\tvar end = start + event.duration - gapLengthInBeats;\n\t\t\t\t\t\tif (!notePlacement[start])\n\t\t\t\t\t\t\tnotePlacement[start] = [];\n\t\t\t\t\t\tnotePlacement[start].push({ pitch: event.pitch, volume: event.volume, cents: event.cents });\n\t\t\t\t\t\tif (!notePlacement[end])\n\t\t\t\t\t\t\tnotePlacement[end] = [];\n\t\t\t\t\t\tnotePlacement[end].push({ pitch: event.pitch, volume: 0 });\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.log(\"MIDI create Unknown: \" + event.cmd);\n\t\t\t\t}\n\t\t\t}\n\t\t\taddNotes(midi, notePlacement, baseDuration);\n\t\t\tmidi.endTrack();\n\t\t}\n\n\t\treturn midi.getData();\n\t};\n\n\tfunction addNotes(midi, notePlacement, baseDuration) {\n\t\tvar times = Object.keys(notePlacement);\n\t\tfor (var h = 0; h < times.length; h++)\n\t\t\ttimes[h] = parseFloat(times[h]);\n\t\ttimes.sort(function(a,b) {\n\t\t\treturn a - b;\n\t\t});\n\t\tvar lastTime = 0;\n\t\tfor (var i = 0; i < times.length; i++) {\n\t\t\tvar events = notePlacement[times[i]];\n\t\t\tif (times[i] > lastTime) {\n\t\t\t\tvar distance = (times[i] - lastTime) * baseDuration;\n\t\t\t\tmidi.addRest(distance);\n\t\t\t\tlastTime = times[i];\n\t\t\t}\n\t\t\tfor (var j = 0; j < events.length; j++) {\n\t\t\t\tvar event = events[j];\n\t\t\t\tif (event.volume) {\n\t\t\t\t\tmidi.startNote(event.pitch, event.volume, event.cents);\n\t\t\t\t} else {\n\t\t\t\t\tmidi.endNote(event.pitch);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n})();\n\nmodule.exports = create;\n","// abc_parse.js: parses a string representing ABC Music Notation into a usable internal structure.\n\nvar parseCommon = {};\n\nparseCommon.clone = function(source) {\n\tvar destination = {};\n\tfor (var property in source)\n\t\tif (source.hasOwnProperty(property))\n\t\t\tdestination[property] = source[property];\n\treturn destination;\n};\n\nparseCommon.cloneArray = function(source) {\n\tvar destination = [];\n\tfor (var i = 0; i < source.length; i++) {\n\t\tdestination.push(parseCommon.clone(source[i]));\n\t}\n\treturn destination;\n};\n\nparseCommon.cloneHashOfHash = function(source) {\n\tvar destination = {};\n\tfor (var property in source)\n\t\tif (source.hasOwnProperty(property))\n\t\t\tdestination[property] = parseCommon.clone(source[property]);\n\treturn destination;\n};\n\nparseCommon.cloneHashOfArrayOfHash = function(source) {\n\tvar destination = {};\n\tfor (var property in source)\n\t\tif (source.hasOwnProperty(property))\n\t\t\tdestination[property] = parseCommon.cloneArray(source[property]);\n\treturn destination;\n};\n\nparseCommon.strip = function(str) {\n\treturn str.replace(/^\\s+/, '').replace(/\\s+$/, '');\n};\n\nparseCommon.startsWith = function(str, pattern) {\n\treturn str.indexOf(pattern) === 0;\n};\n\nparseCommon.endsWith = function(str, pattern) {\n\tvar d = str.length - pattern.length;\n\treturn d >= 0 && str.lastIndexOf(pattern) === d;\n};\n\nparseCommon.last = function(arr) {\n\tif (arr.length === 0)\n\t\treturn null;\n\treturn arr[arr.length-1];\n};\n\n\nmodule.exports = parseCommon;\n","// abc_parse.js: parses a string representing ABC Music Notation into a usable internal structure.\n\nvar parseCommon = require('./abc_common');\nvar parseDirective = require('./abc_parse_directive');\nvar ParseHeader = require('./abc_parse_header');\nvar ParseMusic = require('./abc_parse_music');\nvar Tokenizer = require('./abc_tokenizer');\nvar wrap = require('./wrap_lines');\n\nvar Tune = require('../data/abc_tune');\nvar TuneBuilder = require('../parse/tune-builder');\n\nvar Parse = function() {\n\t\"use strict\";\n\tvar tune = new Tune();\n\tvar tuneBuilder = new TuneBuilder(tune);\n\tvar tokenizer;\n\tvar wordsContinuation = '';\n\tvar symbolContinuation = '';\n\n\tthis.getTune = function() {\n\t\tvar t = {\n\t\t\tformatting: tune.formatting,\n\t\t\tlines: tune.lines,\n\t\t\tmedia: tune.media,\n\t\t\tmetaText: tune.metaText,\n\t\t\tmetaTextInfo: tune.metaTextInfo,\n\t\t\tversion: tune.version,\n\n\t\t\taddElementToEvents: tune.addElementToEvents,\n\t\t\taddUsefulCallbackInfo: tune.addUsefulCallbackInfo,\n\t\t\tgetTotalTime: tune.getTotalTime,\n\t\t\tgetTotalBeats: tune.getTotalBeats,\n\t\t\tgetBarLength: tune.getBarLength,\n\t\t\tgetBeatLength: tune.getBeatLength,\n\t\t\tgetBeatsPerMeasure: tune.getBeatsPerMeasure,\n\t\t\tgetBpm: tune.getBpm,\n\t\t\tgetMeter: tune.getMeter,\n\t\t\tgetMeterFraction: tune.getMeterFraction,\n\t\t\tgetPickupLength: tune.getPickupLength,\n\t\t\tgetKeySignature: tune.getKeySignature,\n\t\t\tgetElementFromChar: tune.getElementFromChar,\n\t\t\tmakeVoicesArray: tune.makeVoicesArray,\n\t\t\tmillisecondsPerMeasure: tune.millisecondsPerMeasure,\n\t\t\tsetupEvents: tune.setupEvents,\n\t\t\tsetTiming: tune.setTiming,\n\t\t\tsetUpAudio: tune.setUpAudio,\n\t\t\tdeline: tune.deline,\n\t\t\tfindSelectableElement: tune.findSelectableElement,\n\t\t\tgetSelectableArray: tune.getSelectableArray,\n\t\t};\n\t\tif (tune.lineBreaks)\n\t\t\tt.lineBreaks = tune.lineBreaks;\n\t\tif (tune.visualTranspose)\n\t\t\tt.visualTranspose = tune.visualTranspose;\n\t\treturn t;\n\t};\n\n\tfunction addPositioning(el, type, value) {\n\t\tif (!el.positioning) el.positioning = {};\n\t\tel.positioning[type] = value;\n\t}\n\n\tfunction addFont(el, type, value) {\n\t\tif (!el.fonts) el.fonts = {};\n\t\tel.fonts[type] = value;\n\t}\n\n\tvar multilineVars = {\n\t\treset: function() {\n\t\t\tfor (var property in this) {\n\t\t\t\tif (this.hasOwnProperty(property) && typeof this[property] !== \"function\") {\n\t\t\t\t\tdelete this[property];\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.iChar = 0;\n\t\t\tthis.key = {accidentals: [], root: 'none', acc: '', mode: '' };\n\t\t\tthis.meter = null; // if no meter is specified, free meter is assumed\n\t\t\tthis.origMeter = null;\t// this is for new voices that are created after we set the meter.\n\t\t\tthis.hasMainTitle = false;\n\t\t\tthis.default_length = 0.125;\n\t\t\tthis.clef = { type: 'treble', verticalPos: 0 };\n\t\t\tthis.octave = 0;\n\t\t\tthis.next_note_duration = 0;\n\t\t\tthis.start_new_line = true;\n\t\t\tthis.is_in_header = true;\n\t\t\tthis.partForNextLine = {};\n\t\t\tthis.tempoForNextLine = [];\n\t\t\tthis.havent_set_length = true;\n\t\t\tthis.voices = {};\n\t\t\tthis.staves = [];\n\t\t\tthis.macros = {};\n\t\t\tthis.currBarNumber = 1;\n\t\t\tthis.barCounter = {};\n\t\t\tthis.ignoredDecorations = [];\n\t\t\tthis.score_is_present = false;\t// Can't have original V: lines when there is the score directive\n\t\t\tthis.inEnding = false;\n\t\t\tthis.inTie = [];\n\t\t\tthis.inTieChord = {};\n\t\t\tthis.vocalPosition = \"auto\";\n\t\t\tthis.dynamicPosition = \"auto\";\n\t\t\tthis.chordPosition = \"auto\";\n\t\t\tthis.ornamentPosition = \"auto\";\n\t\t\tthis.volumePosition = \"auto\";\n\t\t\tthis.openSlurs = [];\n\t\t\tthis.freegchord = false;\n\t\t\tthis.endingHoldOver = {};\n\t\t},\n\t\tdifferentFont: function(type, defaultFonts) {\n\t\t\tif (this[type].decoration !== defaultFonts[type].decoration) return true;\n\t\t\tif (this[type].face !== defaultFonts[type].face) return true;\n\t\t\tif (this[type].size !== defaultFonts[type].size) return true;\n\t\t\tif (this[type].style !== defaultFonts[type].style) return true;\n\t\t\tif (this[type].weight !== defaultFonts[type].weight) return true;\n\t\t\treturn false;\n\t\t},\n\t\taddFormattingOptions: function(el, defaultFonts, elType) {\n\t\t\tif (elType === 'note') {\n\t\t\t\tif (this.vocalPosition !== 'auto') addPositioning(el, 'vocalPosition', this.vocalPosition);\n\t\t\t\tif (this.dynamicPosition !== 'auto') addPositioning(el, 'dynamicPosition', this.dynamicPosition);\n\t\t\t\tif (this.chordPosition !== 'auto') addPositioning(el, 'chordPosition', this.chordPosition);\n\t\t\t\tif (this.ornamentPosition !== 'auto') addPositioning(el, 'ornamentPosition', this.ornamentPosition);\n\t\t\t\tif (this.volumePosition !== 'auto') addPositioning(el, 'volumePosition', this.volumePosition);\n\t\t\t\tif (this.differentFont(\"annotationfont\", defaultFonts)) addFont(el, 'annotationfont', this.annotationfont);\n\t\t\t\tif (this.differentFont(\"gchordfont\", defaultFonts)) addFont(el, 'gchordfont', this.gchordfont);\n\t\t\t\tif (this.differentFont(\"vocalfont\", defaultFonts)) addFont(el, 'vocalfont', this.vocalfont);\n\t\t\t\tif (this.differentFont(\"tripletfont\", defaultFonts)) addFont(el, 'tripletfont', this.tripletfont);\n\t\t\t} else if (elType === 'bar') {\n\t\t\t\tif (this.dynamicPosition !== 'auto') addPositioning(el, 'dynamicPosition', this.dynamicPosition);\n\t\t\t\tif (this.chordPosition !== 'auto') addPositioning(el, 'chordPosition', this.chordPosition);\n\t\t\t\tif (this.ornamentPosition !== 'auto') addPositioning(el, 'ornamentPosition', this.ornamentPosition);\n\t\t\t\tif (this.volumePosition !== 'auto') addPositioning(el, 'volumePosition', this.volumePosition);\n\t\t\t\tif (this.differentFont(\"measurefont\", defaultFonts)) addFont(el, 'measurefont', this.measurefont);\n\t\t\t\tif (this.differentFont(\"repeatfont\", defaultFonts)) addFont(el, 'repeatfont', this.repeatfont);\n\t\t\t}\n\t\t},\n\t\tduplicateStartEndingHoldOvers: function() {\n\t\t\tthis.endingHoldOver = {\n\t\t\t\tinTie: [],\n\t\t\t\tinTieChord: {}\n\t\t\t};\n\t\t\tfor (var i = 0; i < this.inTie.length; i++) {\n\t\t\t\tthis.endingHoldOver.inTie.push([]);\n\t\t\t\tif (this.inTie[i]) { // if a voice is suppressed there might be a gap in the array.\n\t\t\t\t\tfor (var j = 0; j < this.inTie[i].length; j++) {\n\t\t\t\t\t\tthis.endingHoldOver.inTie[i].push(this.inTie[i][j]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var key in this.inTieChord) {\n\t\t\t\tif (this.inTieChord.hasOwnProperty(key))\n\t\t\t\t\tthis.endingHoldOver.inTieChord[key] = this.inTieChord[key];\n\t\t\t}\n\t\t},\n\t\trestoreStartEndingHoldOvers: function() {\n\t\t\tif (!this.endingHoldOver.inTie)\n\t\t\t\treturn;\n\t\t\tthis.inTie = [];\n\t\t\tthis.inTieChord = {};\n\t\t\tfor (var i = 0; i < this.endingHoldOver.inTie.length; i++) {\n\t\t\t\tthis.inTie.push([]);\n\t\t\t\tfor (var j = 0; j < this.endingHoldOver.inTie[i].length; j++) {\n\t\t\t\t\tthis.inTie[i].push(this.endingHoldOver.inTie[i][j]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var key in this.endingHoldOver.inTieChord) {\n\t\t\t\tif (this.endingHoldOver.inTieChord.hasOwnProperty(key))\n\t\t\t\t\tthis.inTieChord[key] = this.endingHoldOver.inTieChord[key];\n\t\t\t}\n\t\t},\n\t};\n\n\tvar addWarning = function(str) {\n\t\tif (!multilineVars.warnings)\n\t\t\tmultilineVars.warnings = [];\n\t\tmultilineVars.warnings.push(str);\n\t};\n\n\tvar addWarningObject = function(warningObject) {\n\t\tif (!multilineVars.warningObjects)\n\t\t\tmultilineVars.warningObjects = [];\n\t\tmultilineVars.warningObjects.push(warningObject);\n\t};\n\n\tvar encode = function(str) {\n\t\tvar ret = str.replace(/\\x12/g, ' ');\n\t\tret = ret.replace(/&/g, '&');\n\t\tret = ret.replace(//g, '>');\n\t};\n\n\tvar warn = function(str, line, col_num) {\n\t\tif (!line) line = \" \";\n\t\tvar bad_char = line[col_num];\n\t\tif (bad_char === ' ' || !bad_char)\n\t\t\tbad_char = \"SPACE\";\n\t\tvar clean_line = encode(line.substring(col_num - 64, col_num)) + '' + bad_char + '' + encode(line.substring(col_num + 1).substring(0,64));\n\t\taddWarning(\"Music Line:\" + tokenizer.lineIndex + \":\" + (col_num+1) + ': ' + str + \": \" + clean_line);\n\t\taddWarningObject({message:str, line:line, startChar: multilineVars.iChar + col_num, column: col_num});\n\t};\n\n\tvar header;\n\tvar music;\n\n\tthis.getWarnings = function() {\n\t\treturn multilineVars.warnings;\n\t};\n\tthis.getWarningObjects = function() {\n\t\treturn multilineVars.warningObjects;\n\t};\n\n\tvar addWords = function(line, words) {\n\t\tif (words.indexOf('\\x12') >= 0) {\n\t\t\twordsContinuation += words\n\t\t\treturn\n\t\t}\n\t\twords = wordsContinuation + words\n\t\twordsContinuation = ''\n\n\t\tif (!line) { warn(\"Can't add words before the first line of music\", line, 0); return; }\n\t\twords = parseCommon.strip(words);\n\t\tif (words[words.length-1] !== '-')\n\t\t\twords = words + ' ';\t// Just makes it easier to parse below, since every word has a divider after it.\n\t\tvar word_list = [];\n\t\t// first make a list of words from the string we are passed. A word is divided on either a space or dash.\n\t\tvar last_divider = 0;\n\t\tvar replace = false;\n\t\tvar addWord = function(i) {\n\t\t\tvar word = parseCommon.strip(words.substring(last_divider, i));\n\t\t\tword = word.replace(/\\\\([-_*|~])/g, '$1')\n\t\t\tlast_divider = i+1;\n\t\t\tif (word.length > 0) {\n\t\t\t\tif (replace)\n\t\t\t\t\tword = word.replace(/~/g, ' ');\n\t\t\t\tvar div = words[i];\n\t\t\t\tif (div !== '_' && div !== '-')\n\t\t\t\t\tdiv = ' ';\n\t\t\t\tword_list.push({syllable: tokenizer.translateString(word), divider: div});\n\t\t\t\treplace = false;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t\tvar escNext = false;\n\t\tfor (var i = 0; i < words.length; i++) {\n\t\t\tswitch (words[i]) {\n\t\t\t\tcase ' ':\n\t\t\t\tcase '\\x12':\n\t\t\t\t\taddWord(i);\n\t\t\t\t\tbreak;\n\t\t\t\tcase '-':\n\t\t\t\t\tif (!escNext && !addWord(i) && word_list.length > 0) {\n\t\t\t\t\t\tparseCommon.last(word_list).divider = '-';\n\t\t\t\t\t\tword_list.push({skip: true, to: 'next'});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '_':\n\t\t\t\t\tif (!escNext) {\n\t\t\t\t\t\taddWord(i);\n\t\t\t\t\t\tword_list.push({skip: true, to: 'slur'});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '*':\n\t\t\t\t\tif (!escNext) {\n\t\t\t\t\t\taddWord(i);\n\t\t\t\t\t\tword_list.push({skip: true, to: 'next'});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '|':\n\t\t\t\t\tif (!escNext) {\n\t\t\t\t\t\taddWord(i);\n\t\t\t\t\t\tword_list.push({skip: true, to: 'bar'});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '~':\n\t\t\t\t\tif (!escNext) {\n\t\t\t\t\t\treplace = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tescNext = words[i] === '\\\\'\n\t\t}\n\n\t\tvar inSlur = false;\n\t\tline.forEach(function(el) {\n\t\t\tif (word_list.length !== 0) {\n\t\t\t\tif (word_list[0].skip) {\n\t\t\t\t\tswitch (word_list[0].to) {\n\t\t\t\t\t\tcase 'next': if (el.el_type === 'note' && el.pitches !== null && !inSlur) word_list.shift(); break;\n\t\t\t\t\t\tcase 'slur': if (el.el_type === 'note' && el.pitches !== null) word_list.shift(); break;\n\t\t\t\t\t\tcase 'bar': if (el.el_type === 'bar') word_list.shift(); break;\n\t\t\t\t\t}\n\t\t\t\t\tif (el.el_type !== 'bar') {\n\t\t\t\t\t\tif (el.lyric === undefined)\n\t\t\t\t\t\t\tel.lyric = [{syllable: \"\", divider: \" \"}];\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tel.lyric.push({syllable: \"\", divider: \" \"});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (el.el_type === 'note' && el.rest === undefined && !inSlur) {\n\t\t\t\t\t\tvar lyric = word_list.shift();\n\t\t\t\t\t\tif (lyric.syllable)\n\t\t\t\t\t\t\tlyric.syllable = lyric.syllable.replace(/ +/g,'\\xA0');\n\t\t\t\t\t\tif (el.lyric === undefined)\n\t\t\t\t\t\t\tel.lyric = [ lyric ];\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tel.lyric.push(lyric);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\n\tvar addSymbols = function(line, words) {\n\t\tif (words.indexOf('\\x12') >= 0) {\n\t\t\tsymbolContinuation += words\n\t\t\treturn\n\t\t}\n\t\twords = symbolContinuation + words\n\t\tsymbolContinuation = ''\n\n\t\t// TODO-PER: Currently copied from w: line. This needs to be read as symbols instead.\n\t\tif (!line) { warn(\"Can't add symbols before the first line of music\", line, 0); return; }\n\t\twords = parseCommon.strip(words);\n\t\tif (words[words.length-1] !== '-')\n\t\t\twords = words + ' ';\t// Just makes it easier to parse below, since every word has a divider after it.\n\t\tvar word_list = [];\n\t\t// first make a list of words from the string we are passed. A word is divided on either a space or dash.\n\t\tvar last_divider = 0;\n\t\tvar replace = false;\n\t\tvar addWord = function(i) {\n\t\t\tvar word = parseCommon.strip(words.substring(last_divider, i));\n\t\t\tlast_divider = i+1;\n\t\t\tif (word.length > 0) {\n\t\t\t\tif (replace)\n\t\t\t\t\tword = word.replace(/~/g, ' ');\n\t\t\t\tvar div = words[i];\n\t\t\t\tif (div !== '_' && div !== '-')\n\t\t\t\t\tdiv = ' ';\n\t\t\t\tword_list.push({syllable: tokenizer.translateString(word), divider: div});\n\t\t\t\treplace = false;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t\tfor (var i = 0; i < words.length; i++) {\n\t\t\tswitch (words[i]) {\n\t\t\t\tcase ' ':\n\t\t\t\tcase '\\x12':\n\t\t\t\t\taddWord(i);\n\t\t\t\t\tbreak;\n\t\t\t\tcase '-':\n\t\t\t\t\tif (!addWord(i) && word_list.length > 0) {\n\t\t\t\t\t\tparseCommon.last(word_list).divider = '-';\n\t\t\t\t\t\tword_list.push({skip: true, to: 'next'});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '_':\n\t\t\t\t\taddWord(i);\n\t\t\t\t\tword_list.push({skip: true, to: 'slur'});\n\t\t\t\t\tbreak;\n\t\t\t\tcase '*':\n\t\t\t\t\taddWord(i);\n\t\t\t\t\tword_list.push({skip: true, to: 'next'});\n\t\t\t\t\tbreak;\n\t\t\t\tcase '|':\n\t\t\t\t\taddWord(i);\n\t\t\t\t\tword_list.push({skip: true, to: 'bar'});\n\t\t\t\t\tbreak;\n\t\t\t\tcase '~':\n\t\t\t\t\treplace = true;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tvar inSlur = false;\n\t\tline.forEach(function(el) {\n\t\t\tif (word_list.length !== 0) {\n\t\t\t\tif (word_list[0].skip) {\n\t\t\t\t\tswitch (word_list[0].to) {\n\t\t\t\t\t\tcase 'next': if (el.el_type === 'note' && el.pitches !== null && !inSlur) word_list.shift(); break;\n\t\t\t\t\t\tcase 'slur': if (el.el_type === 'note' && el.pitches !== null) word_list.shift(); break;\n\t\t\t\t\t\tcase 'bar': if (el.el_type === 'bar') word_list.shift(); break;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (el.el_type === 'note' && el.rest === undefined && !inSlur) {\n\t\t\t\t\t\tvar lyric = word_list.shift();\n\t\t\t\t\t\tif (el.lyric === undefined)\n\t\t\t\t\t\t\tel.lyric = [ lyric ];\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tel.lyric.push(lyric);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\n\tvar parseLine = function(line) {\n\t\tif (parseCommon.startsWith(line, '%%')) {\n\t\t\tvar err = parseDirective.addDirective(line.substring(2));\n\t\t\tif (err) warn(err, line, 2);\n\t\t\treturn;\n\t\t}\n\n\t\tvar i = line.indexOf('%');\n\t\tif (i >= 0)\n\t\t\tline = line.substring(0, i);\n\t\tline = line.replace(/\\s+$/, '');\n\n\t\tif (line.length === 0)\n\t\t\treturn;\n\n\t\tif (wordsContinuation) {\n\t\t\taddWords(tuneBuilder.getCurrentVoice(), line.substring(2));\n\t\t\treturn\n\t\t}\n\t\tif (symbolContinuation) {\n\t\t\taddSymbols(tuneBuilder.getCurrentVoice(), line.substring(2));\n\t\t\treturn\n\t\t}\n\t\tif (line.length < 2 || line[1] !== ':' || music.lineContinuation) {\n\t\t\tmusic.parseMusic(line);\n\t\t\treturn\n\t\t}\n\n\t\tvar ret = header.parseHeader(line);\n\t\tif (ret.regular)\n\t\t\tmusic.parseMusic(line);\n\t\tif (ret.newline)\n\t\t\tmusic.startNewLine();\n\t\tif (ret.words)\n\t\t\taddWords(tuneBuilder.getCurrentVoice(), line.substring(2));\n\t\tif (ret.symbols)\n\t\t\taddSymbols(tuneBuilder.getCurrentVoice(), line.substring(2));\n\t};\n\n\tfunction appendLastMeasure(voice, nextVoice) {\n\t\tvoice.push({\n\t\t\tel_type: 'hint'\n\t\t});\n\t\tfor (var i = 0; i < nextVoice.length; i++) {\n\t\t\tvar element = nextVoice[i];\n\t\t\tvar hint = parseCommon.clone(element);\n\t\t\tvoice.push(hint);\n\t\t\tif (element.el_type === 'bar')\n\t\t\t\t\treturn;\n\t\t}\n\t}\n\n\tfunction addHintMeasure(staff, nextStaff) {\n\t\tfor (var i = 0; i < staff.length; i++) {\n\t\t\tvar stave = staff[i];\n\t\t\tvar nextStave = nextStaff[i];\n\t\t\tif (nextStave) { // Be sure there is the same number of staves on the next line.\n\t\t\t\tfor (var j = 0; j < nextStave.voices.length; j++) {\n\t\t\t\t\tvar nextVoice = nextStave.voices[j];\n\t\t\t\t\tvar voice = stave.voices[j];\n\t\t\t\t\tif (voice) { // Be sure there are the same number of voices on the previous line.\n\t\t\t\t\t\tappendLastMeasure(voice, nextVoice);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction addHintMeasures() {\n\t\tfor (var i = 0; i < tune.lines.length; i++) {\n\t\t\tvar line = tune.lines[i].staff;\n\t\t\tif (line) {\n\t\t\t\tvar j = i+1;\n\t\t\t\twhile (j < tune.lines.length && tune.lines[j].staff === undefined)\n\t\t\t\t\tj++;\n\t\t\t\tif (j < tune.lines.length) {\n\t\t\t\t\tvar nextLine = tune.lines[j].staff;\n\t\t\t\t\taddHintMeasure(line, nextLine);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tthis.parse = function(strTune, switches, startPos) {\n\t\t// the switches are optional and cause a difference in the way the tune is parsed.\n\t\t// switches.header_only : stop parsing when the header is finished\n\t\t// switches.stop_on_warning : stop at the first warning encountered.\n\t\t// switches.print: format for the page instead of the browser.\n\t\t// switches.format: a hash of the desired formatting commands.\n\t\t// switches.hint_measures: put the next measure at the end of the current line.\n\t\t// switches.transpose: change the key signature, chords, and notes by a number of half-steps.\n\t\tif (!switches) switches = {};\n\t\tif (!startPos) startPos = 0;\n\t\ttune.reset();\n\n\t\t// Take care of whatever line endings come our way\n\t\t// Tack on newline temporarily to make the last line continuation work\n\t\tstrTune = strTune.replace(/\\r\\n?/g, '\\n') + '\\n';\n\n\t\t// get rid of latex commands. If a line starts with a backslash, then it is replaced by spaces to keep the character count the same.\n\t\tvar arr = strTune.split(\"\\n\\\\\");\n\t\tif (arr.length > 1) {\n\t\t\tfor (var i2 = 1; i2 < arr.length; i2++) {\n\t\t\t\twhile (arr[i2].length > 0 && arr[i2][0] !== \"\\n\") {\n\t\t\t\t\tarr[i2] = arr[i2].substr(1);\n\t\t\t\t\tarr[i2-1] += ' ';\n\t\t\t\t}\n\t\t\t}\n\t\t\tstrTune = arr.join(\" \"); //. the split removed two characters, so this puts them back\n\t\t}\n\t\t// take care of line continuations right away, but keep the same number of characters\n\t\tstrTune = strTune.replace(/\\\\([ \\t]*)(%.*)*\\n/g, function(all, backslash, comment){\n\t\t\tvar padding = comment ? Array(comment.length +1).join(' ') : \"\";\n\t\t\treturn backslash + \"\\x12\" + padding + '\\n';\n\t\t});\n\t\tvar lines = strTune.split('\\n')\n\t\tif (parseCommon.last(lines).length === 0)\t// remove the blank line we added above.\n\t\t\tlines.pop();\n\t\ttokenizer = new Tokenizer(lines, multilineVars);\n\t\theader = new ParseHeader(tokenizer, warn, multilineVars, tune, tuneBuilder);\n\t\tmusic = new ParseMusic(tokenizer, warn, multilineVars, tune, tuneBuilder, header);\n\n\t\tif (switches.print)\n\t\t\ttune.media = 'print';\n\t\tmultilineVars.reset();\n\t\tmultilineVars.iChar = startPos;\n\t\tif (switches.visualTranspose) {\n\t\t\tmultilineVars.globalTranspose = parseInt(switches.visualTranspose);\n\t\t\tif (multilineVars.globalTranspose === 0)\n\t\t\t\tmultilineVars.globalTranspose = undefined;\n\t\t\telse\n\t\t\t\ttuneBuilder.setVisualTranspose(switches.visualTranspose);\n\t\t} else\n\t\t\tmultilineVars.globalTranspose = undefined;\n\t\tif (switches.lineBreaks) {\n\t\t\t// The line break numbers are 0-based and they reflect the last measure of the current line.\n\t\t\tmultilineVars.lineBreaks = switches.lineBreaks;\n\t\t\t//multilineVars.continueall = true;\n\t\t}\n\t\theader.reset(tokenizer, warn, multilineVars, tune);\n\n\t\ttry {\n\t\t\tif (switches.format) {\n\t\t\t\tparseDirective.globalFormatting(switches.format);\n\t\t\t}\n\t\t\tvar line = tokenizer.nextLine();\n\t\t\twhile (line) {\n\t\t\t\tif (switches.header_only && multilineVars.is_in_header === false)\n\t\t\t\t\tthrow \"normal_abort\";\n\t\t\t\tif (switches.stop_on_warning && multilineVars.warnings)\n\t\t\t\t\tthrow \"normal_abort\";\n\n\t\t\t\tvar wasInHeader = multilineVars.is_in_header;\n\t\t\t\tparseLine(line);\n\t\t\t\tif (wasInHeader && !multilineVars.is_in_header) {\n\t\t\t\t\ttuneBuilder.setRunningFont(\"annotationfont\", multilineVars.annotationfont);\n\t\t\t\t\ttuneBuilder.setRunningFont(\"gchordfont\", multilineVars.gchordfont);\n\t\t\t\t\ttuneBuilder.setRunningFont(\"tripletfont\", multilineVars.tripletfont);\n\t\t\t\t\ttuneBuilder.setRunningFont(\"vocalfont\", multilineVars.vocalfont);\n\t\t\t\t}\n\t\t\t\tline = tokenizer.nextLine();\n\t\t\t}\n\n\t\t\tif (wordsContinuation) {\n\t\t\t\taddWords(tuneBuilder.getCurrentVoice(), '');\n\t\t\t}\n\t\t\tif (symbolContinuation) {\n\t\t\t\taddSymbols(tuneBuilder.getCurrentVoice(), '');\n\t\t\t}\n\t\t\tmultilineVars.openSlurs = tuneBuilder.cleanUp(multilineVars.barsperstaff, multilineVars.staffnonote, multilineVars.openSlurs);\n\n\t\t} catch (err) {\n\t\t\tif (err !== \"normal_abort\")\n\t\t\t\tthrow err;\n\t\t}\n\n\t\tvar ph = 11*72;\n\t\tvar pl = 8.5*72;\n\t\tswitch (multilineVars.papersize) {\n\t\t\t//case \"letter\": ph = 11*72; pl = 8.5*72; break;\n\t\t\tcase \"legal\": ph = 14*72; pl = 8.5*72; break;\n\t\t\tcase \"A4\": ph = 11.7*72; pl = 8.3*72; break;\n\t\t}\n\t\tif (multilineVars.landscape) {\n\t\t\tvar x = ph;\n\t\t\tph = pl;\n\t\t\tpl = x;\n\t\t}\n\t\tif (!tune.formatting.pagewidth)\n\t\t\ttune.formatting.pagewidth = pl;\n\t\tif (!tune.formatting.pageheight)\n\t\t\ttune.formatting.pageheight = ph;\n\n\t\tif (switches.hint_measures) {\n\t\t\taddHintMeasures();\n\t\t}\n\n\t\twrap.wrapLines(tune, multilineVars.lineBreaks, multilineVars.barNumbers);\n\t};\n};\n\nmodule.exports = Parse;\n","// abc_parse_book.js: parses a string representing ABC Music Notation into a usable internal structure.\n\nvar parseCommon = require('./abc_common');\n\nvar bookParser = function(book) {\n\t\"use strict\";\n\n\tvar directives = \"\";\n\tvar initialWhiteSpace = book.match(/(\\s*)/)\n\tbook = parseCommon.strip(book);\n\tvar tuneStrings = book.split(\"\\nX:\");\n\t// Put back the X: that we lost when splitting the tunes.\n\tfor (var i = 1; i < tuneStrings.length; i++)\n\t\ttuneStrings[i] = \"X:\" + tuneStrings[i];\n\t// Keep track of the character position each tune starts with. If the string starts with white space, count that, too.\n\tvar pos = initialWhiteSpace ? initialWhiteSpace[0].length : 0;\n\tvar tunes = [];\n\ttuneStrings.forEach(function(tune) {\n\t\ttunes.push({ abc: tune, startPos: pos});\n\t\tpos += tune.length + 1; // We also lost a newline when splitting, so count that.\n\t});\n\tif (tunes.length > 1 && !parseCommon.startsWith(tunes[0].abc, 'X:')) {\t// If there is only one tune, the X: might be missing, otherwise assume the top of the file is \"intertune\"\n\t\t// There could be file-wide directives in this, if so, we need to insert it into each tune. We can probably get away with\n\t\t// just looking for file-wide directives here (before the first tune) and inserting them at the bottom of each tune, since\n\t\t// the tune is parsed all at once. The directives will be seen before the engraver begins processing.\n\t\tvar dir = tunes.shift();\n\t\tvar arrDir = dir.abc.split('\\n');\n\t\tarrDir.forEach(function(line) {\n\t\t\tif (parseCommon.startsWith(line, '%%'))\n\t\t\t\tdirectives += line + '\\n';\n\t\t});\n\t}\n\tvar header = directives;\n\n\t// Now, the tune ends at a blank line, so truncate it if needed. There may be \"intertune\" stuff.\n\ttunes.forEach(function(tune) {\n\t\tvar end = tune.abc.indexOf('\\n\\n');\n\t\tif (end > 0)\n\t\t\ttune.abc = tune.abc.substring(0, end);\n\t\ttune.pure = tune.abc;\n\t\ttune.abc = directives + tune.abc;\n\n\t\t// for the user's convenience, parse and store the title separately. The title is between the first T: and the next \\n\n\t\ttune.title = \"\";\n\t\tvar title = tune.pure.split(\"T:\");\n\t\tif (title.length > 1) {\n\t\t\ttitle = title[1].split(\"\\n\");\n\t\t\ttune.title = parseCommon.strip(title[0]);\n\t\t}\n\n\t\t// for the user's convenience, parse and store the id separately. The id is between the first X: and the next \\n\n\t\tvar id = tune.pure.substring(2, tune.pure.indexOf(\"\\n\"));\n\t\ttune.id = parseCommon.strip(id);\n\t});\n\n\treturn {\n\t\theader: header,\n\t\ttunes: tunes\n\t};\n};\n\nmodule.exports = bookParser;\n\n","var parseCommon = require('./abc_common');\n\nvar parseDirective = {};\n\n(function() {\n\t\"use strict\";\n\tvar tokenizer;\n\tvar warn;\n\tvar multilineVars;\n\tvar tune;\n\tvar tuneBuilder;\n\tparseDirective.initialize = function(tokenizer_, warn_, multilineVars_, tune_, tuneBuilder_) {\n\t\ttokenizer = tokenizer_;\n\t\twarn = warn_;\n\t\tmultilineVars = multilineVars_;\n\t\ttune = tune_;\n\t\ttuneBuilder = tuneBuilder_;\n\t\tinitializeFonts();\n\t};\n\n\tfunction initializeFonts() {\n\t\tmultilineVars.annotationfont = { face: \"Helvetica\", size: 12, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\tmultilineVars.gchordfont = { face: \"Helvetica\", size: 12, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\tmultilineVars.historyfont = { face: \"\\\"Times New Roman\\\"\", size: 16, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\tmultilineVars.infofont = { face: \"\\\"Times New Roman\\\"\", size: 14, weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\tmultilineVars.measurefont = { face: \"\\\"Times New Roman\\\"\", size: 14, weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\tmultilineVars.partsfont = { face: \"\\\"Times New Roman\\\"\", size: 15, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\tmultilineVars.repeatfont = { face: \"\\\"Times New Roman\\\"\", size: 13, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\tmultilineVars.textfont = { face: \"\\\"Times New Roman\\\"\", size: 16, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\tmultilineVars.tripletfont = {face: \"Times\", size: 11, weight: \"normal\", style: \"italic\", decoration: \"none\"};\n\t\tmultilineVars.vocalfont = { face: \"\\\"Times New Roman\\\"\", size: 13, weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\tmultilineVars.wordsfont = { face: \"\\\"Times New Roman\\\"\", size: 16, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\n\t\t// These fonts are global for the entire tune.\n\t\ttune.formatting.composerfont = { face: \"\\\"Times New Roman\\\"\", size: 14, weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\ttune.formatting.subtitlefont = { face: \"\\\"Times New Roman\\\"\", size: 16, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.tempofont = { face: \"\\\"Times New Roman\\\"\", size: 15, weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.titlefont = { face: \"\\\"Times New Roman\\\"\", size: 20, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.footerfont = { face: \"\\\"Times New Roman\\\"\", size: 12, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.headerfont = { face: \"\\\"Times New Roman\\\"\", size: 12, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.voicefont = { face: \"\\\"Times New Roman\\\"\", size: 13, weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.tablabelfont = { face: \"\\\"Trebuchet MS\\\"\", size: 16, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.tabnumberfont = { face: \"\\\"Arial\\\"\", size: 11, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.tabgracefont = { face: \"\\\"Arial\\\"\", size: 8, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\n\t\t// these are the default fonts for these element types. In the printer, these fonts might change as the tune progresses.\n\t\ttune.formatting.annotationfont = multilineVars.annotationfont;\n\t\ttune.formatting.gchordfont = multilineVars.gchordfont;\n\t\ttune.formatting.historyfont = multilineVars.historyfont;\n\t\ttune.formatting.infofont = multilineVars.infofont;\n\t\ttune.formatting.measurefont = multilineVars.measurefont;\n\t\ttune.formatting.partsfont = multilineVars.partsfont;\n\t\ttune.formatting.repeatfont = multilineVars.repeatfont;\n\t\ttune.formatting.textfont = multilineVars.textfont;\n\t\ttune.formatting.tripletfont = multilineVars.tripletfont;\n\t\ttune.formatting.vocalfont = multilineVars.vocalfont;\n\t\ttune.formatting.wordsfont = multilineVars.wordsfont;\n\t}\n\n\tvar fontTypeCanHaveBox = { gchordfont: true, measurefont: true, partsfont: true, annotationfont: true, composerfont: true, historyfont: true, infofont: true, subtitlefont: true, textfont: true, titlefont: true, voicefont: true };\n\n\tvar fontTranslation = function(fontFace) {\n\t\t// This translates Postscript fonts for a web alternative.\n\t\t// Note that the postscript fonts contain italic and bold info in them, so what is returned is a hash.\n\n\t\tswitch (fontFace) {\n\t\t\tcase \"Arial-Italic\":\n\t\t\t\treturn { face: \"Arial\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Arial-Bold\":\n\t\t\t\treturn { face: \"Arial\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Bookman-Demi\":\n\t\t\t\treturn { face: \"Bookman,serif\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Bookman-DemiItalic\":\n\t\t\t\treturn { face: \"Bookman,serif\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Bookman-Light\":\n\t\t\t\treturn { face: \"Bookman,serif\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Bookman-LightItalic\":\n\t\t\t\treturn { face: \"Bookman,serif\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Courier\":\n\t\t\t\treturn { face: \"\\\"Courier New\\\"\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Courier-Oblique\":\n\t\t\t\treturn { face: \"\\\"Courier New\\\"\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Courier-Bold\":\n\t\t\t\treturn { face: \"\\\"Courier New\\\"\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Courier-BoldOblique\":\n\t\t\t\treturn { face: \"\\\"Courier New\\\"\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"AvantGarde-Book\":\n\t\t\t\treturn { face: \"AvantGarde,Arial\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"AvantGarde-BookOblique\":\n\t\t\t\treturn { face: \"AvantGarde,Arial\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"AvantGarde-Demi\":\n\t\t\tcase \"Avant-Garde-Demi\":\n\t\t\t\treturn { face: \"AvantGarde,Arial\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"AvantGarde-DemiOblique\":\n\t\t\t\treturn { face: \"AvantGarde,Arial\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Helvetica-Oblique\":\n\t\t\t\treturn { face: \"Helvetica\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Helvetica-Bold\":\n\t\t\t\treturn { face: \"Helvetica\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Helvetica-BoldOblique\":\n\t\t\t\treturn { face: \"Helvetica\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Helvetica-Narrow\":\n\t\t\t\treturn { face: \"\\\"Helvetica Narrow\\\",Helvetica\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Helvetica-Narrow-Oblique\":\n\t\t\t\treturn { face: \"\\\"Helvetica Narrow\\\",Helvetica\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Helvetica-Narrow-Bold\":\n\t\t\t\treturn { face: \"\\\"Helvetica Narrow\\\",Helvetica\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Helvetica-Narrow-BoldOblique\":\n\t\t\t\treturn { face: \"\\\"Helvetica Narrow\\\",Helvetica\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Palatino-Roman\":\n\t\t\t\treturn { face: \"Palatino\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Palatino-Italic\":\n\t\t\t\treturn { face: \"Palatino\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Palatino-Bold\":\n\t\t\t\treturn { face: \"Palatino\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Palatino-BoldItalic\":\n\t\t\t\treturn { face: \"Palatino\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"NewCenturySchlbk-Roman\":\n\t\t\t\treturn { face: \"\\\"New Century\\\",serif\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"NewCenturySchlbk-Italic\":\n\t\t\t\treturn { face: \"\\\"New Century\\\",serif\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"NewCenturySchlbk-Bold\":\n\t\t\t\treturn { face: \"\\\"New Century\\\",serif\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"NewCenturySchlbk-BoldItalic\":\n\t\t\t\treturn { face: \"\\\"New Century\\\",serif\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Times\":\n\t\t\tcase \"Times-Roman\":\n\t\t\tcase \"Times-Narrow\":\n\t\t\tcase \"Times-Courier\":\n\t\t\tcase \"Times-New-Roman\":\n\t\t\t\treturn { face: \"\\\"Times New Roman\\\"\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Times-Italic\":\n\t\t\tcase \"Times-Italics\":\n\t\t\t\treturn { face: \"\\\"Times New Roman\\\"\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Times-Bold\":\n\t\t\t\treturn { face: \"\\\"Times New Roman\\\"\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Times-BoldItalic\":\n\t\t\t\treturn { face: \"\\\"Times New Roman\\\"\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"ZapfChancery-MediumItalic\":\n\t\t\t\treturn { face: \"\\\"Zapf Chancery\\\",cursive,serif\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tdefault:\n\t\t\t\treturn null;\n\t\t}\n\t};\n\n\tvar getFontParameter = function(tokens, currentSetting, str, position, cmd) {\n\t\t// Every font parameter has the following format:\n\t\t// \n\t\t// Where:\n\t\t// face: either a standard web font name, or a postscript font, enumerated in fontTranslation. This could also be an * or be missing if the face shouldn't change.\n\t\t// utf8: This is optional, and specifies utf8. That's all that is supported so the field is just silently ignored.\n\t\t// size: The size, in pixels. This may be omitted if the size is not changing.\n\t\t// modifiers: zero or more of \"bold\", \"italic\", \"underline\"\n\t\t// box: Only applies to the measure numbers, gchords, and the parts. If present, then a box is drawn around the characters.\n\t\t// If face is present, then all the modifiers are cleared. If face is absent, then the modifiers are illegal.\n\t\t// The face can be a single word, a set of words separated by hyphens, or a quoted string.\n\t\t//\n\t\t// So, in practicality, there are three types of font definitions: a number only, an asterisk and a number only, or the full definition (with an optional size).\n\t\tfunction processNumberOnly() {\n\t\t\tvar size = parseInt(tokens[0].token);\n\t\t\ttokens.shift();\n\t\t\tif (!currentSetting) {\n\t\t\t\twarn(\"Can't set just the size of the font since there is no default value.\", str, position);\n\t\t\t\treturn { face: \"\\\"Times New Roman\\\"\", weight: \"normal\", style: \"normal\", decoration: \"none\", size: size};\n\t\t\t}\n\t\t\tif (tokens.length === 0) {\n\t\t\t\treturn { face: currentSetting.face, weight: currentSetting.weight, style: currentSetting.style, decoration: currentSetting.decoration, size: size};\n\t\t\t}\n\t\t\tif (tokens.length === 1 && tokens[0].token === \"box\" && fontTypeCanHaveBox[cmd])\n\t\t\t\treturn { face: currentSetting.face, weight: currentSetting.weight, style: currentSetting.style, decoration: currentSetting.decoration, size: size, box: true};\n\t\t\twarn(\"Extra parameters in font definition.\", str, position);\n\t\t\treturn { face: currentSetting.face, weight: currentSetting.weight, style: currentSetting.style, decoration: currentSetting.decoration, size: size};\n\t\t}\n\n\t\t// format 1: asterisk and number only\n\t\tif (tokens[0].token === '*') {\n\t\t\ttokens.shift();\n\t\t\tif (tokens[0].type === 'number')\n\t\t\t\treturn processNumberOnly();\n\t\t\telse {\n\t\t\t\twarn(\"Expected font size number after *.\", str, position);\n\t\t\t}\n\t\t}\n\n\t\t// format 2: number only\n\t\tif (tokens[0].type === 'number') {\n\t\t\treturn processNumberOnly();\n\t\t}\n\n\t\t// format 3: whole definition\n\t\tvar face = [];\n\t\tvar size;\n\t\tvar weight = \"normal\";\n\t\tvar style = \"normal\";\n\t\tvar decoration = \"none\";\n\t\tvar box = false;\n\t\tvar state = 'face';\n\t\tvar hyphenLast = false;\n\t\twhile (tokens.length) {\n\t\t\tvar currToken = tokens.shift();\n\t\t\tvar word = currToken.token.toLowerCase();\n\t\t\tswitch (state) {\n\t\t\t\tcase 'face':\n\t\t\t\t\tif (hyphenLast || (word !== 'utf' && currToken.type !== 'number' && word !== \"bold\" && word !== \"italic\" && word !== \"underline\" && word !== \"box\")) {\n\t\t\t\t\t\tif (face.length > 0 && currToken.token === '-') {\n\t\t\t\t\t\t\thyphenLast = true;\n\t\t\t\t\t\t\tface[face.length-1] = face[face.length-1] + currToken.token;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif (hyphenLast) {\n\t\t\t\t\t\t\t\thyphenLast = false;\n\t\t\t\t\t\t\t\tface[face.length-1] = face[face.length-1] + currToken.token;\n\t\t\t\t\t\t\t} else\n\t\t\t\t\t\t\t\tface.push(currToken.token);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (currToken.type === 'number') {\n\t\t\t\t\t\t\tif (size) {\n\t\t\t\t\t\t\t\twarn(\"Font size specified twice in font definition.\", str, position);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsize = currToken.token;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstate = 'modifier';\n\t\t\t\t\t\t} else if (word === \"bold\")\n\t\t\t\t\t\t\tweight = \"bold\";\n\t\t\t\t\t\telse if (word === \"italic\")\n\t\t\t\t\t\t\tstyle = \"italic\";\n\t\t\t\t\t\telse if (word === \"underline\")\n\t\t\t\t\t\t\tdecoration = \"underline\";\n\t\t\t\t\t\telse if (word === \"box\") {\n\t\t\t\t\t\t\tif (fontTypeCanHaveBox[cmd])\n\t\t\t\t\t\t\t\tbox = true;\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\twarn(\"This font style doesn't support \\\"box\\\"\", str, position);\n\t\t\t\t\t\t\tstate = \"finished\";\n\t\t\t\t\t\t} else if (word === \"utf\") {\n\t\t\t\t\t\t\tcurrToken = tokens.shift(); // this gets rid of the \"8\" after \"utf\"\n\t\t\t\t\t\t\tstate = \"size\";\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\twarn(\"Unknown parameter \" + currToken.token + \" in font definition.\", str, position);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"size\":\n\t\t\t\t\tif (currToken.type === 'number') {\n\t\t\t\t\t\tif (size) {\n\t\t\t\t\t\t\twarn(\"Font size specified twice in font definition.\", str, position);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsize = currToken.token;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\twarn(\"Expected font size in font definition.\", str, position);\n\t\t\t\t\t}\n\t\t\t\t\tstate = 'modifier';\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"modifier\":\n\t\t\t\t\tif (word === \"bold\")\n\t\t\t\t\t\tweight = \"bold\";\n\t\t\t\t\telse if (word === \"italic\")\n\t\t\t\t\t\tstyle = \"italic\";\n\t\t\t\t\telse if (word === \"underline\")\n\t\t\t\t\t\tdecoration = \"underline\";\n\t\t\t\t\telse if (word === \"box\") {\n\t\t\t\t\t\tif (fontTypeCanHaveBox[cmd])\n\t\t\t\t\t\t\tbox = true;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\twarn(\"This font style doesn't support \\\"box\\\"\", str, position);\n\t\t\t\t\t\tstate = \"finished\";\n\t\t\t\t\t} else\n\t\t\t\t\t\twarn(\"Unknown parameter \" + currToken.token + \" in font definition.\", str, position);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"finished\":\n\t\t\t\t\twarn(\"Extra characters found after \\\"box\\\" in font definition.\", str, position);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (size === undefined) {\n\t\t\tif (!currentSetting) {\n\t\t\t\twarn(\"Must specify the size of the font since there is no default value.\", str, position);\n\t\t\t\tsize = 12;\n\t\t\t} else\n\t\t\t\tsize = currentSetting.size;\n\t\t} else\n\t\t\tsize = parseFloat(size);\n\n\t\tface = face.join(' ');\n\t\tif (face === '') {\n\t\t\tif (!currentSetting) {\n\t\t\t\twarn(\"Must specify the name of the font since there is no default value.\", str, position);\n\t\t\t\tface = \"sans-serif\";\n\t\t\t} else\n\t\t\t\tface = currentSetting.face;\n\t\t}\n\t\tvar psFont = fontTranslation(face);\n\t\tvar font = {};\n\t\tif (psFont) {\n\t\t\tfont.face = psFont.face;\n\t\t\tfont.weight = psFont.weight;\n\t\t\tfont.style = psFont.style;\n\t\t\tfont.decoration = psFont.decoration;\n\t\t\tfont.size = size;\n\t\t\tif (box)\n\t\t\t\tfont.box = true;\n\t\t\treturn font;\n\t\t}\n\t\tfont.face = face;\n\t\tfont.weight = weight;\n\t\tfont.style = style;\n\t\tfont.decoration = decoration;\n\t\tfont.size = size;\n\t\tif (box)\n\t\t\tfont.box = true;\n\t\treturn font;\n\t};\n\n\tvar getChangingFont = function(cmd, tokens, str) {\n\t\tif (tokens.length === 0)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires a font as a parameter.\";\n\t\tmultilineVars[cmd] = getFontParameter(tokens, multilineVars[cmd], str, 0, cmd);\n\t\tif (multilineVars.is_in_header) // If the font appears in the header, then it becomes the default font.\n\t\t\ttune.formatting[cmd] = multilineVars[cmd];\n\t\treturn null;\n\t};\n\tvar getGlobalFont = function(cmd, tokens, str) {\n\t\tif (tokens.length === 0)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires a font as a parameter.\";\n\t\ttune.formatting[cmd] = getFontParameter(tokens, tune.formatting[cmd], str, 0, cmd);\n\t\treturn null;\n\t};\n\n\tvar setScale = function(cmd, tokens) {\n\t\tvar scratch = \"\";\n\t\ttokens.forEach(function(tok) {\n\t\t\tscratch += tok.token;\n\t\t});\n\t\tvar num = parseFloat(scratch);\n\t\tif (isNaN(num) || num === 0)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires a number as a parameter.\";\n\t\ttune.formatting.scale = num;\n\n\t};\n\t// starts at 35\n\tvar drumNames = [\n\t\t\"acoustic-bass-drum\",\n\t\t\"bass-drum-1\",\n\t\t\"side-stick\",\n\t\t\"acoustic-snare\",\n\t\t\"hand-clap\",\n\t\t\"electric-snare\",\n\t\t\"low-floor-tom\",\n\t\t\"closed-hi-hat\",\n\t\t\"high-floor-tom\",\n\t\t\"pedal-hi-hat\",\n\t\t\"low-tom\",\n\t\t\"open-hi-hat\",\n\t\t\"low-mid-tom\",\n\t\t\"hi-mid-tom\",\n\t\t\"crash-cymbal-1\",\n\t\t\"high-tom\",\n\t\t\"ride-cymbal-1\",\n\t\t\"chinese-cymbal\",\n\t\t\"ride-bell\",\n\t\t\"tambourine\",\n\t\t\"splash-cymbal\",\n\t\t\"cowbell\",\n\t\t\"crash-cymbal-2\",\n\t\t\"vibraslap\",\n\t\t\"ride-cymbal-2\",\n\t\t\"hi-bongo\",\n\t\t\"low-bongo\",\n\t\t\"mute-hi-conga\",\n\t\t\"open-hi-conga\",\n\t\t\"low-conga\",\n\t\t\"high-timbale\",\n\t\t\"low-timbale\",\n\t\t\"high-agogo\",\n\t\t\"low-agogo\",\n\t\t\"cabasa\",\n\t\t\"maracas\",\n\t\t\"short-whistle\",\n\t\t\"long-whistle\",\n\t\t\"short-guiro\",\n\t\t\"long-guiro\",\n\t\t\"claves\",\n\t\t\"hi-wood-block\",\n\t\t\"low-wood-block\",\n\t\t\"mute-cuica\",\n\t\t\"open-cuica\",\n\t\t\"mute-triangle\",\n\t\t\"open-triangle\",\n\t];\n\n\tvar interpretPercMap = function(restOfString) {\n\t\tvar tokens = restOfString.split(/\\s+/); // Allow multiple spaces.\n\t\tif (tokens.length !== 2 && tokens.length !== 3)\n\t\t\treturn { error: 'Expected parameters \"abc-note\", \"drum-sound\", and optionally \"note-head\"'};\n\t\tvar key = tokens[0];\n\t\t// The percussion sound can either be a MIDI number or a drum name. If it is not a number then check for a name.\n\t\tvar pitch = parseInt(tokens[1], 10);\n\t\tif ((isNaN(pitch) || pitch < 35 || pitch > 81) && tokens[1]) {\n\t\t\tpitch = drumNames.indexOf(tokens[1].toLowerCase()) + 35;\n\t\t}\n\t\tif ((isNaN(pitch) || pitch < 35 || pitch > 81))\n\t\t\treturn { error: 'Expected drum name, received \"' + tokens[1] + '\"' };\n\t\tvar value = { sound: pitch };\n\t\tif (tokens.length === 3)\n\t\t\tvalue.noteHead = tokens[2];\n\t\treturn { key: key, value: value };\n\t};\n\n\tvar getRequiredMeasurement = function(cmd, tokens) {\n\t\tvar points = tokenizer.getMeasurement(tokens);\n\t\tif (points.used === 0 || tokens.length !== 0)\n\t\t\treturn { error: \"Directive \\\"\" + cmd + \"\\\" requires a measurement as a parameter.\"};\n\t\treturn points.value;\n\t};\n\tvar oneParameterMeasurement = function(cmd, tokens) {\n\t\tvar points = tokenizer.getMeasurement(tokens);\n\t\tif (points.used === 0 || tokens.length !== 0)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires a measurement as a parameter.\";\n\t\ttune.formatting[cmd] = points.value;\n\t\treturn null;\n\t};\n\n\tvar addMultilineVar = function(key, cmd, tokens, min, max) {\n\t\tif (tokens.length !== 1 || tokens[0].type !== 'number')\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires a number as a parameter.\";\n\t\tvar i = tokens[0].intt;\n\t\tif (min !== undefined && i < min)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires a number greater than or equal to \" + min + \" as a parameter.\";\n\t\tif (max !== undefined && i > max)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires a number less than or equal to \" + max + \" as a parameter.\";\n\t\tmultilineVars[key] = i;\n\t\treturn null;\n\t};\n\n\tvar addMultilineVarBool = function(key, cmd, tokens) {\n\t\tif (tokens.length === 1 && (tokens[0].token === 'true' || tokens[0].token === 'false')) {\n\t\t\tmultilineVars[key] = tokens[0].token === 'true';\n\t\t\treturn null;\n\t\t}\n\t\tvar str = addMultilineVar(key, cmd, tokens, 0, 1);\n\t\tif (str !== null) return str;\n\t\tmultilineVars[key] = (multilineVars[key] === 1);\n\t\treturn null;\n\t};\n\n\tvar addMultilineVarOneParamChoice = function(key, cmd, tokens, choices) {\n\t\tif (tokens.length !== 1)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires one of [ \" + choices.join(\", \") + \" ] as a parameter.\";\n\t\tvar choice = tokens[0].token;\n\t\tvar found = false;\n\t\tfor (var i = 0; !found && i < choices.length; i++) {\n\t\t\tif (choices[i] === choice)\n\t\t\t\tfound = true;\n\t\t}\n\t\tif (!found)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires one of [ \" + choices.join(\", \") + \" ] as a parameter.\";\n\t\tmultilineVars[key] = choice;\n\t\treturn null;\n\t};\n\n\tvar midiCmdParam0 = [\n\t\t\"nobarlines\",\n\t\t\"barlines\",\n\t\t\"beataccents\",\n\t\t\"nobeataccents\",\n\t\t\"droneon\",\n\t\t\"droneoff\",\n\t\t\"drumon\",\n\t\t\"drumoff\",\n\t\t\"fermatafixed\",\n\t\t\"fermataproportional\",\n\t\t\"gchordon\",\n\t\t\"gchordoff\",\n\t\t\"controlcombo\",\n\t\t\"temperamentnormal\",\n\t\t\"noportamento\"\n\t];\n\tvar midiCmdParam1String = [\n\t\t\"gchord\",\n\t\t\"ptstress\",\n\t\t\"beatstring\"\n\t];\n\tvar midiCmdParam1Integer = [\n\t\t\"bassvol\",\n\t\t\"chordvol\",\n\t\t\"bassprog\",\n\t\t\"chordprog\",\n\t\t\"c\",\n\t\t\"channel\",\n\t\t\"beatmod\",\n\t\t\"deltaloudness\",\n\t\t\"drumbars\",\n\t\t\"gracedivider\",\n\t\t\"makechordchannels\",\n\t\t\"randomchordattack\",\n\t\t\"chordattack\",\n\t\t\"stressmodel\",\n\t\t\"transpose\",\n\t\t\"rtranspose\",\n\t\t\"vol\",\n\t\t\"volinc\"\n\t];\n\tvar midiCmdParam1Integer1OptionalInteger = [\n\t\t\"program\"\n\t];\n\tvar midiCmdParam2Integer = [\n\t\t\"ratio\",\n\t\t\"snt\",\n\t\t\"bendvelocity\",\n\t\t\"pitchbend\",\n\t\t\"control\",\n\t\t\"temperamentlinear\"\n\t];\n\tvar midiCmdParam4Integer = [\n\t\t\"beat\"\n\t];\n\tvar midiCmdParam5Integer = [\n\t\t\"drone\"\n\t];\n\tvar midiCmdParam1String1Integer = [\n\t\t\"portamento\"\n\t];\n\tvar midiCmdParamFraction = [\n\t\t\"expand\",\n\t\t\"grace\",\n\t\t\"trim\"\n\t];\n\tvar midiCmdParam1StringVariableIntegers = [\n\t\t\"drum\",\n\t\t\"chordname\"\n\t];\n\n\tvar parseMidiCommand = function(midi, tune, restOfString) {\n\t\tvar midi_cmd = midi.shift().token;\n\t\tvar midi_params = [];\n\t\tif (midiCmdParam0.indexOf(midi_cmd) >= 0) {\n\t\t\t// NO PARAMETERS\n\t\t\tif (midi.length !== 0)\n\t\t\t\twarn(\"Unexpected parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t} else if (midiCmdParam1String.indexOf(midi_cmd) >= 0) {\n\t\t\t// ONE STRING PARAMETER\n\t\t\tif (midi.length !== 1)\n\t\t\t\twarn(\"Expected one parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse\n\t\t\t\tmidi_params.push(midi[0].token);\n\t\t} else if (midiCmdParam1Integer.indexOf(midi_cmd) >= 0) {\n\t\t\t// ONE INT PARAMETER\n\t\t\tif (midi.length !== 1)\n\t\t\t\twarn(\"Expected one parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"number\")\n\t\t\t\twarn(\"Expected one integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse\n\t\t\t\tmidi_params.push(midi[0].intt);\n\t\t} else if (midiCmdParam1Integer1OptionalInteger.indexOf(midi_cmd) >= 0) {\n\t\t\t// ONE INT PARAMETER, ONE OPTIONAL PARAMETER\n\t\t\tif (midi.length !== 1 && midi.length !== 2)\n\t\t\t\twarn(\"Expected one or two parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"number\")\n\t\t\t\twarn(\"Expected integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi.length === 2 && midi[1].type !== \"number\")\n\t\t\t\twarn(\"Expected integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse {\n\t\t\t\tmidi_params.push(midi[0].intt);\n\t\t\t\tif (midi.length === 2)\n\t\t\t\t\tmidi_params.push(midi[1].intt);\n\t\t\t}\n\t\t} else if (midiCmdParam2Integer.indexOf(midi_cmd) >= 0) {\n\t\t\t// TWO INT PARAMETERS\n\t\t\tif (midi.length !== 2)\n\t\t\t\twarn(\"Expected two parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"number\" || midi[1].type !== \"number\")\n\t\t\t\twarn(\"Expected two integer parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse {\n\t\t\t\tmidi_params.push(midi[0].intt);\n\t\t\t\tmidi_params.push(midi[1].intt);\n\t\t\t}\n\t\t} else if (midiCmdParam1String1Integer.indexOf(midi_cmd) >= 0) {\n\t\t\t// ONE STRING PARAMETER, ONE INT PARAMETER\n\t\t\tif (midi.length !== 2)\n\t\t\t\twarn(\"Expected two parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"alpha\" || midi[1].type !== \"number\")\n\t\t\t\twarn(\"Expected one string and one integer parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse {\n\t\t\t\tmidi_params.push(midi[0].token);\n\t\t\t\tmidi_params.push(midi[1].intt);\n\t\t\t}\n\t\t} else if (midi_cmd === 'drummap') {\n\t\t\t// BUILD AN OBJECT OF ABC NOTE => MIDI NOTE\n\t\t\tif (midi.length === 2 && midi[0].type === 'alpha' && midi[1].type === 'number') {\n\t\t\t\tif (!tune.formatting) tune.formatting = {};\n\t\t\t\tif (!tune.formatting.midi) tune.formatting.midi = {};\n\t\t\t\tif (!tune.formatting.midi.drummap) tune.formatting.midi.drummap = {};\n\t\t\t\ttune.formatting.midi.drummap[midi[0].token] = midi[1].intt;\n\t\t\t\tmidi_params = tune.formatting.midi.drummap;\n\t\t\t} else if (midi.length === 3 && midi[0].type === 'punct' && midi[1].type === 'alpha' && midi[2].type === 'number') {\n\t\t\t\tif (!tune.formatting) tune.formatting = {};\n\t\t\t\tif (!tune.formatting.midi) tune.formatting.midi = {};\n\t\t\t\tif (!tune.formatting.midi.drummap) tune.formatting.midi.drummap = {};\n\t\t\t\ttune.formatting.midi.drummap[midi[0].token+midi[1].token] = midi[2].intt;\n\t\t\t\tmidi_params = tune.formatting.midi.drummap;\n\t\t\t} else {\n\t\t\t\twarn(\"Expected one note name and one integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\t}\n\t\t} else if (midiCmdParamFraction.indexOf(midi_cmd) >= 0) {\n\t\t\t// ONE FRACTION PARAMETER\n\t\t\tif (midi.length !== 3)\n\t\t\t\twarn(\"Expected fraction parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"number\" || midi[1].token !== \"/\" || midi[2].type !== \"number\")\n\t\t\t\twarn(\"Expected fraction parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse {\n\t\t\t\tmidi_params.push(midi[0].intt);\n\t\t\t\tmidi_params.push(midi[2].intt);\n\t\t\t}\n\t\t} else if (midiCmdParam4Integer.indexOf(midi_cmd) >= 0) {\n\t\t\t// FOUR INT PARAMETERS\n\t\t\tif (midi.length !== 4)\n\t\t\t\twarn(\"Expected four parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"number\" || midi[1].type !== \"number\" || midi[2].type !== \"number\" || midi[3].type !== \"number\")\n\t\t\t\twarn(\"Expected four integer parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse {\n\t\t\t\tmidi_params.push(midi[0].intt);\n\t\t\t\tmidi_params.push(midi[1].intt);\n\t\t\t\tmidi_params.push(midi[2].intt);\n\t\t\t\tmidi_params.push(midi[3].intt);\n\t\t\t}\n\t\t} else if (midiCmdParam5Integer.indexOf(midi_cmd) >= 0) {\n\t\t\t// FIVE INT PARAMETERS\n\t\t\tif (midi.length !== 5)\n\t\t\t\twarn(\"Expected five parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"number\" || midi[1].type !== \"number\" || midi[2].type !== \"number\" || midi[3].type !== \"number\" || midi[4].type !== \"number\")\n\t\t\t\twarn(\"Expected five integer parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse {\n\t\t\t\tmidi_params.push(midi[0].intt);\n\t\t\t\tmidi_params.push(midi[1].intt);\n\t\t\t\tmidi_params.push(midi[2].intt);\n\t\t\t\tmidi_params.push(midi[3].intt);\n\t\t\t\tmidi_params.push(midi[4].intt);\n\t\t\t}\n\t\t} else if (midiCmdParam1Integer1OptionalInteger.indexOf(midi_cmd) >= 0) {\n\t\t\t// ONE INT PARAMETER, ONE OPTIONAL OCTAVE PARAMETER\n\t\t\tif (midi.length !== 1 || midi.length !== 4)\n\t\t\t\twarn(\"Expected one or two parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"number\")\n\t\t\t\twarn(\"Expected integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi.length === 4) {\n\t\t\t\tif (midi[1].token !== \"octave\")\n\t\t\t\t\twarn(\"Expected octave parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\t\tif (midi[2].token !== \"=\")\n\t\t\t\t\twarn(\"Expected octave parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\t\tif (midi[3].type !== \"number\")\n\t\t\t\t\twarn(\"Expected integer parameter for octave in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\t} else {\n\t\t\t\tmidi_params.push(midi[0].intt);\n\t\t\t\tif (midi.length === 4)\n\t\t\t\t\tmidi_params.push(midi[3].intt);\n\t\t\t}\n\t\t} else if (midiCmdParam1StringVariableIntegers.indexOf(midi_cmd) >= 0) {\n\t\t\t// ONE STRING, VARIABLE INT PARAMETERS\n\t\t\tif (midi.length < 2)\n\t\t\t\twarn(\"Expected string parameter and at least one integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"alpha\")\n\t\t\t\twarn(\"Expected string parameter and at least one integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse {\n\t\t\t\tvar p = midi.shift();\n\t\t\t\tmidi_params.push(p.token);\n\t\t\t\twhile (midi.length > 0) {\n\t\t\t\t\tp = midi.shift();\n\t\t\t\t\tif (p.type !== \"number\")\n\t\t\t\t\t\twarn(\"Expected integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\t\t\tmidi_params.push(p.intt);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (tuneBuilder.hasBeginMusic())\n\t\t\ttuneBuilder.appendElement('midi', -1, -1, { cmd: midi_cmd, params: midi_params });\n\t\telse {\n\t\t\tif (tune.formatting['midi'] === undefined)\n\t\t\t\ttune.formatting['midi'] = {};\n\t\t\ttune.formatting['midi'][midi_cmd] = midi_params;\n\t\t}\n\t};\n\n\tparseDirective.parseFontChangeLine = function(textstr) {\n\t\t// We don't want to match two dollar signs, so change those temporarily\n\t\ttextstr = textstr.replace(/\\$\\$/g,\"\\x03\")\n\t\tvar textParts = textstr.split('$');\n\t\tif (textParts.length > 1 && multilineVars.setfont) {\n\t\t\tvar textarr = [ ];\n\t\t\tif (textParts[0] !== '') // did the original string start with `$`?\n\t\t\t\ttextarr.push({ text: textParts[0] })\n\t\t\tfor (var i = 1; i < textParts.length; i++) {\n\t\t\t\tif (textParts[i][0] === '0')\n\t\t\t\t\ttextarr.push({ text: textParts[i].substring(1).replace(/\\x03/g,\"$$\") });\n\t\t\t\telse {\n\t\t\t\t\tvar whichFont = parseInt(textParts[i][0],10)\n\t\t\t\t\tif (multilineVars.setfont[whichFont])\n\t\t\t\t\t\ttextarr.push({font: multilineVars.setfont[whichFont], text: textParts[i].substring(1).replace(/\\x03/g,\"$$\") });\n\t\t\t\t\telse\n\t\t\t\t\t\ttextarr[textarr.length-1].text += '$' + textParts[i].replace(/\\x03/g,\"$$\");\n\t\t\t\t}\t\t\t\t\n\t\t\t}\n\t\t\treturn textarr;\n\t\t}\n\t\treturn textstr.replace(/\\x03/g,\"$$\");\n\t};\n\n\tvar positionChoices = [ 'auto', 'above', 'below', 'hidden' ];\n\tparseDirective.addDirective = function(str) {\n\t\tvar tokens = tokenizer.tokenize(str, 0, str.length);\t// 3 or more % in a row, or just spaces after %% is just a comment\n\t\tif (tokens.length === 0 || tokens[0].type !== 'alpha') return null;\n\t\tvar restOfString = str.substring(str.indexOf(tokens[0].token)+tokens[0].token.length);\n\t\trestOfString = tokenizer.stripComment(restOfString);\n\t\tvar cmd = tokens.shift().token.toLowerCase();\n\t\tvar scratch = \"\";\n\t\tvar line;\n\t\tswitch (cmd)\n\t\t{\n\t\t\t// The following directives were added to abc_parser_lint, but haven't been implemented here.\n\t\t\t// Most of them are direct translations from the directives that will be parsed in. See abcm2ps's format.txt for info on each of these.\n\t\t\t//\t\t\t\t\talignbars: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\taligncomposer: { type: \"string\", Enum: [ 'left', 'center','right' ], optional: true },\n\t\t\t//\t\t\t\t\tbstemdown: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\tcontinueall: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\tdynalign: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\texprabove: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\texprbelow: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\tgchordbox: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\tgracespacebefore: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tgracespaceinside: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tgracespaceafter: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tinfospace: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tlineskipfac: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tmaxshrink: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tmaxstaffsep: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tmaxsysstaffsep: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tnotespacingfactor: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tparskipfac: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tslurheight: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tsplittune: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\tsquarebreve: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\tstemheight: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tstraightflags: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\tstretchstaff: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\ttitleformat: { type: \"string\", optional: true },\n\t\t\tcase \"bagpipes\":tune.formatting.bagpipes = true;break;\n\t\t\tcase \"flatbeams\":tune.formatting.flatbeams = true;break;\n\t\t\tcase \"jazzchords\":tune.formatting.jazzchords = true;break;\n\t\t\tcase \"accentAbove\":tune.formatting.accentAbove = true;break;\n\t\t\tcase \"germanAlphabet\":tune.formatting.germanAlphabet = true;break;\n\t\t\tcase \"landscape\":multilineVars.landscape = true;break;\n\t\t\tcase \"papersize\":multilineVars.papersize = restOfString;break;\n\t\t\tcase \"graceslurs\":\n\t\t\t\tif (tokens.length !== 1)\n\t\t\t\t\treturn \"Directive graceslurs requires one parameter: 0 or 1\";\n\t\t\t\tif (tokens[0].token === '0' || tokens[0].token === 'false')\n\t\t\t\t\ttune.formatting.graceSlurs = false;\n\t\t\t\telse if (tokens[0].token === '1' || tokens[0].token === 'true')\n\t\t\t\t\ttune.formatting.graceSlurs = true;\n\t\t\t\telse\n\t\t\t\t\treturn \"Directive graceslurs requires one parameter: 0 or 1 (received \" + tokens[0].token + ')';\n\t\t\t\tbreak;\n\t\t\tcase \"lineThickness\":\n\t\t\t\tvar lt = parseStretchLast(tokens);\n\t\t\t\tif (lt.value !== undefined)\n\t\t\t\t\ttune.formatting.lineThickness = lt.value;\n\t\t\t\tif (lt.error)\n\t\t\t\t\treturn lt.error;\n\t\t\t\tbreak;\n\t\t\tcase \"stretchlast\":\n\t\t\t\tvar sl = parseStretchLast(tokens);\n\t\t\t\tif (sl.value !== undefined)\n\t\t\t\t\ttune.formatting.stretchlast = sl.value;\n\t\t\t\tif (sl.error)\n\t\t\t\t\treturn sl.error;\n\t\t\t\tbreak;\n\t\t\tcase \"titlecaps\":multilineVars.titlecaps = true;break;\n\t\t\tcase \"titleleft\":tune.formatting.titleleft = true;break;\n\t\t\tcase \"measurebox\":tune.formatting.measurebox = true;break;\n\n\t\t\tcase \"vocal\": return addMultilineVarOneParamChoice(\"vocalPosition\", cmd, tokens, positionChoices);\n\t\t\tcase \"dynamic\": return addMultilineVarOneParamChoice(\"dynamicPosition\", cmd, tokens, positionChoices);\n\t\t\tcase \"gchord\": return addMultilineVarOneParamChoice(\"chordPosition\", cmd, tokens, positionChoices);\n\t\t\tcase \"ornament\": return addMultilineVarOneParamChoice(\"ornamentPosition\", cmd, tokens, positionChoices);\n\t\t\tcase \"volume\": return addMultilineVarOneParamChoice(\"volumePosition\", cmd, tokens, positionChoices);\n\n\t\t\tcase \"botmargin\":\n\t\t\tcase \"botspace\":\n\t\t\tcase \"composerspace\":\n\t\t\tcase \"indent\":\n\t\t\tcase \"leftmargin\":\n\t\t\tcase \"linesep\":\n\t\t\tcase \"musicspace\":\n\t\t\tcase \"partsspace\":\n\t\t\tcase \"pageheight\":\n\t\t\tcase \"pagewidth\":\n\t\t\tcase \"rightmargin\":\n\t\t\tcase \"stafftopmargin\":\n\t\t\tcase \"staffsep\":\n\t\t\tcase \"staffwidth\":\n\t\t\tcase \"subtitlespace\":\n\t\t\tcase \"sysstaffsep\":\n\t\t\tcase \"systemsep\":\n\t\t\tcase \"textspace\":\n\t\t\tcase \"titlespace\":\n\t\t\tcase \"topmargin\":\n\t\t\tcase \"topspace\":\n\t\t\tcase \"vocalspace\":\n\t\t\tcase \"wordsspace\":\n\t\t\t\treturn oneParameterMeasurement(cmd, tokens);\n\t\t\tcase \"voicescale\":\n\t\t\t\tif (tokens.length !== 1 || tokens[0].type !== 'number')\n\t\t\t\t\treturn \"voicescale requires one float as a parameter\";\n\t\t\t\tvar voiceScale = tokens.shift();\n\t\t\t\tif (multilineVars.currentVoice) {\n\t\t\t\t\tmultilineVars.currentVoice.scale = voiceScale.floatt;\n\t\t\t\t\ttuneBuilder.changeVoiceScale(multilineVars.currentVoice.scale);\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\tcase \"voicecolor\":\n\t\t\t\tif (tokens.length !== 1) // this could either be of type alpha or quote, but it's ok if it is a number\n\t\t\t\t\treturn \"voicecolor requires one string as a parameter\";\n\t\t\t\tvar voiceColor = tokens.shift();\n\t\t\t\tif (multilineVars.currentVoice) {\n\t\t\t\t\tmultilineVars.currentVoice.color = voiceColor.token;\n\t\t\t\t\ttuneBuilder.changeVoiceColor(multilineVars.currentVoice.color);\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\tcase \"vskip\":\n\t\t\t\tvar vskip = Math.round(getRequiredMeasurement(cmd, tokens));\n\t\t\t\tif (vskip.error)\n\t\t\t\t\treturn vskip.error;\n\t\t\t\ttuneBuilder.addSpacing(vskip);\n\t\t\t\treturn null;\n\t\t\tcase \"scale\":\n\t\t\t\tsetScale(cmd, tokens);\n\t\t\t\tbreak;\n\t\t\tcase \"sep\":\n\t\t\t\tif (tokens.length === 0)\n\t\t\t\t\ttuneBuilder.addSeparator(14,14,85, { startChar: multilineVars.iChar, endChar: multilineVars.iChar+5}); // If no parameters are given, then there is a default size.\n\t\t\t\telse {\n\t\t\t\t\tvar points = tokenizer.getMeasurement(tokens);\n\t\t\t\t\tif (points.used === 0)\n\t\t\t\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires 3 numbers: space above, space below, length of line\";\n\t\t\t\t\tvar spaceAbove = points.value;\n\n\t\t\t\t\tpoints = tokenizer.getMeasurement(tokens);\n\t\t\t\t\tif (points.used === 0)\n\t\t\t\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires 3 numbers: space above, space below, length of line\";\n\t\t\t\t\tvar spaceBelow = points.value;\n\n\t\t\t\t\tpoints = tokenizer.getMeasurement(tokens);\n\t\t\t\t\tif (points.used === 0 || tokens.length !== 0)\n\t\t\t\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires 3 numbers: space above, space below, length of line\";\n\t\t\t\t\tvar lenLine = points.value;\n\t\t\t\t\ttuneBuilder.addSeparator(spaceAbove, spaceBelow, lenLine, { startChar: multilineVars.iChar, endChar: multilineVars.iChar+restOfString.length});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"barsperstaff\":\n\t\t\t\tscratch = addMultilineVar('barsperstaff', cmd, tokens);\n\t\t\t\tif (scratch !== null) return scratch;\n\t\t\t\tbreak;\n\t\t\tcase \"staffnonote\":\n\t\t\t\t// The sense of the boolean is opposite here. \"0\" means true.\n\t\t\t\tif (tokens.length !== 1)\n\t\t\t\t\treturn \"Directive staffnonote requires one parameter: 0 or 1\";\n\t\t\t\tif (tokens[0].token === '0')\n\t\t\t\t\tmultilineVars.staffnonote = true;\n\t\t\t\telse if (tokens[0].token === '1')\n\t\t\t\t\tmultilineVars.staffnonote = false;\n\t\t\t\telse\n\t\t\t\t\treturn \"Directive staffnonote requires one parameter: 0 or 1 (received \" + tokens[0].token + ')';\n\t\t\t\tbreak;\n\t\t\tcase \"printtempo\":\n\t\t\t\tscratch = addMultilineVarBool('printTempo', cmd, tokens);\n\t\t\t\tif (scratch !== null) return scratch;\n\t\t\t\tbreak;\n\t\t\tcase \"partsbox\":\n\t\t\t\tscratch = addMultilineVarBool('partsBox', cmd, tokens);\n\t\t\t\tif (scratch !== null) return scratch;\n\t\t\t\tmultilineVars.partsfont.box = multilineVars.partsBox;\n\t\t\t\tbreak;\n\t\t\tcase \"freegchord\":\n\t\t\t\tscratch = addMultilineVarBool('freegchord', cmd, tokens);\n\t\t\t\tif (scratch !== null) return scratch;\n\t\t\t\tbreak;\n\t\t\tcase \"measurenb\":\n\t\t\tcase \"barnumbers\":\n\t\t\t\tscratch = addMultilineVar('barNumbers', cmd, tokens);\n\t\t\t\tif (scratch !== null) return scratch;\n\t\t\t\tbreak;\n\t\t\tcase \"setbarnb\":\n\t\t\t\tif (tokens.length !== 1 || tokens[0].type !== 'number') {\n\t\t\t\t\treturn 'Directive setbarnb requires a number as a parameter.';\n\t\t\t\t}\n\t\t\t\tmultilineVars.currBarNumber = tuneBuilder.setBarNumberImmediate(tokens[0].intt);\n\t\t\t\tbreak;\n\t\t\tcase \"begintext\":\n\t\t\t\tvar textBlock = '';\n\t\t\t\tline = tokenizer.nextLine();\n\t\t\t\twhile(line && line.indexOf('%%endtext') !== 0) {\n\t\t\t\t\tif (parseCommon.startsWith(line, \"%%\"))\n\t\t\t\t\t\ttextBlock += line.substring(2) + \"\\n\";\n\t\t\t\t\telse\n\t\t\t\t\t\ttextBlock += line + \"\\n\";\n\t\t\t\t\tline = tokenizer.nextLine();\n\t\t\t\t}\n\t\t\t\ttuneBuilder.addText(textBlock, { startChar: multilineVars.iChar, endChar: multilineVars.iChar+textBlock.length+7});\n\t\t\t\tbreak;\n\t\t\tcase \"continueall\":\n\t\t\t\tmultilineVars.continueall = true;\n\t\t\t\tbreak;\n\t\t\tcase \"beginps\":\n\t\t\t\tline = tokenizer.nextLine();\n\t\t\t\twhile(line && line.indexOf('%%endps') !== 0) {\n\t\t\t\t\ttokenizer.nextLine();\n\t\t\t\t}\n\t\t\t\twarn(\"Postscript ignored\", str, 0);\n\t\t\t\tbreak;\n\t\t\tcase \"deco\":\n\t\t\t\tif (restOfString.length > 0)\n\t\t\t\t\tmultilineVars.ignoredDecorations.push(restOfString.substring(0, restOfString.indexOf(' ')));\n\t\t\t\twarn(\"Decoration redefinition ignored\", str, 0);\n\t\t\t\tbreak;\n\t\t\tcase \"text\":\n\t\t\t\tvar textstr = tokenizer.translateString(restOfString);\n\t\t\t\ttuneBuilder.addText(parseDirective.parseFontChangeLine(textstr), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+restOfString.length+7});\n\t\t\t\tbreak;\n\t\t\tcase \"center\":\n\t\t\t\tvar centerstr = tokenizer.translateString(restOfString);\n\t\t\t\ttuneBuilder.addCentered(parseDirective.parseFontChangeLine(centerstr));\n\t\t\t\tbreak;\n\t\t\tcase \"font\":\n\t\t\t\t// don't need to do anything for this; it is a useless directive\n\t\t\t\tbreak;\n\t\t\tcase \"setfont\":\n\t\t\t\tvar sfTokens = tokenizer.tokenize(restOfString, 0, restOfString.length);\n//\t\t\t\tvar sfDone = false;\n\t\t\t\tif (sfTokens.length >= 4) {\n\t\t\t\t\tif (sfTokens[0].token === '-' && sfTokens[1].type === 'number') {\n\t\t\t\t\t\tvar sfNum = parseInt(sfTokens[1].token);\n\t\t\t\t\t\tif (sfNum >= 1 && sfNum <= 9) {\n\t\t\t\t\t\t\tif (!multilineVars.setfont)\n\t\t\t\t\t\t\t\tmultilineVars.setfont = [];\n\t\t\t\t\t\t\tsfTokens.shift();\n\t\t\t\t\t\t\tsfTokens.shift();\n\t\t\t\t\t\t\tmultilineVars.setfont[sfNum] = getFontParameter(sfTokens, multilineVars.setfont[sfNum], str, 0, 'setfont');\n//\t\t\t\t\t\t\tvar sfSize = sfTokens.pop();\n//\t\t\t\t\t\t\tif (sfSize.type === 'number') {\n//\t\t\t\t\t\t\t\tsfSize = parseInt(sfSize.token);\n//\t\t\t\t\t\t\t\tvar sfFontName = '';\n//\t\t\t\t\t\t\t\tfor (var sfi = 2; sfi < sfTokens.length; sfi++)\n//\t\t\t\t\t\t\t\t\tsfFontName += sfTokens[sfi].token;\n//\t\t\t\t\t\t\t\tmultilineVars.setfont[sfNum] = { face: sfFontName, size: sfSize };\n//\t\t\t\t\t\t\t\tsfDone = true;\n//\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n//\t\t\t\tif (!sfDone)\n//\t\t\t\t\treturn \"Bad parameters: \" + cmd;\n\t\t\t\tbreak;\n\t\t\tcase \"gchordfont\":\n\t\t\tcase \"partsfont\":\n\t\t\tcase \"tripletfont\":\n\t\t\tcase \"vocalfont\":\n\t\t\tcase \"textfont\":\n\t\t\tcase \"annotationfont\":\n\t\t\tcase \"historyfont\":\n\t\t\tcase \"infofont\":\n\t\t\tcase \"measurefont\":\n\t\t\tcase \"repeatfont\":\n\t\t\tcase \"wordsfont\":\n\t\t\t\treturn getChangingFont(cmd, tokens, str);\n\t\t\tcase \"composerfont\":\n\t\t\tcase \"subtitlefont\":\n\t\t\tcase \"tempofont\":\n\t\t\tcase \"titlefont\":\n\t\t\tcase \"voicefont\":\n\t\t\tcase \"footerfont\":\n\t\t\tcase \"headerfont\":\n\t\t\t\treturn getGlobalFont(cmd, tokens, str);\n\t\t\tcase \"barlabelfont\":\n\t\t\tcase \"barnumberfont\":\n\t\t\tcase \"barnumfont\":\n\t\t\t\treturn getChangingFont(\"measurefont\", tokens, str);\n\t\t\tcase \"staves\":\n\t\t\tcase \"score\":\n\t\t\t\tmultilineVars.score_is_present = true;\n\t\t\t\tvar addVoice = function(id, newStaff, bracket, brace, continueBar) {\n\t\t\t\t\tif (newStaff || multilineVars.staves.length === 0) {\n\t\t\t\t\t\tmultilineVars.staves.push({index: multilineVars.staves.length, numVoices: 0});\n\t\t\t\t\t}\n\t\t\t\t\tvar staff = parseCommon.last(multilineVars.staves);\n\t\t\t\t\tif (bracket !== undefined && staff.bracket === undefined) staff.bracket = bracket;\n\t\t\t\t\tif (brace !== undefined && staff.brace === undefined) staff.brace = brace;\n\t\t\t\t\tif (continueBar) staff.connectBarLines = 'end';\n\t\t\t\t\tif (multilineVars.voices[id] === undefined) {\n\t\t\t\t\t\tmultilineVars.voices[id] = {staffNum: staff.index, index: staff.numVoices};\n\t\t\t\t\t\tstaff.numVoices++;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tvar openParen = false;\n\t\t\t\tvar openBracket = false;\n\t\t\t\tvar openBrace = false;\n\t\t\t\tvar justOpenParen = false;\n\t\t\t\tvar justOpenBracket = false;\n\t\t\t\tvar justOpenBrace = false;\n\t\t\t\tvar continueBar = false;\n\t\t\t\tvar lastVoice;\n\t\t\t\tvar addContinueBar = function() {\n\t\t\t\t\tcontinueBar = true;\n\t\t\t\t\tif (lastVoice) {\n\t\t\t\t\t\tvar ty = 'start';\n\t\t\t\t\t\tif (lastVoice.staffNum > 0) {\n\t\t\t\t\t\t\tif (multilineVars.staves[lastVoice.staffNum-1].connectBarLines === 'start' ||\n\t\t\t\t\t\t\t\tmultilineVars.staves[lastVoice.staffNum-1].connectBarLines === 'continue')\n\t\t\t\t\t\t\t\tty = 'continue';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmultilineVars.staves[lastVoice.staffNum].connectBarLines = ty;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\twhile (tokens.length) {\n\t\t\t\t\tvar t = tokens.shift();\n\t\t\t\t\tswitch (t.token) {\n\t\t\t\t\t\tcase '(':\n\t\t\t\t\t\t\tif (openParen) warn(\"Can't nest parenthesis in %%score\", str, t.start);\n\t\t\t\t\t\t\telse {openParen = true;justOpenParen = true;}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase ')':\n\t\t\t\t\t\t\tif (!openParen || justOpenParen) warn(\"Unexpected close parenthesis in %%score\", str, t.start);\n\t\t\t\t\t\t\telse openParen = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase '[':\n\t\t\t\t\t\t\tif (openBracket) warn(\"Can't nest brackets in %%score\", str, t.start);\n\t\t\t\t\t\t\telse {openBracket = true;justOpenBracket = true;}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase ']':\n\t\t\t\t\t\t\tif (!openBracket || justOpenBracket) warn(\"Unexpected close bracket in %%score\", str, t.start);\n\t\t\t\t\t\t\telse {openBracket = false;multilineVars.staves[lastVoice.staffNum].bracket = 'end';}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase '{':\n\t\t\t\t\t\t\tif (openBrace ) warn(\"Can't nest braces in %%score\", str, t.start);\n\t\t\t\t\t\t\telse {openBrace = true;justOpenBrace = true;}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase '}':\n\t\t\t\t\t\t\tif (!openBrace || justOpenBrace) warn(\"Unexpected close brace in %%score\", str, t.start);\n\t\t\t\t\t\t\telse {openBrace = false;multilineVars.staves[lastVoice.staffNum].brace = 'end';}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase '|':\n\t\t\t\t\t\t\taddContinueBar();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tvar vc = \"\";\n\t\t\t\t\t\t\twhile (t.type === 'alpha' || t.type === 'number') {\n\t\t\t\t\t\t\t\tvc += t.token;\n\t\t\t\t\t\t\t\tif (t.continueId)\n\t\t\t\t\t\t\t\t\tt = tokens.shift();\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvar newStaff = !openParen || justOpenParen;\n\t\t\t\t\t\t\tvar bracket = justOpenBracket ? 'start' : openBracket ? 'continue' : undefined;\n\t\t\t\t\t\t\tvar brace = justOpenBrace ? 'start' : openBrace ? 'continue' : undefined;\n\t\t\t\t\t\t\taddVoice(vc, newStaff, bracket, brace, continueBar);\n\t\t\t\t\t\t\tjustOpenParen = false;\n\t\t\t\t\t\t\tjustOpenBracket = false;\n\t\t\t\t\t\t\tjustOpenBrace = false;\n\t\t\t\t\t\t\tcontinueBar = false;\n\t\t\t\t\t\t\tlastVoice = multilineVars.voices[vc];\n\t\t\t\t\t\t\tif (cmd === 'staves')\n\t\t\t\t\t\t\t\taddContinueBar();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"newpage\":\n\t\t\t\tvar pgNum = tokenizer.getInt(restOfString);\n\t\t\t\ttuneBuilder.addNewPage(pgNum.digits === 0 ? -1 : pgNum.value);\n\t\t\t\tbreak;\n\n\t\t\tcase \"abc\":\n\t\t\t\tvar arr = restOfString.split(' ');\n\t\t\t\tswitch (arr[0]) {\n\t\t\t\t\tcase \"-copyright\":\n\t\t\t\t\tcase \"-creator\":\n\t\t\t\t\tcase \"-edited-by\":\n\t\t\t\t\tcase \"-version\":\n\t\t\t\t\tcase \"-charset\":\n\t\t\t\t\t\tvar subCmd = arr.shift();\n\t\t\t\t\t\ttuneBuilder.addMetaText(cmd+subCmd, arr.join(' '), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+restOfString.length+5});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn \"Unknown directive: \" + cmd+arr[0];\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"header\":\n\t\t\tcase \"footer\":\n\t\t\t\tvar footerStr = tokenizer.getMeat(restOfString, 0, restOfString.length);\n\t\t\t\tfooterStr = restOfString.substring(footerStr.start, footerStr.end);\n\t\t\t\tif (footerStr[0] === '\"' && footerStr[footerStr.length-1] === '\"' )\n\t\t\t\t\tfooterStr = footerStr.substring(1, footerStr.length-1);\n\t\t\t\tvar footerArr = footerStr.split('\\t');\n\t\t\t\tvar footer = {};\n\t\t\t\tif (footerArr.length === 1)\n\t\t\t\t\tfooter = { left: \"\", center: footerArr[0], right: \"\" };\n\t\t\t\telse if (footerArr.length === 2)\n\t\t\t\t\tfooter = { left: footerArr[0], center: footerArr[1], right: \"\" };\n\t\t\t\telse\n\t\t\t\t\tfooter = { left: footerArr[0], center: footerArr[1], right: footerArr[2] };\n\t\t\t\tif (footerArr.length > 3)\n\t\t\t\t\twarn(\"Too many tabs in \" + cmd + \": \" + footerArr.length + \" found.\", restOfString, 0);\n\n\t\t\t\ttuneBuilder.addMetaTextObj(cmd, footer, { startChar: multilineVars.iChar, endChar: multilineVars.iChar+str.length});\n\t\t\t\tbreak;\n\n\t\t\tcase \"midi\":\n\t\t\t\tvar midi = tokenizer.tokenize(restOfString, 0, restOfString.length, true);\n\t\t\t\tif (midi.length > 0 && midi[0].token === '=')\n\t\t\t\t\tmidi.shift();\n\t\t\t\tif (midi.length === 0)\n\t\t\t\t\twarn(\"Expected midi command\", restOfString, 0);\n\t\t\t\telse\n\t\t\t\t\tparseMidiCommand(midi, tune, restOfString);\n\t\t\t\tbreak;\n\t\t\tcase \"percmap\":\n\t\t\t\tvar percmap = interpretPercMap(restOfString);\n\t\t\t\tif (percmap.error)\n\t\t\t\t\twarn(percmap.error, str, 8);\n\t\t\t\telse {\n\t\t\t\t\tif (!tune.formatting.percmap)\n\t\t\t\t\t\ttune.formatting.percmap = {};\n\t\t\t\t\ttune.formatting.percmap[percmap.key] = percmap.value;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"map\":\n\t\t\tcase \"playtempo\":\n\t\t\tcase \"auquality\":\n\t\t\tcase \"continuous\":\n\t\t\tcase \"nobarcheck\":\n\t\t\t\t// TODO-PER: Actually handle the parameters of these\n\t\t\t\ttune.formatting[cmd] = restOfString;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn \"Unknown directive: \" + cmd;\n\t\t}\n\t\treturn null;\n\t};\n\tparseDirective.globalFormatting = function(formatHash) {\n\t\tfor (var cmd in formatHash) {\n\t\t\tif (formatHash.hasOwnProperty(cmd)) {\n\t\t\t\tvar value = ''+formatHash[cmd];\n\t\t\t\tvar tokens = tokenizer.tokenize(value, 0, value.length);\n\t\t\t\tvar scratch;\n\t\t\t\tswitch (cmd) {\n\t\t\t\t\tcase \"titlefont\":\n\t\t\t\t\tcase \"gchordfont\":\n\t\t\t\t\tcase \"composerfont\":\n\t\t\t\t\tcase \"footerfont\":\n\t\t\t\t\tcase \"headerfont\":\n\t\t\t\t\tcase \"historyfont\":\n\t\t\t\t\tcase \"infofont\":\n\t\t\t\t\tcase \"measurefont\":\n\t\t\t\t\tcase \"partsfont\":\n\t\t\t\t\tcase \"repeatfont\":\n\t\t\t\t\tcase \"subtitlefont\":\n\t\t\t\t\tcase \"tempofont\":\n\t\t\t\t\tcase \"textfont\":\n\t\t\t\t\tcase \"voicefont\":\n\t\t\t\t\tcase \"tripletfont\":\n\t\t\t\t\tcase \"vocalfont\":\n\t\t\t\t\tcase \"wordsfont\":\n\t\t\t\t\tcase \"annotationfont\":\n\t\t\t\t\tcase \"tablabelfont\":\n\t\t\t\t\tcase \"tabnumberfont\":\n\t\t\t\t\tcase \"tabgracefont\":\n\t\t\t\t\t\tgetChangingFont(cmd, tokens, value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"scale\":\n\t\t\t\t\t\tsetScale(cmd, tokens);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"partsbox\":\n\t\t\t\t\t\tscratch = addMultilineVarBool('partsBox', cmd, tokens);\n\t\t\t\t\t\tif (scratch !== null) warn(scratch);\n\t\t\t\t\t\tmultilineVars.partsfont.box = multilineVars.partsBox;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"freegchord\":\n\t\t\t\t\t\tscratch = addMultilineVarBool('freegchord', cmd, tokens);\n\t\t\t\t\t\tif (scratch !== null) warn(scratch);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"fontboxpadding\":\n\t\t\t\t\t\tif (tokens.length !== 1 || tokens[0].type !== 'number')\n\t\t\t\t\t\t\twarn(\"Directive \\\"\" + cmd + \"\\\" requires a number as a parameter.\");\n\t\t\t\t\t\ttune.formatting.fontboxpadding = tokens[0].floatt;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"stafftopmargin\":\n\t\t\t\t\t\tif (tokens.length !== 1 || tokens[0].type !== 'number')\n\t\t\t\t\t\t\twarn(\"Directive \\\"\" + cmd + \"\\\" requires a number as a parameter.\");\n\t\t\t\t\t\ttune.formatting.stafftopmargin = tokens[0].floatt;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"stretchlast\":\n\t\t\t\t\t\tvar sl = parseStretchLast(tokens);\n\t\t\t\t\t\tif (sl.value !== undefined)\n\t\t\t\t\t\t\ttune.formatting.stretchlast = sl.value;\n\t\t\t\t\t\tif (sl.error)\n\t\t\t\t\t\t\treturn sl.error;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\twarn(\"Formatting directive unrecognized: \", cmd, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tfunction parseStretchLast(tokens) {\n\t\tif (tokens.length === 0)\n\t\t\treturn { value: 1 }; // if there is no value then the presence of this is the same as \"true\"\n\t\telse if (tokens.length === 1) {\n\t\t\tif (tokens[0].type === \"number\") {\n\t\t\t\tif (tokens[0].floatt >= 0 || tokens[0].floatt <= 1)\n\t\t\t\t\treturn {value: tokens[0].floatt};\n\t\t\t} else if (tokens[0].token === 'false') {\n\t\t\t\treturn { value: 0 };\n\t\t\t} else if (tokens[0].token === 'true') {\n\t\t\t\treturn {value: 1};\n\t\t\t}\n\t\t}\n\t\treturn { error: \"Directive stretchlast requires zero or one parameter: false, true, or number between 0 and 1 (received \" + tokens[0].token + ')' };\n\t}\n})();\n\nmodule.exports = parseDirective;\n","// abc_parse_header.js: parses a the header fields from a string representing ABC Music Notation into a usable internal structure.\n\nvar parseCommon = require('./abc_common');\nvar parseDirective = require('./abc_parse_directive');\nvar parseKeyVoice = require('./abc_parse_key_voice');\n\nvar ParseHeader = function(tokenizer, warn, multilineVars, tune, tuneBuilder) {\n\tthis.reset = function(tokenizer, warn, multilineVars, tune) {\n\t\tparseKeyVoice.initialize(tokenizer, warn, multilineVars, tune, tuneBuilder);\n\t\tparseDirective.initialize(tokenizer, warn, multilineVars, tune, tuneBuilder);\n\t};\n\tthis.reset(tokenizer, warn, multilineVars, tune);\n\n\tthis.setTitle = function(title, origSize) {\n\t\tif (multilineVars.hasMainTitle)\n\t\t\ttuneBuilder.addSubtitle(title, { startChar: multilineVars.iChar, endChar: multilineVars.iChar+origSize+2});\t// display secondary title\n\t\telse\n\t\t{\n\t\t\ttuneBuilder.addMetaText(\"title\", title, { startChar: multilineVars.iChar, endChar: multilineVars.iChar+origSize+2});\n\t\t\tmultilineVars.hasMainTitle = true;\n\t\t}\n\t};\n\n\tthis.setMeter = function(line) {\n\t\tline = tokenizer.stripComment(line);\n\t\tif (line === 'C') {\n\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\tmultilineVars.default_length = 0.125;\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t\treturn {type: 'common_time'};\n\t\t} else if (line === 'C|') {\n\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\tmultilineVars.default_length = 0.125;\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t\treturn {type: 'cut_time'};\n\t\t} else if (line === 'o') {\n\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\tmultilineVars.default_length = 0.125;\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t\treturn {type: 'tempus_perfectum'};\n\t\t} else if (line === 'c') {\n\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\tmultilineVars.default_length = 0.125;\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t\treturn {type: 'tempus_imperfectum'};\n\t\t} else if (line === 'o.') {\n\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\tmultilineVars.default_length = 0.125;\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t\treturn {type: 'tempus_perfectum_prolatio'};\n\t\t} else if (line === 'c.') {\n\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\tmultilineVars.default_length = 0.125;\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t\treturn {type: 'tempus_imperfectum_prolatio'};\n\t\t} else if (line.length === 0 || line.toLowerCase() === 'none') {\n\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\tmultilineVars.default_length = 0.125;\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar tokens = tokenizer.tokenize(line, 0, line.length);\n\t\t\t// the form is [open_paren] decimal [ plus|dot decimal ]... [close_paren] slash decimal [plus same_as_before]\n\t\t\ttry {\n\t\t\t\tvar parseNum = function() {\n\t\t\t\t\t// handles this much: [open_paren] decimal [ plus|dot decimal ]... [close_paren]\n\t\t\t\t\tvar ret = {value: 0, num: \"\"};\n\n\t\t\t\t\tvar tok = tokens.shift();\n\t\t\t\t\tif (tok.token === '(')\n\t\t\t\t\t\ttok = tokens.shift();\n\t\t\t\t\twhile (1) {\n\t\t\t\t\t\tif (tok.type !== 'number') throw \"Expected top number of meter\";\n\t\t\t\t\t\tret.value += parseInt(tok.token);\n\t\t\t\t\t\tret.num += tok.token;\n\t\t\t\t\t\tif (tokens.length === 0 || tokens[0].token === '/') return ret;\n\t\t\t\t\t\ttok = tokens.shift();\n\t\t\t\t\t\tif (tok.token === ')') {\n\t\t\t\t\t\t\tif (tokens.length === 0 || tokens[0].token === '/') return ret;\n\t\t\t\t\t\t\tthrow \"Unexpected paren in meter\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tok.token !== '.' && tok.token !== '+') throw \"Expected top number of meter\";\n\t\t\t\t\t\tret.num += tok.token;\n\t\t\t\t\t\tif (tokens.length === 0) throw \"Expected top number of meter\";\n\t\t\t\t\t\ttok = tokens.shift();\n\t\t\t\t\t}\n\t\t\t\t\treturn ret;\t// just to suppress warning\n\t\t\t\t};\n\n\t\t\t\tvar parseFraction = function() {\n\t\t\t\t\t// handles this much: parseNum slash decimal\n\t\t\t\t\tvar ret = parseNum();\n\t\t\t\t\tif (tokens.length === 0) return ret;\n\t\t\t\t\tvar tok = tokens.shift();\n\t\t\t\t\tif (tok.token !== '/') throw \"Expected slash in meter\";\n\t\t\t\t\ttok = tokens.shift();\n\t\t\t\t\tif (tok.type !== 'number') throw \"Expected bottom number of meter\";\n\t\t\t\t\tret.den = tok.token;\n\t\t\t\t\tret.value = ret.value / parseInt(ret.den);\n\t\t\t\t\treturn ret;\n\t\t\t\t};\n\n\t\t\t\tif (tokens.length === 0) throw \"Expected meter definition in M: line\";\n\t\t\t\tvar meter = {type: 'specified', value: [ ]};\n\t\t\t\tvar totalLength = 0;\n\t\t\t\twhile (1) {\n\t\t\t\t\tvar ret = parseFraction();\n\t\t\t\t\ttotalLength += ret.value;\n\t\t\t\t\tvar mv = { num: ret.num };\n\t\t\t\t\tif (ret.den !== undefined)\n\t\t\t\t\t\tmv.den = ret.den;\n\t\t\t\t\tmeter.value.push(mv);\n\t\t\t\t\tif (tokens.length === 0) break;\n\t\t\t\t\t//var tok = tokens.shift();\n\t\t\t\t\t//if (tok.token !== '+') throw \"Extra characters in M: line\";\n\t\t\t\t}\n\n\t\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\t\tmultilineVars.default_length = totalLength < 0.75 ? 0.0625 : 0.125;\n\t\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t\t}\n\t\t\t\treturn meter;\n\t\t\t} catch (e) {\n\t\t\t\twarn(e, line, 0);\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\n\tthis.calcTempo = function(relTempo) {\n\t\tvar dur = 1/4;\n\t\tif (multilineVars.meter && multilineVars.meter.type === 'specified') {\n\t\t\tdur = 1 / parseInt(multilineVars.meter.value[0].den);\n\t\t} else if (multilineVars.origMeter && multilineVars.origMeter.type === 'specified') {\n\t\t\tdur = 1 / parseInt(multilineVars.origMeter.value[0].den);\n\t\t}\n\t\t//var dur = multilineVars.default_length ? multilineVars.default_length : 1;\n\t\tfor (var i = 0; i < relTempo.duration; i++)\n\t\t\trelTempo.duration[i] = dur * relTempo.duration[i];\n\t\treturn relTempo;\n\t};\n\n\tthis.resolveTempo = function() {\n\t\tif (multilineVars.tempo) {\t// If there's a tempo waiting to be resolved\n\t\t\tthis.calcTempo(multilineVars.tempo);\n\t\t\ttune.metaText.tempo = multilineVars.tempo;\n\t\t\tdelete multilineVars.tempo;\n\t\t}\n\t};\n\n\tthis.addUserDefinition = function(line, start, end) {\n\t\tvar equals = line.indexOf('=', start);\n\t\tif (equals === -1) {\n\t\t\twarn(\"Need an = in a macro definition\", line, start);\n\t\t\treturn;\n\t\t}\n\n\t\tvar before = parseCommon.strip(line.substring(start, equals));\n\t\tvar after = parseCommon.strip(line.substring(equals+1));\n\n\t\tif (before.length !== 1) {\n\t\t\twarn(\"Macro definitions can only be one character\", line, start);\n\t\t\treturn;\n\t\t}\n\t\tvar legalChars = \"HIJKLMNOPQRSTUVWXYhijklmnopqrstuvw~\";\n\t\tif (legalChars.indexOf(before) === -1) {\n\t\t\twarn(\"Macro definitions must be H-Y, h-w, or tilde\", line, start);\n\t\t\treturn;\n\t\t}\n\t\tif (after.length === 0) {\n\t\t\twarn(\"Missing macro definition\", line, start);\n\t\t\treturn;\n\t\t}\n\t\tif (multilineVars.macros === undefined)\n\t\t\tmultilineVars.macros = {};\n\t\tmultilineVars.macros[before] = after;\n\t};\n\n\tthis.setDefaultLength = function(line, start, end) {\n\t\tvar len = line.substring(start, end).replace(/ /g, \"\");\n\t\tvar len_arr = len.split('/');\n\t\tif (len_arr.length === 2) {\n\t\t\tvar n = parseInt(len_arr[0]);\n\t\t\tvar d = parseInt(len_arr[1]);\n\t\t\tif (d > 0) {\n\t\t\t\tmultilineVars.default_length = n / d;\t// a whole note is 1\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t} else if (len_arr.length === 1 && len_arr[0] === '1') {\n\t\t\tmultilineVars.default_length = 1;\n\t\t\tmultilineVars.havent_set_length = false;\n\t\t}\n\t};\n\n\n\tvar tempoString = {\n\n\t\tlarghissimo: 20,\n\t\tadagissimo: 24,\n\t\tsostenuto: 28,\n\t\tgrave: 32,\n\t\tlargo: 40,\n\t\tlento: 50,\n\t\tlarghetto: 60,\n\t\tadagio: 68,\n\t\tadagietto: 74,\n\t\tandante: 80,\n\t\tandantino: 88,\n\t\t\"marcia moderato\": 84,\n\t\t\"andante moderato\": 100,\n\t\tmoderato: 112,\n\t\tallegretto: 116,\n\t\t\"allegro moderato\": 120,\n\t\tallegro: 126,\n\t\tanimato: 132,\n\t\tagitato: 140,\n\t\tveloce: 148,\n\t\t\"mosso vivo\": 156,\n\t\tvivace: 164,\n\t\tvivacissimo: 172,\n\t\tallegrissimo: 176,\n\t\tpresto: 184,\n\t\tprestissimo: 210,\n\t};\n\n\tthis.setTempo = function(line, start, end, iChar) {\n\t\t//Q - tempo; can be used to specify the notes per minute, e.g. If\n\t\t//the meter denominator is a 4 note then Q:120 or Q:C=120\n\t\t//is 120 quarter notes per minute. Similarly Q:C3=40 would be 40\n\t\t//dotted half notes per minute. An absolute tempo may also be\n\t\t//set, e.g. Q:1/8=120 is 120 eighth notes per minute,\n\t\t//irrespective of the meter's denominator.\n\t\t//\n\t\t// This is either a number, \"C=number\", \"Cnumber=number\", or fraction [fraction...]=number\n\t\t// It depends on the M: field, which may either not be present, or may appear after this.\n\t\t// If M: is not present, an eighth note is used.\n\t\t// That means that this field can't be calculated until the end, if it is the first three types, since we don't know if we'll see an M: field.\n\t\t// So, if it is the fourth type, set it here, otherwise, save the info in the multilineVars.\n\t\t// The temporary variables we keep are the duration and the bpm. In the first two forms, the duration is 1.\n\t\t// In addition, a quoted string may both precede and follow. If a quoted string is present, then the duration part is optional.\n\t\ttry {\n\t\t\tvar tokens = tokenizer.tokenize(line, start, end);\n\n\t\t\tif (tokens.length === 0) throw \"Missing parameter in Q: field\";\n\n\t\t\tvar tempo = { startChar: iChar+start-2, endChar: iChar+end };\n\t\t\tvar delaySet = true;\n\t\t\tvar token = tokens.shift();\n\t\t\tif (token.type === 'quote') {\n\t\t\t\ttempo.preString = token.token;\n\t\t\t\ttoken = tokens.shift();\n\t\t\t\tif (tokens.length === 0) {\t// It's ok to just get a string for the tempo\n\t\t\t\t\t// If the string is a well-known tempo, put in the bpm\n\t\t\t\t\tif (tempoString[tempo.preString.toLowerCase()]) {\n\t\t\t\t\t\ttempo.bpm = tempoString[tempo.preString.toLowerCase()];\n\t\t\t\t\t\ttempo.suppressBpm = true;\n\t\t\t\t\t}\n\t\t\t\t\treturn {type: 'immediate', tempo: tempo};\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (token.type === 'alpha' && token.token === 'C')\t { // either type 2 or type 3\n\t\t\t\tif (tokens.length === 0) throw \"Missing tempo after C in Q: field\";\n\t\t\t\ttoken = tokens.shift();\n\t\t\t\tif (token.type === 'punct' && token.token === '=') {\n\t\t\t\t\t// This is a type 2 format. The duration is an implied 1\n\t\t\t\t\tif (tokens.length === 0) throw \"Missing tempo after = in Q: field\";\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.type !== 'number') throw \"Expected number after = in Q: field\";\n\t\t\t\t\ttempo.duration = [1];\n\t\t\t\t\ttempo.bpm = parseInt(token.token);\n\t\t\t\t} else if (token.type === 'number') {\n\t\t\t\t\t// This is a type 3 format.\n\t\t\t\t\ttempo.duration = [parseInt(token.token)];\n\t\t\t\t\tif (tokens.length === 0) throw \"Missing = after duration in Q: field\";\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.type !== 'punct' || token.token !== '=') throw \"Expected = after duration in Q: field\";\n\t\t\t\t\tif (tokens.length === 0) throw \"Missing tempo after = in Q: field\";\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.type !== 'number') throw \"Expected number after = in Q: field\";\n\t\t\t\t\ttempo.bpm = parseInt(token.token);\n\t\t\t\t} else throw \"Expected number or equal after C in Q: field\";\n\n\t\t\t} else if (token.type === 'number') {\t// either type 1 or type 4\n\t\t\t\tvar num = parseInt(token.token);\n\t\t\t\tif (tokens.length === 0 || tokens[0].type === 'quote') {\n\t\t\t\t\t// This is type 1\n\t\t\t\t\ttempo.duration = [1];\n\t\t\t\t\ttempo.bpm = num;\n\t\t\t\t} else {\t// This is type 4\n\t\t\t\t\tdelaySet = false;\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.type !== 'punct' && token.token !== '/') throw \"Expected fraction in Q: field\";\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.type !== 'number') throw \"Expected fraction in Q: field\";\n\t\t\t\t\tvar den = parseInt(token.token);\n\t\t\t\t\ttempo.duration = [num/den];\n\t\t\t\t\t// We got the first fraction, keep getting more as long as we find them.\n\t\t\t\t\twhile (tokens.length > 0 && tokens[0].token !== '=' && tokens[0].type !== 'quote') {\n\t\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\t\tif (token.type !== 'number') throw \"Expected fraction in Q: field\";\n\t\t\t\t\t\tnum = parseInt(token.token);\n\t\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\t\tif (token.type !== 'punct' && token.token !== '/') throw \"Expected fraction in Q: field\";\n\t\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\t\tif (token.type !== 'number') throw \"Expected fraction in Q: field\";\n\t\t\t\t\t\tden = parseInt(token.token);\n\t\t\t\t\t\ttempo.duration.push(num/den);\n\t\t\t\t\t}\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.type !== 'punct' && token.token !== '=') throw \"Expected = in Q: field\";\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.type !== 'number') throw \"Expected tempo in Q: field\";\n\t\t\t\t\ttempo.bpm = parseInt(token.token);\n\t\t\t\t}\n\t\t\t} else throw \"Unknown value in Q: field\";\n\t\t\tif (tokens.length !== 0) {\n\t\t\t\ttoken = tokens.shift();\n\t\t\t\tif (token.type === 'quote') {\n\t\t\t\t\ttempo.postString = token.token;\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t}\n\t\t\t\tif (tokens.length !== 0) throw \"Unexpected string at end of Q: field\";\n\t\t\t}\n\t\t\tif (multilineVars.printTempo === false)\n\t\t\t\ttempo.suppress = true;\n\t\t\treturn {type: delaySet?'delaySet':'immediate', tempo: tempo};\n\t\t} catch (msg) {\n\t\t\twarn(msg, line, start);\n\t\t\treturn {type: 'none'};\n\t\t}\n\t};\n\n\tthis.letter_to_inline_header = function(line, i, startLine)\n\t{\n\t\tvar ws = tokenizer.eatWhiteSpace(line, i);\n\t\ti +=ws;\n\t\tif (line.length >= i+5 && line[i] === '[' && line[i+2] === ':') {\n\t\t\tvar e = line.indexOf(']', i);\n\t\t\tvar startChar = multilineVars.iChar + i;\n\t\t\tvar endChar = multilineVars.iChar + e + 1;\n\t\t\tswitch(line.substring(i, i+3))\n\t\t\t{\n\t\t\t\tcase \"[I:\":\n\t\t\t\t\tvar err = parseDirective.addDirective(line.substring(i+3, e));\n\t\t\t\t\tif (err) warn(err, line, i);\n\t\t\t\t\treturn [ e-i+1+ws ];\n\t\t\t\tcase \"[M:\":\n\t\t\t\t\tvar meter = this.setMeter(line.substring(i+3, e));\n\t\t\t\t\tif (tuneBuilder.hasBeginMusic() && meter)\n\t\t\t\t\t\ttuneBuilder.appendStartingElement('meter', startChar, endChar, meter);\n\t\t\t\t\telse\n\t\t\t\t\t\tmultilineVars.meter = meter;\n\t\t\t\t\treturn [ e-i+1+ws ];\n\t\t\t\tcase \"[K:\":\n\t\t\t\t\tvar result = parseKeyVoice.parseKey(line.substring(i+3, e), true);\n\t\t\t\t\tif (result.foundClef && tuneBuilder.hasBeginMusic())\n\t\t\t\t\t\ttuneBuilder.appendStartingElement('clef', startChar, endChar, multilineVars.clef);\n\t\t\t\t\tif (result.foundKey && tuneBuilder.hasBeginMusic())\n\t\t\t\t\t\ttuneBuilder.appendStartingElement('key', startChar, endChar, parseKeyVoice.fixKey(multilineVars.clef, multilineVars.key));\n\t\t\t\t\treturn [ e-i+1+ws ];\n\t\t\t\tcase \"[P:\":\n\t\t\t\t\tvar part = parseDirective.parseFontChangeLine(line.substring(i+3, e))\n\t\t\t\t\tif (startLine || tune.lines.length <= tune.lineNum)\n\t\t\t\t\t\tmultilineVars.partForNextLine = { title: part, startChar: startChar, endChar: endChar };\n\t\t\t\t\telse\n\t\t\t\t\t\ttuneBuilder.appendElement('part', startChar, endChar, {title: part});\n\t\t\t\t\treturn [ e-i+1+ws ];\n\t\t\t\tcase \"[L:\":\n\t\t\t\t\tthis.setDefaultLength(line, i+3, e);\n\t\t\t\t\treturn [ e-i+1+ws ];\n\t\t\t\tcase \"[Q:\":\n\t\t\t\t\tif (e > 0) {\n\t\t\t\t\t\tvar tempo = this.setTempo(line, i+3, e, multilineVars.iChar);\n\t\t\t\t\t\tif (tempo.type === 'delaySet') {\n\t\t\t\t\t\t\tif (tuneBuilder.hasBeginMusic())\n\t\t\t\t\t\t\t\ttuneBuilder.appendElement('tempo', startChar, endChar, this.calcTempo(tempo.tempo));\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tmultilineVars.tempoForNextLine = ['tempo', startChar, endChar, this.calcTempo(tempo.tempo)]\n\t\t\t\t\t\t} else if (tempo.type === 'immediate') {\n\t\t\t\t\t\t\tif (!startLine && tuneBuilder.hasBeginMusic())\n\t\t\t\t\t\t\t\ttuneBuilder.appendElement('tempo', startChar, endChar, tempo.tempo);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tmultilineVars.tempoForNextLine = ['tempo', startChar, endChar, tempo.tempo]\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn [ e-i+1+ws, line[i+1], line.substring(i+3, e)];\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"[V:\":\n\t\t\t\t\tif (e > 0) {\n\t\t\t\t\t\tparseKeyVoice.parseVoice(line, i+3, e);\n\t\t\t\t\t\t//startNewLine();\n\t\t\t\t\t\treturn [ e-i+1+ws, line[i+1], line.substring(i+3, e)];\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"[r:\":\n\t\t\t\t\treturn [ e-i+1+ws ];\n\n\t\t\t\tdefault:\n\t\t\t\t\t// TODO: complain about unhandled header\n\t\t\t}\n\t\t}\n\t\treturn [ 0 ];\n\t};\n\n\tthis.letter_to_body_header = function(line, i)\n\t{\n\t\tif (line.length >= i+3) {\n\t\t\tswitch(line.substring(i, i+2))\n\t\t\t{\n\t\t\t\tcase \"I:\":\n\t\t\t\t\tvar err = parseDirective.addDirective(line.substring(i+2));\n\t\t\t\t\tif (err) warn(err, line, i);\n\t\t\t\t\treturn [ line.length ];\n\t\t\t\tcase \"M:\":\n\t\t\t\t\tvar meter = this.setMeter(line.substring(i+2));\n\t\t\t\t\tif (tuneBuilder.hasBeginMusic() && meter)\n\t\t\t\t\t\ttuneBuilder.appendStartingElement('meter', multilineVars.iChar + i, multilineVars.iChar + line.length, meter);\n\t\t\t\t\treturn [ line.length ];\n\t\t\t\tcase \"K:\":\n\t\t\t\t\tvar result = parseKeyVoice.parseKey(line.substring(i+2), tuneBuilder.hasBeginMusic());\n\t\t\t\t\tif (result.foundClef && tuneBuilder.hasBeginMusic())\n\t\t\t\t\t\ttuneBuilder.appendStartingElement('clef', multilineVars.iChar + i, multilineVars.iChar + line.length, multilineVars.clef);\n\t\t\t\t\tif (result.foundKey && tuneBuilder.hasBeginMusic())\n\t\t\t\t\t\ttuneBuilder.appendStartingElement('key', multilineVars.iChar + i, multilineVars.iChar + line.length, parseKeyVoice.fixKey(multilineVars.clef, multilineVars.key));\n\t\t\t\t\treturn [ line.length ];\n\t\t\t\tcase \"P:\":\n\t\t\t\t\tif (tuneBuilder.hasBeginMusic())\n\t\t\t\t\t\ttuneBuilder.appendElement('part', multilineVars.iChar + i, multilineVars.iChar + line.length, {title: line.substring(i+2)});\n\t\t\t\t\treturn [ line.length ];\n\t\t\t\tcase \"L:\":\n\t\t\t\t\tthis.setDefaultLength(line, i+2, line.length);\n\t\t\t\t\treturn [ line.length ];\n\t\t\t\tcase \"Q:\":\n\t\t\t\t\tvar e = line.indexOf('\\x12', i+2);\n\t\t\t\t\tif (e === -1) e = line.length;\n\t\t\t\t\tvar tempo = this.setTempo(line, i+2, e, multilineVars.iChar);\n\t\t\t\t\tif (tempo.type === 'delaySet') tuneBuilder.appendElement('tempo', multilineVars.iChar + i, multilineVars.iChar + line.length, this.calcTempo(tempo.tempo));\n\t\t\t\t\telse if (tempo.type === 'immediate') tuneBuilder.appendElement('tempo', multilineVars.iChar + i, multilineVars.iChar + line.length, tempo.tempo);\n\t\t\t\treturn [ e, line[i], parseCommon.strip(line.substring(i+2))];\n\t\t\t\tcase \"V:\":\n\t\t\t\t\tparseKeyVoice.parseVoice(line, i+2, line.length);\n//\t\t\t\t\t\tstartNewLine();\n\t\t\t\t\treturn [ line.length, line[i], parseCommon.strip(line.substring(i+2))];\n\t\t\t\tdefault:\n\t\t\t\t\t// TODO: complain about unhandled header\n\t\t\t}\n\t\t}\n\t\treturn [ 0 ];\n\t};\n\n\tvar metaTextHeaders = {\n\t\tA: 'author',\n\t\tB: 'book',\n\t\tC: 'composer',\n\t\tD: 'discography',\n\t\tF: 'url',\n\t\tG: 'group',\n\t\tI: 'instruction',\n\t\tN: 'notes',\n\t\tO: 'origin',\n\t\tR: 'rhythm',\n\t\tS: 'source',\n\t\tW: 'unalignedWords',\n\t\tZ: 'transcription'\n\t};\n\n\tthis.parseHeader = function(line) {\n\t\tvar field = metaTextHeaders[line[0]];\n\t\tvar origSize = line.length-2\n\t\tvar restOfLine = tokenizer.translateString(tokenizer.stripComment(line.substring(2)))\n\t\tif (field === 'unalignedWords' || field === 'notes') {\n\t\t\t// These fields can be multi-line\n\t\t\ttuneBuilder.addMetaTextArray(field, parseDirective.parseFontChangeLine(restOfLine), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+line.length});\n\t\t} else if (field !== undefined) {\n\t\t\t// these fields are single line\n\t\t\ttuneBuilder.addMetaText(field, parseDirective.parseFontChangeLine(restOfLine), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+line.length});\n\t\t} else {\n\t\t\tvar startChar = multilineVars.iChar;\n\t\t\tvar endChar = startChar + line.length;\n\t\t\tswitch(line[0])\n\t\t\t{\n\t\t\t\tcase 'H':\n\t\t\t\t\t// History is a little different because once it starts it continues until another header field is encountered\n\t\t\t\t\ttuneBuilder.addMetaTextArray(\"history\", parseDirective.parseFontChangeLine(restOfLine), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+line.length});\n\t\t\t\t\tline = tokenizer.peekLine()\n\t\t\t\t\twhile (line && line[1] !== ':') {\n\t\t\t\t\t\ttokenizer.nextLine()\n\t\t\t\t\t\ttuneBuilder.addMetaTextArray(\"history\", parseDirective.parseFontChangeLine(tokenizer.translateString(tokenizer.stripComment(line))), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+line.length});\n\t\t\t\t\t\tline = tokenizer.peekLine()\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'K':\n\t\t\t\t\t// since the key is the last thing that can happen in the header, we can resolve the tempo now\n\t\t\t\t\tthis.resolveTempo();\n\t\t\t\t\tvar result = parseKeyVoice.parseKey(line.substring(2), false);\n\t\t\t\t\tif (!multilineVars.is_in_header && tuneBuilder.hasBeginMusic()) {\n\t\t\t\t\t\tif (result.foundClef)\n\t\t\t\t\t\t\ttuneBuilder.appendStartingElement('clef', startChar, endChar, multilineVars.clef);\n\t\t\t\t\t\tif (result.foundKey)\n\t\t\t\t\t\t\ttuneBuilder.appendStartingElement('key', startChar, endChar, parseKeyVoice.fixKey(multilineVars.clef, multilineVars.key));\n\t\t\t\t\t}\n\t\t\t\t\tmultilineVars.is_in_header = false;\t// The first key signifies the end of the header.\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'L':\n\t\t\t\t\tthis.setDefaultLength(line, 2, line.length);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'M':\n\t\t\t\t\tmultilineVars.origMeter = multilineVars.meter = this.setMeter(line.substring(2));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'P':\n\t\t\t\t\t// TODO-PER: There is more to do with parts, but the writer doesn't care.\n\t\t\t\t\tif (multilineVars.is_in_header)\n\t\t\t\t\t\ttuneBuilder.addMetaText(\"partOrder\", parseDirective.parseFontChangeLine(restOfLine), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+line.length});\n\t\t\t\t\telse\n\t\t\t\t\t\tmultilineVars.partForNextLine = { title: restOfLine, startChar: startChar, endChar: endChar};\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Q':\n\t\t\t\t\tvar tempo = this.setTempo(line, 2, line.length, multilineVars.iChar);\n\t\t\t\t\tif (tempo.type === 'delaySet') multilineVars.tempo = tempo.tempo;\n\t\t\t\t\telse if (tempo.type === 'immediate') {\n\t\t\t\t\t\tif (!tune.metaText.tempo)\n\t\t\t\t\t\t\ttune.metaText.tempo = tempo.tempo;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tmultilineVars.tempoForNextLine = ['tempo', startChar, endChar, tempo.tempo]\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'T':\n\t\t\t\t\tif (multilineVars.titlecaps)\n\t\t\t\t\t\trestOfLine = restOfLine.toUpperCase();\t\t\n\t\t\t\t\tthis.setTitle(parseDirective.parseFontChangeLine(tokenizer.theReverser(restOfLine)), origSize);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'U':\n\t\t\t\t\tthis.addUserDefinition(line, 2, line.length);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'V':\n\t\t\t\t\tparseKeyVoice.parseVoice(line, 2, line.length);\n\t\t\t\t\tif (!multilineVars.is_in_header)\n\t\t\t\t\t\treturn {newline: true};\n\t\t\t\t\tbreak;\n\t\t\t\tcase 's':\n\t\t\t\t\treturn {symbols: true};\n\t\t\t\tcase 'w':\n\t\t\t\t\treturn {words: true};\n\t\t\t\tcase 'X':\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'E':\n\t\t\t\tcase 'm':\n\t\t\t\t\twarn(\"Ignored header\", line, 0);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn {regular: true};\n\t\t\t}\n\t\t}\n\t\treturn {};\n\t};\n};\n\nmodule.exports = ParseHeader;\n","var parseCommon = require('./abc_common');\nvar parseDirective = require('./abc_parse_directive');\nvar transpose = require('./abc_transpose');\n\nvar parseKeyVoice = {};\n\n(function() {\n\tvar tokenizer;\n\tvar warn;\n\tvar multilineVars;\n\tvar tune;\n\tvar tuneBuilder;\n\tparseKeyVoice.initialize = function(tokenizer_, warn_, multilineVars_, tune_, tuneBuilder_) {\n\t\ttokenizer = tokenizer_;\n\t\twarn = warn_;\n\t\tmultilineVars = multilineVars_;\n\t\ttune = tune_;\n\t\ttuneBuilder = tuneBuilder_;\n\t};\n\n\tparseKeyVoice.standardKey = function(keyName, root, acc, localTranspose) {\n\t\treturn transpose.keySignature(multilineVars, keyName, root, acc, localTranspose);\n\t};\n\n\tvar clefLines = {\n\t\t'treble': { clef: 'treble', pitch: 4, mid: 0 },\n\t\t'treble+8': { clef: 'treble+8', pitch: 4, mid: 0 },\n\t\t'treble-8': { clef: 'treble-8', pitch: 4, mid: 0 },\n\t\t'treble^8': { clef: 'treble+8', pitch: 4, mid: 0 },\n\t\t'treble_8': { clef: 'treble-8', pitch: 4, mid: 0 },\n\t\t'treble1': { clef: 'treble', pitch: 2, mid: 2 },\n\t\t'treble2': { clef: 'treble', pitch: 4, mid: 0 },\n\t\t'treble3': { clef: 'treble', pitch: 6, mid: -2 },\n\t\t'treble4': { clef: 'treble', pitch: 8, mid: -4 },\n\t\t'treble5': { clef: 'treble', pitch: 10, mid: -6 },\n\t\t'perc': { clef: 'perc', pitch: 6, mid: 0 },\n\t\t'none': { clef: 'none', mid: 0 },\n\t\t'bass': { clef: 'bass', pitch: 8, mid: -12 },\n\t\t'bass+8': { clef: 'bass+8', pitch: 8, mid: -12 },\n\t\t'bass-8': { clef: 'bass-8', pitch: 8, mid: -12 },\n\t\t'bass^8': { clef: 'bass+8', pitch: 8, mid: -12 },\n\t\t'bass_8': { clef: 'bass-8', pitch: 8, mid: -12 },\n\t\t'bass+16': { clef: 'bass', pitch: 8, mid: -12 },\n\t\t'bass-16': { clef: 'bass', pitch: 8, mid: -12 },\n\t\t'bass^16': { clef: 'bass', pitch: 8, mid: -12 },\n\t\t'bass_16': { clef: 'bass', pitch: 8, mid: -12 },\n\t\t'bass1': { clef: 'bass', pitch: 2, mid: -6 },\n\t\t'bass2': { clef: 'bass', pitch: 4, mid: -8 },\n\t\t'bass3': { clef: 'bass', pitch: 6, mid: -10 },\n\t\t'bass4': { clef: 'bass', pitch: 8, mid: -12 },\n\t\t'bass5': { clef: 'bass', pitch: 10, mid: -14 },\n\t\t'tenor': { clef: 'alto', pitch: 8, mid: -8 },\n\t\t'tenor1': { clef: 'alto', pitch: 2, mid: -2 },\n\t\t'tenor2': { clef: 'alto', pitch: 4, mid: -4 },\n\t\t'tenor3': { clef: 'alto', pitch: 6, mid: -6 },\n\t\t'tenor4': { clef: 'alto', pitch: 8, mid: -8 },\n\t\t'tenor5': { clef: 'alto', pitch: 10, mid: -10 },\n\t\t'alto': { clef: 'alto', pitch: 6, mid: -6 },\n\t\t'alto1': { clef: 'alto', pitch: 2, mid: -2 },\n\t\t'alto2': { clef: 'alto', pitch: 4, mid: -4 },\n\t\t'alto3': { clef: 'alto', pitch: 6, mid: -6 },\n\t\t'alto4': { clef: 'alto', pitch: 8, mid: -8 },\n\t\t'alto5': { clef: 'alto', pitch: 10, mid: -10 },\n\t\t'alto+8': { clef: 'alto+8', pitch: 6, mid: -6 },\n\t\t'alto-8': { clef: 'alto-8', pitch: 6, mid: -6 },\n\t\t'alto^8': { clef: 'alto+8', pitch: 6, mid: -6 },\n\t\t'alto_8': { clef: 'alto-8', pitch: 6, mid: -6 }\n\t};\n\n\tvar calcMiddle = function(clef, oct) {\n\t\tvar value = clefLines[clef];\n\t\tvar mid = value ? value.mid : 0;\n\t\treturn mid+oct;\n\t};\n\n\tparseKeyVoice.fixClef = function(clef) {\n\t\tvar value = clefLines[clef.type];\n\t\tif (value) {\n\t\t\tclef.clefPos = value.pitch;\n\t\t\tclef.type = value.clef;\n\t\t}\n\t};\n\n\tparseKeyVoice.deepCopyKey = function(key) {\n\t\tvar ret = { accidentals: [], root: key.root, acc: key.acc, mode: key.mode };\n\t\tkey.accidentals.forEach(function(k) {\n\t\tret.accidentals.push(parseCommon.clone(k));\n\t\t});\n\t\treturn ret;\n\t};\n\n\tvar pitches = {A: 5, B: 6, C: 0, D: 1, E: 2, F: 3, G: 4, a: 12, b: 13, c: 7, d: 8, e: 9, f: 10, g: 11};\n\n\tparseKeyVoice.addPosToKey = function(clef, key) {\n\t\t// Shift the key signature from the treble positions to whatever position is needed for the clef.\n\t\t// This may put the key signature unnaturally high or low, so if it does, then shift it.\n\t\tvar mid = clef.verticalPos;\n\t\tkey.accidentals.forEach(function(acc) {\n\t\t\tvar pitch = pitches[acc.note];\n\t\t\tpitch = pitch - mid;\n\t\t\tacc.verticalPos = pitch;\n\t\t});\n\t\tif (key.impliedNaturals)\n\t\t\tkey.impliedNaturals.forEach(function(acc) {\n\t\t\t\tvar pitch = pitches[acc.note];\n\t\t\t\tpitch = pitch - mid;\n\t\t\t\tacc.verticalPos = pitch;\n\t\t\t});\n\n\t\tif (mid < -10) {\n\t\t\tkey.accidentals.forEach(function(acc) {\n\t\t\t\tacc.verticalPos -= 7;\n\t\t\t\tif (acc.verticalPos >= 11 || (acc.verticalPos === 10 && acc.acc === 'flat'))\n\t\t\t\t\tacc.verticalPos -= 7;\n\t\t\t\tif (acc.note === 'A' && acc.acc === 'sharp' )\n\t\t\t\t\tacc.verticalPos -=7;\n\t\t\t\tif ((acc.note === 'G' || acc.note === 'F') && acc.acc === 'flat' )\n\t\t\t\t\tacc.verticalPos -=7;\n\t\t\t});\n\t\t\tif (key.impliedNaturals)\n\t\t\t\tkey.impliedNaturals.forEach(function(acc) {\n\t\t\t\t\tacc.verticalPos -= 7;\n\t\t\t\t\tif (acc.verticalPos >= 11 || (acc.verticalPos === 10 && acc.acc === 'flat'))\n\t\t\t\t\t\tacc.verticalPos -= 7;\n\t\t\t\t\tif (acc.note === 'A' && acc.acc === 'sharp' )\n\t\t\t\t\t\tacc.verticalPos -=7;\n\t\t\t\t\tif ((acc.note === 'G' || acc.note === 'F') && acc.acc === 'flat' )\n\t\t\t\t\t\tacc.verticalPos -=7;\n\t\t\t\t});\n\t\t} else if (mid < -4) {\n\t\t\tkey.accidentals.forEach(function(acc) {\n\t\t\t\tacc.verticalPos -= 7;\n\t\t\t\tif (mid === -8 && (acc.note === 'f' || acc.note === 'g') && acc.acc === 'sharp' )\n\t\t\t\t\tacc.verticalPos -=7;\n\t\t\t});\n\t\t\tif (key.impliedNaturals)\n\t\t\t\tkey.impliedNaturals.forEach(function(acc) {\n\t\t\t\t\tacc.verticalPos -= 7;\n\t\t\t\t\tif (mid === -8 && (acc.note === 'f' || acc.note === 'g') && acc.acc === 'sharp' )\n\t\t\t\t\t\tacc.verticalPos -=7;\n\t\t\t\t});\n\t\t} else if (mid >= 7) {\n\t\t\tkey.accidentals.forEach(function(acc) {\n\t\t\t\tacc.verticalPos += 7;\n\t\t\t});\n\t\t\tif (key.impliedNaturals)\n\t\t\t\tkey.impliedNaturals.forEach(function(acc) {\n\t\t\t\t\tacc.verticalPos += 7;\n\t\t\t\t});\n\t\t}\n\t};\n\n\tparseKeyVoice.fixKey = function(clef, key) {\n\t\tvar fixedKey = parseCommon.clone(key);\n\t\tparseKeyVoice.addPosToKey(clef, fixedKey);\n\t\treturn fixedKey;\n\t};\n\n\tvar parseMiddle = function(str) {\n\t\tvar i = 0;\n\t\tvar p = str[i++];\n\t\tif (p === '^' || p === '_')\n\t\t\tp = str[i++];\n\t var mid = pitches[p];\n\t\tif (mid === undefined)\n\t\t\tmid = 6; // If a legal middle note wasn't received, just ignore it.\n\t\tfor ( ; i < str.length; i++) {\n\t\t\tif (str[i] === ',') mid -= 7;\n\t\t\telse if (str[i] === \"'\") mid += 7;\n\t\t\telse break;\n\t\t}\n\t\treturn { mid: mid - 6, str: str.substring(i) };\t// We get the note in the middle of the staff. We want the note that appears as the first ledger line below the staff.\n\t};\n\n\tvar normalizeAccidentals = function(accs) {\n\t\tfor (var i = 0; i < accs.length; i++) {\n\t\t\tif (accs[i].note === 'b')\n\t\t\t\taccs[i].note = 'B';\n\t\t\telse if (accs[i].note === 'a')\n\t\t\t\taccs[i].note = 'A';\n\t\t\telse if (accs[i].note === 'F')\n\t\t\t\taccs[i].note = 'f';\n\t\t\telse if (accs[i].note === 'E')\n\t\t\t\taccs[i].note = 'e';\n\t\t\telse if (accs[i].note === 'D')\n\t\t\t\taccs[i].note = 'd';\n\t\t\telse if (accs[i].note === 'C')\n\t\t\t\taccs[i].note = 'c';\n\t\t\telse if (accs[i].note === 'G' && accs[i].acc === 'sharp')\n\t\t\t\taccs[i].note = 'g';\n\t\t\telse if (accs[i].note === 'g' && accs[i].acc === 'flat')\n\t\t\t\taccs[i].note = 'G';\n\t\t}\n\t};\n\n\tparseKeyVoice.parseKey = function(str, isInline)\t// (and clef)\n\t{\n\t\t// returns:\n\t\t//\t\t{ foundClef: true, foundKey: true }\n\t\t// Side effects:\n\t\t//\t\tcalls warn() when there is a syntax error\n\t\t//\t\tsets these members of multilineVars:\n\t\t//\t\t\tclef\n\t\t//\t\t\tkey\n\t\t//\t\t\tstyle\n\t\t//\n\t\t// The format is:\n\t\t// K: [⟨key⟩] [⟨modifiers⟩*]\n\t\t// modifiers are any of the following in any order:\n\t\t// [⟨clef⟩] [middle=⟨pitch⟩] [transpose=[-]⟨number⟩] [stafflines=⟨number⟩] [staffscale=⟨number⟩][style=⟨style⟩]\n\t\t// key is none|HP|Hp|⟨specified_key⟩\n\t\t// clef is [clef=] [⟨clef type⟩] [⟨line number⟩] [+8|-8]\n\t\t// specified_key is ⟨pitch⟩[#|b][mode(first three chars are significant)][accidentals*]\n\t\tif (str.length === 0) {\n\t\t\t// an empty K: field is the same as K:none\n\t\t\tstr = 'none';\n\t\t}\n\t\tvar tokens = tokenizer.tokenize(str, 0, str.length);\n\t\tvar ret = {};\n\n\t\t// Be sure that a key was passed in\n\t\tif (tokens.length === 0) {\n\t\t\twarn(\"Must pass in key signature.\", str, 0);\n\t\t\treturn ret;\n\t\t}\n\n\t\t// first the key\n\t\tswitch (tokens[0].token) {\n\t\t\tcase 'HP':\n\t\t\t\tparseDirective.addDirective(\"bagpipes\");\n\t\t\t\tmultilineVars.key = { root: \"HP\", accidentals: [], acc: \"\", mode: \"\" };\n\t\t\t\tret.foundKey = true;\n\t\t\t\ttokens.shift();\n\t\t\t\tbreak;\n\t\t\tcase 'Hp':\n\t\t\t\tparseDirective.addDirective(\"bagpipes\");\n\t\t\t\tmultilineVars.key = { root: \"Hp\", accidentals: [{acc: 'natural', note: 'g'}, {acc: 'sharp', note: 'f'}, {acc: 'sharp', note: 'c'}], acc: \"\", mode: \"\" };\n\t\t\t\tret.foundKey = true;\n\t\t\t\ttokens.shift();\n\t\t\t\tbreak;\n\t\t\tcase 'none':\n\t\t\t\t// we got the none key - that's the same as C to us\n\t\t\t\tmultilineVars.key = { root: \"none\", accidentals: [], acc: \"\", mode: \"\" };\n\t\t\t\tret.foundKey = true;\n\t\t\t\ttokens.shift();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tvar retPitch = tokenizer.getKeyPitch(tokens[0].token);\n\t\t\t\tif (retPitch.len > 0) {\n\t\t\t\t\tret.foundKey = true;\n\t\t\t\t\tvar acc = \"\";\n\t\t\t\t\tvar mode = \"\";\n\t\t\t\t\t// The accidental and mode might be attached to the pitch, so we might want to just remove the first character.\n\t\t\t\t\tif (tokens[0].token.length > 1)\n\t\t\t\t\t\ttokens[0].token = tokens[0].token.substring(1);\n\t\t\t\t\telse\n\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\tvar key = retPitch.token;\n\t\t\t\t\t// We got a pitch to start with, so we might also have an accidental and a mode\n\t\t\t\t\tif (tokens.length > 0) {\n\t\t\t\t\t\tvar retAcc = tokenizer.getSharpFlat(tokens[0].token);\n\t\t\t\t\t\tif (retAcc.len > 0) {\n\t\t\t\t\t\t\tif (tokens[0].token.length > 1)\n\t\t\t\t\t\t\t\ttokens[0].token = tokens[0].token.substring(1);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\t\t\tkey += retAcc.token;\n\t\t\t\t\t\t\tacc = retAcc.token;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tokens.length > 0) {\n\t\t\t\t\t\t\tvar retMode = tokenizer.getMode(tokens[0].token);\n\t\t\t\t\t\t\tif (retMode.len > 0) {\n\t\t\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\t\t\t\tkey += retMode.token;\n\t\t\t\t\t\t\t\tmode = retMode.token;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Be sure that the key specified is in the list: not all keys are physically possible, like Cbmin.\n\t\t\t\t\t\tif (parseKeyVoice.standardKey(key, retPitch.token, acc, 0) === undefined) {\n\t\t\t\t\t\t\twarn(\"Unsupported key signature: \" + key, str, 0);\n\t\t\t\t\t\t\treturn ret;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// We need to do a deep copy because we are going to modify it\n\t\t\t\t\tvar oldKey = parseKeyVoice.deepCopyKey(multilineVars.key);\n\t\t\t\t\t//TODO-PER: HACK! To get the local transpose to work, the transposition is done for each line. This caused the global transposition variable to be factored in twice, so, instead of rewriting that right now, I'm just subtracting one of them here.\n\t\t\t\t\tvar keyCompensate = !isInline && multilineVars.globalTranspose ? -multilineVars.globalTranspose : 0;\n\t\t\t\t\t//console.log(\"parse\", JSON.stringify(multilineVars), isInline)\n\t\t\t\t\tvar savedOrigKey;\n\t\t\t\t\tif (isInline)\n\t\t\t\t\t\tsavedOrigKey = multilineVars.globalTransposeOrigKeySig\n\t\t\t\t\tmultilineVars.key = parseKeyVoice.deepCopyKey(parseKeyVoice.standardKey(key, retPitch.token, acc, keyCompensate));\n\t\t\t\t\tif (isInline)\n\t\t\t\t\t\tmultilineVars.globalTransposeOrigKeySig = savedOrigKey\n\t\t\t\t\tmultilineVars.key.mode = mode;\n\t\t\t\t\tif (oldKey) {\n\t\t\t\t\t\t// Add natural in all places that the old key had an accidental.\n\t\t\t\t\t\tvar kk;\n\t\t\t\t\t\tfor (var k = 0; k < multilineVars.key.accidentals.length; k++) {\n\t\t\t\t\t\t\tfor (kk = 0; kk < oldKey.accidentals.length; kk++) {\n\t\t\t\t\t\t\t\tif (oldKey.accidentals[kk].note && multilineVars.key.accidentals[k].note.toLowerCase() === oldKey.accidentals[kk].note.toLowerCase())\n\t\t\t\t\t\t\t\t\toldKey.accidentals[kk].note = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (kk = 0; kk < oldKey.accidentals.length; kk++) {\n\t\t\t\t\t\t\tif (oldKey.accidentals[kk].note) {\n\t\t\t\t\t\t\t\tif (!multilineVars.key.impliedNaturals)\n\t\t\t\t\t\t\t\t\tmultilineVars.key.impliedNaturals = [];\n\t\t\t\t\t\t\t\tmultilineVars.key.impliedNaturals.push({ acc: 'natural', note: oldKey.accidentals[kk].note });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// There are two special cases of deprecated syntax. Ignore them if they occur\n\t\tif (tokens.length === 0) return ret;\n\t\tif (tokens[0].token === 'exp') tokens.shift();\n\t\tif (tokens.length === 0) return ret;\n\t\tif (tokens[0].token === 'oct') tokens.shift();\n\n\t\t// now see if there are extra accidentals\n\t\tif (tokens.length === 0) return ret;\n\t\tvar accs = tokenizer.getKeyAccidentals2(tokens);\n\t\tif (accs.warn)\n\t\t\twarn(accs.warn, str, 0);\n\t\t// If we have extra accidentals, first replace ones that are of the same pitch before adding them to the end.\n\t\tif (accs.accs) {\n\t\t\tif (!ret.foundKey) {\t\t// if there are only extra accidentals, make sure this is set.\n\t\t\t\tret.foundKey = true;\n\t\t\t\tmultilineVars.key = { root: \"none\", acc: \"\", mode: \"\", accidentals: [] };\n\t\t\t}\n\t\t\tnormalizeAccidentals(accs.accs);\n\t\t\tfor (var i = 0; i < accs.accs.length; i++) {\n\t\t\t\tvar found = false;\n\t\t\t\tfor (var j = 0; j < multilineVars.key.accidentals.length && !found; j++) {\n\t\t\t\t\tif (multilineVars.key.accidentals[j].note === accs.accs[i].note) {\n\t\t\t\t\t\tfound = true;\n\t\t\t\t\t\tif (multilineVars.key.accidentals[j].acc !== accs.accs[i].acc) {\n\t\t\t\t\t\t\t// If the accidental is different, then replace it. If it is the same, then the declaration was redundant, so just ignore it.\n\t\t\t\t\t\t\tmultilineVars.key.accidentals[j].acc = accs.accs[i].acc;\n\t\t\t\t\t\t\tif (!multilineVars.key.explicitAccidentals)\n\t\t\t\t\t\t\t\tmultilineVars.key.explicitAccidentals = [];\n\t\t\t\t\t\t\tmultilineVars.key.explicitAccidentals.push(accs.accs[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!found) {\n\t\t\t\t\tif (!multilineVars.key.explicitAccidentals)\n\t\t\t\t\t\tmultilineVars.key.explicitAccidentals = [];\n\t\t\t\t\tmultilineVars.key.explicitAccidentals.push(accs.accs[i]);\n\t\t\t\t\tmultilineVars.key.accidentals.push(accs.accs[i]);\n\t\t\t\t\tif (multilineVars.key.impliedNaturals) {\n\t\t\t\t\t\tfor (var kkk = 0; kkk < multilineVars.key.impliedNaturals.length; kkk++) {\n\t\t\t\t\t\t\tif (multilineVars.key.impliedNaturals[kkk].note === accs.accs[i].note)\n\t\t\t\t\t\t\t\tmultilineVars.key.impliedNaturals.splice(kkk, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Now see if any optional parameters are present. They have the form \"key=value\", except that \"clef=\" is optional\n\t\tvar token;\n\t\twhile (tokens.length > 0) {\n\t\t\tswitch (tokens[0].token) {\n\t\t\t\tcase \"m\":\n\t\t\t\tcase \"middle\":\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected = after middle\", str, 0); return ret; }\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.token !== \"=\") { warn(\"Expected = after middle\", str, token.start); break; }\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected parameter after middle=\", str, 0); return ret; }\n\t\t\t\t\tvar pitch = tokenizer.getPitchFromTokens(tokens);\n\t\t\t\t\tif (pitch.warn)\n\t\t\t\t\t\twarn(pitch.warn, str, 0);\n\t\t\t\t\tif (pitch.position)\n\t\t\t\t\t\tmultilineVars.clef.verticalPos = pitch.position - 6;\t// we get the position from the middle line, but want to offset it to the first ledger line.\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"transpose\":\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected = after transpose\", str, 0); return ret; }\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.token !== \"=\") { warn(\"Expected = after transpose\", str, token.start); break; }\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected parameter after transpose=\", str, 0); return ret; }\n\t\t\t\t\tif (tokens[0].type !== 'number') { warn(\"Expected number after transpose\", str, tokens[0].start); break; }\n\t\t\t\t\tmultilineVars.clef.transpose = tokens[0].intt;\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"stafflines\":\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected = after stafflines\", str, 0); return ret; }\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.token !== \"=\") { warn(\"Expected = after stafflines\", str, token.start); break; }\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected parameter after stafflines=\", str, 0); return ret; }\n\t\t\t\t\tif (tokens[0].type !== 'number') { warn(\"Expected number after stafflines\", str, tokens[0].start); break; }\n\t\t\t\t\tmultilineVars.clef.stafflines = tokens[0].intt;\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"staffscale\":\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected = after staffscale\", str, 0); return ret; }\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.token !== \"=\") { warn(\"Expected = after staffscale\", str, token.start); break; }\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected parameter after staffscale=\", str, 0); return ret; }\n\t\t\t\t\tif (tokens[0].type !== 'number') { warn(\"Expected number after staffscale\", str, tokens[0].start); break; }\n\t\t\t\t\tmultilineVars.clef.staffscale = tokens[0].floatt;\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"octave\":\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected = after octave\", str, 0); return ret; }\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.token !== \"=\") { warn(\"Expected = after octave\", str, token.start); break; }\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected parameter after octave=\", str, 0); return ret; }\n\t\t\t\t\tif (tokens[0].type !== 'number') { warn(\"Expected number after octave\", str, tokens[0].start); break; }\n\t\t\t\t\tmultilineVars.octave = tokens[0].intt;\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"style\":\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected = after style\", str, 0); return ret; }\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.token !== \"=\") { warn(\"Expected = after style\", str, token.start); break; }\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected parameter after style=\", str, 0); return ret; }\n\t\t\t\t\tswitch (tokens[0].token) {\n\t\t\t\t\t\tcase \"normal\":\n\t\t\t\t\t\tcase \"harmonic\":\n\t\t\t\t\t\tcase \"rhythm\":\n\t\t\t\t\t\tcase \"x\":\n\t\t\t\t\t\tcase \"triangle\":\n\t\t\t\t\t\t\tmultilineVars.style = tokens[0].token;\n\t\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\twarn(\"error parsing style element: \" + tokens[0].token, str, tokens[0].start);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"clef\":\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected = after clef\", str, 0); return ret; }\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.token !== \"=\") { warn(\"Expected = after clef\", str, token.start); break; }\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected parameter after clef=\", str, 0); return ret; }\n\t\t\t\t\t//break; yes, we want to fall through. That allows \"clef=\" to be optional.\n\t\t\t\tcase \"treble\":\n\t\t\t\tcase \"bass\":\n\t\t\t\tcase \"alto\":\n\t\t\t\tcase \"tenor\":\n\t\t\t\tcase \"perc\":\n\t\t\t\tcase \"none\":\n\t\t\t\t\t// clef is [clef=] [⟨clef type⟩] [⟨line number⟩] [+8|-8]\n\t\t\t\t\tvar clef = tokens.shift();\n\t\t\t\t\tswitch (clef.token) {\n\t\t\t\t\t\tcase 'treble':\n\t\t\t\t\t\tcase 'tenor':\n\t\t\t\t\t\tcase 'alto':\n\t\t\t\t\t\tcase 'bass':\n\t\t\t\t\t\tcase 'perc':\n\t\t\t\t\t\tcase 'none':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'C': clef.token = 'alto'; break;\n\t\t\t\t\t\tcase 'F': clef.token = 'bass'; break;\n\t\t\t\t\t\tcase 'G': clef.token = 'treble'; break;\n\t\t\t\t\t\tcase 'c': clef.token = 'alto'; break;\n\t\t\t\t\t\tcase 'f': clef.token = 'bass'; break;\n\t\t\t\t\t\tcase 'g': clef.token = 'treble'; break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\twarn(\"Expected clef name. Found \" + clef.token, str, clef.start);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (tokens.length > 0 && tokens[0].type === 'number') {\n\t\t\t\t\t\tclef.token += tokens[0].token;\n\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\t}\n\t\t\t\t\tif (tokens.length > 1 && (tokens[0].token === '-' || tokens[0].token === '+' || tokens[0].token === '^' || tokens[0].token === '_') && tokens[1].token === '8') {\n\t\t\t\t\t\tclef.token += tokens[0].token + tokens[1].token;\n\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\t}\n\t\t\t\t\tmultilineVars.clef = {type: clef.token, verticalPos: calcMiddle(clef.token, 0)};\n\t\t\t\t\tif (multilineVars.currentVoice && multilineVars.currentVoice.transpose !== undefined)\n\t\t\t\t\t\tmultilineVars.clef.transpose = multilineVars.currentVoice.transpose;\n\t\t\t\t\tret.foundClef = true;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\twarn(\"Unknown parameter: \" + tokens[0].token, str, tokens[0].start);\n\t\t\t\t\ttokens.shift();\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t};\n\n\tvar setCurrentVoice = function(id) {\n\t\tmultilineVars.currentVoice = multilineVars.voices[id];\n\t\ttuneBuilder.setCurrentVoice(multilineVars.currentVoice.staffNum, multilineVars.currentVoice.index);\n\t};\n\n\tparseKeyVoice.parseVoice = function(line, i, e) {\n\t\t//First truncate the string to the first non-space character after V: through either the\n\t\t//end of the line or a % character. Then remove trailing spaces, too.\n\t\tvar ret = tokenizer.getMeat(line, i, e);\n\t\tvar start = ret.start;\n\t\tvar end = ret.end;\n\t\t//The first thing on the line is the ID. It can be any non-space string and terminates at the\n\t\t//first space.\n\t\tvar id = tokenizer.getToken(line, start, end);\n\t\tif (id.length === 0) {\n\t\t\twarn(\"Expected a voice id\", line, start);\n\t\t\treturn;\n\t\t}\n\t\tvar isNew = false;\n\t\tif (multilineVars.voices[id] === undefined) {\n\t\t\tmultilineVars.voices[id] = {};\n\t\t\tisNew = true;\n\t\t\tif (multilineVars.score_is_present)\n\t\t\t\twarn(\"Can't have an unknown V: id when the %score directive is present\", line, start);\n\t\t}\n\t\tstart += id.length;\n\t\tstart += tokenizer.eatWhiteSpace(line, start);\n\n\t\tvar staffInfo = {startStaff: isNew};\n\t\tvar addNextTokenToStaffInfo = function(name) {\n\t\t\tvar attr = tokenizer.getVoiceToken(line, start, end);\n\t\t\tif (attr.warn !== undefined)\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice: \" + attr.warn, line, start);\n\t\t\telse if (attr.err !== undefined)\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice: \" + attr.err, line, start);\n\t\t\telse if (attr.token.length === 0 && line[start] !== '\"')\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice\", line, start);\n\t\t\telse\n\t\t\t\tstaffInfo[name] = attr.token;\n\t\t\tstart += attr.len;\n\t\t};\n\t\tvar addNextTokenToVoiceInfo = function(id, name, type) {\n\t\t\tvar attr = tokenizer.getVoiceToken(line, start, end);\n\t\t\tif (attr.warn !== undefined)\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice: \" + attr.warn, line, start);\n\t\t\telse if (attr.err !== undefined)\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice: \" + attr.err, line, start);\n\t\t\telse if (attr.token.length === 0 && line[start] !== '\"')\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice\", line, start);\n\t\t\telse {\n\t\t\t\tif (type === 'number')\n\t\t\t\t\tattr.token = parseFloat(attr.token);\n\t\t\t\tmultilineVars.voices[id][name] = attr.token;\n\t\t\t}\n\t\t\tstart += attr.len;\n\t\t};\n\t\tvar getNextToken = function(name, type) {\n\t\t\tvar attr = tokenizer.getVoiceToken(line, start, end);\n\t\t\tif (attr.warn !== undefined)\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice: \" + attr.warn, line, start);\n\t\t\telse if (attr.err !== undefined)\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice: \" + attr.err, line, start);\n\t\t\telse if (attr.token.length === 0 && line[start] !== '\"')\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice\", line, start);\n\t\t\telse {\n\t\t\t\tif (type === 'number')\n\t\t\t\t\tattr.token = parseFloat(attr.token);\n\t\t\t\treturn attr.token;\n\t\t\t}\n\t\t\tstart += attr.len;\n\t\t};\n\t\tvar addNextNoteTokenToVoiceInfo = function(id, name) {\n\t\t\tvar noteToTransposition = {\n\t\t\t\t\"_B\": 2,\n\t\t\t\t\"_E\": 9,\n\t\t\t\t\"_b\": -10,\n\t\t\t\t\"_e\": -3\n\t\t\t};\n\t\t\tvar attr = tokenizer.getVoiceToken(line, start, end);\n\t\t\tif (attr.warn !== undefined)\n\t\t\t\twarn(\"Expected one of (_B, _E, _b, _e) for \" + name + \" in voice: \" + attr.warn, line, start);\n\t\t\telse if (attr.token.length === 0 && line[start] !== '\"')\n\t\t\t\twarn(\"Expected one of (_B, _E, _b, _e) for \" + name + \" in voice\", line, start);\n\t\t\telse {\n\t\t\t\tvar t = noteToTransposition[attr.token];\n\t\t\t\tif (!t)\n\t\t\t\t\twarn(\"Expected one of (_B, _E, _b, _e) for \" + name + \" in voice\", line, start);\n\t\t\t\telse\n\t\t\t\t\tmultilineVars.voices[id][name] = t;\n\t\t\t}\n\t\t\tstart += attr.len;\n\t\t};\n\n\t\t//Then the following items can occur in any order:\n\t\twhile (start < end) {\n\t\t\tvar token = tokenizer.getVoiceToken(line, start, end);\n\t\t\tstart += token.len;\n\n\t\t\tif (token.warn) {\n\t\t\t\twarn(\"Error parsing voice: \" + token.warn, line, start);\n\t\t\t} else {\n\t\t\t\tvar attr = null;\n\t\t\t\tswitch (token.token) {\n\t\t\t\t\tcase 'clef':\n\t\t\t\t\tcase 'cl':\n\t\t\t\t\t\taddNextTokenToStaffInfo('clef');\n\t\t\t\t\t\t// TODO-PER: check for a legal clef; do octavizing\n\t\t\t\t\t\tvar oct = 0;\n\t//\t\t\t\t\t\t\tfor (var ii = 0; ii < staffInfo.clef.length; ii++) {\n\t//\t\t\t\t\t\t\t\tif (staffInfo.clef[ii] === ',') oct -= 7;\n\t//\t\t\t\t\t\t\t\telse if (staffInfo.clef[ii] === \"'\") oct += 7;\n\t//\t\t\t\t\t\t\t}\n\t\t\t\t\t\tif (staffInfo.clef !== undefined) {\n\t\t\t\t\t\t staffInfo.clef = staffInfo.clef.replace(/[',]/g, \"\"); //'//comment for emacs formatting of regexp\n\t\t\t\t\t\t\tif (staffInfo.clef.indexOf('+16') !== -1) {\n\t\t\t\t\t\t\t\toct += 14;\n\t\t\t\t\t\t\t\tstaffInfo.clef = staffInfo.clef.replace('+16', '');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstaffInfo.verticalPos = calcMiddle(staffInfo.clef, oct);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'treble':\n\t\t\t\t\tcase 'bass':\n\t\t\t\t\tcase 'tenor':\n\t\t\t\t\tcase 'alto':\n\t\t\t\t\tcase 'perc':\n\t\t\t\t\tcase 'none':\n\t\t\t\t\tcase 'treble\\'':\n\t\t\t\t\tcase 'bass\\'':\n\t\t\t\t\tcase 'tenor\\'':\n\t\t\t\t\tcase 'alto\\'':\n\t\t\t\t\tcase 'none\\'':\n\t\t\t\t\tcase 'treble\\'\\'':\n\t\t\t\t\tcase 'bass\\'\\'':\n\t\t\t\t\tcase 'tenor\\'\\'':\n\t\t\t\t\tcase 'alto\\'\\'':\n\t\t\t\t\tcase 'none\\'\\'':\n\t\t\t\t\tcase 'treble,':\n\t\t\t\t\tcase 'bass,':\n\t\t\t\t\tcase 'tenor,':\n\t\t\t\t\tcase 'alto,':\n\t\t\t\t\tcase 'none,':\n\t\t\t\t\tcase 'treble,,':\n\t\t\t\t\tcase 'bass,,':\n\t\t\t\t\tcase 'tenor,,':\n\t\t\t\t\tcase 'alto,,':\n\t\t\t\t\tcase 'none,,':\n\t\t\t\t\t\t// TODO-PER: handle the octave indicators on the clef by changing the middle property\n\t\t\t\t\t\tvar oct2 = 0;\n\t//\t\t\t\t\t\t\tfor (var iii = 0; iii < token.token.length; iii++) {\n\t//\t\t\t\t\t\t\t\tif (token.token[iii] === ',') oct2 -= 7;\n\t//\t\t\t\t\t\t\t\telse if (token.token[iii] === \"'\") oct2 += 7;\n\t//\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t staffInfo.clef = token.token.replace(/[',]/g, \"\"); //'//comment for emacs formatting of regexp\n\t\t\t\t\t\tstaffInfo.verticalPos = calcMiddle(staffInfo.clef, oct2);\n\t\t\t\t\t\tmultilineVars.voices[id].clef = token.token;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'staves':\n\t\t\t\t\tcase 'stave':\n\t\t\t\t\tcase 'stv':\n\t\t\t\t\t\taddNextTokenToStaffInfo('staves');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'brace':\n\t\t\t\t\tcase 'brc':\n\t\t\t\t\t\taddNextTokenToStaffInfo('brace');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'bracket':\n\t\t\t\t\tcase 'brk':\n\t\t\t\t\t\taddNextTokenToStaffInfo('bracket');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'name':\n\t\t\t\t\tcase 'nm':\n\t\t\t\t\t\taddNextTokenToStaffInfo('name');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'subname':\n\t\t\t\t\tcase 'sname':\n\t\t\t\t\tcase 'snm':\n\t\t\t\t\t\taddNextTokenToStaffInfo('subname');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'merge':\n\t\t\t\t\t\tstaffInfo.startStaff = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'stem':\n\t\t\t\t\tcase 'stems':\n\t\t\t\t\t\tattr = tokenizer.getVoiceToken(line, start, end);\n\t\t\t\t\t\tif (attr.warn !== undefined)\n\t\t\t\t\t\t\twarn(\"Expected value for stems in voice: \" + attr.warn, line, start);\n\t\t\t\t\t\telse if (attr.err !== undefined)\n\t\t\t\t\t\t\twarn(\"Expected value for stems in voice: \" + attr.err, line, start);\n\t\t\t\t\t\telse if (attr.token === 'up' || attr.token === 'down')\n\t\t\t\t\t\t\tmultilineVars.voices[id].stem = attr.token;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\twarn(\"Expected up or down for voice stem\", line, start);\n\t\t\t\t\t\tstart += attr.len;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'up':\n\t\t\t\t\tcase 'down':\n\t\t\t\t\t\tmultilineVars.voices[id].stem = token.token;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'middle':\n\t\t\t\t\tcase 'm':\n\t\t\t\t\t\taddNextTokenToStaffInfo('verticalPos');\n\t\t\t\t\t\tstaffInfo.verticalPos = parseMiddle(staffInfo.verticalPos).mid;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'gchords':\n\t\t\t\t\tcase 'gch':\n\t\t\t\t\t\tmultilineVars.voices[id].suppressChords = true;\n\t\t\t\t\t\t// gchords can stand on its own, or it could be gchords=0.\n\t\t\t\t\t\tattr = tokenizer.getVoiceToken(line, start, end);\n\t\t\t\t\t\tif (attr.token === \"0\")\n\t\t\t\t\t\t\tstart = start + attr.len;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'space':\n\t\t\t\t\tcase 'spc':\n\t\t\t\t\t\taddNextTokenToStaffInfo('spacing');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\taddNextTokenToVoiceInfo(id, 'scale', 'number');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'score':\n\t\t\t\t\t\taddNextNoteTokenToVoiceInfo(id, 'scoreTranspose');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'transpose':\n\t\t\t\t\t\taddNextTokenToVoiceInfo(id, 'transpose', 'number');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'stafflines':\n\t\t\t\t\t\taddNextTokenToVoiceInfo(id, 'stafflines', 'number');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'staffscale':\n\t\t\t\t\t\t// TODO-PER: This is passed to the engraver, but the engraver ignores it.\n\t\t\t\t\t\taddNextTokenToVoiceInfo(id, 'staffscale', 'number');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'octave':\n\t\t\t\t\t\taddNextTokenToVoiceInfo(id, 'octave', 'number');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'volume':\n\t\t\t\t\t\t// TODO-PER: This is accepted, but not implemented, yet.\n\t\t\t\t\t\taddNextTokenToVoiceInfo(id, 'volume', 'number');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'cue':\n\t\t\t\t\t\t// TODO-PER: This is accepted, but not implemented, yet.\n\t\t\t\t\t\tvar cue = getNextToken('cue', 'string');\n\t\t\t\t\t\tif (cue === 'on')\n\t\t\t\t\t\t\tmultilineVars.voices[id].scale = 0.6;\n\t\t\t\t\t\telse multilineVars.voices[id].scale = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"style\":\n\t\t\t\t\t\tattr = tokenizer.getVoiceToken(line, start, end);\n\t\t\t\t\t\tif (attr.warn !== undefined)\n\t\t\t\t\t\t\twarn(\"Expected value for style in voice: \" + attr.warn, line, start);\n\t\t\t\t\t\telse if (attr.err !== undefined)\n\t\t\t\t\t\t\twarn(\"Expected value for style in voice: \" + attr.err, line, start);\n\t\t\t\t\t\telse if (attr.token === 'normal' || attr.token === 'harmonic' || attr.token === 'rhythm' || attr.token === 'x' || attr.token === 'triangle')\n\t\t\t\t\t\t\tmultilineVars.voices[id].style = attr.token;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\twarn(\"Expected one of [normal, harmonic, rhythm, x, triangle] for voice style\", line, start);\n\t\t\t\t\t\tstart += attr.len;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t// default:\n\t\t\t\t\t// Use this to find V: usages that aren't handled.\n\t\t\t\t\t// \tconsole.log(\"parse voice\", token, tune.metaText.title);\n\t\t\t\t}\n\t\t\t}\n\t\t\tstart += tokenizer.eatWhiteSpace(line, start);\n\t\t}\n\n\t\t// now we've filled up staffInfo, figure out what to do with this voice\n\t\t// TODO-PER: It is unclear from the standard and the examples what to do with brace, bracket, and staves, so they are ignored for now.\n\t\tif (staffInfo.startStaff || multilineVars.staves.length === 0) {\n\t\t\tmultilineVars.staves.push({index: multilineVars.staves.length, meter: multilineVars.origMeter});\n\t\t\tif (!multilineVars.score_is_present)\n\t\t\t\tmultilineVars.staves[multilineVars.staves.length-1].numVoices = 0;\n\t\t}\n\t\tif (multilineVars.voices[id].staffNum === undefined) {\n\t\t\t// store where to write this for quick access later.\n\t\t\tmultilineVars.voices[id].staffNum = multilineVars.staves.length-1;\n\t\t\tvar vi = 0;\n\t\t\tfor(var v in multilineVars.voices) {\n\t\t\t\tif(multilineVars.voices.hasOwnProperty(v)) {\n\t\t\t\t\tif (multilineVars.voices[v].staffNum === multilineVars.voices[id].staffNum)\n\t\t\t\t\t\tvi++;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmultilineVars.voices[id].index = vi-1;\n\t\t}\n\t\tvar s = multilineVars.staves[multilineVars.voices[id].staffNum];\n\t\tif (!multilineVars.score_is_present)\n\t\t\ts.numVoices++;\n\t\tif (staffInfo.clef) s.clef = {type: staffInfo.clef, verticalPos: staffInfo.verticalPos};\n\t\tif (staffInfo.spacing) s.spacing_below_offset = staffInfo.spacing;\n\t\tif (staffInfo.verticalPos) s.verticalPos = staffInfo.verticalPos;\n\n\t\tif (staffInfo.name) {if (s.name) s.name.push(staffInfo.name); else s.name = [ staffInfo.name ];}\n\t\tif (staffInfo.subname) {if (s.subname) s.subname.push(staffInfo.subname); else s.subname = [ staffInfo.subname ];}\n\n\t\tsetCurrentVoice(id);\n\t};\n\n})();\n\nmodule.exports = parseKeyVoice;\n","var parseCommon = require('./abc_common');\nvar parseKeyVoice = require('./abc_parse_key_voice');\nvar transpose = require('./abc_transpose');\n\nvar tokenizer;\nvar warn;\nvar multilineVars;\nvar tune;\nvar tuneBuilder;\nvar header;\n\nvar {\n legalAccents,\n volumeDecorations,\n dynamicDecorations,\n accentPseudonyms,\n accentDynamicPseudonyms,\n nonDecorations,\n durations,\n pitches,\n rests,\n accMap,\n tripletQ\n} = require('./abc_parse_settings')\n\nvar MusicParser = function(_tokenizer, _warn, _multilineVars, _tune, _tuneBuilder, _header) {\n\ttokenizer = _tokenizer;\n\twarn = _warn;\n\tmultilineVars = _multilineVars;\n\ttune = _tune;\n\ttuneBuilder = _tuneBuilder;\n\theader = _header;\n\tthis.lineContinuation = false;\n}\n\n//\n// Parse line of music\n//\n// This is a stream of <(bar-marking|header|note-group)...> in any order, with optional spaces between each element\n// core-note is with no spaces within that\n// chord is with no spaces within that\n// grace-notes is spaces are allowed\n// note-group is spaces are allowed between items\n// bar-marking is or spaces allowed\n// header is spaces can occur between the colon, in the field, and before the close bracket\n// header can also be the only thing on a line. This is true even if it is a continuation line. In this case the brackets are not required.\n// a space is a back-tick, a space, or a tab. If it is a back-tick, then there is no end-beam.\n\n// Line preprocessing: anything after a % is ignored (the double %% should have been taken care of before this)\n// Then, all leading and trailing spaces are ignored.\n// If there was a line continuation, the \\n was replaced by a \\r and the \\ was replaced by a space. This allows the construct\n// of having a header mid-line conceptually, but actually be at the start of the line. This is equivolent to putting the header in [ ].\n\n// TODO-PER: How to handle ! for line break?\n// TODO-PER: dots before bar, dots before slur\n// TODO-PER: U: redefinable symbols.\n\n// Ambiguous symbols:\n// \"[\" can be the start of a chord, the start of a header element or part of a bar line.\n// --- if it is immediately followed by \"|\", it is a bar line\n// --- if it is immediately followed by K: L: M: V: it is a header (note: there are other headers mentioned in the standard, but I'm not sure how they would be used.)\n// --- otherwise it is the beginning of a chord\n// \"(\" can be the start of a slur or a triplet\n// --- if it is followed by a number from 2-9, then it is a triplet\n// --- otherwise it is a slur\n// \"]\"\n// --- if there is a chord open, then this is the close\n// --- if it is after a [|, then it is an invisible bar line\n// --- otherwise, it is par of a bar\n// \".\" can be a bar modifier or a slur modifier, or a decoration\n// --- if it comes immediately before a bar, it is a bar modifier\n// --- if it comes immediately before a slur, it is a slur modifier\n// --- otherwise it is a decoration for the next note.\n// number:\n// --- if it is after a bar, with no space, it is an ending marker\n// --- if it is after a ( with no space, it is a triplet count\n// --- if it is after a pitch or octave or slash, then it is a duration\n\n// Unambiguous symbols (except inside quoted strings):\n// vertical-bar, colon: part of a bar\n// ABCDEFGabcdefg: pitch\n// xyzZ: rest\n// comma, prime: octave\n// close-paren: end-slur\n// hyphen: tie\n// tilde, v, u, bang, plus, THLMPSO: decoration\n// carat, underscore, equal: accidental\n// ampersand: time reset\n// open-curly, close-curly: grace notes\n// double-quote: chord symbol\n// less-than, greater-than, slash: duration\n// back-tick, space, tab: space\n\nvar isInTie = function(multilineVars, overlayLevel, el) {\n\tif (multilineVars.inTie[overlayLevel] === undefined)\n\t\treturn false;\n\t// If this is single voice music then the voice index isn't set, so we use the first voice.\n\tvar voiceIndex = multilineVars.currentVoice ? multilineVars.currentVoice.staffNum * 100 + multilineVars.currentVoice.index : 0;\n\tif (multilineVars.inTie[overlayLevel][voiceIndex]) {\n\t\tif (el.pitches !== undefined || el.rest.type !== 'spacer')\n\t\t\treturn true;\n\t}\n\treturn false;\n};\n\nvar el = { };\nMusicParser.prototype.parseMusic = function(line) {\n\theader.resolveTempo();\n\t//multilineVars.havent_set_length = false;\t// To late to set this now.\n\tmultilineVars.is_in_header = false;\t// We should have gotten a key header by now, but just in case, this is definitely out of the header.\n\tvar i = 0;\n\tvar startOfLine = multilineVars.iChar;\n\t// see if there is nothing but a comment on this line. If so, just ignore it. A full line comment is optional white space followed by %\n\twhile (tokenizer.isWhiteSpace(line[i]) && i < line.length)\n\t\ti++;\n\tif (i === line.length || line[i] === '%')\n\t\treturn;\n\n\t// Start with the standard staff, clef and key symbols on each line\n\tvar delayStartNewLine = multilineVars.start_new_line;\n\tif (multilineVars.continueall === undefined)\n\t\tmultilineVars.start_new_line = true;\n\telse\n\t\tmultilineVars.start_new_line = false;\n\tvar tripletNotesLeft = 0;\n\n\t// See if the line starts with a header field\n\tvar retHeader = header.letter_to_body_header(line, i);\n\tif (retHeader[0] > 0) {\n\t\ti += retHeader[0];\n\t\t// fixes bug on this: c[V:2]d\n\t\tif (retHeader[1] === 'V')\n\t\t\tthis.startNewLine();\n\t\t\t// delayStartNewLine = true;\n\t\t// TODO-PER: Handle inline headers\n\t}\n\n\tvar overlayLevel = 0;\n\twhile (i < line.length)\n\t{\n\t\tvar startI = i;\n\t\tif (line[i] === '%')\n\t\t\tbreak;\n\n\t\tvar retInlineHeader = header.letter_to_inline_header(line, i, delayStartNewLine);\n\t\tif (retInlineHeader[0] > 0) {\n\t\t\ti += retInlineHeader[0];\n\t\t\tif (retInlineHeader[1] === 'V')\n\t\t\t\tdelayStartNewLine = true; // fixes bug on this: c[V:2]d\n\t\t\t// TODO-PER: Handle inline headers\n\t\t\t//multilineVars.start_new_line = false;\n\t\t} else {\n\t\t\t// Wait until here to actually start the line because we know we're past the inline statements.\n\t\t\tif (!tuneBuilder.hasBeginMusic() || (delayStartNewLine && !this.lineContinuation)) {\n\t\t\t\tthis.startNewLine();\n\t\t\t\tdelayStartNewLine = false;\n\t\t\t}\n\n\t\t\t// We need to decide if the following characters are a bar-marking or a note-group.\n\t\t\t// Unfortunately, that is ambiguous. Both can contain chord symbols and decorations.\n\t\t\t// If there is a grace note either before or after the chord symbols and decorations, then it is definitely a note-group.\n\t\t\t// If there is a bar marker, it is definitely a bar-marking.\n\t\t\t// If there is either a core-note or chord, it is definitely a note-group.\n\t\t\t// So, loop while we find grace-notes, chords-symbols, or decorations. [It is an error to have more than one grace-note group in a row; the others can be multiple]\n\t\t\t// Then, if there is a grace-note, we know where to go.\n\t\t\t// Else see if we have a chord, core-note, slur, triplet, or bar.\n\n\t\t\tvar ret;\n\t\t\twhile (1) {\n\t\t\t\tret = tokenizer.eatWhiteSpace(line, i);\n\t\t\t\tif (ret > 0) {\n\t\t\t\t\ti += ret;\n\t\t\t\t}\n\t\t\t\tif (i > 0 && line[i-1] === '\\x12') {\n\t\t\t\t\t// there is one case where a line continuation isn't the same as being on the same line, and that is if the next character after it is a header.\n\t\t\t\t\tret = header.letter_to_body_header(line, i);\n\t\t\t\t\tif (ret[0] > 0) {\n\t\t\t\t\t\tif (ret[1] === 'V')\n\t\t\t\t\t\t\tthis.startNewLine(); // fixes bug on this: c\\\\nV:2]\\\\nd\n\t\t\t\t\t\t// TODO: insert header here\n\t\t\t\t\t\ti = ret[0];\n\t\t\t\t\t\tmultilineVars.start_new_line = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// gather all the grace notes, chord symbols and decorations\n\t\t\t\tret = letter_to_spacer(line, i);\n\t\t\t\tif (ret[0] > 0) {\n\t\t\t\t\ti += ret[0];\n\t\t\t\t}\n\n\t\t\t\tret = letter_to_chord(line, i);\n\t\t\t\tif (ret[0] > 0) {\n\t\t\t\t\t// There could be more than one chord here if they have different positions.\n\t\t\t\t\t// If two chords have the same position, then connect them with newline.\n\t\t\t\t\tif (!el.chord)\n\t\t\t\t\t\tel.chord = [];\n\t\t\t\t\tvar chordName = tokenizer.translateString(ret[1]);\n\t\t\t\t\tchordName = chordName.replace(/;/g, \"\\n\");\n\t\t\t\t\tvar addedChord = false;\n\t\t\t\t\tfor (var ci = 0; ci < el.chord.length; ci++) {\n\t\t\t\t\t\tif (el.chord[ci].position === ret[2]) {\n\t\t\t\t\t\t\taddedChord = true;\n\t\t\t\t\t\t\tel.chord[ci].name += \"\\n\" + chordName;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (addedChord === false) {\n\t\t\t\t\t\tif (ret[2] === null && ret[3])\n\t\t\t\t\t\t\tel.chord.push({name: chordName, rel_position: ret[3]});\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tel.chord.push({name: chordName, position: ret[2]});\n\t\t\t\t\t}\n\n\t\t\t\t\ti += ret[0];\n\t\t\t\t\tvar ii = tokenizer.skipWhiteSpace(line.substring(i));\n\t\t\t\t\tif (ii > 0)\n\t\t\t\t\t\tel.force_end_beam_last = true;\n\t\t\t\t\ti += ii;\n\t\t\t\t} else {\n\t\t\t\t\tif (nonDecorations.indexOf(line[i]) === -1)\n\t\t\t\t\t\tret = letter_to_accent(line, i);\n\t\t\t\t\telse ret = [ 0 ];\n\t\t\t\t\tif (ret[0] > 0) {\n\t\t\t\t\t\tif (ret[1] === null) {\n\t\t\t\t\t\t\tif (i + 1 < line.length)\n\t\t\t\t\t\t\t\tthis.startNewLine();\t// There was a ! in the middle of the line. Start a new line if there is anything after it.\n\t\t\t\t\t\t} else if (ret[1].length > 0) {\n\t\t\t\t\t\t\tif (ret[1].indexOf(\"style=\") === 0) {\n\t\t\t\t\t\t\t\tel.style = ret[1].substr(6);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (el.decoration === undefined)\n\t\t\t\t\t\t\t\t\tel.decoration = [];\n\t\t\t\t\t\t\t\tif (ret[1] === 'beambr1')\n\t\t\t\t\t\t\t\t\tel.beambr = 1;\n\t\t\t\t\t\t\t\telse if (ret[1] === \"beambr2\")\n\t\t\t\t\t\t\t\t\tel.beambr = 2;\n\t\t\t\t\t\t\t\telse el.decoration.push(ret[1]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ti += ret[0];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tret = letter_to_grace(line, i);\n\t\t\t\t\t\t// TODO-PER: Be sure there aren't already grace notes defined. That is an error.\n\t\t\t\t\t\tif (ret[0] > 0) {\n\t\t\t\t\t\t\tel.gracenotes = ret[1];\n\t\t\t\t\t\t\ti += ret[0];\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tret = letter_to_bar(line, i);\n\t\t\tif (ret[0] > 0) {\n\t\t\t\t// This is definitely a bar\n\t\t\t\toverlayLevel = 0;\n\t\t\t\tif (el.gracenotes !== undefined) {\n\t\t\t\t\t// Attach the grace note to an invisible note\n\t\t\t\t\tel.rest = { type: 'spacer' };\n\t\t\t\t\tel.duration = 0.125; // TODO-PER: I don't think the duration of this matters much, but figure out if it does.\n\t\t\t\t\tmultilineVars.addFormattingOptions(el, tune.formatting, 'note');\n\t\t\t\t\ttuneBuilder.appendElement('note', startOfLine+i, startOfLine+i+ret[0], el);\n\t\t\t\t\tmultilineVars.measureNotEmpty = true;\n\t\t\t\t\tel = {};\n\t\t\t\t}\n\t\t\t\tvar bar = {type: ret[1]};\n\t\t\t\tif (bar.type.length === 0)\n\t\t\t\t\twarn(\"Unknown bar type\", line, i);\n\t\t\t\telse {\n\t\t\t\t\tif (multilineVars.inEnding && bar.type !== 'bar_thin') {\n\t\t\t\t\t\tbar.endEnding = true;\n\t\t\t\t\t\tmultilineVars.inEnding = false;\n\t\t\t\t\t}\n\t\t\t\t\tif (ret[2]) {\n\t\t\t\t\t\tbar.startEnding = ret[2];\n\t\t\t\t\t\tif (multilineVars.inEnding)\n\t\t\t\t\t\t\tbar.endEnding = true;\n\t\t\t\t\t\tmultilineVars.inEnding = true;\n\t\t\t\t\t\tif (ret[1] === \"bar_right_repeat\") {\n\t\t\t\t\t\t\t// restore the tie and slur state from the start repeat\n\t\t\t\t\t\t\tmultilineVars.restoreStartEndingHoldOvers();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// save inTie, inTieChord\n\t\t\t\t\t\t\tmultilineVars.duplicateStartEndingHoldOvers();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (el.decoration !== undefined)\n\t\t\t\t\t\tbar.decoration = el.decoration;\n\t\t\t\t\tif (el.chord !== undefined)\n\t\t\t\t\t\tbar.chord = el.chord;\n\t\t\t\t\tif (bar.startEnding && multilineVars.barFirstEndingNum === undefined)\n\t\t\t\t\t\tmultilineVars.barFirstEndingNum = multilineVars.currBarNumber;\n\t\t\t\t\telse if (bar.startEnding && bar.endEnding && multilineVars.barFirstEndingNum)\n\t\t\t\t\t\tmultilineVars.currBarNumber = multilineVars.barFirstEndingNum;\n\t\t\t\t\telse if (bar.endEnding)\n\t\t\t\t\t\tmultilineVars.barFirstEndingNum = undefined;\n\t\t\t\t\tif (bar.type !== 'bar_invisible' && multilineVars.measureNotEmpty) {\n\t\t\t\t\t\tvar isFirstVoice = multilineVars.currentVoice === undefined || (multilineVars.currentVoice.staffNum === 0 && multilineVars.currentVoice.index === 0);\n\t\t\t\t\t\tif (isFirstVoice) {\n\t\t\t\t\t\t\tmultilineVars.currBarNumber++;\n\t\t\t\t\t\t\tif (multilineVars.barNumbers && multilineVars.currBarNumber % multilineVars.barNumbers === 0)\n\t\t\t\t\t\t\t\tbar.barNumber = multilineVars.currBarNumber;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tmultilineVars.addFormattingOptions(el, tune.formatting, 'bar');\n\t\t\t\t\ttuneBuilder.appendElement('bar', startOfLine+startI, startOfLine+i+ret[0], bar);\n\t\t\t\t\tmultilineVars.measureNotEmpty = false;\n\t\t\t\t\tel = {};\n\t\t\t\t}\n\t\t\t\ti += ret[0];\n\t\t\t} else if (line[i] === '&') {\t// backtrack to beginning of measure\n\t\t\t\tret = letter_to_overlay(line, i);\n\t\t\t\tif (ret[0] > 0) {\n\t\t\t\t\ttuneBuilder.appendElement('overlay', startOfLine, startOfLine+1, {});\n\t\t\t\t\ti += 1;\n\t\t\t\t\toverlayLevel++;\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\t// This is definitely a note group\n\t\t\t\t//\n\t\t\t\t// Look for as many open slurs and triplets as there are. (Note: only the first triplet is valid.)\n\t\t\t\tret = letter_to_open_slurs_and_triplets(line, i);\n\t\t\t\tif (ret.consumed > 0) {\n\t\t\t\t\tif (ret.startSlur !== undefined)\n\t\t\t\t\t\tel.startSlur = ret.startSlur;\n\t\t\t\t\tif (ret.dottedSlur)\n\t\t\t\t\t\tel.dottedSlur = true;\n\t\t\t\t\tif (ret.triplet !== undefined) {\n\t\t\t\t\t\tif (tripletNotesLeft > 0)\n\t\t\t\t\t\t\twarn(\"Can't nest triplets\", line, i);\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tel.startTriplet = ret.triplet;\n\t\t\t\t\t\t\tel.tripletMultiplier = ret.tripletQ / ret.triplet;\n\t\t\t\t\t\t\tel.tripletR = ret.num_notes;\n\t\t\t\t\t\t\ttripletNotesLeft = ret.num_notes === undefined ? ret.triplet : ret.num_notes;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ti += ret.consumed;\n\t\t\t\t}\n\n\t\t\t\t// handle chords.\n\t\t\t\tif (line[i] === '[') {\n\t\t\t\t\tvar chordStartChar = i;\n\t\t\t\t\ti++;\n\t\t\t\t\tvar chordDuration = null;\n\t\t\t\t\tvar rememberEndBeam = false;\n\n\t\t\t\t\tvar done = false;\n\t\t\t\t\twhile (!done) {\n\t\t\t\t\t\tvar accent = letter_to_accent(line, i);\n\t\t\t\t\t\tif (accent[0] > 0) {\n\t\t\t\t\t\t\ti += accent[0];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar chordNote = getCoreNote(line, i, {}, false);\n\t\t\t\t\t\tif (chordNote !== null && chordNote.pitch !== undefined) {\n\t\t\t\t\t\t\tif (accent[0] > 0) { // If we found a decoration above, it modifies the entire chord. \"style\" is handled below.\n\t\t\t\t\t\t\t\tif (accent[1].indexOf(\"style=\") !== 0) {\n\t\t\t\t\t\t\t\t\tif (el.decoration === undefined)\n\t\t\t\t\t\t\t\t\t\tel.decoration = [];\n\t\t\t\t\t\t\t\t\tel.decoration.push(accent[1]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (chordNote.end_beam) {\n\t\t\t\t\t\t\t\tel.end_beam = true;\n\t\t\t\t\t\t\t\tdelete chordNote.end_beam;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (el.pitches === undefined) {\n\t\t\t\t\t\t\t\tel.duration = chordNote.duration;\n\t\t\t\t\t\t\t\tel.pitches = [ chordNote ];\n\t\t\t\t\t\t\t} else\t// Just ignore the note lengths of all but the first note. The standard isn't clear here, but this seems less confusing.\n\t\t\t\t\t\t\t\tel.pitches.push(chordNote);\n\t\t\t\t\t\t\tdelete chordNote.duration;\n\t\t\t\t\t\t\tif (accent[0] > 0) { // If we found a style above, it modifies the individual pitch, not the entire chord.\n\t\t\t\t\t\t\t\tif (accent[1].indexOf(\"style=\") === 0) {\n\t\t\t\t\t\t\t\t\tel.pitches[el.pitches.length-1].style = accent[1].substr(6);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (multilineVars.inTieChord[el.pitches.length]) {\n\t\t\t\t\t\t\t\tchordNote.endTie = true;\n\t\t\t\t\t\t\t\tmultilineVars.inTieChord[el.pitches.length] = undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (chordNote.startTie)\n\t\t\t\t\t\t\t\tmultilineVars.inTieChord[el.pitches.length] = true;\n\n\t\t\t\t\t\t\ti = chordNote.endChar;\n\t\t\t\t\t\t\tdelete chordNote.endChar;\n\t\t\t\t\t\t} else if (line[i] === ' ') {\n\t\t\t\t\t\t\t// Spaces are not allowed in chords, but we can recover from it by ignoring it.\n\t\t\t\t\t\t\twarn(\"Spaces are not allowed in chords\", line, i);\n\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (i < line.length && line[i] === ']') {\n\t\t\t\t\t\t\t\t// consume the close bracket\n\t\t\t\t\t\t\t\ti++;\n\n\t\t\t\t\t\t\t\tif (multilineVars.next_note_duration !== 0) {\n\t\t\t\t\t\t\t\t\tel.duration = el.duration * multilineVars.next_note_duration;\n\t\t\t\t\t\t\t\t\tmultilineVars.next_note_duration = 0;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (isInTie(multilineVars, overlayLevel, el)) {\n\t\t\t\t\t\t\t\t\tel.pitches.forEach(function(pitch) { pitch.endTie = true; });\n\t\t\t\t\t\t\t\t\tsetIsInTie(multilineVars, overlayLevel, false);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (tripletNotesLeft > 0 && !(el.rest && el.rest.type === \"spacer\")) {\n\t\t\t\t\t\t\t\t\ttripletNotesLeft--;\n\t\t\t\t\t\t\t\t\tif (tripletNotesLeft === 0) {\n\t\t\t\t\t\t\t\t\t\tel.endTriplet = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tvar postChordDone = false;\n\t\t\t\t\t\t\t\twhile (i < line.length && !postChordDone) {\n\t\t\t\t\t\t\t\t\tswitch (line[i]) {\n\t\t\t\t\t\t\t\t\t\tcase ' ':\n\t\t\t\t\t\t\t\t\t\tcase '\\t':\n\t\t\t\t\t\t\t\t\t\t\taddEndBeam(el);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase ')':\n\t\t\t\t\t\t\t\t\t\t\tif (el.endSlur === undefined) el.endSlur = 1; else el.endSlur++;\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase '-':\n\t\t\t\t\t\t\t\t\t\t\tel.pitches.forEach(function(pitch) { pitch.startTie = {}; });\n\t\t\t\t\t\t\t\t\t\t\tsetIsInTie(multilineVars, overlayLevel, true);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase '>':\n\t\t\t\t\t\t\t\t\t\tcase '<':\n\t\t\t\t\t\t\t\t\t\t\tvar br2 = getBrokenRhythm(line, i);\n\t\t\t\t\t\t\t\t\t\t\ti += br2[0] - 1;\t// index gets incremented below, so we'll let that happen\n\t\t\t\t\t\t\t\t\t\t\tmultilineVars.next_note_duration = br2[2];\n\t\t\t\t\t\t\t\t\t\t\tif (chordDuration)\n\t\t\t\t\t\t\t\t\t\t\t\tchordDuration = chordDuration * br2[1];\n\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t\tchordDuration = br2[1];\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase '1':\n\t\t\t\t\t\t\t\t\t\tcase '2':\n\t\t\t\t\t\t\t\t\t\tcase '3':\n\t\t\t\t\t\t\t\t\t\tcase '4':\n\t\t\t\t\t\t\t\t\t\tcase '5':\n\t\t\t\t\t\t\t\t\t\tcase '6':\n\t\t\t\t\t\t\t\t\t\tcase '7':\n\t\t\t\t\t\t\t\t\t\tcase '8':\n\t\t\t\t\t\t\t\t\t\tcase '9':\n\t\t\t\t\t\t\t\t\t\tcase '/':\n\t\t\t\t\t\t\t\t\t\t\tvar fraction = tokenizer.getFraction(line, i);\n\t\t\t\t\t\t\t\t\t\t\tchordDuration = fraction.value;\n\t\t\t\t\t\t\t\t\t\t\ti = fraction.index;\n\t\t\t\t\t\t\t\t\t\t\tvar ch = line[i]\n\t\t\t\t\t\t\t\t\t\t\tif (ch === ' ')\n\t\t\t\t\t\t\t\t\t\t\t\trememberEndBeam = true;\n\t\t\t\t\t\t\t\t\t\t\tif (ch === '-' || ch === ')' || ch === ' ' || ch === '<' || ch === '>')\n\t\t\t\t\t\t\t\t\t\t\t\ti--; // Subtracting one because one is automatically added below\n\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t\tpostChordDone = true;\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\t\tpostChordDone = true;\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (!postChordDone) {\n\t\t\t\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else\n\t\t\t\t\t\t\t\twarn(\"Expected ']' to end the chords\", line, i);\n\n\t\t\t\t\t\t\tif (el.pitches !== undefined) {\n\t\t\t\t\t\t\t\tif (chordDuration !== null) {\n\t\t\t\t\t\t\t\t\tel.duration = el.duration * chordDuration;\n\t\t\t\t\t\t\t\t\tif (rememberEndBeam)\n\t\t\t\t\t\t\t\t\t\taddEndBeam(el);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tmultilineVars.addFormattingOptions(el, tune.formatting, 'note');\n\t\t\t\t\t\t\t\ttuneBuilder.appendElement('note', startOfLine+startI, startOfLine+i, el);\n\t\t\t\t\t\t\t\tmultilineVars.measureNotEmpty = true;\n\t\t\t\t\t\t\t\tel = {};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdone = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\t// Single pitch\n\t\t\t\t\tvar el2 = {};\n\t\t\t\t\tvar core = getCoreNote(line, i, el2, true);\n\t\t\t\t\tif (el2.endTie !== undefined) setIsInTie(multilineVars, overlayLevel, true);\n\t\t\t\t\tif (core !== null) {\n\t\t\t\t\t\tif (core.pitch !== undefined) {\n\t\t\t\t\t\t\tel.pitches = [ { } ];\n\t\t\t\t\t\t\t// TODO-PER: straighten this out so there is not so much copying: getCoreNote shouldn't change e'\n\t\t\t\t\t\t\tif (core.accidental !== undefined) el.pitches[0].accidental = core.accidental;\n\t\t\t\t\t\t\tel.pitches[0].pitch = core.pitch;\n\t\t\t\t\t\t\tel.pitches[0].name = core.name;\n\t\t\t\t\t\t\tif (core.midipitch || core.midipitch === 0)\n\t\t\t\t\t\t\t\tel.pitches[0].midipitch = core.midipitch;\n\t\t\t\t\t\t\tif (core.endSlur !== undefined) el.pitches[0].endSlur = core.endSlur;\n\t\t\t\t\t\t\tif (core.endTie !== undefined) el.pitches[0].endTie = core.endTie;\n\t\t\t\t\t\t\tif (core.startSlur !== undefined) el.pitches[0].startSlur = core.startSlur;\n\t\t\t\t\t\t\tif (el.startSlur !== undefined) el.pitches[0].startSlur = el.startSlur;\n\t\t\t\t\t\t\tif (el.dottedSlur !== undefined) el.pitches[0].dottedSlur = true;\n\t\t\t\t\t\t\tif (core.startTie !== undefined) el.pitches[0].startTie = core.startTie;\n\t\t\t\t\t\t\tif (el.startTie !== undefined) el.pitches[0].startTie = el.startTie;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tel.rest = core.rest;\n\t\t\t\t\t\t\tif (core.endSlur !== undefined) el.endSlur = core.endSlur;\n\t\t\t\t\t\t\tif (core.endTie !== undefined) el.rest.endTie = core.endTie;\n\t\t\t\t\t\t\tif (core.startSlur !== undefined) el.startSlur = core.startSlur;\n\t\t\t\t\t\t\tif (core.startTie !== undefined) el.rest.startTie = core.startTie;\n\t\t\t\t\t\t\tif (el.startTie !== undefined) el.rest.startTie = el.startTie;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (core.chord !== undefined) el.chord = core.chord;\n\t\t\t\t\t\tif (core.duration !== undefined) el.duration = core.duration;\n\t\t\t\t\t\tif (core.decoration !== undefined) el.decoration = core.decoration;\n\t\t\t\t\t\tif (core.graceNotes !== undefined) el.graceNotes = core.graceNotes;\n\t\t\t\t\t\tdelete el.startSlur;\n\t\t\t\t\t\tdelete el.dottedSlur;\n\t\t\t\t\t\tif (isInTie(multilineVars, overlayLevel, el)) {\n\t\t\t\t\t\t\tif (el.pitches !== undefined) {\n\t\t\t\t\t\t\t\tel.pitches[0].endTie = true;\n\t\t\t\t\t\t\t} else if (el.rest.type !== 'spacer') {\n\t\t\t\t\t\t\t\tel.rest.endTie = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsetIsInTie(multilineVars, overlayLevel, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (core.startTie || el.startTie)\n\t\t\t\t\t\t\tsetIsInTie(multilineVars, overlayLevel, true);\n\t\t\t\t\t\ti = core.endChar;\n\n\t\t\t\t\t\tif (tripletNotesLeft > 0 && !(core.rest && core.rest.type === \"spacer\")) {\n\t\t\t\t\t\t\ttripletNotesLeft--;\n\t\t\t\t\t\t\tif (tripletNotesLeft === 0) {\n\t\t\t\t\t\t\t\tel.endTriplet = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (core.end_beam)\n\t\t\t\t\t\t\taddEndBeam(el);\n\n\t\t\t\t\t\t// If there is a whole rest, then it should be the duration of the measure, not it's own duration. We need to special case it.\n\t\t\t\t\t\t// If the time signature length is greater than 4/4, though, then a whole rest has no special treatment.\n\t\t\t\t\t\tif (el.rest && el.rest.type === 'rest' && el.duration === 1 && durationOfMeasure(multilineVars) <= 1) {\n\t\t\t\t\t\t\tel.rest.type = 'whole';\n\n\t\t\t\t\t\t\tel.duration = durationOfMeasure(multilineVars);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Create a warning if this is not a displayable duration.\n\t\t\t\t\t\t// The first item on a line is a regular note value, each item after that represents a dot placed after the previous note.\n\t\t\t\t\t\t// Only durations less than a whole note are tested because whole note durations have some tricky rules.\n\n if (el.duration < 1 && durations.indexOf(el.duration) === -1 && el.duration !== 0) {\n\t\t\t\t\t\t\tif (!el.rest || el.rest.type !== 'spacer')\n\t\t\t\t\t\t\t\twarn(\"Duration not representable: \" + line.substring(startI, i), line, i);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmultilineVars.addFormattingOptions(el, tune.formatting, 'note');\n\t\t\t\t\t\ttuneBuilder.appendElement('note', startOfLine+startI, startOfLine+i, el);\n\t\t\t\t\t\tmultilineVars.measureNotEmpty = true;\n\t\t\t\t\t\tel = {};\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (i === startI) {\t// don't know what this is, so ignore it.\n\t\t\t\t\tif (line[i] !== ' ' && line[i] !== '`')\n\t\t\t\t\t\twarn(\"Unknown character ignored\", line, i);\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tthis.lineContinuation = line.indexOf('\\x12') >= 0 || (retHeader[0] > 0)\n\tif (!this.lineContinuation) { el = { } }\n};\n\nvar setIsInTie =function(multilineVars, overlayLevel, value) {\n\t// If this is single voice music then the voice index isn't set, so we use the first voice.\n\tvar voiceIndex = multilineVars.currentVoice ? multilineVars.currentVoice.staffNum * 100 + multilineVars.currentVoice.index : 0;\n\tif (multilineVars.inTie[overlayLevel] === undefined)\n\t\tmultilineVars.inTie[overlayLevel] = [];\n\tmultilineVars.inTie[overlayLevel][voiceIndex] = value;\n};\n\nvar letter_to_chord = function(line, i) {\n\tif (line[i] === '\"')\n\t{\n\t\tvar chord = tokenizer.getBrackettedSubstring(line, i, 5);\n\t\tif (!chord[2])\n\t\t\twarn(\"Missing the closing quote while parsing the chord symbol\", line , i);\n\t\t// If it starts with ^, then the chord appears above.\n\t\t// If it starts with _ then the chord appears below.\n\t\t// (note that the 2.0 draft standard defines them as not chords, but annotations and also defines @.)\n\t\tif (chord[0] > 0 && chord[1].length > 0 && chord[1][0] === '^') {\n\t\t\tchord[1] = chord[1].substring(1);\n\t\t\tchord[2] = 'above';\n\t\t} else if (chord[0] > 0 && chord[1].length > 0 && chord[1][0] === '_') {\n\t\t\tchord[1] = chord[1].substring(1);\n\t\t\tchord[2] = 'below';\n\t\t} else if (chord[0] > 0 && chord[1].length > 0 && chord[1][0] === '<') {\n\t\t\tchord[1] = chord[1].substring(1);\n\t\t\tchord[2] = 'left';\n\t\t} else if (chord[0] > 0 && chord[1].length > 0 && chord[1][0] === '>') {\n\t\t\tchord[1] = chord[1].substring(1);\n\t\t\tchord[2] = 'right';\n\t\t} else if (chord[0] > 0 && chord[1].length > 0 && chord[1][0] === '@') {\n\t\t\t// @-15,5.7\n\t\t\tchord[1] = chord[1].substring(1);\n\t\t\tvar x = tokenizer.getFloat(chord[1]);\n\t\t\tif (x.digits === 0)\n\t\t\t\twarn(\"Missing first position in absolutely positioned annotation.\", line , i);\n\t\t\tchord[1] = chord[1].substring(x.digits);\n\t\t\tif (chord[1][0] !== ',')\n\t\t\t\twarn(\"Missing comma absolutely positioned annotation.\", line , i);\n\t\t\tchord[1] = chord[1].substring(1);\n\t\t\tvar y = tokenizer.getFloat(chord[1]);\n\t\t\tif (y.digits === 0)\n\t\t\t\twarn(\"Missing second position in absolutely positioned annotation.\", line , i);\n\t\t\tchord[1] = chord[1].substring(y.digits);\n\t\t\tvar ws = tokenizer.skipWhiteSpace(chord[1]);\n\t\t\tchord[1] = chord[1].substring(ws);\n\t\t\tchord[2] = null;\n\t\t\tchord[3] = { x: x.value, y: y.value };\n\t\t} else {\n\t\t\tif (multilineVars.freegchord !== true) {\n\t\t\t\tchord[1] = chord[1].replace(/([ABCDEFG0-9])b/g, \"$1♭\");\n\t\t\t\tchord[1] = chord[1].replace(/([ABCDEFG0-9])#/g, \"$1♯\");\n\t\t\t\tchord[1] = chord[1].replace(/^([ABCDEFG])([♯♭]?)o([^A-Za-z])/g, \"$1$2°$3\");\n\t\t\t\tchord[1] = chord[1].replace(/^([ABCDEFG])([♯♭]?)o$/g, \"$1$2°\");\n\t\t\t\tchord[1] = chord[1].replace(/^([ABCDEFG])([♯♭]?)0([^A-Za-z])/g, \"$1$2ø$3\");\n\t\t\t\tchord[1] = chord[1].replace(/^([ABCDEFG])([♯♭]?)\\^([^A-Za-z])/g, \"$1$2∆$3\");\n\t\t\t}\n\t\t\tchord[2] = 'default';\n\t\t\tchord[1] = transpose.chordName(multilineVars, chord[1]);\n\t\t}\n\t\treturn chord;\n\t}\n\treturn [0, \"\"];\n};\n\nvar letter_to_grace = function(line, i) {\n\t// Grace notes are an array of: startslur, note, endslur, space; where note is accidental, pitch, duration\n\tif (line[i] === '{') {\n\t\t// fetch the gracenotes string and consume that into the array\n\t\tvar gra = tokenizer.getBrackettedSubstring(line, i, 1, '}');\n\t\tif (!gra[2])\n\t\t\twarn(\"Missing the closing '}' while parsing grace note\", line, i);\n\t\t// If there is a slur after the grace construction, then move it to the last note inside the grace construction\n\t\tif (line[i+gra[0]] === ')') {\n\t\t\tgra[0]++;\n\t\t\tgra[1] += ')';\n\t\t}\n\n\t\tvar gracenotes = [];\n\t\tvar ii = 0;\n\t\tvar inTie = false;\n\t\twhile (ii < gra[1].length) {\n\t\t\tvar acciaccatura = false;\n\t\t\tif (gra[1][ii] === '/') {\n\t\t\t\tacciaccatura = true;\n\t\t\t\tii++;\n\t\t\t}\n\t\t\tvar note = getCoreNote(gra[1], ii, {}, false);\n\t\t\tif (note !== null) {\n\t\t\t\t// The grace note durations should not be affected by the default length: they should be based on 1/16, so if that isn't the default, then multiply here.\n\t\t\t\tnote.duration = note.duration / (multilineVars.default_length * 8);\n\t\t\t\tif (acciaccatura)\n\t\t\t\t\tnote.acciaccatura = true;\n\t\t\t\tgracenotes.push(note);\n\n\t\t\t\tif (inTie) {\n\t\t\t\t\tnote.endTie = true;\n\t\t\t\t\tinTie = false;\n\t\t\t\t}\n\t\t\t\tif (note.startTie)\n\t\t\t\t\tinTie = true;\n\n\t\t\t\tii = note.endChar;\n\t\t\t\tdelete note.endChar;\n\n\t\t\t\tif (note.end_beam) {\n\t\t\t\t\tnote.endBeam = true;\n\t\t\t\t\tdelete note.end_beam;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// We shouldn't get anything but notes or a space here, so report an error\n\t\t\t\tif (gra[1][ii] === ' ') {\n\t\t\t\t\tif (gracenotes.length > 0)\n\t\t\t\t\t\tgracenotes[gracenotes.length-1].endBeam = true;\n\t\t\t\t} else\n\t\t\t\t\twarn(\"Unknown character '\" + gra[1][ii] + \"' while parsing grace note\", line, i);\n\t\t\t\tii++;\n\t\t\t}\n\t\t}\n\t\tif (gracenotes.length)\n\t\t\treturn [gra[0], gracenotes];\n\t}\n\treturn [ 0 ];\n};\n\nfunction letter_to_overlay(line, i) {\n\tif (line[i] === '&') {\n\t\tvar start = i;\n\t\twhile (line[i] && line[i] !== ':' && line[i] !== '|')\n\t\t\ti++;\n\t\treturn [ i-start, line.substring(start+1, i) ];\n\t}\n\treturn [ 0 ];\n}\n\nfunction durationOfMeasure(multilineVars) {\n\t// TODO-PER: This could be more complicated if one of the unusual measures is used.\n\tvar meter = multilineVars.origMeter;\n\tif (!meter || meter.type !== 'specified')\n\t\treturn 1;\n\tif (!meter.value || meter.value.length === 0)\n\t\treturn 1;\n\treturn parseInt(meter.value[0].num, 10) / parseInt(meter.value[0].den, 10);\n}\n\n\n\n\nvar letter_to_accent = function(line, i) {\n\tvar macro = multilineVars.macros[line[i]];\n\n\tif (macro !== undefined) {\n\t\tif (macro[0] === '!' || macro[0] === '+')\n\t\t\tmacro = macro.substring(1);\n\t\tif (macro[macro.length-1] === '!' || macro[macro.length-1] === '+')\n\t\t\tmacro = macro.substring(0, macro.length-1);\n\t\tif (legalAccents.includes(macro))\n\t\t\treturn [ 1, macro ];\n\t\telse if (volumeDecorations.includes(macro)) {\n\t\t\tif (multilineVars.volumePosition === 'hidden')\n\t\t\t\tmacro = \"\";\n\t\t\treturn [1, macro];\n\t\t} else if (dynamicDecorations.includes(macro)) {\n\t\t\tif (multilineVars.dynamicPosition === 'hidden')\n\t\t\t\tmacro = \"\";\n\t\t\treturn [1, macro];\n\t\t} else {\n\t\t\tif (!multilineVars.ignoredDecorations.includes(macro))\n\t\t\t\twarn(\"Unknown macro: \" + macro, line, i);\n\t\t\treturn [1, '' ];\n\t\t}\n\t}\n\tswitch (line[i])\n\t{\n\t\tcase '.':\n\t\t\tif (line[i+1] === '(' || line[i+1] === '-') // a dot then open paren is a dotted slur; likewise dot dash is dotted tie.\n\t\t\t\tbreak;\n\t\t\treturn [1, 'staccato'];\n\t\tcase 'u':return [1, 'upbow'];\n\t\tcase 'v':return [1, 'downbow'];\n\t\tcase '~':return [1, 'irishroll'];\n\t\tcase '!':\n\t\tcase '+':\n\t\t\tvar ret = tokenizer.getBrackettedSubstring(line, i, 5);\n\t\t\t// Be sure that the accent is recognizable.\n\t\t\tif (ret[1].length > 1 && (ret[1][0] === '^' || ret[1][0] ==='_'))\n\t\t\t\tret[1] = ret[1].substring(1);\t// TODO-PER: The test files have indicators forcing the ornament to the top or bottom, but that isn't in the standard. We'll just ignore them.\n\t\t\tif (legalAccents.includes(ret[1]))\n\t\t\t\treturn ret;\n\t\t\tif (volumeDecorations.includes(ret[1])) {\n\t\t\t\tif (multilineVars.volumePosition === 'hidden' )\n\t\t\t\t\tret[1] = '';\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t\tif (dynamicDecorations.includes(ret[1])) {\n\t\t\t\tif (multilineVars.dynamicPosition === 'hidden' )\n\t\t\t\t\tret[1] = '';\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tvar ind = accentPseudonyms.findIndex(function (acc) { return ret[1] === acc[0]})\n\t\t\tif (ind >= 0) {\n\t\t\t\tret[1] = accentPseudonyms[ind][1];\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tind = accentDynamicPseudonyms.findIndex(function (acc) { return ret[1] === acc[0]})\n\t\t\tif (ind >= 0) {\n\t\t\t\tret[1] = accentDynamicPseudonyms[ind][1];\n\t\t\t\tif (multilineVars.dynamicPosition === 'hidden' )\n\t\t\t\t\tret[1] = '';\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// We didn't find the accent in the list, so consume the space, but don't return an accent.\n\t\t\t// Although it is possible that ! was used as a line break, so accept that.\n\t\t\tif (line[i] === '!' && (ret[0] === 1 || line[i+ret[0]-1] !== '!'))\n\t\t\t\treturn [1, null ];\n\t\t\twarn(\"Unknown decoration: \" + ret[1], line, i);\n\t\t\tret[1] = \"\";\n\t\t\treturn ret;\n\t\tcase 'H':return [1, 'fermata'];\n\t\tcase 'J':return [1, 'slide'];\n\t\tcase 'L':return [1, 'accent'];\n\t\tcase 'M':return [1, 'mordent'];\n\t\tcase 'O':return[1, 'coda'];\n\t\tcase 'P':return[1, 'pralltriller'];\n\t\tcase 'R':return [1, 'roll'];\n\t\tcase 'S':return [1, 'segno'];\n\t\tcase 'T':return [1, 'trill'];\n\t}\n\treturn [0, 0];\n};\n\nvar letter_to_spacer = function(line, i) {\n\tvar start = i;\n\twhile (tokenizer.isWhiteSpace(line[i]))\n\t\ti++;\n\treturn [ i-start ];\n};\n\n// returns the class of the bar line\n// the number of the repeat\n// and the number of characters used up\n// if 0 is returned, then the next element was not a bar line\nvar letter_to_bar = function(line, curr_pos) {\n\tvar ret = tokenizer.getBarLine(line, curr_pos);\n\tif (ret.len === 0)\n\t\treturn [0,\"\"];\n\tif (ret.warn) {\n\t\twarn(ret.warn, line, curr_pos);\n\t\treturn [ret.len,\"\"];\n\t}\n\n\t// Now see if this is a repeated ending\n\t// A repeated ending is all of the characters 1,2,3,4,5,6,7,8,9,0,-, and comma\n\t// It can also optionally start with '[', which is ignored.\n\t// Also, it can have white space before the '['.\n\tfor (var ws = 0; ws < line.length; ws++)\n\t\tif (line[curr_pos + ret.len + ws] !== ' ')\n\t\t\tbreak;\n\tvar orig_bar_len = ret.len;\n\tif (line[curr_pos+ret.len+ws] === '[') {\n\t\tret.len += ws + 1;\n\t}\n\n\t// It can also be a quoted string. It is unclear whether that construct requires '[', but it seems like it would. otherwise it would be confused with a regular chord.\n\tif (line[curr_pos+ret.len] === '\"' && line[curr_pos+ret.len-1] === '[') {\n\t\tvar ending = tokenizer.getBrackettedSubstring(line, curr_pos+ret.len, 5);\n\t\treturn [ret.len+ending[0], ret.token, ending[1]];\n\t}\n\tvar retRep = tokenizer.getTokenOf(line.substring(curr_pos+ret.len), \"1234567890-,\");\n\tif (retRep.len === 0 || retRep.token[0] === '-')\n\t\treturn [orig_bar_len, ret.token];\n\n\treturn [ret.len+retRep.len, ret.token, retRep.token];\n};\n\nvar letter_to_open_slurs_and_triplets = function(line, i) {\n\t// consume spaces, and look for all the open parens. If there is a number after the open paren,\n\t// that is a triplet. Otherwise that is a slur. Collect all the slurs and the first triplet.\n\tvar ret = {};\n\tvar start = i;\n\tif (line[i] === '.' && line[i+1] === '(') {\n\t\tret.dottedSlur = true;\n\t\ti++;\n\t}\n\twhile (line[i] === '(' || tokenizer.isWhiteSpace(line[i])) {\n\t\tif (line[i] === '(') {\n\t\t\tif (i+1 < line.length && (line[i+1] >= '2' && line[i+1] <= '9')) {\n\t\t\t\tif (ret.triplet !== undefined)\n\t\t\t\t\twarn(\"Can't nest triplets\", line, i);\n\t\t\t\telse {\n\t\t\t\t\tret.triplet = line[i+1] - '0';\n\t\t\t\t\tret.tripletQ = tripletQ[ret.triplet];\n\t\t\t\t\tret.num_notes = ret.triplet;\n\t\t\t\t\tif (i+2 < line.length && line[i+2] === ':') {\n\t\t\t\t\t\t// We are expecting \"(p:q:r\" or \"(p:q\" or \"(p::r\"\n\t\t\t\t\t\t// That is: \"put p notes into the time of q for the next r notes\"\n\t\t\t\t\t\t// if r is missing, then it is equal to p.\n\t\t\t\t\t\t// if q is missing, it is determined from this table:\n\t\t\t\t\t\t// (2 notes in the time of 3\n\t\t\t\t\t\t// (3 notes in the time of 2\n\t\t\t\t\t\t// (4 notes in the time of 3\n\t\t\t\t\t\t// (5 notes in the time of n | if time sig is (6/8, 9/8, 12/8), n=3, else n=2\n\t\t\t\t\t\t// (6 notes in the time of 2\n\t\t\t\t\t\t// (7 notes in the time of n\n\t\t\t\t\t\t// (8 notes in the time of 3\n\t\t\t\t\t\t// (9 notes in the time of n\n\t\t\t\t\t\tif (i+3 < line.length && line[i+3] === ':') {\n\t\t\t\t\t\t\t// The second number, 'q', is not present.\n\t\t\t\t\t\t\tif (i+4 < line.length && (line[i+4] >= '1' && line[i+4] <= '9')) {\n\t\t\t\t\t\t\t\tret.num_notes = line[i+4] - '0';\n\t\t\t\t\t\t\t\ti += 3;\n\t\t\t\t\t\t\t} else\n\t\t\t\t\t\t\t\twarn(\"expected number after the two colons after the triplet to mark the duration\", line, i);\n\t\t\t\t\t\t} else if (i+3 < line.length && (line[i+3] >= '1' && line[i+3] <= '9')) {\n\t\t\t\t\t\t\tret.tripletQ = line[i+3] - '0';\n\t\t\t\t\t\t\tif (i+4 < line.length && line[i+4] === ':') {\n\t\t\t\t\t\t\t\tif (i+5 < line.length && (line[i+5] >= '1' && line[i+5] <= '9')) {\n\t\t\t\t\t\t\t\t\tret.num_notes = line[i+5] - '0';\n\t\t\t\t\t\t\t\t\ti += 4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ti += 2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\twarn(\"expected number after the triplet to mark the duration\", line, i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ti++;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (ret.startSlur === undefined)\n\t\t\t\t\tret.startSlur = 1;\n\t\t\t\telse\n\t\t\t\t\tret.startSlur++;\n\t\t\t}\n\t\t}\n\t\ti++;\n\t}\n\tret.consumed = i-start;\n\treturn ret;\n};\n\nMusicParser.prototype.startNewLine = function() {\n\tvar params = { startChar: -1, endChar: -1};\n\tif (multilineVars.partForNextLine.title)\n\t\tparams.part = multilineVars.partForNextLine;\n\tparams.clef = multilineVars.currentVoice && multilineVars.staves[multilineVars.currentVoice.staffNum].clef !== undefined ? parseCommon.clone(multilineVars.staves[multilineVars.currentVoice.staffNum].clef) : parseCommon.clone(multilineVars.clef);\n\tvar scoreTranspose = multilineVars.currentVoice ? multilineVars.currentVoice.scoreTranspose : 0;\n\tparams.key = parseKeyVoice.standardKey(multilineVars.key.root+multilineVars.key.acc+multilineVars.key.mode, multilineVars.key.root, multilineVars.key.acc, scoreTranspose);\n\tparams.key.mode = multilineVars.key.mode;\n\tif (multilineVars.key.impliedNaturals)\n\t\tparams.key.impliedNaturals = multilineVars.key.impliedNaturals;\n\tif (multilineVars.key.explicitAccidentals) {\n\t\tfor (var i = 0; i < multilineVars.key.explicitAccidentals.length; i++) {\n\t\t\tvar found = false;\n\t\t\tfor (var j = 0; j < params.key.accidentals.length; j++) {\n\t\t\t\tif (params.key.accidentals[j].note === multilineVars.key.explicitAccidentals[i].note) {\n\t\t\t\t\t// If the note is already in the list, override it with the new value\n\t\t\t\t\tparams.key.accidentals[j].acc = multilineVars.key.explicitAccidentals[i].acc;\n\t\t\t\t\tfound = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!found)\n\t\t\t\tparams.key.accidentals.push(multilineVars.key.explicitAccidentals[i]);\n\t\t}\n\t}\n\tmultilineVars.targetKey = params.key;\n\tif (params.key.explicitAccidentals)\n\t\tdelete params.key.explicitAccidentals;\n\tparseKeyVoice.addPosToKey(params.clef, params.key);\n\tif (multilineVars.meter !== null) {\n\t\tif (multilineVars.currentVoice) {\n\t\t\tmultilineVars.staves.forEach(function(st) {\n\t\t\t\tst.meter = multilineVars.meter;\n\t\t\t});\n\t\t\tparams.meter = multilineVars.staves[multilineVars.currentVoice.staffNum].meter;\n\t\t\tmultilineVars.staves[multilineVars.currentVoice.staffNum].meter = null;\n\t\t} else\n\t\t\tparams.meter = multilineVars.meter;\n\t\tmultilineVars.meter = null;\n\t} else if (multilineVars.currentVoice && multilineVars.staves[multilineVars.currentVoice.staffNum].meter) {\n\t\t// Make sure that each voice gets the meter marking.\n\t\tparams.meter = multilineVars.staves[multilineVars.currentVoice.staffNum].meter;\n\t\tmultilineVars.staves[multilineVars.currentVoice.staffNum].meter = null;\n\t}\n\tif (multilineVars.currentVoice && multilineVars.currentVoice.name)\n\t\tparams.name = multilineVars.currentVoice.name;\n\tif (multilineVars.vocalfont)\n\t\tparams.vocalfont = multilineVars.vocalfont;\n\tif (multilineVars.tripletfont)\n\t\tparams.tripletfont = multilineVars.tripletfont;\n\tif (multilineVars.gchordfont)\n\t\tparams.gchordfont = multilineVars.gchordfont;\n\tif (multilineVars.style)\n\t\tparams.style = multilineVars.style;\n\tif (multilineVars.currentVoice) {\n\t\tvar staff = multilineVars.staves[multilineVars.currentVoice.staffNum];\n\t\tif (staff.brace) params.brace = staff.brace;\n\t\tif (staff.bracket) params.bracket = staff.bracket;\n\t\tif (staff.connectBarLines) params.connectBarLines = staff.connectBarLines;\n\t\tif (staff.name) params.name = staff.name[multilineVars.currentVoice.index];\n\t\tif (staff.subname) params.subname = staff.subname[multilineVars.currentVoice.index];\n\t\tif (multilineVars.currentVoice.stem)\n\t\t\tparams.stem = multilineVars.currentVoice.stem;\n\t\tif (multilineVars.currentVoice.stafflines)\n\t\t\tparams.stafflines = multilineVars.currentVoice.stafflines;\n\t\tif (multilineVars.currentVoice.staffscale)\n\t\t\tparams.staffscale = multilineVars.currentVoice.staffscale;\n\t\tif (multilineVars.currentVoice.scale)\n\t\t\tparams.scale = multilineVars.currentVoice.scale;\n\t\tif (multilineVars.currentVoice.color)\n\t\t\tparams.color = multilineVars.currentVoice.color;\n\t\tif (multilineVars.currentVoice.style)\n\t\t\tparams.style = multilineVars.currentVoice.style;\n\t\tif (multilineVars.currentVoice.transpose)\n\t\t\tparams.clef.transpose = multilineVars.currentVoice.transpose;\n\t}\n\tvar isFirstVoice = multilineVars.currentVoice === undefined || (multilineVars.currentVoice.staffNum === 0 && multilineVars.currentVoice.index === 0);\n\tif (multilineVars.barNumbers === 0 && isFirstVoice && multilineVars.currBarNumber !== 1)\n\t\tparams.barNumber = multilineVars.currBarNumber;\n\ttuneBuilder.startNewLine(params);\n\tif (multilineVars.key.impliedNaturals)\n\t\tdelete multilineVars.key.impliedNaturals;\n\n\tmultilineVars.partForNextLine = {};\n\tif (multilineVars.tempoForNextLine.length === 4)\n\t\ttuneBuilder.appendElement(multilineVars.tempoForNextLine[0],multilineVars.tempoForNextLine[1],multilineVars.tempoForNextLine[2],multilineVars.tempoForNextLine[3]);\n\tmultilineVars.tempoForNextLine = [];\n}\n\n// TODO-PER: make this a method in el.\nvar addEndBeam = function(el) {\n\tif (el.duration !== undefined && el.duration < 0.25)\n\t\tel.end_beam = true;\n\treturn el;\n};\n\nvar getCoreNote = function(line, index, el, canHaveBrokenRhythm) {\n\t//var el = { startChar: index };\n\tvar isComplete = function(state) {\n\t\treturn (state === 'octave' || state === 'duration' || state === 'Zduration' || state === 'broken_rhythm' || state === 'end_slur');\n\t};\n\tvar dottedTie;\n\tif (line[index] === '.' && line[index+1] === '-') {\n\t\tdottedTie = true;\n\t\tindex++;\n\t}\n\tvar state = 'startSlur';\n\tvar durationSetByPreviousNote = false;\n\twhile (1) {\n\t\tswitch(line[index]) {\n\t\t\tcase '(':\n\t\t\t\tif (state === 'startSlur') {\n\t\t\t\t\tif (el.startSlur === undefined) el.startSlur = 1; else el.startSlur++;\n\t\t\t\t} else if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase ')':\n\t\t\t\tif (isComplete(state)) {\n\t\t\t\t\tif (el.endSlur === undefined) el.endSlur = 1; else el.endSlur++;\n\t\t\t\t} else return null;\n\t\t\t\tbreak;\n\t\t\tcase '^':\n\t\t\t\tif (state === 'startSlur') {el.accidental = 'sharp';state = 'sharp2';}\n\t\t\t\telse if (state === 'sharp2') {el.accidental = 'dblsharp';state = 'pitch';}\n\t\t\t\telse if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase '_':\n\t\t\t\tif (state === 'startSlur') {el.accidental = 'flat';state = 'flat2';}\n\t\t\t\telse if (state === 'flat2') {el.accidental = 'dblflat';state = 'pitch';}\n\t\t\t\telse if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase '=':\n\t\t\t\tif (state === 'startSlur') {el.accidental = 'natural';state = 'pitch';}\n\t\t\t\telse if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase 'A':\n\t\t\tcase 'B':\n\t\t\tcase 'C':\n\t\t\tcase 'D':\n\t\t\tcase 'E':\n\t\t\tcase 'F':\n\t\t\tcase 'G':\n\t\t\tcase 'a':\n\t\t\tcase 'b':\n\t\t\tcase 'c':\n\t\t\tcase 'd':\n\t\t\tcase 'e':\n\t\t\tcase 'f':\n\t\t\tcase 'g':\n\t\t\t\tif (state === 'startSlur' || state === 'sharp2' || state === 'flat2' || state === 'pitch') {\n\t\t\t\t\tel.pitch = pitches[line[index]];\n\t\t\t\t\tel.pitch += 7 * (multilineVars.currentVoice && multilineVars.currentVoice.octave !== undefined ? multilineVars.currentVoice.octave : multilineVars.octave);\n\t\t\t\t\tel.name = line[index];\n\t\t\t\t\tif (el.accidental)\n\t\t\t\t\t\tel.name = accMap[el.accidental] + el.name;\n\t\t\t\t\ttranspose.note(multilineVars, el);\n\t\t\t\t\tstate = 'octave';\n\t\t\t\t\t// At this point we have a valid note. The rest is optional. Set the duration in case we don't get one below\n\t\t\t\t\tif (canHaveBrokenRhythm && multilineVars.next_note_duration !== 0) {\n\t\t\t\t\t\tel.duration = multilineVars.default_length * multilineVars.next_note_duration;\n\t\t\t\t\t\tmultilineVars.next_note_duration = 0;\n\t\t\t\t\t\tdurationSetByPreviousNote = true;\n\t\t\t\t\t} else\n\t\t\t\t\t\tel.duration = multilineVars.default_length;\n\t\t\t\t\t// If the clef is percussion, there is probably some translation of the pitch to a particular drum kit item.\n\t\t\t\t\tif ((multilineVars.clef && multilineVars.clef.type === \"perc\") ||\n\t\t\t\t\t\t(multilineVars.currentVoice && multilineVars.currentVoice.clef === \"perc\")) {\n\t\t\t\t\t\tvar key = line[index];\n\t\t\t\t\t\tif (el.accidental) {\n\t\t\t\t\t\t\tkey = accMap[el.accidental] + key;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tune.formatting && tune.formatting.midi && tune.formatting.midi.drummap)\n\t\t\t\t\t\tel.midipitch = tune.formatting.midi.drummap[key];\n\t\t\t\t\t}\n\t\t\t\t} else if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase ',':\n\t\t\t\tif (state === 'octave') {el.pitch -= 7; el.name += ','; }\n\t\t\t\telse if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase '\\'':\n\t\t\t\tif (state === 'octave') {el.pitch += 7; el.name += \"'\"; }\n\t\t\t\telse if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase 'x':\n\t\t\tcase 'X':\n\t\t\tcase 'y':\n\t\t\tcase 'z':\n\t\t\tcase 'Z':\n\t\t\t\tif (state === 'startSlur') {\n\t\t\t\t\tel.rest = { type: rests[line[index]] };\n\t\t\t\t\t// There shouldn't be some of the properties that notes have. If some sneak in due to bad syntax in the abc file,\n\t\t\t\t\t// just nix them here.\n\t\t\t\t\tdelete el.accidental;\n\t\t\t\t\tdelete el.startSlur;\n\t\t\t\t\tdelete el.startTie;\n\t\t\t\t\tdelete el.endSlur;\n\t\t\t\t\tdelete el.endTie;\n\t\t\t\t\tdelete el.end_beam;\n\t\t\t\t\tdelete el.grace_notes;\n\t\t\t\t\t// At this point we have a valid note. The rest is optional. Set the duration in case we don't get one below\n\t\t\t\t\tif (el.rest.type.indexOf('multimeasure') >= 0) {\n\t\t\t\t\t\tel.duration = tune.getBarLength();\n\t\t\t\t\t\tel.rest.text = 1;\n\t\t\t\t\t\tstate = 'Zduration';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (canHaveBrokenRhythm && multilineVars.next_note_duration !== 0) {\n\t\t\t\t\t\t\tel.duration = multilineVars.default_length * multilineVars.next_note_duration;\n\t\t\t\t\t\t\tmultilineVars.next_note_duration = 0;\n\t\t\t\t\t\t\tdurationSetByPreviousNote = true;\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\tel.duration = multilineVars.default_length;\n\t\t\t\t\t\tstate = 'duration';\n\t\t\t\t\t}\n\t\t\t\t} else if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase '1':\n\t\t\tcase '2':\n\t\t\tcase '3':\n\t\t\tcase '4':\n\t\t\tcase '5':\n\t\t\tcase '6':\n\t\t\tcase '7':\n\t\t\tcase '8':\n\t\t\tcase '9':\n\t\t\tcase '0':\n\t\t\tcase '/':\n\t\t\t\tif (state === 'octave' || state === 'duration') {\n\t\t\t\t\tvar fraction = tokenizer.getFraction(line, index);\n\t\t\t\t\t//if (!durationSetByPreviousNote)\n\t\t\t\t\tel.duration = el.duration * fraction.value;\n\t\t\t\t\t// TODO-PER: We can test the returned duration here and give a warning if it isn't the one expected.\n\t\t\t\t\tel.endChar = fraction.index;\n\t\t\t\t\twhile (fraction.index < line.length && (tokenizer.isWhiteSpace(line[fraction.index]) || line[fraction.index] === '-')) {\n\t\t\t\t\t\tif (line[fraction.index] === '-')\n\t\t\t\t\t\t\tel.startTie = {};\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tel = addEndBeam(el);\n\t\t\t\t\t\tfraction.index++;\n\t\t\t\t\t}\n\t\t\t\t\tindex = fraction.index-1;\n\t\t\t\t\tstate = 'broken_rhythm';\n\t\t\t\t} else if (state === 'sharp2') {\n\t\t\t\t\tel.accidental = 'quartersharp';state = 'pitch';\n\t\t\t\t} else if (state === 'flat2') {\n\t\t\t\t\tel.accidental = 'quarterflat';state = 'pitch';\n\t\t\t\t} else if (state === 'Zduration') {\n\t\t\t\t\tvar num = tokenizer.getNumber(line, index);\n\t\t\t\t\tel.duration = num.num * tune.getBarLength();\n\t\t\t\t\tel.rest.text = num.num;\n\t\t\t\t\tel.endChar = num.index;\n\t\t\t\t\treturn el;\n\t\t\t\t} else return null;\n\t\t\t\tbreak;\n\t\t\tcase '-':\n\t\t\t\tif (state === 'startSlur') {\n\t\t\t\t\t// This is the first character, so it must have been meant for the previous note. Correct that here.\n\t\t\t\t\ttuneBuilder.addTieToLastNote(dottedTie);\n\t\t\t\t\tel.endTie = true;\n\t\t\t\t} else if (state === 'octave' || state === 'duration' || state === 'end_slur') {\n\t\t\t\t\tel.startTie = {};\n\t\t\t\t\tif (!durationSetByPreviousNote && canHaveBrokenRhythm)\n\t\t\t\t\t\tstate = 'broken_rhythm';\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Peek ahead to the next character. If it is a space, then we have an end beam.\n\t\t\t\t\t\tif (tokenizer.isWhiteSpace(line[index + 1]))\n\t\t\t\t\t\t\taddEndBeam(el);\n\t\t\t\t\t\tel.endChar = index+1;\n\t\t\t\t\t\treturn el;\n\t\t\t\t\t}\n\t\t\t\t} else if (state === 'broken_rhythm') {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase ' ':\n\t\t\tcase '\\t':\n\t\t\t\tif (isComplete(state)) {\n\t\t\t\t\tel.end_beam = true;\n\t\t\t\t\t// look ahead to see if there is a tie\n\t\t\t\t\tdottedTie = false;\n\t\t\t\t\tdo {\n\t\t\t\t\t\tif (line[index] === '.' && line[index+1] === '-') {\n\t\t\t\t\t\t\tdottedTie = true;\n\t\t\t\t\t\t\tindex++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (line[index] === '-') {\n\t\t\t\t\t\t\tel.startTie = {};\n\t\t\t\t\t\t\tif (dottedTie)\n\t\t\t\t\t\t\t\tel.startTie.style = \"dotted\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t} while (index < line.length &&\n\t\t\t\t\t\t(tokenizer.isWhiteSpace(line[index]) || line[index] === '-') ||\n\t\t\t\t\t\t(line[index] === '.' && line[index+1] === '-'));\n\t\t\t\t\tel.endChar = index;\n\t\t\t\t\tif (!durationSetByPreviousNote && canHaveBrokenRhythm && (line[index] === '<' || line[index] === '>')) {\t// TODO-PER: Don't need the test for < and >, but that makes the endChar work out for the regression test.\n\t\t\t\t\t\tindex--;\n\t\t\t\t\t\tstate = 'broken_rhythm';\n\t\t\t\t\t} else\n\t\t\t\t\t\treturn el;\n\t\t\t\t}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase '>':\n\t\t\tcase '<':\n\t\t\t\tif (isComplete(state)) {\n\t\t\t\t\tif (canHaveBrokenRhythm) {\n\t\t\t\t\t\tvar br2 = getBrokenRhythm(line, index);\n\t\t\t\t\t\tindex += br2[0] - 1;\t// index gets incremented below, so we'll let that happen\n\t\t\t\t\t\tmultilineVars.next_note_duration = br2[2];\n\t\t\t\t\t\tel.duration = br2[1]*el.duration;\n\t\t\t\t\t\tstate = 'end_slur';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tel.endChar = index;\n\t\t\t\t\t\treturn el;\n\t\t\t\t\t}\n\t\t\t\t} else\n\t\t\t\t\treturn null;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tif (isComplete(state)) {\n\t\t\t\t\tel.endChar = index;\n\t\t\t\t\treturn el;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t}\n\t\tindex++;\n\t\tif (index === line.length) {\n\t\t\tif (isComplete(state)) {el.endChar = index;return el;}\n\t\t\telse return null;\n\t\t}\n\t}\n\treturn null;\n};\n\nvar getBrokenRhythm = function(line, index) {\n\tswitch (line[index]) {\n\t\tcase '>':\n\t\t\tif (index < line.length - 2 && line[index + 1] === '>' && line[index + 2] === '>')\t// triple >>>\n\t\t\t\treturn [3, 1.875, 0.125];\n\t\t\telse if (index < line.length - 1 && line[index + 1] === '>')\t// double >>\n\t\t\t\treturn [2, 1.75, 0.25];\n\t\t\telse\n\t\t\t\treturn [1, 1.5, 0.5];\n\t\tcase '<':\n\t\t\tif (index < line.length - 2 && line[index + 1] === '<' && line[index + 2] === '<')\t// triple <<<\n\t\t\t\treturn [3, 0.125, 1.875];\n\t\t\telse if (index < line.length - 1 && line[index + 1] === '<')\t// double <<\n\t\t\t\treturn [2, 0.25, 1.75];\n\t\t\telse\n\t\t\t\treturn [1, 0.5, 1.5];\n\t}\n\treturn null;\n};\n\nmodule.exports = MusicParser;\n","module.exports.legalAccents = [\n 'trill',\n 'lowermordent',\n 'uppermordent',\n 'mordent',\n 'pralltriller',\n 'accent',\n 'fermata',\n 'invertedfermata',\n 'tenuto',\n '0',\n '1',\n '2',\n '3',\n '4',\n '5',\n '+',\n 'wedge',\n 'open',\n 'thumb',\n 'snap',\n 'turn',\n 'roll',\n 'breath',\n 'shortphrase',\n 'mediumphrase',\n 'longphrase',\n 'segno',\n 'coda',\n 'D.S.',\n 'D.C.',\n 'fine',\n 'beambr1',\n 'beambr2',\n 'slide',\n 'marcato',\n 'upbow',\n 'downbow',\n '/',\n '//',\n '///',\n '////',\n 'trem1',\n 'trem2',\n 'trem3',\n 'trem4',\n 'turnx',\n 'invertedturn',\n 'invertedturnx',\n 'trill(',\n 'trill)',\n 'arpeggio',\n 'xstem',\n 'mark',\n 'umarcato',\n 'style=normal',\n 'style=harmonic',\n 'style=rhythm',\n 'style=x',\n 'style=triangle',\n 'D.C.alcoda',\n 'D.C.alfine',\n 'D.S.alcoda',\n 'D.S.alfine',\n 'editorial',\n 'courtesy'\n];\n\nmodule.exports.volumeDecorations = [\n 'p',\n 'pp',\n 'f',\n 'ff',\n 'mf',\n 'mp',\n 'ppp',\n 'pppp',\n 'fff',\n 'ffff',\n 'sfz'\n];\n\nmodule.exports.dynamicDecorations = [\n 'crescendo(',\n 'crescendo)',\n 'diminuendo(',\n 'diminuendo)',\n 'glissando(',\n 'glissando)',\n '~(',\n '~)'\n];\n\nmodule.exports.accentPseudonyms = [\n ['<', 'accent'],\n ['>', 'accent'],\n ['tr', 'trill'],\n ['plus', '+'],\n ['emphasis', 'accent'],\n ['^', 'umarcato'],\n ['marcato', 'umarcato']\n];\n\nmodule.exports.accentDynamicPseudonyms = [\n ['<(', 'crescendo('],\n ['<)', 'crescendo)'],\n ['>(', 'diminuendo('],\n ['>)', 'diminuendo)']\n];\n\nmodule.exports.nonDecorations = 'ABCDEFGabcdefgxyzZ[]|^_{'; // use this to prescreen so we don't have to look for a decoration at every note.\n\nmodule.exports.durations = [\n 0.5, 0.75, 0.875, 0.9375, 0.96875, 0.984375, 0.25, 0.375, 0.4375, 0.46875,\n 0.484375, 0.4921875, 0.125, 0.1875, 0.21875, 0.234375, 0.2421875, 0.24609375,\n 0.0625, 0.09375, 0.109375, 0.1171875, 0.12109375, 0.123046875, 0.03125,\n 0.046875, 0.0546875, 0.05859375, 0.060546875, 0.0615234375, 0.015625,\n 0.0234375, 0.02734375, 0.029296875, 0.0302734375, 0.03076171875\n];\n\nmodule.exports.pitches = {\n A: 5,\n B: 6,\n C: 0,\n D: 1,\n E: 2,\n F: 3,\n G: 4,\n a: 12,\n b: 13,\n c: 7,\n d: 8,\n e: 9,\n f: 10,\n g: 11\n};\n\nmodule.exports.rests = {\n x: 'invisible',\n X: 'invisible-multimeasure',\n y: 'spacer',\n z: 'rest',\n Z: 'multimeasure'\n};\n\nmodule.exports.accMap = {\n dblflat: '__',\n flat: '_',\n natural: '=',\n sharp: '^',\n dblsharp: '^^',\n quarterflat: '_/',\n quartersharp: '^/'\n};\n\nmodule.exports.tripletQ = {\n 2: 3,\n 3: 2,\n 4: 3,\n 5: 2, // TODO-PER: not handling 6/8 rhythm yet\n 6: 2,\n 7: 2, // TODO-PER: not handling 6/8 rhythm yet\n 8: 3,\n 9: 2 // TODO-PER: not handling 6/8 rhythm yet\n};\n","// abc_tokenizer.js: tokenizes an ABC Music Notation string to support abc_parse.\n\nvar parseCommon = require('./abc_common');\n\n// this is a series of functions that get a particular element out of the passed stream.\n// the return is the number of characters consumed, so 0 means that the element wasn't found.\n// also returned is the element found. This may be a different length because spaces may be consumed that aren't part of the string.\n// The return structure for most calls is { len: num_chars_consumed, token: str }\nvar Tokenizer = function(lines, multilineVars) {\n\tthis.lineIndex = 0\n\tthis.lines = lines\n\tthis.multilineVars = multilineVars;\n\n\tthis.skipWhiteSpace = function(str) {\n\t\tfor (var i = 0; i < str.length; i++) {\n\t\t if (!this.isWhiteSpace(str[i]))\n\t\t\t\treturn i;\n\t\t}\n\t\treturn str.length;\t// It must have been all white space\n\t};\n\tvar finished = function(str, i) {\n\t\treturn i >= str.length;\n\t};\n\tthis.eatWhiteSpace = function(line, index) {\n\t\tfor (var i = index; i < line.length; i++) {\n\t\t if (!this.isWhiteSpace(line[i]))\n\t\t\t\treturn i-index;\n\t\t}\n\t\treturn i-index;\n\t};\n\n\t// This just gets the basic pitch letter, ignoring leading spaces, and normalizing it to a capital\n\tthis.getKeyPitch = function(str) {\n\t\tvar i = this.skipWhiteSpace(str);\n\t\tif (finished(str, i))\n\t\t\treturn {len: 0};\n\t\tswitch (str[i]) {\n\t\t\tcase 'A':return {len: i+1, token: 'A'};\n\t\t\tcase 'B':return {len: i+1, token: 'B'};\n\t\t\tcase 'C':return {len: i+1, token: 'C'};\n\t\t\tcase 'D':return {len: i+1, token: 'D'};\n\t\t\tcase 'E':return {len: i+1, token: 'E'};\n\t\t\tcase 'F':return {len: i+1, token: 'F'};\n\t\t\tcase 'G':return {len: i+1, token: 'G'};\n//\t\t\tcase 'a':return {len: i+1, token: 'A'};\n//\t\t\tcase 'b':return {len: i+1, token: 'B'};\n//\t\t\tcase 'c':return {len: i+1, token: 'C'};\n//\t\t\tcase 'd':return {len: i+1, token: 'D'};\n//\t\t\tcase 'e':return {len: i+1, token: 'E'};\n//\t\t\tcase 'f':return {len: i+1, token: 'F'};\n//\t\t\tcase 'g':return {len: i+1, token: 'G'};\n\t\t}\n\t\treturn {len: 0};\n\t};\n\n\t// This just gets the basic accidental, ignoring leading spaces, and only the ones that appear in a key\n\tthis.getSharpFlat = function(str) {\n\t\tif (str === 'bass')\n\t\t\treturn {len: 0};\n\t\tswitch (str[0]) {\n\t\t\tcase '#':return {len: 1, token: '#'};\n\t\t\tcase 'b':return {len: 1, token: 'b'};\n\t\t}\n\t\treturn {len: 0};\n\t};\n\n\tthis.getMode = function(str) {\n\t\tvar skipAlpha = function(str, start) {\n\t\t\t// This returns the index of the next non-alphabetic char, or the entire length of the string if not found.\n\t\t while (start < str.length && ((str[start] >= 'a' && str[start] <= 'z') || (str[start] >= 'A' && str[start] <= 'Z')))\n\t\t\t\tstart++;\n\t\t\treturn start;\n\t\t};\n\n\t\tvar i = this.skipWhiteSpace(str);\n\t\tif (finished(str, i))\n\t\t\treturn {len: 0};\n\t\tvar firstThree = str.substring(i,i+3).toLowerCase();\n\t\tif (firstThree.length > 1 && firstThree[1] === ' ' || firstThree[1] === '^' || firstThree[1] === '_' || firstThree[1] === '=') firstThree = firstThree[0];\t// This will handle the case of 'm'\n\t\tswitch (firstThree) {\n\t\t\tcase 'mix':return {len: skipAlpha(str, i), token: 'Mix'};\n\t\t\tcase 'dor':return {len: skipAlpha(str, i), token: 'Dor'};\n\t\t\tcase 'phr':return {len: skipAlpha(str, i), token: 'Phr'};\n\t\t\tcase 'lyd':return {len: skipAlpha(str, i), token: 'Lyd'};\n\t\t\tcase 'loc':return {len: skipAlpha(str, i), token: 'Loc'};\n\t\t\tcase 'aeo':return {len: skipAlpha(str, i), token: 'm'};\n\t\t\tcase 'maj':return {len: skipAlpha(str, i), token: ''};\n\t\t\tcase 'ion':return {len: skipAlpha(str, i), token: ''};\n\t\t\tcase 'min':return {len: skipAlpha(str, i), token: 'm'};\n\t\t\tcase 'm':return {len: skipAlpha(str, i), token: 'm'};\n\t\t}\n\t\treturn {len: 0};\n\t};\n\n\tthis.getClef = function(str, bExplicitOnly) {\n\t\tvar strOrig = str;\n\t\tvar i = this.skipWhiteSpace(str);\n\t\tif (finished(str, i))\n\t\t\treturn {len: 0};\n\t\t// The word 'clef' is optional, but if it appears, a clef MUST appear\n\t\tvar needsClef = false;\n\t\tvar strClef = str.substring(i);\n\t\tif (parseCommon.startsWith(strClef, 'clef=')) {\n\t\t\tneedsClef = true;\n\t\t\tstrClef = strClef.substring(5);\n\t\t\ti += 5;\n\t\t}\n\t\tif (strClef.length === 0 && needsClef)\n\t\t\treturn {len: i+5, warn: \"No clef specified: \" + strOrig};\n\n\t\tvar j = this.skipWhiteSpace(strClef);\n\t\tif (finished(strClef, j))\n\t\t\treturn {len: 0};\n\t\tif (j > 0) {\n\t\t\ti += j;\n\t\t\tstrClef = strClef.substring(j);\n\t\t}\n\t\tvar name = null;\n\t\tif (parseCommon.startsWith(strClef, 'treble'))\n\t\t\tname = 'treble';\n\t\telse if (parseCommon.startsWith(strClef, 'bass3'))\n\t\t\tname = 'bass3';\n\t\telse if (parseCommon.startsWith(strClef, 'bass'))\n\t\t\tname = 'bass';\n\t\telse if (parseCommon.startsWith(strClef, 'tenor'))\n\t\t\tname = 'tenor';\n\t\telse if (parseCommon.startsWith(strClef, 'alto2'))\n\t\t\tname = 'alto2';\n\t\telse if (parseCommon.startsWith(strClef, 'alto1'))\n\t\t\tname = 'alto1';\n\t\telse if (parseCommon.startsWith(strClef, 'alto'))\n\t\t\tname = 'alto';\n\t\telse if (!bExplicitOnly && (needsClef && parseCommon.startsWith(strClef, 'none')))\n\t\t\tname = 'none';\n\t\telse if (parseCommon.startsWith(strClef, 'perc'))\n\t\t\tname = 'perc';\n\t\telse if (!bExplicitOnly && (needsClef && parseCommon.startsWith(strClef, 'C')))\n\t\t\tname = 'tenor';\n\t\telse if (!bExplicitOnly && (needsClef && parseCommon.startsWith(strClef, 'F')))\n\t\t\tname = 'bass';\n\t\telse if (!bExplicitOnly && (needsClef && parseCommon.startsWith(strClef, 'G')))\n\t\t\tname = 'treble';\n\t\telse\n\t\t\treturn {len: i+5, warn: \"Unknown clef specified: \" + strOrig};\n\n\t\tstrClef = strClef.substring(name.length);\n\t\tj = this.isMatch(strClef, '+8');\n\t\tif (j > 0)\n\t\t\tname += \"+8\";\n\t\telse {\n\t\t\tj = this.isMatch(strClef, '-8');\n\t\t\tif (j > 0)\n\t\t\t\tname += \"-8\";\n\t\t}\n\t\treturn {len: i+name.length, token: name, explicit: needsClef};\n\t};\n\n\t// This returns one of the legal bar lines\n\t// This is called alot and there is no obvious tokenable items, so this is broken apart.\n\tthis.getBarLine = function(line, i) {\n\t\tswitch (line[i]) {\n\t\t\tcase ']':\n\t\t\t\t++i;\n\t\t\t\tswitch (line[i]) {\n\t\t\t\t\tcase '|': return {len: 2, token: \"bar_thick_thin\"};\n\t\t\t\t\tcase '[':\n\t\t\t\t\t\t++i;\n\t\t\t\t\t\tif ((line[i] >= '1' && line[i] <= '9') || line[i] === '\"')\n\t\t\t\t\t\t\treturn {len: 2, token: \"bar_invisible\"};\n\t\t\t\t\t\treturn {len: 1, warn: \"Unknown bar symbol\"};\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn {len: 1, token: \"bar_invisible\"};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ':':\n\t\t\t\t++i;\n\t\t\t\tswitch (line[i]) {\n\t\t\t\t\tcase ':': return {len: 2, token: \"bar_dbl_repeat\"};\n\t\t\t\t\tcase '|':\t// :|\n\t\t\t\t\t\t++i;\n\t\t\t\t\t\tswitch (line[i]) {\n\t\t\t\t\t\t\tcase ']':\t// :|]\n\t\t\t\t\t\t\t\t++i;\n\t\t\t\t\t\t\t\tswitch (line[i]) {\n\t\t\t\t\t\t\t\t\tcase '|':\t// :|]|\n\t\t\t\t\t\t\t\t\t\t++i;\n\t\t\t\t\t\t\t\t\t\tif (line[i] === ':') return {len: 5, token: \"bar_dbl_repeat\"};\n\t\t\t\t\t\t\t\t\t\treturn {len: 3, token: \"bar_right_repeat\"};\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\treturn {len: 3, token: \"bar_right_repeat\"};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase '|':\t// :||\n\t\t\t\t\t\t\t\t++i;\n\t\t\t\t\t\t\t\tif (line[i] === ':') return {len: 4, token: \"bar_dbl_repeat\"};\n\t\t\t\t\t\t\t\treturn {len: 3, token: \"bar_right_repeat\"};\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\treturn {len: 2, token: \"bar_right_repeat\"};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn {len: 1, warn: \"Unknown bar symbol\"};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase '[':\t// [\n\t\t\t\t++i;\n\t\t\t\tif (line[i] === '|') {\t// [|\n\t\t\t\t\t++i;\n\t\t\t\t\tswitch (line[i]) {\n\t\t\t\t\t\tcase ':': return {len: 3, token: \"bar_left_repeat\"};\n\t\t\t\t\t\tcase ']': return {len: 3, token: \"bar_invisible\"};\n\t\t\t\t\t\tdefault: return {len: 2, token: \"bar_thick_thin\"};\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif ((line[i] >= '1' && line[i] <= '9') || line[i] === '\"')\n\t\t\t\t\t\treturn {len: 1, token: \"bar_invisible\"};\n\t\t\t\t\treturn {len: 0};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase '|':\t// |\n\t\t\t\t++i;\n\t\t\t\tswitch (line[i]) {\n\t\t\t\t\tcase ']': return {len: 2, token: \"bar_thin_thick\"};\n\t\t\t\t\tcase '|': // ||\n\t\t\t\t\t\t++i;\n\t\t\t\t\t\tif (line[i] === ':') return {len: 3, token: \"bar_left_repeat\"};\n\t\t\t\t\t\treturn {len: 2, token: \"bar_thin_thin\"};\n\t\t\t\t\tcase ':':\t// |:\n\t\t\t\t\t\tvar colons = 0;\n\t\t\t\t\t\twhile (line[i+colons] === ':') colons++;\n\t\t\t\t\t\treturn { len: 1+colons, token: \"bar_left_repeat\"};\n\t\t\t\t\tdefault: return {len: 1, token: \"bar_thin\"};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t\treturn {len: 0};\n\t};\n\n\t// this returns all the characters in the string that match one of the characters in the legalChars string\n\tthis.getTokenOf = function(str, legalChars) {\n\t\tfor (var i = 0; i < str.length; i++) {\n\t\t\tif (legalChars.indexOf(str[i]) < 0)\n\t\t\t\treturn {len: i, token: str.substring(0, i)};\n\t\t}\n\t\treturn {len: i, token: str};\n\t};\n\n\tthis.getToken = function(str, start, end) {\n\t\t// This returns the next set of chars that doesn't contain spaces\n\t\tvar i = start;\n\t\twhile (i < end && !this.isWhiteSpace(str[i]))\n\t\t\ti++;\n\t\treturn str.substring(start, i);\n\t};\n\n\t// This just sees if the next token is the word passed in, with possible leading spaces\n\tthis.isMatch = function(str, match) {\n\t\tvar i = this.skipWhiteSpace(str);\n\t\tif (finished(str, i))\n\t\t\treturn 0;\n\t\tif (parseCommon.startsWith(str.substring(i), match))\n\t\t\treturn i+match.length;\n\t\treturn 0;\n\t};\n\n\tthis.getPitchFromTokens = function(tokens) {\n\t\tvar ret = { };\n\t\tvar pitches = {A: 5, B: 6, C: 0, D: 1, E: 2, F: 3, G: 4, a: 12, b: 13, c: 7, d: 8, e: 9, f: 10, g: 11};\n\t\tret.position = pitches[tokens[0].token];\n\t\tif (ret.position === undefined)\n\t\t\treturn { warn: \"Pitch expected. Found: \" + tokens[0].token };\n\t\ttokens.shift();\n\t\twhile (tokens.length) {\n\t\t\tswitch (tokens[0].token) {\n\t\t\t\tcase ',': ret.position -= 7; tokens.shift(); break;\n\t\t\t\tcase '\\'': ret.position += 7; tokens.shift(); break;\n\t\t\t\tdefault: return ret;\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t};\n\n\tthis.getKeyAccidentals2 = function(tokens) {\n\t\tvar accs;\n\t\t// find and strip off all accidentals in the token list\n\t\twhile (tokens.length > 0) {\n\t\t\tvar acc;\n\t\t\tif (tokens[0].token === '^') {\n\t\t\t\tacc = 'sharp';\n\t\t\t\ttokens.shift();\n\t\t\t\tif (tokens.length === 0) return {accs: accs, warn: 'Expected note name after ' + acc};\n\t\t\t\tswitch (tokens[0].token) {\n\t\t\t\t\tcase '^': acc = 'dblsharp'; tokens.shift(); break;\n\t\t\t\t\tcase '/': acc = 'quartersharp'; tokens.shift(); break;\n\t\t\t\t}\n\t\t\t} else if (tokens[0].token === '=') {\n\t\t\t\tacc = 'natural';\n\t\t\t\ttokens.shift();\n\t\t\t} else if (tokens[0].token === '_') {\n\t\t\t\tacc = 'flat';\n\t\t\t\ttokens.shift();\n\t\t\t\tif (tokens.length === 0) return {accs: accs, warn: 'Expected note name after ' + acc};\n\t\t\t\tswitch (tokens[0].token) {\n\t\t\t\t\tcase '_': acc = 'dblflat'; tokens.shift(); break;\n\t\t\t\t\tcase '/': acc = 'quarterflat'; tokens.shift(); break;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Not an accidental, we'll assume that a later parse will recognize it.\n\t\t\t\treturn { accs: accs };\n\t\t\t}\n\t\t\tif (tokens.length === 0) return {accs: accs, warn: 'Expected note name after ' + acc};\n\t\t\tswitch (tokens[0].token[0])\n\t\t\t{\n\t\t\t\tcase 'a':\n\t\t\t\tcase 'b':\n\t\t\t\tcase 'c':\n\t\t\t\tcase 'd':\n\t\t\t\tcase 'e':\n\t\t\t\tcase 'f':\n\t\t\t\tcase 'g':\n\t\t\t\tcase 'A':\n\t\t\t\tcase 'B':\n\t\t\t\tcase 'C':\n\t\t\t\tcase 'D':\n\t\t\t\tcase 'E':\n\t\t\t\tcase 'F':\n\t\t\t\tcase 'G':\n\t\t\t\t\tif (accs === undefined)\n\t\t\t\t\t\taccs = [];\n\t\t\t\t\taccs.push({ acc: acc, note: tokens[0].token[0] });\n\t\t\t\t\tif (tokens[0].token.length === 1)\n\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\telse\n\t\t\t\t\t\ttokens[0].token = tokens[0].token.substring(1);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn {accs: accs, warn: 'Expected note name after ' + acc + ' Found: ' + tokens[0].token };\n\t\t\t}\n\t\t}\n\t\treturn { accs: accs };\n\t};\n\n\t// This gets an accidental marking for the key signature. It has the accidental then the pitch letter.\n\tthis.getKeyAccidental = function(str) {\n\t\tvar accTranslation = {\n\t\t\t'^': 'sharp',\n\t\t\t'^^': 'dblsharp',\n\t\t\t'=': 'natural',\n\t\t\t'_': 'flat',\n\t\t\t'__': 'dblflat',\n\t\t\t'_/': 'quarterflat',\n\t\t\t'^/': 'quartersharp'\n\t\t};\n\t\tvar i = this.skipWhiteSpace(str);\n\t\tif (finished(str, i))\n\t\t\treturn {len: 0};\n\t\tvar acc = null;\n\t\tswitch (str[i])\n\t\t{\n\t\t\tcase '^':\n\t\t\tcase '_':\n\t\t\tcase '=':\n\t\t\t\tacc = str[i];\n\t\t\t\tbreak;\n\t\t\tdefault:return {len: 0};\n\t\t}\n\t\ti++;\n\t\tif (finished(str, i))\n\t\t\treturn {len: 1, warn: 'Expected note name after accidental'};\n\t\tswitch (str[i])\n\t\t{\n\t\t\tcase 'a':\n\t\t\tcase 'b':\n\t\t\tcase 'c':\n\t\t\tcase 'd':\n\t\t\tcase 'e':\n\t\t\tcase 'f':\n\t\t\tcase 'g':\n\t\t\tcase 'A':\n\t\t\tcase 'B':\n\t\t\tcase 'C':\n\t\t\tcase 'D':\n\t\t\tcase 'E':\n\t\t\tcase 'F':\n\t\t\tcase 'G':\n\t\t\t\treturn {len: i+1, token: {acc: accTranslation[acc], note: str[i]}};\n\t\t\tcase '^':\n\t\t\tcase '_':\n\t\t\tcase '/':\n\t\t\t\tacc += str[i];\n\t\t\t\ti++;\n\t\t\t\tif (finished(str, i))\n\t\t\t\t\treturn {len: 2, warn: 'Expected note name after accidental'};\n\t\t\t\tswitch (str[i])\n\t\t\t\t{\n\t\t\t\t\tcase 'a':\n\t\t\t\t\tcase 'b':\n\t\t\t\t\tcase 'c':\n\t\t\t\t\tcase 'd':\n\t\t\t\t\tcase 'e':\n\t\t\t\t\tcase 'f':\n\t\t\t\t\tcase 'g':\n\t\t\t\t\tcase 'A':\n\t\t\t\t\tcase 'B':\n\t\t\t\t\tcase 'C':\n\t\t\t\t\tcase 'D':\n\t\t\t\t\tcase 'E':\n\t\t\t\t\tcase 'F':\n\t\t\t\t\tcase 'G':\n\t\t\t\t\t\treturn {len: i+1, token: {acc: accTranslation[acc], note: str[i]}};\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn {len: 2, warn: 'Expected note name after accidental'};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn {len: 1, warn: 'Expected note name after accidental'};\n\t\t}\n\t};\n\n\tthis.isWhiteSpace = function(ch) {\n\t\treturn ch === ' ' || ch === '\\t' || ch === '\\x12';\n\t};\n\n\tthis.getMeat = function(line, start, end) {\n\t\t// This removes any comments starting with '%' and trims the ends of the string so that there are no leading or trailing spaces.\n\t\t// it returns just the start and end characters that contain the meat.\n\t\tvar comment = line.indexOf('%', start);\n\t\tif (comment >= 0 && comment < end)\n\t\t\tend = comment;\n\t\twhile (start < end && (line[start] === ' ' || line[start] === '\\t' || line[start] === '\\x12'))\n\t\t\tstart++;\n\t\twhile (start < end && (line[end-1] === ' ' || line[end-1] === '\\t' || line[end-1] === '\\x12'))\n\t\t\tend--;\n\t\treturn {start: start, end: end};\n\t};\n\n\tvar isLetter = function(ch) {\n\t\treturn (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z');\n\t};\n\n\tvar isNumber = function(ch) {\n\t\treturn (ch >= '0' && ch <= '9');\n\t};\n\n\tthis.tokenize = function(line, start, end, alphaUntilWhiteSpace) {\n\t\t// this returns all the tokens inside the passed string. A token is a punctuation mark, a string of digits, a string of letters.\n\t\t// Quoted strings are one token.\n\t\t// If there is a minus sign next to a number, then it is included in the number.\n\t\t// If there is a period immediately after a number, with a number immediately following, then a float is returned.\n\t\t// The type of token is returned: quote, alpha, number, punct\n\t\t// If alphaUntilWhiteSpace is true, then the behavior of the alpha token changes.\n\n\t\tvar ret = this.getMeat(line, start, end);\n\t\tstart = ret.start;\n\t\tend = ret.end;\n\t\tvar tokens = [];\n\t\tvar i;\n\t\twhile (start < end) {\n\t\t\tif (line[start] === '\"') {\n\t\t\t\ti = start+1;\n\t\t\t\twhile (i < end && line[i] !== '\"') i++;\n\t\t\t\ttokens.push({ type: 'quote', token: line.substring(start+1, i), start: start+1, end: i});\n\t\t\t\ti++;\n\t\t\t} else if (isLetter(line[start])) {\n\t\t\t\ti = start+1;\n\t\t\t\tif (alphaUntilWhiteSpace)\n\t\t\t\t\twhile (i < end && !this.isWhiteSpace(line[i])) i++;\n\t\t\t\telse\n\t\t\t\t\twhile (i < end && isLetter(line[i])) i++;\n\t\t\t\ttokens.push({ type: 'alpha', token: line.substring(start, i), continueId: isNumber(line[i]), start: start, end: i});\n\t\t\t\tstart = i + 1;\n\t\t\t} else if (line[start] === '.' && isNumber(line[i+1])) {\n\t\t\t\ti = start+1;\n\t\t\t\tvar int2 = null;\n\t\t\t\tvar float2 = null;\n\t\t\t\twhile (i < end && isNumber(line[i])) i++;\n\n\t\t\t\tfloat2 = parseFloat(line.substring(start, i));\n\t\t\t\ttokens.push({ type: 'number', token: line.substring(start, i), intt: int2, floatt: float2, continueId: isLetter(line[i]), start: start, end: i});\n\t\t\t\tstart = i + 1;\n\t\t\t} else if (isNumber(line[start]) || (line[start] === '-' && isNumber(line[i+1]))) {\n\t\t\t\ti = start+1;\n\t\t\t\tvar intt = null;\n\t\t\t\tvar floatt = null;\n\t\t\t\twhile (i < end && isNumber(line[i])) i++;\n\t\t\t\tif (line[i] === '.' && isNumber(line[i+1])) {\n\t\t\t\t\ti++;\n\t\t\t\t\twhile (i < end && isNumber(line[i])) i++;\n\t\t\t\t} else\n\t\t\t\t\tintt = parseInt(line.substring(start, i));\n\n\t\t\t\tfloatt = parseFloat(line.substring(start, i));\n\t\t\t\ttokens.push({ type: 'number', token: line.substring(start, i), intt: intt, floatt: floatt, continueId: isLetter(line[i]), start: start, end: i});\n\t\t\t\tstart = i + 1;\n\t\t\t} else if (line[start] === ' ' || line[start] === '\\t') {\n\t\t\t\ti = start+1;\n\t\t\t} else {\n\t\t\t\ttokens.push({ type: 'punct', token: line[start], start: start, end: start+1});\n\t\t\t\ti = start+1;\n\t\t\t}\n\t\t\tstart = i;\n\t\t}\n\t\treturn tokens;\n\t};\n\n\tthis.getVoiceToken = function(line, start, end) {\n\t\t// This finds the next token. A token is delimited by a space or an equal sign. If it starts with a quote, then the portion between the quotes is returned.\n\t\tvar i = start;\n\t\twhile (i < end && this.isWhiteSpace(line[i]) || line[i] === '=')\n\t\t\ti++;\n\n\t\tif (line[i] === '\"') {\n\t\t\tvar close = line.indexOf('\"', i+1);\n\t\t\tif (close === -1 || close >= end)\n\t\t\t\treturn {len: 1, err: \"Missing close quote\"};\n\t\t\treturn {len: close-start+1, token: this.translateString(line.substring(i+1, close))};\n\t\t} else {\n\t\t\tvar ii = i;\n\t\t\twhile (ii < end && !this.isWhiteSpace(line[ii]) && line[ii] !== '=')\n\t\t\t\tii++;\n\t\t\treturn {len: ii-start+1, token: line.substring(i, ii)};\n\t\t}\n\t};\n\n\tvar charMap = {\n\t\t\"`a\": 'à', \"'a\": \"á\", \"^a\": \"â\", \"~a\": \"ã\", \"\\\"a\": \"ä\", \"oa\": \"å\", \"aa\": \"å\", \"=a\": \"ā\", \"ua\": \"ă\", \";a\": \"ą\",\n\t\t\"`e\": 'è', \"'e\": \"é\", \"^e\": \"ê\", \"\\\"e\": \"ë\", \"=e\": \"ē\", \"ue\": \"ĕ\", \";e\": \"ę\", \".e\": \"ė\",\n\t\t\"`i\": 'ì', \"'i\": \"í\", \"^i\": \"î\", \"\\\"i\": \"ï\", \"=i\": \"ī\", \"ui\": \"ĭ\", \";i\": \"į\",\n\t\t\"`o\": 'ò', \"'o\": \"ó\", \"^o\": \"ô\", \"~o\": \"õ\", \"\\\"o\": \"ö\", \"=o\": \"ō\", \"uo\": \"ŏ\", \"/o\": \"ø\",\n\t\t\"`u\": 'ù', \"'u\": \"ú\", \"^u\": \"û\", \"~u\": \"ũ\", \"\\\"u\": \"ü\", \"ou\": \"ů\", \"=u\": \"ū\", \"uu\": \"ŭ\", \";u\": \"ų\",\n\t\t\"`A\": 'À', \"'A\": \"Á\", \"^A\": \"Â\", \"~A\": \"Ã\", \"\\\"A\": \"Ä\", \"oA\": \"Å\", \"AA\": \"Å\", \"=A\": \"Ā\", \"uA\": \"Ă\", \";A\": \"Ą\",\n\t\t\"`E\": 'È', \"'E\": \"É\", \"^E\": \"Ê\", \"\\\"E\": \"Ë\", \"=E\": \"Ē\", \"uE\": \"Ĕ\", \";E\": \"Ę\", \".E\": \"Ė\",\n\t\t\"`I\": 'Ì', \"'I\": \"Í\", \"^I\": \"Î\", \"~I\": \"Ĩ\", \"\\\"I\": \"Ï\", \"=I\": \"Ī\", \"uI\": \"Ĭ\", \";I\": \"Į\", \".I\": \"İ\",\n\t\t\"`O\": 'Ò', \"'O\": \"Ó\", \"^O\": \"Ô\", \"~O\": \"Õ\", \"\\\"O\": \"Ö\", \"=O\": \"Ō\", \"uO\": \"Ŏ\", \"/O\": \"Ø\",\n\t\t\"`U\": 'Ù', \"'U\": \"Ú\", \"^U\": \"Û\", \"~U\": \"Ũ\", \"\\\"U\": \"Ü\", \"oU\": \"Ů\", \"=U\": \"Ū\", \"uU\": \"Ŭ\", \";U\": \"Ų\",\n\t\t\"ae\": \"æ\", \"AE\": \"Æ\", \"oe\": \"œ\", \"OE\": \"Œ\", \"ss\": \"ß\",\n\t\t\"'c\": \"ć\", \"^c\": \"ĉ\", \"uc\": \"č\", \"cc\": \"ç\", \".c\": \"ċ\", \"cC\": \"Ç\", \"'C\": \"Ć\", \"^C\": \"Ĉ\", \"uC\": \"Č\", \".C\": \"Ċ\",\n\t\t\"~N\": \"Ñ\", \"~n\": \"ñ\",\n\t\t\"=s\": \"š\", \"vs\": \"š\",\n\t\t\"DH\": \"Ð\", \"dh\": \"ð\",\n\t\t\"HO\": \"Ő\", \"Ho\": \"ő\", \"HU\": \"Ű\", \"Hu\": \"ű\",\n\t\t\"'Y\": \"Ý\", \"'y\": \"ý\", \"^Y\": \"Ŷ\", \"^y\": \"ŷ\", \"\\\"Y\": \"Ÿ\", \"\\\"y\": \"ÿ\",\n\t\t\"vS\": \"Š\", \"vZ\": \"Ž\", \"vz\": 'ž'\n\n// More chars: IJ ij Ď ď Đ đ Ĝ ĝ Ğ ğ Ġ ġ Ģ ģ Ĥ ĥ Ħ ħ Ĵ ĵ Ķ ķ ĸ Ĺ ĺ Ļ ļ Ľ ľ Ŀ ŀ Ł ł Ń ń Ņ ņ Ň ň ʼn Ŋ ŋ Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ŝ ŝ Ş ş Š Ţ ţ Ť ť Ŧ ŧ Ŵ ŵ Ź ź Ż ż Ž\n\t};\n\tvar charMap1 = {\n\t\t\"#\": \"♯\",\n\t\t\"b\": \"♭\",\n\t\t\"=\": \"♮\"\n\t};\n\tvar charMap2 = {\n\t\t\"201\": \"♯\",\n\t\t\"202\": \"♭\",\n\t\t\"203\": \"♮\",\n\t\t\"241\": \"¡\",\n\t\t\"242\": \"¢\", \"252\": \"a\", \"262\": \"2\", \"272\": \"o\", \"302\": \"Â\", \"312\": \"Ê\", \"322\": \"Ò\", \"332\": \"Ú\", \"342\": \"â\", \"352\": \"ê\", \"362\": \"ò\", \"372\": \"ú\",\n\t\t\"243\": \"£\", \"253\": \"«\", \"263\": \"3\", \"273\": \"»\", \"303\": \"Ã\", \"313\": \"Ë\", \"323\": \"Ó\", \"333\": \"Û\", \"343\": \"ã\", \"353\": \"ë\", \"363\": \"ó\", \"373\": \"û\",\n\t\t\"244\": \"¤\", \"254\": \"¬\", \"264\": \" ́\", \"274\": \"1⁄4\", \"304\": \"Ä\", \"314\": \"Ì\", \"324\": \"Ô\", \"334\": \"Ü\", \"344\": \"ä\", \"354\": \"ì\", \"364\": \"ô\", \"374\": \"ü\",\n\t\t\"245\": \"¥\", \"255\": \"-\", \"265\": \"μ\", \"275\": \"1⁄2\", \"305\": \"Å\", \"315\": \"Í\", \"325\": \"Õ\", \"335\": \"Ý\", \"345\": \"å\", \"355\": \"í\", \"365\": \"õ\", \"375\": \"ý\",\n\t\t\"246\": \"¦\", \"256\": \"®\", \"266\": \"¶\", \"276\": \"3⁄4\", \"306\": \"Æ\", \"316\": \"Î\", \"326\": \"Ö\", \"336\": \"Þ\", \"346\": \"æ\", \"356\": \"î\", \"366\": \"ö\", \"376\": \"þ\",\n\t\t\"247\": \"§\", \"257\": \" ̄\", \"267\": \"·\", \"277\": \"¿\", \"307\": \"Ç\", \"317\": \"Ï\", \"327\": \"×\", \"337\": \"ß\", \"347\": \"ç\", \"357\": \"ï\", \"367\": \"÷\", \"377\": \"ÿ\",\n\t\t\"250\": \" ̈\", \"260\": \"°\", \"270\": \" ̧\", \"300\": \"À\", \"310\": \"È\", \"320\": \"Ð\", \"330\": \"Ø\", \"340\": \"à\", \"350\": \"è\", \"360\": \"ð\", \"370\": \"ø\",\n\t\t\"251\": \"©\", \"261\": \"±\", \"271\": \"1\", \"301\": \"Á\", \"311\": \"É\", \"321\": \"Ñ\", \"331\": \"Ù\", \"341\": \"á\", \"351\": \"é\", \"361\": \"ñ\", \"371\": \"ù\" };\n\tthis.translateString = function(str) {\n\t\tvar arr = str.split('\\\\');\n\t\tif (arr.length === 1) return str;\n\t\tvar out = null;\n\t\tarr.forEach(function(s) {\n\t\t\tif (out === null)\n\t\t\t\tout = s;\n\t\t\telse {\n\t\t\t\tvar c = charMap[s.substring(0, 2)];\n\t\t\t\tif (c !== undefined)\n\t\t\t\t\tout += c + s.substring(2);\n\t\t\t\telse {\n\t\t\t\t\tc = charMap2[s.substring(0, 3)];\n\t\t\t\t\tif (c !== undefined)\n\t\t\t\t\t\tout += c + s.substring(3);\n\t\t\t\t\telse {\n\t\t\t\t\t\tc = charMap1[s.substring(0, 1)];\n\t\t\t\t\t\tif (c !== undefined)\n\t\t\t\t\t\t\tout += c + s.substring(1);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tout += \"\\\\\" + s;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn out;\n\t};\n\tthis.getNumber = function(line, index) {\n\t\tvar num = 0;\n\t\twhile (index < line.length) {\n\t\t\tswitch (line[index]) {\n\t\t\t\tcase '0':num = num*10;index++;break;\n\t\t\t\tcase '1':num = num*10+1;index++;break;\n\t\t\t\tcase '2':num = num*10+2;index++;break;\n\t\t\t\tcase '3':num = num*10+3;index++;break;\n\t\t\t\tcase '4':num = num*10+4;index++;break;\n\t\t\t\tcase '5':num = num*10+5;index++;break;\n\t\t\t\tcase '6':num = num*10+6;index++;break;\n\t\t\t\tcase '7':num = num*10+7;index++;break;\n\t\t\t\tcase '8':num = num*10+8;index++;break;\n\t\t\t\tcase '9':num = num*10+9;index++;break;\n\t\t\t\tdefault:\n\t\t\t\t\treturn {num: num, index: index};\n\t\t\t}\n\t\t}\n\t\treturn {num: num, index: index};\n\t};\n\n\tthis.getFraction = function(line, index) {\n\t\tvar num = 1;\n\t\tvar den = 1;\n\t\tif (line[index] !== '/') {\n\t\t\tvar ret = this.getNumber(line, index);\n\t\t\tnum = ret.num;\n\t\t\tindex = ret.index;\n\t\t}\n\t\tif (line[index] === '/') {\n\t\t\tindex++;\n\t\t\tif (line[index] === '/') {\n\t\t\t\tvar div = 0.5;\n\t\t\t\twhile (line[index++] === '/')\n\t\t\t\t\tdiv = div /2;\n\t\t\t\treturn {value: num * div, index: index-1};\n\t\t\t} else {\n\t\t\t\tvar iSave = index;\n\t\t\t\tvar ret2 = this.getNumber(line, index);\n\t\t\t\tif (ret2.num === 0 && iSave === index)\t// If we didn't use any characters, it is an implied 2\n\t\t\t\t\tret2.num = 2;\n\t\t\t\tif (ret2.num !== 0)\n\t\t\t\t\tden = ret2.num;\n\t\t\t\tindex = ret2.index;\n\t\t\t}\n\t\t}\n\n\t\treturn {value: num/den, index: index};\n\t};\n\n//\n// MAE 10 Jan 2023 - For better handling of tunes that have tune numbers in front of them.\n//\n// Previous version would take:\n// 21. Woman of the House, The\n// and return:\n// The 21. Woman of the House\n// \n// This fix results in:\n// 21. The Woman of the House\n//\n// Also added additional checks and handlers for lower case \", the\" and \", a\" since I found several tune collections with those tune name constructs\n//\n// Find an optional title number at the start of a tune title\nfunction getTitleNumber(str){\n\n const regex = /^(\\d+)\\./;\n\n // Use the exec method to search for the pattern in the string\n const match = regex.exec(str);\n\n // Check if a match is found\n if (match) {\n\n\t// The matched number is captured in the first group (index 1)\n\tconst foundNumber = match[1];\n\treturn foundNumber;\n\n } else {\n\n\t// Return null if no match is found\n\treturn null;\n\t\n }\n\n}\n\nvar thePatterns = [\n\t{ match: /,\\s*[Tt]he$/, replace: \"The \" },\n\t{ match: /,\\s*[Aa]$/, replace: \"A \" },\n\t{ match: /,\\s*[Aa]n$/, replace: \"An \" },\n]\n\nthis.theReverser = function (str) {\n\n for (var i = 0; i < thePatterns.length; i++) {\n\t\tvar thisPattern = thePatterns[i]\n\t\tvar match = str.match(thisPattern.match)\n\t\tif (match) {\n\t\t\tvar theTitleNumber = getTitleNumber(str);\n\t\t\tif (theTitleNumber){\n\t\t\n\t\t\t //console.log(\"theReverser The titlenumber:\"+theTitleNumber); \n\t\t\n\t\t\t str = str.replace(theTitleNumber+\".\",\"\");\n\t\t\t str = str.trim();\n\t\t\t}\n\t\t\tvar len = match[0].length\n\t\t\tvar result = thisPattern.replace + str.substring(0, str.length - len);\n\t\t\n\t\t\tif (theTitleNumber){\n\t\t\t result = theTitleNumber+\". \"+result;\n\t\t\t}\n\t\t\t\n\t\t\treturn result;\n\n\t\t}\n\t}\n\n return str;\n\n };\n\n\tthis.stripComment = function(str) {\n\t\tvar i = str.indexOf('%');\n\t\tif (i >= 0)\n\t\t\treturn parseCommon.strip(str.substring(0, i));\n\t\treturn parseCommon.strip(str);\n\t};\n\n\tthis.getInt = function(str) {\n\t\t// This parses the beginning of the string for a number and returns { value: num, digits: num }\n\t\t// If digits is 0, then the string didn't point to a number.\n\t\tvar x = parseInt(str);\n\t\tif (isNaN(x))\n\t\t\treturn {digits: 0};\n\t\tvar s = \"\" + x;\n\t\tvar i = str.indexOf(s);\t// This is to account for leading spaces\n\t\treturn {value: x, digits: i+s.length};\n\t};\n\n\tthis.getFloat = function(str) {\n\t\t// This parses the beginning of the string for a number and returns { value: num, digits: num }\n\t\t// If digits is 0, then the string didn't point to a number.\n\t\tvar x = parseFloat(str);\n\t\tif (isNaN(x))\n\t\t\treturn {digits: 0};\n\t\tvar s = \"\" + x;\n\t\tvar i = str.indexOf(s);\t// This is to account for leading spaces\n\t\treturn {value: x, digits: i+s.length};\n\t};\n\n\tthis.getMeasurement = function(tokens) {\n\t\tif (tokens.length === 0) return { used: 0 };\n\t\tvar used = 1;\n\t\tvar num = '';\n\t\tif (tokens[0].token === '-') {\n\t\t\ttokens.shift();\n\t\t\tnum = '-';\n\t\t\tused++;\n\t\t}\n\t\telse if (tokens[0].type !== 'number') return { used: 0 };\n\t\tnum += tokens.shift().token;\n\t\tif (tokens.length === 0) return { used: 1, value: parseInt(num) };\n\t\tvar x = tokens.shift();\n\t\tif (x.token === '.') {\n\t\t\tused++;\n\t\t\tif (tokens.length === 0) return { used: used, value: parseInt(num) };\n\t\t\tif (tokens[0].type === 'number') {\n\t\t\t\tx = tokens.shift();\n\t\t\t\tnum = num + '.' + x.token;\n\t\t\t\tused++;\n\t\t\t\tif (tokens.length === 0) return { used: used, value: parseFloat(num) };\n\t\t\t}\n\t\t\tx = tokens.shift();\n\t\t}\n\t\tswitch (x.token) {\n\t\t\tcase 'pt': return { used: used+1, value: parseFloat(num) };\n\t\t\tcase 'px': return { used: used+1, value: parseFloat(num) };\n\t\t\tcase 'cm': return { used: used+1, value: parseFloat(num)/2.54*72 };\n\t\t\tcase 'in': return { used: used+1, value: parseFloat(num)*72 };\n\t\t\tdefault: tokens.unshift(x); return { used: used, value: parseFloat(num) };\n\t\t}\n\t};\n\tvar substInChord = function(str) {\n\t\tstr = str.replace(/\\\\n/g, \"\\n\");\n\t\tstr = str.replace(/\\\\\"/g, '\"');\n\t\treturn str;\n\t};\n\tthis.getBrackettedSubstring = function(line, i, maxErrorChars, _matchChar)\n\t{\n\t\t// This extracts the sub string by looking at the first character and searching for that\n\t\t// character later in the line (or search for the optional _matchChar).\n\t\t// For instance, if the first character is a quote it will look for\n\t\t// the end quote. If the end of the line is reached, then only up to the default number\n\t\t// of characters are returned, so that a missing end quote won't eat up the entire line.\n\t\t// It returns the substring and the number of characters consumed.\n\t\t// The number of characters consumed is normally two more than the size of the substring,\n\t\t// but in the error case it might not be.\n\t\tvar matchChar = _matchChar || line[i];\n\t\tvar pos = i+1;\n\t\tvar esc = false;\n\t\twhile ((pos < line.length) && (esc || line[pos] !== matchChar)) {\n\t\t\tesc = line[pos] === '\\\\';\n\t\t\t++pos;\n\t\t}\n\t\tif (line[pos] === matchChar)\n\t\t\treturn [pos-i+1,substInChord(line.substring(i+1, pos)), true];\n\t\telse\t// we hit the end of line, so we'll just pick an arbitrary num of chars so the line doesn't disappear.\n\t\t{\n\t\t\tpos = i+maxErrorChars;\n\t\t\tif (pos > line.length-1)\n\t\t\t\tpos = line.length-1;\n\t\t\treturn [pos-i+1, substInChord(line.substring(i+1, pos)), false];\n\t\t}\n\t};\n};\n\nTokenizer.prototype.peekLine = function() {\n\treturn this.lines[this.lineIndex]\n}\n\nTokenizer.prototype.nextLine = function() {\n\tif (this.lineIndex > 0) {\n\t\tthis.multilineVars.iChar += this.lines[this.lineIndex-1].length + 1;\n\t}\n\tif (this.lineIndex < this.lines.length) {\n\t\tvar result = this.lines[this.lineIndex]\n\t\tthis.lineIndex++\n\t\treturn result\n\t}\n\treturn null\n}\n\nmodule.exports = Tokenizer;\n","// abc_transpose.js: Handles the automatic transposition of key signatures, chord symbols, and notes.\n\nvar allNotes = require(\"./all-notes\");\nvar transposeChordName = require(\"../parse/transpose-chord\")\nvar keyAccidentals = require('../const/key-accidentals');\nvar transpose = {};\n\nvar keyIndex = {\n\t'C': 0,\n\t'C#': 1,\n\t'Db': 1,\n\t'D': 2,\n\t'D#': 3,\n\t'Eb': 3,\n\t'E': 4,\n\t'F': 5,\n\t'F#': 6,\n\t'Gb': 6,\n\t'G': 7,\n\t'G#': 8,\n\t'Ab': 8,\n\t'A': 9,\n\t'A#': 10,\n\t'Bb': 10,\n\t'B': 11\n};\nvar newKey = ['C', 'Db', 'D', 'Eb', 'E', 'F', 'F#', 'G', 'Ab', 'A', 'Bb', 'B'];\nvar newKeyMinor = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'Bb', 'B'];\n\ntranspose.keySignature = function(multilineVars, keyName, root, acc, localTranspose) {\n\tif (multilineVars.clef.type === \"perc\" || multilineVars.clef.type === \"none\")\n\t\treturn { accidentals: keyAccidentals(keyName), root: root, acc: acc };\n\tif (!localTranspose) localTranspose = 0;\n\tmultilineVars.localTransposeVerticalMovement = 0;\n\tmultilineVars.localTransposePreferFlats = false;\n\tvar k = keyAccidentals(keyName);\n\tif (!k) return multilineVars.key; // If the key isn't in the list, it is non-standard. We won't attempt to transpose it.\n\tmultilineVars.localTranspose = (multilineVars.globalTranspose ? multilineVars.globalTranspose : 0) + localTranspose;\n\n\tif (!multilineVars.localTranspose)\n\t\treturn { accidentals: k, root: root, acc: acc };\n\tmultilineVars.globalTransposeOrigKeySig = k;\n\tif (multilineVars.localTranspose % 12 === 0) {\n\t\tmultilineVars.localTransposeVerticalMovement = (multilineVars.localTranspose / 12) * 7;\n\t\treturn { accidentals: k, root: root, acc: acc };\n\t}\n\n\tvar baseKey = keyName[0];\n\tif (keyName[1] === 'b' || keyName[1] === '#') {\n\t\tbaseKey += keyName[1];\n\t\tkeyName = keyName.substr(2);\n\t} else\n\t\tkeyName = keyName.substr(1);\n\tvar thisKeyIndex = keyIndex[baseKey]\n\tvar recognized = thisKeyIndex !== undefined\n\tif (!recognized) {\n\t\t// Either the key sig is \"none\" or we don't recognize it. Either way we don't change it, and we assume key of C for the purposes of this calculation.\n\t\tthisKeyIndex = 0\n\t\tbaseKey = \"C\"\n\t\tkeyName = \"\"\n\t}\n\tvar index = thisKeyIndex + multilineVars.localTranspose;\n\twhile (index < 0) index += 12;\n\tif (index > 11) index = index % 12;\n\tvar newKeyName = (keyName[0] === 'm' ? newKeyMinor[index] : newKey[index]);\n\tvar transposedKey = newKeyName + keyName;\n\tvar newKeySig = keyAccidentals(transposedKey);\n\tif (newKeySig.length > 0 && newKeySig[0].acc === 'flat')\n\t\tmultilineVars.localTransposePreferFlats = true;\n\tvar distance = transposedKey.charCodeAt(0) - baseKey.charCodeAt(0);\n\tif (multilineVars.localTranspose > 0) {\n\t\tif (distance < 0)\n\t\t\tdistance += 7;\n\t\telse if (distance === 0) {\n\t\t\t// There's a funny thing that happens when the key changes only an accidental's distance, for instance, from Ab to A.\n\t\t\t// If the distance is positive (we are raising pitch), and the change is higher (that is, Ab -> A), then raise an octave.\n\t\t\t// This test is easier because we know the keys are not equal (or we wouldn't get this far), so if the base key is a flat key, then\n\t\t\t// the transposed key must be higher. Likewise, if the transposed key is sharp, then the base key must be lower. And one\n\t\t\t// of those two things must be true because they are not both natural.\n\t\t\tif (baseKey[1] === '#' || transposedKey[1] === 'b')\n\t\t\t\tdistance += 7;\n\t\t}\n\t} else if (multilineVars.localTranspose < 0) {\n\t\tif (distance > 0)\n\t\t\tdistance -= 7;\n\t\telse if (distance === 0) {\n\t\t\t// There's a funny thing that happens when the key changes only an accidental's distance, for instance, from Ab to A.\n\t\t\t// If the distance is negative (we are dropping pitch), and the change is lower (that is, A -> Ab), then drop an octave.\n\t\t\tif (baseKey[1] === 'b' || transposedKey[1] === '#')\n\t\t\t\tdistance -= 7;\n\t\t}\n\t}\n\n\tif (multilineVars.localTranspose > 0)\n\t\tmultilineVars.localTransposeVerticalMovement = distance + Math.floor(multilineVars.localTranspose / 12) * 7;\n\telse\n\t\tmultilineVars.localTransposeVerticalMovement = distance + Math.ceil(multilineVars.localTranspose / 12) * 7;\n\tif (recognized)\n\t\treturn { accidentals: newKeySig, root: newKeyName[0], acc: newKeyName.length > 1 ? newKeyName[1] : \"\" };\n\telse\n\t\treturn { accidentals: [], root: root, acc: acc };\n};\n\ntranspose.chordName = function(multilineVars, chord) {\n\treturn transposeChordName(chord, multilineVars.localTranspose, multilineVars.localTransposePreferFlats, multilineVars.freegchord)\n};\n\nvar pitchToLetter = [ 'c', 'd', 'e', 'f', 'g', 'a', 'b' ];\nfunction accidentalChange(origPitch, newPitch, accidental, origKeySig, newKeySig) {\n\tvar origPitchLetter = pitchToLetter[(origPitch + 49) % 7]; // Make sure it is a positive pitch before normalizing.\n\tvar origAccidental = 0;\n\tfor (var i = 0; i < origKeySig.length; i++) {\n\t\tif (origKeySig[i].note.toLowerCase() === origPitchLetter)\n\t\t\torigAccidental = accidentals[origKeySig[i].acc];\n\t}\n\n\tvar currentAccidental = accidentals[accidental];\n\tvar delta = currentAccidental - origAccidental;\n\n\tvar newPitchLetter = pitchToLetter[(newPitch + 49) % 7]; // Make sure it is a positive pitch before normalizing.\n\tvar newAccidental = 0;\n\tfor (var j = 0; j < newKeySig.accidentals.length; j++) {\n\t\tif (newKeySig.accidentals[j].note.toLowerCase() === newPitchLetter)\n\t\t\tnewAccidental = accidentals[newKeySig.accidentals[j].acc];\n\t}\n\tvar calcAccidental = delta + newAccidental;\n\tif (calcAccidental < -2) {\n\t\tnewPitch--;\n\t\tcalcAccidental += (newPitchLetter === 'c' || newPitchLetter === 'f') ? 1 : 2;\n\t}\n\tif (calcAccidental > 2) {\n\t\tnewPitch++;\n\t\tcalcAccidental -= (newPitchLetter === 'b' || newPitchLetter === 'e') ? 1 : 2;\n\t}\n\treturn [newPitch, calcAccidental];\n}\n\nvar accidentals = {\n\tdblflat: -2,\n\tflat: -1,\n\tnatural: 0,\n\tsharp: 1,\n\tdblsharp: 2\n};\nvar accidentals2 = {\n\t\"-2\": \"dblflat\",\n\t\"-1\": \"flat\",\n\t\"0\": \"natural\",\n\t\"1\": \"sharp\",\n\t\"2\": \"dblsharp\"\n};\nvar accidentals3 = {\n\t\"-2\": \"__\",\n\t\"-1\": \"_\",\n\t\"0\": \"=\",\n\t\"1\": \"^\",\n\t\"2\": \"^^\"\n};\n//var count = 0\ntranspose.note = function(multilineVars, el) {\n\t// the \"el\" that is passed in has el.name, el.accidental, and el.pitch. \"pitch\" is the vertical position (0=middle C)\n\t// localTranspose is the number of half steps\n\t// localTransposeVerticalMovement is the vertical distance to move.\n\t//console.log(count++,multilineVars.localTranspose, el)\n\tif (!multilineVars.localTranspose || multilineVars.clef.type === \"perc\")\n\t\treturn;\n\tvar origPitch = el.pitch;\n\tif (multilineVars.localTransposeVerticalMovement) {\n\t\tel.pitch = el.pitch + multilineVars.localTransposeVerticalMovement;\n\t\tif (el.name) {\n\t\t\tvar actual = el.accidental ? el.name.substring(1) : el.name\n\t\t\tvar acc = el.accidental ? el.name[0] : ''\n\t\t\tvar p = allNotes.pitchIndex(actual)\n\t\t\tel.name = acc + allNotes.noteName(p+multilineVars.localTransposeVerticalMovement)\n\t\t}\n\t}\n\n\tif (el.accidental) {\n\t\tvar ret = accidentalChange(origPitch, el.pitch, el.accidental, multilineVars.globalTransposeOrigKeySig, multilineVars.targetKey);\n\t\tel.pitch = ret[0];\n\t\tel.accidental = accidentals2[ret[1]];\n\t\tif (el.name) {\n\t\t\tel.name = accidentals3[ret[1]] + el.name.replace(/[_^=]/g,'');\n\t\t}\n\t}\n\n};\n\nmodule.exports = transpose;\n","var allNotes = {};\n\nconst allPitches = [\n\t'C,,,', 'D,,,', 'E,,,', 'F,,,', 'G,,,', 'A,,,', 'B,,,',\n\t'C,,', 'D,,', 'E,,', 'F,,', 'G,,', 'A,,', 'B,,',\n\t'C,', 'D,', 'E,', 'F,', 'G,', 'A,', 'B,',\n\t'C', 'D', 'E', 'F', 'G', 'A', 'B',\n\t'c', 'd', 'e', 'f', 'g', 'a', 'b',\n\t\"c'\", \"d'\", \"e'\", \"f'\", \"g'\", \"a'\", \"b'\",\n\t\"c''\", \"d''\", \"e''\", \"f''\", \"g''\", \"a''\", \"b''\",\n\t\"c'''\", \"d'''\", \"e'''\", \"f'''\", \"g'''\", \"a'''\", \"b'''\",\n];\n\nallNotes.pitchIndex = function(noteName) {\n\treturn allPitches.indexOf(noteName)\n}\n\nallNotes.noteName = function(pitchIndex) {\n\treturn allPitches[pitchIndex]\n}\n\nmodule.exports = allNotes;\n","var sharpChords = ['C', 'C♯', 'D', \"D♯\", 'E', 'F', \"F♯\", 'G', 'G♯', 'A', 'A♯', 'B'];\nvar flatChords = ['C', 'D♭', 'D', 'E♭', 'E', 'F', 'G♭', 'G', 'A♭', 'A', 'B♭', 'B'];\nvar sharpChordsFree = ['C', 'C#', 'D', \"D#\", 'E', 'F', \"F#\", 'G', 'G#', 'A', 'A#', 'B'];\nvar flatChordsFree = ['C', 'Db', 'D', 'Eb', 'E', 'F', 'Gb', 'G', 'Ab', 'A', 'Bb', 'B'];\n\nfunction transposeChordName(chord, steps, preferFlats, freeGCchord) {\n\tif (!steps || (steps % 12 === 0)) // The chords are the same if it is an exact octave change.\n\t\treturn chord;\n\n\t// There are two things in the chord that might need to be transposed:\n\t// The chord will start with a letter from A-G, and might have one accidental after it.\n\t// That accidental might be an actual sharp or flat char, or it might be a pound sign or lower case \"b\".\n\t// Then there is a bunch of stuff that isn't transposed and should just be copied. That is stuff like \"7\" and more complicated chords.\n\t// But there is one other exception: right after a slash there will be a bass note and possibly an accidental. That should also be transposed.\n\n\twhile (steps < 0) steps += 12;\n\tif (steps > 11) steps = steps % 12;\n\n\t// (chord name w/accidental) (a bunch of stuff) (/) (bass note) (anything else)\n\tvar match = chord.match(/^([A-G][b#♭♯]?)([^\\/]+)?\\/?([A-G][b#♭♯]?)?(.+)?/)\n\tif (!match)\n\t\treturn chord; // We don't recognize the format of the chord, so skip it.\n\tvar name = match[1]\n\tvar extra1 = match[2]\n\tvar bass = match[3]\n\tvar extra2 = match[4]\n\tvar index = sharpChords.indexOf(name)\n\tif (index < 0)\n\t\tindex = flatChords.indexOf(name)\n\tif (index < 0)\n\t\tindex = sharpChordsFree.indexOf(name)\n\tif (index < 0)\n\t\tindex = flatChordsFree.indexOf(name)\n\tif (index < 0)\n\t\treturn chord; // This should never happen, but if we can't find the chord just bail.\t\n\n\tindex += steps\n\tindex = index % 12\n\n\tif (preferFlats) {\n\t\tif (freeGCchord) chord = flatChordsFree[index]\n\t\telse chord = flatChords[index]\n\t} else {\n\t\tif (freeGCchord) chord = sharpChordsFree[index]\n\t\telse chord = sharpChords[index]\n\t}\n\n\tif (extra1)\n\t\tchord += extra1\n\n\tif (bass) {\n\t\tvar index = sharpChords.indexOf(bass)\n\t\tif (index < 0)\n\t\t\tindex = flatChords.indexOf(bass)\n\t\tif (index < 0)\n\t\t\tindex = sharpChordsFree.indexOf(bass)\n\t\tif (index < 0)\n\t\t\tindex = flatChordsFree.indexOf(bass)\n\t\tchord += '/'\n\t\tif (index >= 0) {\n\t\t\tindex += steps\n\t\t\tindex = index % 12\n\t\t\tif (preferFlats) {\n\t\t\t\tif (freeGCchord) chord += flatChordsFree[index]\n\t\t\t\telse chord += flatChords[index]\n\t\t\t} else {\n\t\t\t\tif (freeGCchord) chord += sharpChordsFree[index]\n\t\t\t\telse chord += sharpChords[index]\n\t\t\t}\n\t\t} else\n\t\t\tchord += bass; // Don't know what to do so do nothing\n\t}\n\n\tif (extra2)\n\t\tchord += extra2\n\n\treturn chord;\n}\n\nmodule.exports = transposeChordName","var parseKeyVoice = require('../parse/abc_parse_key_voice');\nvar parseCommon = require('../parse/abc_common');\nvar parseDirective = require('./abc_parse_directive');\n\nvar TuneBuilder = function(tune) {\n\tvar self = this;\n\n\tthis.setVisualTranspose = function(visualTranspose) {\n\t\tif (visualTranspose)\n\t\t\ttune.visualTranspose = visualTranspose;\n\t};\n\n\tthis.resolveOverlays = function() {\n\t\tvar madeChanges = false;\n\t\tvar durationsPerLines = [];\n\t\tfor (var i = 0; i < tune.lines.length; i++) {\n\t\t\tvar line = tune.lines[i];\n\t\t\tif (line.staff) {\n\t\t\t\tfor (var j = 0; j < line.staff.length; j++) {\n\t\t\t\t\tvar staff = line.staff[j];\n\t\t\t\t\tvar overlayVoice = [];\n\t\t\t\t\tfor (var k = 0; k < staff.voices.length; k++) {\n\t\t\t\t\t\tvar voice = staff.voices[k];\n\t\t\t\t\t\toverlayVoice.push({ hasOverlay: false, voice: [], snip: []});\n\t\t\t\t\t\tdurationsPerLines[i] = 0;\n\t\t\t\t\t\tvar durationThisBar = 0;\n\t\t\t\t\t\tvar inOverlay = false;\n\t\t\t\t\t\tvar overlayDuration = 0;\n\t\t\t\t\t\tvar snipStart = -1;\n\t\t\t\t\t\tfor (var kk = 0; kk < voice.length; kk++) {\n\t\t\t\t\t\t\tvar event = voice[kk];\n\t\t\t\t\t\t\tif (event.el_type === \"overlay\" && !inOverlay) {\n\t\t\t\t\t\t\t\tmadeChanges = true;\n\t\t\t\t\t\t\t\tinOverlay = true;\n\t\t\t\t\t\t\t\tsnipStart = kk;\n\t\t\t\t\t\t\t\toverlayVoice[k].hasOverlay = true;\n\t\t\t\t\t\t\t\tif (overlayDuration === 0)\n\t\t\t\t\t\t\t\t\toverlayDuration = durationsPerLines[i];\n\t\t\t\t\t\t\t\t// If this isn't the first line, we also need invisible rests on the previous lines.\n\t\t\t\t\t\t\t\t// So, if the next voice doesn't appear in a previous line, create it\n\t\t\t\t\t\t\t\tfor (var ii = 0; ii < i; ii++) {\n\t\t\t\t\t\t\t\t\tif (durationsPerLines[ii] && tune.lines[ii].staff && staff.voices.length >= tune.lines[ii].staff[0].voices.length) {\n\t\t\t\t\t\t\t\t\t\ttune.lines[ii].staff[0].voices.push([{\n\t\t\t\t\t\t\t\t\t\t\tel_type: \"note\",\n\t\t\t\t\t\t\t\t\t\t\tduration: durationsPerLines[ii],\n\t\t\t\t\t\t\t\t\t\t\trest: {type: \"invisible\"},\n\t\t\t\t\t\t\t\t\t\t\tstartChar: event.startChar,\n\t\t\t\t\t\t\t\t\t\t\tendChar: event.endChar\n\t\t\t\t\t\t\t\t\t\t}]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (event.el_type === \"bar\") {\n\t\t\t\t\t\t\t\tif (inOverlay) {\n\t\t\t\t\t\t\t\t\t// delete the overlay events from this array without messing up this loop.\n\t\t\t\t\t\t\t\t\tinOverlay = false;\n\t\t\t\t\t\t\t\t\toverlayVoice[k].snip.push({ start: snipStart, len: kk - snipStart});\n\t\t\t\t\t\t\t\t\toverlayVoice[k].voice.push(event); // Also end the overlay with the barline.\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// This keeps the voices lined up: if the overlay isn't in the first measure then we need a bunch of invisible rests.\n\t\t\t\t\t\t\t\t\tif (durationThisBar > 0)\n\t\t\t\t\t\t\t\t\t\toverlayVoice[k].voice.push({ el_type: \"note\", duration: durationThisBar, rest: {type: \"invisible\"}, startChar: event.startChar, endChar: event.endChar });\n\t\t\t\t\t\t\t\t\toverlayVoice[k].voice.push(event);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdurationThisBar = 0;\n\t\t\t\t\t\t\t} else if (event.el_type === \"note\") {\n\t\t\t\t\t\t\t\tif (inOverlay) {\n\t\t\t\t\t\t\t\t\toverlayVoice[k].voice.push(event);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tdurationThisBar += event.duration;\n\t\t\t\t\t\t\t\t\tdurationsPerLines[i] += event.duration;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (event.el_type === \"scale\" || event.el_type === \"stem\" || event.el_type === \"overlay\" || event.el_type === \"style\" || event.el_type === \"transpose\" || event.el_type === \"color\") {\n\t\t\t\t\t\t\t\t// These types of events are duplicated on the overlay layer.\n\t\t\t\t\t\t\t\toverlayVoice[k].voice.push(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (overlayVoice[k].hasOverlay && overlayVoice[k].snip.length === 0) {\n\t\t\t\t\t\t\t// there was no closing bar, so we didn't set the snip amount.\n\t\t\t\t\t\t\toverlayVoice[k].snip.push({ start: snipStart, len: voice.length - snipStart});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfor (k = 0; k < overlayVoice.length; k++) {\n\t\t\t\t\t\tvar ov = overlayVoice[k];\n\t\t\t\t\t\tif (ov.hasOverlay) {\n\t\t\t\t\t\t\tov.voice.splice(0, 0, {el_type: \"stem\", direction: \"down\"})\n\t\t\t\t\t\t\tstaff.voices.push(ov.voice);\n\t\t\t\t\t\t\tfor (var kkk = ov.snip.length-1; kkk >= 0; kkk--) {\n\t\t\t\t\t\t\t\tvar snip = ov.snip[kkk];\n\t\t\t\t\t\t\t\tstaff.voices[k].splice(snip.start, snip.len);\n\t\t\t\t\t\t\t\tstaff.voices[k].splice(snip.start+1, 0, { el_type: \"stem\", direction: \"auto\" });\n\t\t\t\t\t\t\t\tvar indexOfLastBar = findLastBar(staff.voices[k], snip.start);\n\t\t\t\t\t\t\t\tstaff.voices[k].splice(indexOfLastBar, 0, { el_type: \"stem\", direction: \"up\" });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// remove ending marks from the overlay voice so they are not repeated\n\t\t\t\t\t\t\tfor (kkk = 0; kkk < staff.voices[staff.voices.length-1].length; kkk++) {\n\t\t\t\t\t\t\t\tstaff.voices[staff.voices.length-1][kkk] = parseCommon.clone(staff.voices[staff.voices.length-1][kkk]);\n\t\t\t\t\t\t\t\tvar el = staff.voices[staff.voices.length-1][kkk];\n\t\t\t\t\t\t\t\tif (el.el_type === 'bar' && el.startEnding) {\n\t\t\t\t\t\t\t\t\tdelete el.startEnding;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (el.el_type === 'bar' && el.endEnding)\n\t\t\t\t\t\t\t\t\tdelete el.endEnding;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn madeChanges;\n\t};\n\n\tfunction findLastBar(voice, start) {\n\t\tfor (var i = start-1; i > 0 && voice[i].el_type !== \"bar\"; i--) {\n\n\t\t}\n\t\treturn i;\n\t}\n\tfunction fixTitles(lines) {\n\t\t// We might have name and subname defined. We now know what line everything is on, so we can determine which to use.\n\t\tvar firstMusicLine = true;\n\t\tfor (var i = 0; i < lines.length; i++) {\n\t\t\tvar line = lines[i];\n\t\t\tif (line.staff) {\n\t\t\t\tfor (var j = 0; j < line.staff.length; j++) {\n\t\t\t\t\tvar staff = line.staff[j];\n\t\t\t\t\tif (staff.title) {\n\t\t\t\t\t\tvar hasATitle = false;\n\t\t\t\t\t\tfor (var k = 0; k < staff.title.length; k++) {\n\t\t\t\t\t\t\tif (staff.title[k]) {\n\t\t\t\t\t\t\t\tstaff.title[k] = (firstMusicLine) ? staff.title[k].name : staff.title[k].subname;\n\t\t\t\t\t\t\t\tif (staff.title[k])\n\t\t\t\t\t\t\t\t\thasATitle = true;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tstaff.title[k] = '';\n\t\t\t\t\t\t\t} else\n\t\t\t\t\t\t\t\tstaff.title[k] = '';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!hasATitle)\n\t\t\t\t\t\t\tdelete staff.title;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfirstMusicLine = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tthis.cleanUp = function(barsperstaff, staffnonote, currSlur) {\n\t\tthis.closeLine();\t// Close the last line.\n\t\tdelete tune.runningFonts;\n\n\t\tsimplifyMetaText(tune)\n\t\t//addRichTextToAnnotationsAndLyrics(tune)\n\n\t\t// If the tempo was created with a string like \"Allegro\", then the duration of a beat needs to be set at the last moment, when it is most likely known.\n\t\tif (tune.metaText.tempo && tune.metaText.tempo.bpm && !tune.metaText.tempo.duration)\n\t\t\ttune.metaText.tempo.duration = [ tune.getBeatLength() ];\n\n\t\t// Remove any blank lines\n\t\tvar anyDeleted = false;\n\t\tvar i, s, v;\n\t\tfor (i = 0; i < tune.lines.length; i++) {\n\t\t\tif (tune.lines[i].staff !== undefined) {\n\t\t\t\tvar hasAny = false;\n\t\t\t\tfor (s = 0; s < tune.lines[i].staff.length; s++) {\n\t\t\t\t\tif (tune.lines[i].staff[s] === undefined) {\n\t\t\t\t\t\tanyDeleted = true;\n\t\t\t\t\t\ttune.lines[i].staff[s] = null;\n\t\t\t\t\t\t//tune.lines[i].staff[s] = { voices: []};\t// TODO-PER: There was a part missing in the abc music. How should we recover?\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (v = 0; v < tune.lines[i].staff[s].voices.length; v++) {\n\t\t\t\t\t\t\tif (tune.lines[i].staff[s].voices[v] === undefined)\n\t\t\t\t\t\t\t\ttune.lines[i].staff[s].voices[v] = [];\t// TODO-PER: There was a part missing in the abc music. How should we recover?\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\tif (this.containsNotes(tune.lines[i].staff[s].voices[v])) hasAny = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!hasAny) {\n\t\t\t\t\ttune.lines[i] = null;\n\t\t\t\t\tanyDeleted = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (anyDeleted) {\n\t\t\ttune.lines = tune.lines.filter(function (line) { return !!line });\n\t\t\ttune.lines.forEach(function(line) {\n\t\t\t\tif (line.staff)\n\t\t\t\t\tline.staff = line.staff.filter(function (line) { return !!line });\n\t\t\t});\n\t\t}\n\n\t\t// if we exceeded the number of bars allowed on a line, then force a new line\n\t\tif (barsperstaff) {\n\t\t\twhile (wrapMusicLines(tune.lines, barsperstaff)) {\n\t\t\t\t// This will keep wrapping until the end of the piece.\n\t\t\t}\n\t\t}\n\n\t\t// If we were passed staffnonote, then we want to get rid of all staffs that contain only rests.\n\t\tif (staffnonote) {\n\t\t\tanyDeleted = false;\n\t\t\tfor (i = 0; i < tune.lines.length; i++) {\n\t\t\t\tif (tune.lines[i].staff !== undefined) {\n\t\t\t\t\tfor (s = 0; s < tune.lines[i].staff.length; s++) {\n\t\t\t\t\t\tvar keepThis = false;\n\t\t\t\t\t\tfor (v = 0; v < tune.lines[i].staff[s].voices.length; v++) {\n\t\t\t\t\t\t\tif (this.containsNotesStrict(tune.lines[i].staff[s].voices[v])) {\n\t\t\t\t\t\t\t\tkeepThis = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!keepThis) {\n\t\t\t\t\t\t\tanyDeleted = true;\n\t\t\t\t\t\t\ttune.lines[i].staff[s] = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (anyDeleted) {\n\t\t\t\ttune.lines.forEach(function(line) {\n\t\t\t\t\tif (line.staff)\n\t\t\t\t\t\tline.staff = line.staff.filter(function (staff) { return !!staff });\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tfixTitles(tune.lines);\n\n\t\t// Remove the temporary working variables\n\t\tfor (i = 0; i < tune.lines.length; i++) {\n\t\t\tif (tune.lines[i].staff) {\n\t\t\t\tfor (s = 0; s < tune.lines[i].staff.length; s++)\n\t\t\t\t\tdelete tune.lines[i].staff[s].workingClef;\n\t\t\t}\n\t\t}\n\n\t\t// If there are overlays, create new voices for them.\n\t\twhile (this.resolveOverlays()) {\n\t\t\t// keep resolving overlays as long as any are found.\n\t\t}\n\n\t\tfunction cleanUpSlursInLine(line, staffNum, voiceNum) {\n\t\t\tif (!currSlur[staffNum])\n\t\t\t\tcurrSlur[staffNum] = [];\n\t\t\tif (!currSlur[staffNum][voiceNum])\n\t\t\t\tcurrSlur[staffNum][voiceNum] = [];\n\t\t\tvar x;\n//\t\t\tvar lyr = null;\t// TODO-PER: debugging.\n\n\t\t\tvar addEndSlur = function(obj, num, chordPos) {\n\t\t\t\tif (currSlur[staffNum][voiceNum][chordPos] === undefined) {\n\t\t\t\t\t// There isn't an exact match for note position, but we'll take any other open slur.\n\t\t\t\t\tfor (x = 0; x < currSlur[staffNum][voiceNum].length; x++) {\n\t\t\t\t\t\tif (currSlur[staffNum][voiceNum][x] !== undefined) {\n\t\t\t\t\t\t\tchordPos = x;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (currSlur[staffNum][voiceNum][chordPos] === undefined) {\n\t\t\t\t\t\tvar offNum = chordPos*100+1;\n\t\t\t\t\t\tobj.endSlur.forEach(function(x) { if (offNum === x) --offNum; });\n\t\t\t\t\t\tcurrSlur[staffNum][voiceNum][chordPos] = [offNum];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvar slurNum;\n\t\t\t\tfor (var i = 0; i < num; i++) {\n\t\t\t\t\tslurNum = currSlur[staffNum][voiceNum][chordPos].pop();\n\t\t\t\t\tobj.endSlur.push(slurNum);\n//\t\t\t\t\tlyr.syllable += '<' + slurNum;\t// TODO-PER: debugging\n\t\t\t\t}\n\t\t\t\tif (currSlur[staffNum][voiceNum][chordPos].length === 0)\n\t\t\t\t\tdelete currSlur[staffNum][voiceNum][chordPos];\n\t\t\t\treturn slurNum;\n\t\t\t};\n\n\t\t\tvar addStartSlur = function(obj, num, chordPos, usedNums) {\n\t\t\t\tobj.startSlur = [];\n\t\t\t\tif (currSlur[staffNum][voiceNum][chordPos] === undefined) {\n\t\t\t\t\tcurrSlur[staffNum][voiceNum][chordPos] = [];\n\t\t\t\t}\n\t\t\t\tvar nextNum = chordPos*100+1;\n\t\t\t\tfor (var i = 0; i < num; i++) {\n\t\t\t\t\tif (usedNums) {\n\t\t\t\t\t\tusedNums.forEach(function(x) { if (nextNum === x) ++nextNum; });\n\t\t\t\t\t\tusedNums.forEach(function(x) { if (nextNum === x) ++nextNum; });\n\t\t\t\t\t\tusedNums.forEach(function(x) { if (nextNum === x) ++nextNum; });\n\t\t\t\t\t}\n\t\t\t\t\tcurrSlur[staffNum][voiceNum][chordPos].forEach(function(x) { if (nextNum === x) ++nextNum; });\n\t\t\t\t\tcurrSlur[staffNum][voiceNum][chordPos].forEach(function(x) { if (nextNum === x) ++nextNum; });\n\n\t\t\t\t\tcurrSlur[staffNum][voiceNum][chordPos].push(nextNum);\n\t\t\t\t\tobj.startSlur.push({ label: nextNum });\n\t\t\t\t\tif (obj.dottedSlur) {\n\t\t\t\t\t\tobj.startSlur[obj.startSlur.length-1].style = 'dotted';\n\t\t\t\t\t\tdelete obj.dottedSlur;\n\t\t\t\t\t}\n//\t\t\t\t\tlyr.syllable += ' ' + nextNum + '>';\t// TODO-PER:debugging\n\t\t\t\t\tnextNum++;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfor (var i = 0; i < line.length; i++) {\n\t\t\t\tvar el = line[i];\n//\t\t\t\tif (el.lyric === undefined)\t// TODO-PER: debugging\n//\t\t\t\t\tel.lyric = [{ divider: '-' }];\t// TODO-PER: debugging\n//\t\t\t\tlyr = el.lyric[0];\t// TODO-PER: debugging\n//\t\t\t\tlyr.syllable = '';\t// TODO-PER: debugging\n\t\t\t\tif (el.el_type === 'note') {\n\t\t\t\t\tif (el.gracenotes) {\n\t\t\t\t\t\tfor (var g = 0; g < el.gracenotes.length; g++) {\n\t\t\t\t\t\t\tif (el.gracenotes[g].endSlur) {\n\t\t\t\t\t\t\t\tvar gg = el.gracenotes[g].endSlur;\n\t\t\t\t\t\t\t\tel.gracenotes[g].endSlur = [];\n\t\t\t\t\t\t\t\tfor (var ggg = 0; ggg < gg; ggg++)\n\t\t\t\t\t\t\t\t\taddEndSlur(el.gracenotes[g], 1, 20);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (el.gracenotes[g].startSlur) {\n\t\t\t\t\t\t\t\tx = el.gracenotes[g].startSlur;\n\t\t\t\t\t\t\t\taddStartSlur(el.gracenotes[g], x, 20);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (el.endSlur) {\n\t\t\t\t\t\tx = el.endSlur;\n\t\t\t\t\t\tel.endSlur = [];\n\t\t\t\t\t\taddEndSlur(el, x, 0);\n\t\t\t\t\t}\n\t\t\t\t\tif (el.startSlur) {\n\t\t\t\t\t\tx = el.startSlur;\n\t\t\t\t\t\taddStartSlur(el, x, 0);\n\t\t\t\t\t}\n\t\t\t\t\tif (el.pitches) {\n\t\t\t\t\t\tvar usedNums = [];\n\t\t\t\t\t\tfor (var p = 0; p < el.pitches.length; p++) {\n\t\t\t\t\t\t\tif (el.pitches[p].endSlur) {\n\t\t\t\t\t\t\t\tvar k = el.pitches[p].endSlur;\n\t\t\t\t\t\t\t\tel.pitches[p].endSlur = [];\n\t\t\t\t\t\t\t\tfor (var j = 0; j < k; j++) {\n\t\t\t\t\t\t\t\t\tvar slurNum = addEndSlur(el.pitches[p], 1, p+1);\n\t\t\t\t\t\t\t\t\tusedNums.push(slurNum);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (p = 0; p < el.pitches.length; p++) {\n\t\t\t\t\t\t\tif (el.pitches[p].startSlur) {\n\t\t\t\t\t\t\t\tx = el.pitches[p].startSlur;\n\t\t\t\t\t\t\t\taddStartSlur(el.pitches[p], x, p+1, usedNums);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Correct for the weird gracenote case where ({g}a) should match.\n\t\t\t\t\t\t// The end slur was already assigned to the note, and needs to be moved to the first note of the graces.\n\t\t\t\t\t\tif (el.gracenotes && el.pitches[0].endSlur && el.pitches[0].endSlur[0] === 100 && el.pitches[0].startSlur) {\n\t\t\t\t\t\t\tif (el.gracenotes[0].endSlur)\n\t\t\t\t\t\t\t\tel.gracenotes[0].endSlur.push(el.pitches[0].startSlur[0].label);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tel.gracenotes[0].endSlur = [el.pitches[0].startSlur[0].label];\n\t\t\t\t\t\t\tif (el.pitches[0].endSlur.length === 1)\n\t\t\t\t\t\t\t\tdelete el.pitches[0].endSlur;\n\t\t\t\t\t\t\telse if (el.pitches[0].endSlur[0] === 100)\n\t\t\t\t\t\t\t\tel.pitches[0].endSlur.shift();\n\t\t\t\t\t\t\telse if (el.pitches[0].endSlur[el.pitches[0].endSlur.length-1] === 100)\n\t\t\t\t\t\t\t\tel.pitches[0].endSlur.pop();\n\t\t\t\t\t\t\tif (currSlur[staffNum][voiceNum][1].length === 1)\n\t\t\t\t\t\t\t\tdelete currSlur[staffNum][voiceNum][1];\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tcurrSlur[staffNum][voiceNum][1].pop();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// TODO-PER: This could be done faster as we go instead of as the last step.\n\t\tfunction fixClefPlacement(el) {\n\t\t\tparseKeyVoice.fixClef(el);\n\t\t}\n\n\t\tfunction wrapMusicLines(lines, barsperstaff) {\n\t\t\tfor (i = 0; i < lines.length; i++) {\n\t\t\t\tif (lines[i].staff !== undefined) {\n\t\t\t\t\tfor (s = 0; s < lines[i].staff.length; s++) {\n\t\t\t\t\t\tvar permanentItems = [];\n\t\t\t\t\t\tfor (v = 0; v < lines[i].staff[s].voices.length; v++) {\n\t\t\t\t\t\t\tvar voice = lines[i].staff[s].voices[v];\n\t\t\t\t\t\t\tvar barNumThisLine = 0;\n\t\t\t\t\t\t\tfor (var n = 0; n < voice.length; n++) {\n\t\t\t\t\t\t\t\tif (voice[n].el_type === 'bar') {\n\t\t\t\t\t\t\t\t\tbarNumThisLine++;\n\t\t\t\t\t\t\t\t\tif (barNumThisLine >= barsperstaff) {\n\t\t\t\t\t\t\t\t\t\t// push everything else to the next line, if there is anything else,\n\t\t\t\t\t\t\t\t\t\t// and there is a next line. If there isn't a next line, create one.\n\t\t\t\t\t\t\t\t\t\tif (n < voice.length - 1) {\n\t\t\t\t\t\t\t\t\t\t\tvar nextLine = getNextMusicLine(lines, i);\n\t\t\t\t\t\t\t\t\t\t\tif (!nextLine) {\n\t\t\t\t\t\t\t\t\t\t\t\tvar cp = JSON.parse(JSON.stringify(lines[i]));\n\t\t\t\t\t\t\t\t\t\t\t\tlines.push(parseCommon.clone(cp));\n\t\t\t\t\t\t\t\t\t\t\t\tnextLine = lines[lines.length - 1];\n\t\t\t\t\t\t\t\t\t\t\t\tfor (var ss = 0; ss < nextLine.staff.length; ss++) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor (var vv = 0; vv < nextLine.staff[ss].voices.length; vv++)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tnextLine.staff[ss].voices[vv] = [];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tvar startElement = n + 1;\n\t\t\t\t\t\t\t\t\t\t\tvar section = lines[i].staff[s].voices[v].slice(startElement);\n\t\t\t\t\t\t\t\t\t\t\tlines[i].staff[s].voices[v] = lines[i].staff[s].voices[v].slice(0, startElement);\n\t\t\t\t\t\t\t\t\t\t\tnextLine.staff[s].voices[v] = permanentItems.concat(section.concat(nextLine.staff[s].voices[v]));\n\t\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (!voice[n].duration) {\n\t\t\t\t\t\t\t\t\tpermanentItems.push(voice[n]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction getNextMusicLine(lines, currentLine) {\n\t\t\tcurrentLine++;\n\t\t\twhile (lines.length > currentLine) {\n\t\t\t\tif (lines[currentLine].staff)\n\t\t\t\t\treturn lines[currentLine];\n\t\t\t\tcurrentLine++;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\tfor (tune.lineNum = 0; tune.lineNum < tune.lines.length; tune.lineNum++) {\n\t\t\tvar staff = tune.lines[tune.lineNum].staff;\n\t\t\tif (staff) {\n\t\t\t\tfor (tune.staffNum = 0; tune.staffNum < staff.length; tune.staffNum++) {\n\t\t\t\t\tif (staff[tune.staffNum].clef)\n\t\t\t\t\t\tfixClefPlacement(staff[tune.staffNum].clef);\n\t\t\t\t\tfor (tune.voiceNum = 0; tune.voiceNum < staff[tune.staffNum].voices.length; tune.voiceNum++) {\n\t\t\t\t\t\tvar voice = staff[tune.staffNum].voices[tune.voiceNum];\n\t\t\t\t\t\tcleanUpSlursInLine(voice, tune.staffNum, tune.voiceNum);\n\t\t\t\t\t\tfor (var j = 0; j < voice.length; j++) {\n\t\t\t\t\t\t\tif (voice[j].el_type === 'clef')\n\t\t\t\t\t\t\t\tfixClefPlacement(voice[j]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (voice.length > 0 && voice[voice.length-1].barNumber) {\n\t\t\t\t\t\t\t// Don't hang a bar number on the last bar line: it should go on the next line.\n\t\t\t\t\t\t\tvar nextLine = getNextMusicLine(tune.lines, tune.lineNum);\n\t\t\t\t\t\t\tif (nextLine)\n\t\t\t\t\t\t\t\tnextLine.staff[0].barNumber = voice[voice.length-1].barNumber;\n\t\t\t\t\t\t\tdelete voice[voice.length-1].barNumber;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove temporary variables that the outside doesn't need to know about\n\t\tdelete tune.staffNum;\n\t\tdelete tune.voiceNum;\n\t\tdelete tune.lineNum;\n\t\tdelete tune.potentialStartBeam;\n\t\tdelete tune.potentialEndBeam;\n\t\tdelete tune.vskipPending;\n\n\t\treturn currSlur;\n\t};\n\n\ttune.reset();\n\n\tthis.getLastNote = function() {\n\t\tif (tune.lines[tune.lineNum] && tune.lines[tune.lineNum].staff && tune.lines[tune.lineNum].staff[tune.staffNum] &&\n\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum].voices[tune.voiceNum]) {\n\t\t\tfor (var i = tune.lines[tune.lineNum].staff[tune.staffNum].voices[tune.voiceNum].length-1; i >= 0; i--) {\n\t\t\t\tvar el = tune.lines[tune.lineNum].staff[tune.staffNum].voices[tune.voiceNum][i];\n\t\t\t\tif (el.el_type === 'note') {\n\t\t\t\t\treturn el;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\n\tthis.addTieToLastNote = function(dottedTie) {\n\t\t// TODO-PER: if this is a chord, which note?\n\t\tvar el = this.getLastNote();\n\t\tif (el && el.pitches && el.pitches.length > 0) {\n\t\t\tel.pitches[0].startTie = {};\n\t\t\tif (dottedTie)\n\t\t\t\tel.pitches[0].startTie.style = 'dotted';\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n\tthis.getDuration = function(el) {\n\t\tif (el.duration) return el.duration;\n\t\t//if (el.pitches && el.pitches.length > 0) return el.pitches[0].duration;\n\t\treturn 0;\n\t};\n\n\tthis.closeLine = function() {\n\t\tif (tune.potentialStartBeam && tune.potentialEndBeam) {\n\t\t\ttune.potentialStartBeam.startBeam = true;\n\t\t\ttune.potentialEndBeam.endBeam = true;\n\t\t}\n\t\tdelete tune.potentialStartBeam;\n\t\tdelete tune.potentialEndBeam;\n\t};\n\n\tthis.appendElement = function(type, startChar, endChar, hashParams)\n\t{\n\t\tvar This = tune;\n\t\tvar pushNote = function(hp) {\n\t\t\tvar currStaff = This.lines[This.lineNum].staff[This.staffNum];\n\t\t\tif (!currStaff) {\n\t\t\t\t// TODO-PER: This prevents a crash, but it drops the element. Need to figure out how to start a new line, or delay adding this.\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (hp.pitches !== undefined) {\n\t\t\t\tvar mid = currStaff.workingClef.verticalPos;\n\t\t\t\thp.pitches.forEach(function(p) { p.verticalPos = p.pitch - mid; });\n\t\t\t}\n\t\t\tif (hp.gracenotes !== undefined) {\n\t\t\t\tvar mid2 = currStaff.workingClef.verticalPos;\n\t\t\t\thp.gracenotes.forEach(function(p) { p.verticalPos = p.pitch - mid2; });\n\t\t\t}\n\t\t\tcurrStaff.voices[This.voiceNum].push(hp);\n\t\t};\n\t\thashParams.el_type = type;\n\t\tif (startChar !== null)\n\t\t\thashParams.startChar = startChar;\n\t\tif (endChar !== null)\n\t\t\thashParams.endChar = endChar;\n\t\tvar endBeamHere = function() {\n\t\t\tThis.potentialStartBeam.startBeam = true;\n\t\t\thashParams.endBeam = true;\n\t\t\tdelete This.potentialStartBeam;\n\t\t\tdelete This.potentialEndBeam;\n\t\t};\n\t\tvar endBeamLast = function() {\n\t\t\tif (This.potentialStartBeam !== undefined && This.potentialEndBeam !== undefined) {\t// Do we have a set of notes to beam?\n\t\t\t\tThis.potentialStartBeam.startBeam = true;\n\t\t\t\tThis.potentialEndBeam.endBeam = true;\n\t\t\t}\n\t\t\tdelete This.potentialStartBeam;\n\t\t\tdelete This.potentialEndBeam;\n\t\t};\n\t\tif (type === 'note') { // && (hashParams.rest !== undefined || hashParams.end_beam === undefined)) {\n\t\t\t// Now, add the startBeam and endBeam where it is needed.\n\t\t\t// end_beam is already set on the places where there is a forced end_beam. We'll remove that here after using that info.\n\t\t\t// this.potentialStartBeam either points to null or the start beam.\n\t\t\t// this.potentialEndBeam either points to null or the start beam.\n\t\t\t// If we have a beam break (note is longer than a quarter, or an end_beam is on this element), then set the beam if we have one.\n\t\t\t// reset the variables for the next notes.\n\t\t\tvar dur = self.getDuration(hashParams);\n\t\t\tif (dur >= 0.25) {\t// The beam ends on the note before this.\n\t\t\t\tendBeamLast();\n\t\t\t} else if (hashParams.force_end_beam_last && This.potentialStartBeam !== undefined) {\n\t\t\t\tendBeamLast();\n\t\t\t} else if (hashParams.end_beam && This.potentialStartBeam !== undefined) {\t// the beam is forced to end on this note, probably because of a space in the ABC\n\t\t\t\tif (hashParams.rest === undefined)\n\t\t\t\t\tendBeamHere();\n\t\t\t\telse\n\t\t\t\t\tendBeamLast();\n\t\t\t} else if (hashParams.rest === undefined) {\t// this a short note and we aren't about to end the beam\n\t\t\t\tif (This.potentialStartBeam === undefined) {\t// We aren't collecting notes for a beam, so start here.\n\t\t\t\t\tif (!hashParams.end_beam) {\n\t\t\t\t\t\tThis.potentialStartBeam = hashParams;\n\t\t\t\t\t\tdelete This.potentialEndBeam;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tThis.potentialEndBeam = hashParams;\t// Continue the beaming, look for the end next note.\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// end_beam goes on rests and notes which precede rests _except_ when a rest (or set of adjacent rests) has normal notes on both sides (no spaces)\n//\t\t\tif (hashParams.rest !== undefined)\n//\t\t\t{\n//\t\t\t\thashParams.end_beam = true;\n//\t\t\t\tvar el2 = this.getLastNote();\n//\t\t\t\tif (el2) el2.end_beam = true;\n//\t\t\t\t// TODO-PER: implement exception mentioned in the comment.\n//\t\t\t}\n\t\t} else {\t// It's not a note, so there definitely isn't beaming after it.\n\t\t\tendBeamLast();\n\t\t}\n\t\tdelete hashParams.end_beam;\t// We don't want this temporary variable hanging around.\n\t\tdelete hashParams.force_end_beam_last;\t// We don't want this temporary variable hanging around.\n\t\tpushNote(hashParams);\n\t};\n\n\tthis.appendStartingElement = function(type, startChar, endChar, hashParams2)\n\t{\n\t\t// If we're in the middle of beaming, then end the beam.\n\t\tthis.closeLine();\n\n\t\t// We only ever want implied naturals the first time.\n\t\tvar impliedNaturals;\n\t\tif (type === 'key') {\n\t\t\timpliedNaturals = hashParams2.impliedNaturals;\n\t\t\tdelete hashParams2.impliedNaturals;\n\t\t\tdelete hashParams2.explicitAccidentals;\n\t\t}\n\n\t\t// Clone the object because it will be sticking around for the next line and we don't want the extra fields in it.\n\t\tvar hashParams = parseCommon.clone(hashParams2);\n\n\t\tif (tune.lines[tune.lineNum] && tune.lines[tune.lineNum].staff) { // be sure that we are on a music type line before doing the following.\n\t\t\t// If tune is the first item in tune staff, then we might have to initialize the staff, first.\n\t\t\tif (tune.lines[tune.lineNum].staff.length <= tune.staffNum) {\n\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum] = {};\n\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum].clef = parseCommon.clone(tune.lines[tune.lineNum].staff[0].clef);\n\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum].key = parseCommon.clone(tune.lines[tune.lineNum].staff[0].key);\n\t\t\t\tif (tune.lines[tune.lineNum].staff[0].meter)\n\t\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum].meter = parseCommon.clone(tune.lines[tune.lineNum].staff[0].meter);\n\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum].workingClef = parseCommon.clone(tune.lines[tune.lineNum].staff[0].workingClef);\n\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum].voices = [[]];\n\t\t\t}\n\t\t\t// If tune is a clef type, then we replace the working clef on the line. This is kept separate from\n\t\t\t// the clef in case there is an inline clef field. We need to know what the current position for\n\t\t\t// the note is.\n\t\t\tif (type === 'clef') {\n\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum].workingClef = hashParams;\n\t\t\t}\n\n\t\t\t// These elements should not be added twice, so if the element exists on tune line without a note or bar before it, just replace the staff version.\n\t\t\tvar voice = tune.lines[tune.lineNum].staff[tune.staffNum].voices[tune.voiceNum];\n\t\t\tfor (var i = 0; i < voice.length; i++) {\n\t\t\t\tif (voice[i].el_type === 'note' || voice[i].el_type === 'bar') {\n\t\t\t\t\thashParams.el_type = type;\n\t\t\t\t\thashParams.startChar = startChar;\n\t\t\t\t\thashParams.endChar = endChar;\n\t\t\t\t\tif (impliedNaturals)\n\t\t\t\t\t\thashParams.accidentals = impliedNaturals.concat(hashParams.accidentals);\n\t\t\t\t\tvoice.push(hashParams);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (voice[i].el_type === type) {\n\t\t\t\t\thashParams.el_type = type;\n\t\t\t\t\thashParams.startChar = startChar;\n\t\t\t\t\thashParams.endChar = endChar;\n\t\t\t\t\tif (impliedNaturals)\n\t\t\t\t\t\thashParams.accidentals = impliedNaturals.concat(hashParams.accidentals);\n\t\t\t\t\tvoice[i] = hashParams;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// We didn't see either that type or a note, so replace the element to the staff.\n\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum][type] = hashParams2;\n\t\t}\n\t};\n\n\tthis.pushLine = function(hash) {\n\t\tif (tune.vskipPending) {\n\t\t\thash.vskip = tune.vskipPending;\n\t\t\tdelete tune.vskipPending;\n\t\t}\n\t\ttune.lines.push(hash);\n\t};\n\n\tthis.addSubtitle = function(str, info) {\n\t\tthis.pushLine({subtitle: { text: str, startChar: info.startChar, endChar: info.endChar}});\n\t};\n\n\tthis.addSpacing = function(num) {\n\t\ttune.vskipPending = num;\n\t};\n\n\tthis.addNewPage = function(num) {\n\t\tthis.pushLine({newpage: num});\n\t};\n\n\tthis.addSeparator = function(spaceAbove, spaceBelow, lineLength, info) {\n\t\tthis.pushLine({separator: {spaceAbove: Math.round(spaceAbove), spaceBelow: Math.round(spaceBelow), lineLength: Math.round(lineLength), startChar: info.startChar, endChar: info.endChar}});\n\t};\n\n\tthis.addText = function(str, info) {\n\t\tthis.pushLine({text: { text: str, startChar: info.startChar, endChar: info.endChar}});\n\t};\n\n\tthis.addCentered = function(str) {\n\t\tthis.pushLine({text: [{text: str, center: true }]});\n\t};\n\n\tthis.containsNotes = function(voice) {\n\t\tfor (var i = 0; i < voice.length; i++) {\n\t\t\tif (voice[i].el_type === 'note' || voice[i].el_type === 'bar')\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n\tthis.containsNotesStrict = function(voice) {\n\t\tfor (var i = 0; i < voice.length; i++) {\n\t\t\tif (voice[i].el_type === 'note' && (voice[i].rest === undefined || voice[i].chord !== undefined))\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n\t//\tanyVoiceContainsNotes: function(line) {\n//\t\tfor (var i = 0; i < line.staff.voices.length; i++) {\n//\t\t\tif (this.containsNotes(line.staff.voices[i]))\n//\t\t\t\treturn true;\n//\t\t}\n//\t\treturn false;\n//\t},\n\tthis.changeVoiceScale = function(scale) {\n\t\tself.appendElement('scale', null, null, { size: scale} );\n\t};\n\tthis.changeVoiceColor = function(color) {\n\t\tself.appendElement('color', null, null, { color: color} );\n\t};\n\n\tthis.startNewLine = function(params) {\n\t\t// If the pointed to line doesn't exist, just create that. If the line does exist, but doesn't have any music on it, just use it.\n\t\t// If it does exist and has music, then increment the line number. If the new element doesn't exist, create it.\n\t\tvar This = tune;\n\t\tthis.closeLine();\t// Close the previous line.\n\t\tvar createVoice = function(params) {\n\t\t\tvar thisStaff = This.lines[This.lineNum].staff[This.staffNum];\n\t\t\tthisStaff.voices[This.voiceNum] = [];\n\t\t\tif (!thisStaff.title)\n\t\t\t\tthisStaff.title = [];\n\t\t\tthisStaff.title[This.voiceNum] = { name: params.name, subname: params.subname };\n\t\t\tif (params.style)\n\t\t\t\tself.appendElement('style', null, null, {head: params.style});\n\t\t\tif (params.stem)\n\t\t\t\tself.appendElement('stem', null, null, {direction: params.stem});\n\t\t\telse if (This.voiceNum > 0) {\n\t\t\t\tif (thisStaff.voices[0]!== undefined) {\n\t\t\t\t\tvar found = false;\n\t\t\t\t\tfor (var i = 0; i < thisStaff.voices[0].length; i++) {\n\t\t\t\t\t\tif (thisStaff.voices[0].el_type === 'stem')\n\t\t\t\t\t\t\tfound = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (!found) {\n\t\t\t\t\t\tvar stem = { el_type: 'stem', direction: 'up' };\n\t\t\t\t\t\tthisStaff.voices[0].splice(0,0,stem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tself.appendElement('stem', null, null, {direction: 'down'});\n\t\t\t}\n\t\t\tif (params.scale)\n\t\t\t\tself.appendElement('scale', null, null, { size: params.scale} );\n\t\t\tif (params.color)\n\t\t\t\tself.appendElement('color', null, null, { color: params.color} );\n\t\t};\n\t\tvar createStaff = function(params) {\n\t\t\tif (params.key && params.key.impliedNaturals) {\n\t\t\t\tparams.key.accidentals = params.key.accidentals.concat(params.key.impliedNaturals);\n\t\t\t\tdelete params.key.impliedNaturals;\n\t\t\t}\n\n\t\t\tThis.lines[This.lineNum].staff[This.staffNum] = {voices: [ ], clef: params.clef, key: params.key, workingClef: params.clef };\n\t\t\tif (params.stafflines !== undefined) {\n\t\t\t\tThis.lines[This.lineNum].staff[This.staffNum].clef.stafflines = params.stafflines;\n\t\t\t\tThis.lines[This.lineNum].staff[This.staffNum].workingClef.stafflines = params.stafflines;\n\t\t\t}\n\t\t\tif (params.staffscale) {\n\t\t\t\tThis.lines[This.lineNum].staff[This.staffNum].staffscale = params.staffscale;\n\t\t\t}\n\t\t\tif (params.annotationfont) self.setLineFont(\"annotationfont\", params.annotationfont);\n\t\t\tif (params.gchordfont) self.setLineFont(\"gchordfont\", params.gchordfont);\n\t\t\tif (params.tripletfont) self.setLineFont(\"tripletfont\", params.tripletfont);\n\t\t\tif (params.vocalfont) self.setLineFont(\"vocalfont\", params.vocalfont);\n\t\t\tif (params.bracket) This.lines[This.lineNum].staff[This.staffNum].bracket = params.bracket;\n\t\t\tif (params.brace) This.lines[This.lineNum].staff[This.staffNum].brace = params.brace;\n\t\t\tif (params.connectBarLines) This.lines[This.lineNum].staff[This.staffNum].connectBarLines = params.connectBarLines;\n\t\t\tif (params.barNumber) This.lines[This.lineNum].staff[This.staffNum].barNumber = params.barNumber;\n\t\t\tcreateVoice(params);\n\t\t\t// Some stuff just happens for the first voice\n\t\t\tif (params.part)\n\t\t\t\tself.appendElement('part', params.part.startChar, params.part.endChar, {title: params.part.title});\n\t\t\tif (params.meter !== undefined) This.lines[This.lineNum].staff[This.staffNum].meter = params.meter;\n\t\t\tif (This.vskipPending) {\n\t\t\t\tThis.lines[This.lineNum].vskip = This.vskipPending;\n\t\t\t\tdelete This.vskipPending;\n\t\t\t}\n\t\t};\n\t\tvar createLine = function(params) {\n\t\t\tThis.lines[This.lineNum] = {staff: []};\n\t\t\tcreateStaff(params);\n\t\t};\n\t\tif (tune.lines[tune.lineNum] === undefined) createLine(params);\n\t\telse if (tune.lines[tune.lineNum].staff === undefined) {\n\t\t\ttune.lineNum++;\n\t\t\tthis.startNewLine(params);\n\t\t} else if (tune.lines[tune.lineNum].staff[tune.staffNum] === undefined) createStaff(params);\n\t\telse if (tune.lines[tune.lineNum].staff[tune.staffNum].voices[tune.voiceNum] === undefined) createVoice(params);\n\t\telse if (!this.containsNotes(tune.lines[tune.lineNum].staff[tune.staffNum].voices[tune.voiceNum])) {\n\t\t\t// We don't need a new line but we might need to update parts of it.\n\t\t\tif (params.part)\n\t\t\t\tself.appendElement('part', params.part.startChar, params.part.endChar, {title: params.part.title});\n\t\t} else {\n\t\t\ttune.lineNum++;\n\t\t\tthis.startNewLine(params);\n\t\t}\n\t};\n\n\tthis.setRunningFont = function(type, font) {\n\t\t// This is called at tune start to set the current default fonts so we know whether to record a change.\n\t\ttune.runningFonts[type] = font;\n\t};\n\n\tthis.setLineFont = function(type, font) {\n\t\t// If we haven't encountered the font type yet then we are using the default font so it doesn't\n\t\t// need to be noted. If we have encountered it, then only record it if it is different from the last time.\n\t\tif (tune.runningFonts[type]) {\n\t\t\tvar isDifferent = false;\n\t\t\tvar keys = Object.keys(font);\n\t\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\t\tif (tune.runningFonts[type][keys[i]] !== font[keys[i]])\n\t\t\t\t\tisDifferent = true;\n\t\t\t}\n\t\t\tif (isDifferent) {\n\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum][type] = font;\n\t\t\t}\n\t\t}\n\t\ttune.runningFonts[type] = font;\n\t}\n\n\tthis.setBarNumberImmediate = function(barNumber) {\n\t\t// If tune is called right at the beginning of a line, then correct the measure number that is already written.\n\t\t// If tune is called at the beginning of a measure, then correct the measure number that was just created.\n\t\t// If tune is called in the middle of a measure, then subtract one from it, because it will be incremented before applied.\n\t\tvar currentVoice = this.getCurrentVoice();\n\t\tif (currentVoice && currentVoice.length > 0) {\n\t\t\tvar lastElement = currentVoice[currentVoice.length-1];\n\t\t\tif (lastElement.el_type === 'bar') {\n\t\t\t\tif (lastElement.barNumber !== undefined) // the measure number might not be written for tune bar, don't override that.\n\t\t\t\t\tlastElement.barNumber = barNumber;\n\t\t\t} else\n\t\t\t\treturn barNumber-1;\n\t\t}\n\t\treturn barNumber;\n\t};\n\n\tthis.hasBeginMusic = function() {\n\t\t// return true if there exists at least one line that contains \"staff\"\n\t\tfor (var i = 0; i < tune.lines.length; i++) {\n\t\t\tif (tune.lines[i].staff)\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n\tthis.isFirstLine = function(index) {\n\t\tfor (var i = index-1; i >= 0; i--) {\n\t\t\tif (tune.lines[i].staff !== undefined) return false;\n\t\t}\n\t\treturn true;\n\t};\n\n\tthis.getCurrentVoice = function() {\n\t\tvar currLine = tune.lines[tune.lineNum];\n\t\tif (!currLine)\n\t\t\treturn null;\n\t\tvar currStaff = currLine.staff[tune.staffNum];\n\t\tif (!currStaff)\n\t\t\treturn null;\n\t\tif (currStaff.voices[tune.voiceNum] !== undefined)\n\t\t\treturn currStaff.voices[tune.voiceNum];\n\t\telse return null;\n\t};\n\n\tthis.setCurrentVoice = function(staffNum, voiceNum) {\n\t\ttune.staffNum = staffNum;\n\t\ttune.voiceNum = voiceNum;\n\t\tfor (var i = 0; i < tune.lines.length; i++) {\n\t\t\tif (tune.lines[i].staff) {\n\t\t\t\tif (tune.lines[i].staff[staffNum] === undefined || tune.lines[i].staff[staffNum].voices[voiceNum] === undefined ||\n\t\t\t\t\t!this.containsNotes(tune.lines[i].staff[staffNum].voices[voiceNum] )) {\n\t\t\t\t\ttune.lineNum = i;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\ttune.lineNum = i;\n\t};\n\n\tthis.addMetaText = function(key, value, info) {\n\t\tif (tune.metaText[key] === undefined) {\n\t\t\ttune.metaText[key] = value;\n\t\t\ttune.metaTextInfo[key] = info;\n\t\t} else {\n\t\t\tif (typeof tune.metaText[key] === 'string' && typeof value === 'string')\n\t\t\t\ttune.metaText[key] += \"\\n\" + value;\n\t\t\telse {\n\t\t\t\tif (tune.metaText[key] === 'string')\n\t\t\t\t\ttune.metaText[key] = [{text: tune.metaText[key]}]\n\t\t\t\tif (typeof value === 'string')\n\t\t\t\t\tvalue = [{text: value}]\n\t\t\t\ttune.metaText[key] =tune.metaText[key].concat(value)\n\t\t\t}\n\t\t\ttune.metaTextInfo[key].endChar = info.endChar;\n\t\t}\n\t};\n\n\tthis.addMetaTextArray = function(key, value, info) {\n\t\tif (tune.metaText[key] === undefined) {\n\t\t\ttune.metaText[key] = [value];\n\t\t\ttune.metaTextInfo[key] = info;\n\t\t} else {\n\t\t\ttune.metaText[key].push(value);\n\t\t\ttune.metaTextInfo[key].endChar = info.endChar;\n\t\t}\n\t};\n\tthis.addMetaTextObj = function(key, value, info) {\n\t\ttune.metaText[key] = value;\n\t\ttune.metaTextInfo[key] = info;\n\t};\n};\n\nfunction isArrayOfStrings(arr) {\n\tif (!arr) return false\n\tif (typeof arr === \"string\") return false\n\tvar str = ''\n\tfor (var i = 0; i < arr.length; i++) {\n\t\tif (typeof arr[i] !== 'string')\n\t\t\treturn false\n\t}\n\treturn true\n}\n\nfunction simplifyMetaText(tune) {\n\tif (isArrayOfStrings(tune.metaText.notes))\n\t\ttune.metaText.notes = tune.metaText.notes.join(\"\\n\")\n\tif (isArrayOfStrings(tune.metaText.history))\n\t\ttune.metaText.history = tune.metaText.history.join(\"\\n\")\n}\n\nfunction addRichTextToAnnotationsAndLyrics(tune) {\n\tvar lines = tune.lines\n\tfor (var i = 0; i < lines.length; i++) {\n\t\tif (lines[i].staff !== undefined) {\n\t\t\tfor (var s = 0; s < lines[i].staff.length; s++) {\n\t\t\t\tfor (var v = 0; v < lines[i].staff[s].voices.length; v++) {\n\t\t\t\t\tvar voice = lines[i].staff[s].voices[v];\n\t\t\t\t\tfor (var n = 0; n < voice.length; n++) {\n\t\t\t\t\t\tvar element = voice[n]\n\t\t\t\t\t\tif (element.chord) {\n\t\t\t\t\t\t\tfor (var c = 0; c < element.chord.length; c++) {\n\t\t\t\t\t\t\t\telement.chord[c].name = parseDirective.parseFontChangeLine(element.chord[c].name)\n\t\t\t\t\t\t\t\tconsole.log(element.chord[c].name)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (element.lyric) {\n\t\t\t\t\t\t\tfor (var l = 0; l < element.lyric.length; l++) {\n\t\t\t\t\t\t\t\telement.lyric[l].syllable = parseDirective.parseFontChangeLine(element.lyric[l].syllable)\n\t\t\t\t\t\t\t\tconsole.log(element.lyric[l].syllable)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n}\n\nmodule.exports = TuneBuilder;\n","// wrap_lines.js: does line wrap on an already parsed tune.\n\nfunction wrapLines(tune, lineBreaks, barNumbers) {\n\tif (!lineBreaks || tune.lines.length === 0)\n\t\treturn;\n\n\t// tune.lines contains nested arrays: there is an array of lines (that's the part this function rewrites),\n\t// there is an array of staffs per line (for instance, piano will have 2, orchestra will have many)\n\t// there is an array of voices per staff (for instance, 4-part harmony might have bass and tenor on a single staff)\n\tvar lines = tune.deline({lineBreaks: false});\n\tvar linesBreakElements = findLineBreaks(lines, lineBreaks);\n\t//console.log(JSON.stringify(linesBreakElements))\n\ttune.lines = addLineBreaks(lines, linesBreakElements, barNumbers);\n\ttune.lineBreaks = linesBreakElements;\n}\n\nfunction addLineBreaks(lines, linesBreakElements, barNumbers) {\n\t// linesBreakElements is an array of all of the elements that break for a new line\n\t// The objects in the array look like:\n\t// {\"ogLine\":0,\"line\":0,\"staff\":0,\"voice\":0,\"start\":0, \"end\":21}\n\t// ogLine is the original line that it came from,\n\t// line is the target line.\n\t// then copy all the elements from start to end for the staff and voice specified.\n\t// If the item doesn't contain \"staff\" then it is a non music line and should just be copied.\n\tvar outputLines = [];\n\tvar lastKeySig = []; // This is per staff - if the key changed then this will be populated.\n\tvar lastStem = [];\n\tvar currentBarNumber = 1;\n\tfor (var i = 0; i < linesBreakElements.length; i++) {\n\t\tvar action = linesBreakElements[i];\n\t\tif (lines[action.ogLine].staff) {\n\t\t\tvar inputStaff = lines[action.ogLine].staff[action.staff];\n\t\t\tif (!outputLines[action.line]) {\n\t\t\t\toutputLines[action.line] = {staff: []}\n\t\t\t}\n\t\t\tif (!outputLines[action.line].staff[action.staff]) {\n\t\t\t\toutputLines[action.line].staff[action.staff] = {voices: []};\n\t\t\t\tif (barNumbers !== undefined && action.staff === 0 && action.line > 0) {\n\t\t\t\t\toutputLines[action.line].staff[action.staff].barNumber = currentBarNumber;\n\t\t\t\t}\n\t\t\t\tvar keys = Object.keys(inputStaff)\n\t\t\t\tfor (var k = 0; k < keys.length; k++) {\n\t\t\t\t\tvar skip = keys[k] === \"voices\";\n\t\t\t\t\tif (keys[k] === \"meter\" && action.line !== 0)\n\t\t\t\t\t\tskip = true;\n\t\t\t\t\tif (!skip)\n\t\t\t\t\t\toutputLines[action.line].staff[action.staff][keys[k]] = inputStaff[keys[k]];\n\t\t\t\t}\n\t\t\t\tif (lastKeySig[action.staff])\n\t\t\t\t\toutputLines[action.line].staff[action.staff].key = lastKeySig[action.staff];\n\n\t\t\t}\n\t\t\tif (!outputLines[action.line].staff[action.staff].voices[action.voice]) {\n\t\t\t\toutputLines[action.line].staff[action.staff].voices[action.voice] = [];\n\t\t\t}\n\t\t\toutputLines[action.line].staff[action.staff].voices[action.voice] =\n\t\t\t\tlines[action.ogLine].staff[action.staff].voices[action.voice].slice(action.start, action.end+1);\n\t\t\tif (lastStem[action.staff*10+action.voice])\n\t\t\t\toutputLines[action.line].staff[action.staff].voices[action.voice].unshift({el_type: \"stem\", direction: lastStem[action.staff*10+action.voice].direction})\n\t\t\tvar currVoice = outputLines[action.line].staff[action.staff].voices[action.voice];\n\t\t\tfor (var kk = currVoice.length-1; kk >= 0; kk--) {\n\t\t\t\tif (currVoice[kk].el_type === \"key\") {\n\t\t\t\t\tlastKeySig[action.staff] = {\n\t\t\t\t\t\troot: currVoice[kk].root,\n\t\t\t\t\t\tacc: currVoice[kk].acc,\n\t\t\t\t\t\tmode: currVoice[kk].mode,\n\t\t\t\t\t\taccidentals: currVoice[kk].accidentals.filter(function (acc) { return acc.acc !== 'natural' })\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (kk = currVoice.length-1; kk >= 0; kk--) {\n\t\t\t\tif (currVoice[kk].el_type === \"stem\") {\n\t\t\t\t\tlastStem[action.staff*10+action.voice] = {\n\t\t\t\t\t\tdirection: currVoice[kk].direction,\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (barNumbers !== undefined && action.staff === 0 && action.voice === 0) {\n\t\t\t\tfor (kk = 0; kk < currVoice.length; kk++) {\n\t\t\t\t\tif (currVoice[kk].el_type === 'bar') {\n\t\t\t\t\t\tcurrentBarNumber++\n\t\t\t\t\t\tif (kk === currVoice.length-1)\n\t\t\t\t\t\t\tdelete currVoice[kk].barNumber\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tcurrVoice[kk].barNumber = currentBarNumber\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\toutputLines[action.line] = lines[action.ogLine];\n\t\t}\n\t}\n\t// There could be some missing info - if the tune passed in was incomplete or had different lengths for different voices or was missing a voice altogether - just fill in the gaps.\n\tfor (var ii = 0; ii < outputLines.length; ii++) {\n\t\tif (outputLines[ii].staff) {\n\t\t\toutputLines[ii].staff = outputLines[ii].staff.filter(function (el) {\n\t\t\t\treturn el != null;\n\t\t\t});\n\t\t}\n\t}\n\treturn outputLines;\n}\n\n\nfunction findLineBreaks(lines, lineBreakArray) {\n\t// lineBreakArray is an array of all of the sections of the tune - often there will just be one\n\t// section unless there is a subtitle or other non-music lines. Each of the elements of\n\t// Each element of lineBreakArray is an array of the zero-based last measure of the line.\n\tvar lineBreakIndexes = [];\n\tvar lbai = 0;\n\tvar lineCounter = 0;\n\tvar outputLine = 0;\n\tfor (var i = 0; i < lines.length; i++) {\n\t\tvar line = lines[i];\n\t\tif (line.staff) {\n\t\t\tvar lineStart = lineCounter;\n\t\t\tvar lineBreaks = lineBreakArray[lbai];\n\t\t\tlbai++;\n\t\t\tfor (var j = 0; j < line.staff.length; j++) {\n\t\t\t\tvar staff = line.staff[j];\n\t\t\t\tfor (var k = 0; k < staff.voices.length; k++) {\n\t\t\t\t\toutputLine = lineStart;\n\t\t\t\t\tvar measureNumber = 0;\n\t\t\t\t\tvar lbi = 0;\n\t\t\t\t\tvar voice = staff.voices[k];\n\t\t\t\t\tvar start = 0;\n\t\t\t\t\tfor (var e = 0; e < voice.length; e++) {\n\t\t\t\t\t\tvar el = voice[e];\n\n\t\t\t\t\t\tif (el.el_type === 'bar') {\n\t\t\t\t\t\t\tif (lineBreaks[lbi] === measureNumber) {\n\t\t\t\t\t\t\t\tlineBreakIndexes.push({ ogLine: i, line: outputLine, staff: j, voice: k, start: start, end: e})\n\t\t\t\t\t\t\t\tstart = e + 1;\n\t\t\t\t\t\t\t\toutputLine++;\n\t\t\t\t\t\t\t\tlineCounter = Math.max(lineCounter, outputLine)\n\t\t\t\t\t\t\t\tlbi++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmeasureNumber++;\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tlineBreakIndexes.push({ ogLine: i, line: outputLine, staff: j, voice: k, start: start, end: voice.length})\n\t\t\t\t\toutputLine++;\n\t\t\t\t\tlineCounter = Math.max(lineCounter, outputLine)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tlineBreakIndexes.push({ ogLine: i, line: outputLine })\n\t\t\toutputLine++;\n\t\t\tlineCounter = Math.max(lineCounter, outputLine)\n\t\t}\n\t}\n\treturn lineBreakIndexes;\n}\n\n\nfunction freeFormLineBreaks(widths, lineBreakPoint) {\n\tvar lineBreaks = [];\n\tvar totals = [];\n\tvar totalThisLine = 0;\n\t// run through each measure and see if the accumulation is less than the ideal.\n\t// if it passes the ideal, then see whether the last or this one is closer to the ideal.\n\tfor (var i = 0; i < widths.length; i++) {\n\t\tvar width = widths[i];\n\t\tvar attemptedWidth = totalThisLine + width;\n\t\tif (attemptedWidth < lineBreakPoint)\n\t\t\ttotalThisLine = attemptedWidth;\n\t\telse {\n\t\t\t// This just passed the ideal, so see whether the previous or the current number of measures is closer.\n\t\t\tvar oldDistance = lineBreakPoint - totalThisLine;\n\t\t\tvar newDistance = attemptedWidth - lineBreakPoint;\n\t\t\tif (oldDistance < newDistance && totalThisLine > 0) {\n\t\t\t\tlineBreaks.push(i - 1);\n\t\t\t\ttotals.push(Math.round(totalThisLine - width));\n\t\t\t\ttotalThisLine = width;\n\t\t\t} else {\n\t\t\t\tif (i < widths.length-1) {\n\t\t\t\t\tlineBreaks.push(i);\n\t\t\t\t\ttotals.push(Math.round(totalThisLine));\n\t\t\t\t\ttotalThisLine = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\ttotals.push(Math.round(totalThisLine));\n\treturn { lineBreaks: lineBreaks, totals: totals };\n}\n\nfunction clone(arr) {\n\tvar newArr = [];\n\tfor (var i = 0; i < arr.length; i++)\n\t\tnewArr.push(arr[i]);\n\treturn newArr;\n}\n\nfunction oneTry(measureWidths, idealWidths, accumulator, lineAccumulator, lineWidths, lastVariance, highestVariance, currLine, lineBreaks, startIndex, otherTries) {\n\tfor (var i = startIndex; i < measureWidths.length; i++) {\n\t\tvar measureWidth = measureWidths[i];\n\t\taccumulator += measureWidth;\n\t\tlineAccumulator += measureWidth;\n\t\tvar thisVariance = Math.abs(accumulator - idealWidths[currLine]);\n\t\tvar varianceIsClose = Math.abs(thisVariance - lastVariance) < idealWidths[0] / 10; // see if the difference is less than 10%, if so, run the test both ways.\n\t\tif (varianceIsClose) {\n\t\t\tif (thisVariance < lastVariance) {\n\t\t\t\t// Also attempt one less measure on the current line - sometimes that works out better.\n\t\t\t\tvar newWidths = clone(lineWidths);\n\t\t\t\tvar newBreaks = clone(lineBreaks);\n\t\t\t\tnewBreaks.push(i-1);\n\t\t\t\tnewWidths.push(lineAccumulator - measureWidth);\n\t\t\t\totherTries.push({\n\t\t\t\t\taccumulator: accumulator,\n\t\t\t\t\tlineAccumulator: measureWidth,\n\t\t\t\t\tlineWidths: newWidths,\n\t\t\t\t\tlastVariance: Math.abs(accumulator - idealWidths[currLine+1]),\n\t\t\t\t\thighestVariance: Math.max(highestVariance, lastVariance),\n\t\t\t\t\tcurrLine: currLine+1,\n\t\t\t\t\tlineBreaks: newBreaks,\n\t\t\t\t\tstartIndex: i+1});\n\t\t\t} else if (thisVariance > lastVariance && i < measureWidths.length-1) {\n\t\t\t\t// Also attempt one extra measure on this line.\n\t\t\t\tnewWidths = clone(lineWidths);\n\t\t\t\tnewBreaks = clone(lineBreaks);\n\t\t\t\t// newBreaks[newBreaks.length-1] = i;\n\t\t\t\t// newWidths[newWidths.length-1] = lineAccumulator;\n\t\t\t\totherTries.push({\n\t\t\t\t\taccumulator: accumulator,\n\t\t\t\t\tlineAccumulator: lineAccumulator,\n\t\t\t\t\tlineWidths: newWidths,\n\t\t\t\t\tlastVariance: thisVariance,\n\t\t\t\t\thighestVariance: Math.max(highestVariance, thisVariance),\n\t\t\t\t\tcurrLine: currLine,\n\t\t\t\t\tlineBreaks: newBreaks,\n\t\t\t\t\tstartIndex: i+1});\n\t\t\t}\n\t\t}\n\t\tif (thisVariance > lastVariance) {\n\t\t\tlineBreaks.push(i - 1);\n\t\t\tcurrLine++;\n\t\t\thighestVariance = Math.max(highestVariance, lastVariance);\n\t\t\tlastVariance = Math.abs(accumulator - idealWidths[currLine]);\n\t\t\tlineWidths.push(lineAccumulator - measureWidth);\n\t\t\tlineAccumulator = measureWidth;\n\t\t} else {\n\t\t\tlastVariance = thisVariance;\n\t\t}\n\t}\n\tlineWidths.push(lineAccumulator);\n}\n\nfunction optimizeLineWidths(widths, lineBreakPoint, lineBreaks, explanation) {\n\t//\tfigure out how many lines\n\tvar numLines = Math.ceil(widths.total / lineBreakPoint); // + 1 TODO-PER: this used to be plus one - not sure why\n\n\t//\tget the ideal width for a line (cumulative width / num lines) - approx the same as lineBreakPoint except for rounding\n\tvar idealWidth = Math.floor(widths.total / numLines);\n\n\t//\tget each ideal line width (1*ideal, 2*ideal, 3*ideal, etc)\n\tvar idealWidths = [];\n\tfor (var i = 0; i < numLines; i++)\n\t\tidealWidths.push(idealWidth*(i+1));\n\n\t//\tfrom first measure, step through accum. Widths until the abs of the ideal is greater than the last one.\n\t// This can sometimes look funny in edge cases, so when the length is within 10%, try one more or one less to see which is better.\n\t// This is better than trying all the possibilities because that would get to be a huge number for even a medium size piece.\n\t// This method seems to never generate more than about 16 tries and it is usually 4 or less.\n\tvar otherTries = [];\n\totherTries.push({\n\t\taccumulator: 0,\n\t\tlineAccumulator: 0,\n\t\tlineWidths: [],\n\t\tlastVariance: 999999,\n\t\thighestVariance: 0,\n\t\tcurrLine: 0,\n\t\tlineBreaks: [], // These are the zero-based last measure on each line\n\t\tstartIndex: 0});\n\tvar index = 0;\n\twhile (index < otherTries.length) {\n\t\toneTry(widths.measureWidths,\n\t\t\tidealWidths,\n\t\t\totherTries[index].accumulator,\n\t\t\totherTries[index].lineAccumulator,\n\t\t\totherTries[index].lineWidths,\n\t\t\totherTries[index].lastVariance,\n\t\t\totherTries[index].highestVariance,\n\t\t\totherTries[index].currLine,\n\t\t\totherTries[index].lineBreaks,\n\t\t\totherTries[index].startIndex,\n\t\t\totherTries);\n\t\tindex++;\n\t}\n\tfor (i = 0; i < otherTries.length; i++) {\n\t\tvar otherTry = otherTries[i];\n\t\totherTry.variances = [];\n\t\totherTry.aveVariance = 0;\n\t\tfor (var j = 0; j < otherTry.lineWidths.length; j++) {\n\t\t\tvar lineWidth = otherTry.lineWidths[j];\n\t\t\totherTry.variances.push(lineWidth - idealWidths[0]);\n\t\t\totherTry.aveVariance += Math.abs(lineWidth - idealWidths[0]);\n\t\t}\n\t\totherTry.aveVariance = otherTry.aveVariance / otherTry.lineWidths.length;\n\t\texplanation.attempts.push({ type: \"optimizeLineWidths\", lineBreaks: otherTry.lineBreaks, variances: otherTry.variances, aveVariance: otherTry.aveVariance, widths: widths.measureWidths });\n\t}\n\tvar smallest = 9999999;\n\tvar smallestIndex = -1;\n\tfor (i = 0; i < otherTries.length; i++) {\n\t\totherTry = otherTries[i];\n\t\tif (otherTry.aveVariance < smallest) {\n\t\t\tsmallest = otherTry.aveVariance;\n\t\t\tsmallestIndex = i;\n\t\t}\n\t}\n\treturn { failed: false, lineBreaks: otherTries[smallestIndex].lineBreaks, variance: otherTries[smallestIndex].highestVariance };\n}\n\nfunction fixedMeasureLineBreaks(widths, lineBreakPoint, preferredMeasuresPerLine) {\n\tvar lineBreaks = [];\n\tvar totals = [];\n\tvar thisWidth = 0;\n\tvar failed = false;\n\tfor (var i = 0; i < widths.length; i++) {\n\t\tthisWidth += widths[i];\n\t\tif (thisWidth > lineBreakPoint) {\n\t\t\tfailed = true;\n\t\t}\n\t\tif (i % preferredMeasuresPerLine === (preferredMeasuresPerLine-1)) {\n\t\t\tif (i !== widths.length-1) // Don't bother putting a line break for the last line - it's already a break.\n\t\t\t\tlineBreaks.push(i);\n\t\t\ttotals.push(Math.round(thisWidth));\n\t\t\tthisWidth = 0;\n\t\t}\n\t}\n\treturn { failed: failed, totals: totals, lineBreaks: lineBreaks };\n}\n\nfunction getRevisedTuneParams(lineBreaks, staffWidth, params) {\n\n\tvar revisedParams = {\n\t\tlineBreaks: lineBreaks,\n\t\tstaffwidth: staffWidth\n\t};\n\tfor (var key in params) {\n\t\tif (params.hasOwnProperty(key) && key !== 'wrap' && key !== 'staffwidth') {\n\t\t\trevisedParams[key] = params[key];\n\t\t}\n\t}\n\n\treturn { revisedParams: revisedParams };\n}\n\nfunction calcLineWraps(tune, widths, params) {\n\t// For calculating how much can go on the line, it depends on the width of the line. It is a convenience to just divide it here\n\t// by the minimum spacing instead of multiplying the min spacing later.\n\t// The scaling works differently: this is done by changing the scaling of the outer SVG, so the scaling needs to be compensated\n\t// for here, because the actual width will be different from the calculated numbers.\n\n\t// If the desired width is less than the margin, just punt and return the original tune\n\t//console.log(widths)\n\tif (widths.length === 0 || params.staffwidth < widths[0].left) {\n\t\treturn {\n\t\t\treParse: false,\n\t\t\texplanation: \"Staff width is narrower than the margin\",\n\t\t\trevisedParams: params\n\t\t};\n\t}\n\tvar scale = params.scale ? Math.max(params.scale, 0.1) : 1;\n\tvar minSpacing = params.wrap.minSpacing ? Math.max(parseFloat(params.wrap.minSpacing), 1) : 1;\n\tvar minSpacingLimit = params.wrap.minSpacingLimit ? Math.max(parseFloat(params.wrap.minSpacingLimit), 1) : minSpacing - 0.1;\n\tvar maxSpacing = params.wrap.maxSpacing ? Math.max(parseFloat(params.wrap.maxSpacing), 1) : undefined;\n\tif (params.wrap.lastLineLimit && !maxSpacing)\n\t\tmaxSpacing = Math.max(parseFloat(params.wrap.lastLineLimit), 1);\n\t// var targetHeight = params.wrap.targetHeight ? Math.max(parseInt(params.wrap.targetHeight, 10), 100) : undefined;\n\tvar preferredMeasuresPerLine = params.wrap.preferredMeasuresPerLine ? Math.max(parseInt(params.wrap.preferredMeasuresPerLine, 10), 0) : undefined;\n\n\tvar accumulatedLineBreaks = [];\n\tvar explanations = [];\n\tfor (var s = 0; s < widths.length; s++) {\n\t\tvar section = widths[s];\n\t\tvar usableWidth = params.staffwidth - section.left;\n\t\tvar lineBreakPoint = usableWidth / minSpacing / scale;\n\t\tvar minLineSize = usableWidth / maxSpacing / scale;\n\t\tvar allowableVariance = usableWidth / minSpacingLimit / scale;\n\t\tvar explanation = {\n\t\t\twidths: section,\n\t\t\tlineBreakPoint: lineBreakPoint,\n\t\t\tminLineSize: minLineSize,\n\t\t\tattempts: [],\n\t\t\tstaffWidth: params.staffwidth,\n\t\t\tminWidth: Math.round(allowableVariance)\n\t\t};\n\n\t\t// If there is a preferred number of measures per line, test that first. If none of the lines is too long, then we're finished.\n\t\tvar lineBreaks = null;\n\t\tif (preferredMeasuresPerLine) {\n\t\t\tvar f = fixedMeasureLineBreaks(section.measureWidths, lineBreakPoint, preferredMeasuresPerLine);\n\t\t\texplanation.attempts.push({\n\t\t\t\ttype: \"Fixed Measures Per Line\",\n\t\t\t\tpreferredMeasuresPerLine: preferredMeasuresPerLine,\n\t\t\t\tlineBreaks: f.lineBreaks,\n\t\t\t\tfailed: f.failed,\n\t\t\t\ttotals: f.totals\n\t\t\t});\n\t\t\tif (!f.failed)\n\t\t\t\tlineBreaks = f.lineBreaks;\n\t\t}\n\n\t\t// If we don't have lineBreaks yet, use the free form method of line breaks.\n\t\t// This will be called either if Preferred Measures is not used, or if the music is just weird - like a single measure is way too crowded.\n\t\tif (!lineBreaks) {\n\t\t\tvar ff = freeFormLineBreaks(section.measureWidths, lineBreakPoint);\n\t\t\texplanation.attempts.push({type: \"Free Form\", lineBreaks: ff.lineBreaks, totals: ff.totals});\n\t\t\tlineBreaks = ff.lineBreaks;\n\n\t\t\t// We now have an acceptable number of lines, but the measures may not be optimally distributed. See if there is a better distribution.\n\t\t\tif (lineBreaks.length > 0 && section.measureWidths.length < 25) {\n\t\t\t\t// Only do this if everything doesn't fit on one line.\n\t\t\t\t// This is an intensive operation and it is optional so just do it for shorter music.\n\t\t\t\tff = optimizeLineWidths(section, lineBreakPoint, lineBreaks, explanation);\n\t\t\t\texplanation.attempts.push({\n\t\t\t\t\ttype: \"Optimize\",\n\t\t\t\t\tfailed: ff.failed,\n\t\t\t\t\treason: ff.reason,\n\t\t\t\t\tlineBreaks: ff.lineBreaks,\n\t\t\t\t\ttotals: ff.totals\n\t\t\t\t});\n\t\t\t\tif (!ff.failed)\n\t\t\t\t\tlineBreaks = ff.lineBreaks;\n\t\t\t}\n\t\t}\n\t\taccumulatedLineBreaks.push(lineBreaks);\n\t\texplanations.push(explanation);\n\t}\n\t// If the vertical space exceeds targetHeight, remove a line and try again. If that is too crowded, then don't use it.\n\tvar staffWidth = params.staffwidth;\n\tvar ret = getRevisedTuneParams(accumulatedLineBreaks, staffWidth, params);\n\tret.explanation = explanations;\n\tret.reParse = true;\n\treturn ret;\n}\n\nmodule.exports = { wrapLines: wrapLines, calcLineWraps: calcLineWraps };\n","var keyAccidentals = require(\"../const/key-accidentals\");\nvar { relativeMajor, transposeKey, relativeMode } = require(\"../const/relative-major\");\nvar transposeChordName = require(\"../parse/transpose-chord\")\n\nvar strTranspose;\n\n(function () {\n\t\"use strict\";\n\tstrTranspose = function (abc, abcTune, steps) {\n\t\tif (abcTune === \"TEST\") // Backdoor way to get entry points for unit tests\n\t\t\treturn { keyAccidentals: keyAccidentals, relativeMajor: relativeMajor, transposeKey: transposeKey, relativeMode: relativeMode, transposeChordName: transposeChordName}\n\t\tsteps = parseInt(steps, 10)\n\t\tvar changes = [];\n\t\tvar i;\n\t\tfor (i = 0; i < abcTune.length; i++)\n\t\t\tchanges = changes.concat(transposeOneTune(abc, abcTune[i], steps))\n\n\t\t// Reverse sort so that we are replacing strings from the end to the beginning so that the indexes aren't invalidated as we go.\n\t\t// (Because voices can be written in different ways we can't count on the notes being encountered in the order they appear in the string.)\n\t\tchanges = changes.sort(function (a, b) {\n\t\t\treturn b.start - a.start\n\t\t})\n\t\tvar output = abc.split('')\n\t\tfor (i = 0; i < changes.length; i++) {\n\t\t\tvar ch = changes[i]\n\t\t\toutput.splice(ch.start, ch.end - ch.start, ch.note)\n\t\t}\n\t\treturn output.join('')\n\t}\n\n\tfunction transposeOneTune(abc, abcTune, steps) {\n\t\tvar changes = []\n\n\t\t// Don't transpose bagpipe music - that is a special case and is always a particular key\n\t\tvar key = abcTune.getKeySignature()\n\t\tif (key.root === 'Hp' || key.root === \"HP\")\n\t\t\treturn changes;\n\n\t\tchanges = changes.concat(changeAllKeySigs(abc, steps))\n\n\t\tfor (var i = 0; i < abcTune.lines.length; i++) {\n\t\t\tvar staves = abcTune.lines[i].staff\n\t\t\tif (staves) {\n\t\t\t\tfor (var j = 0; j < staves.length; j++) {\n\t\t\t\t\tvar staff = staves[j]\n\t\t\t\t\tif (staff.clef.type !== \"perc\")\n\t\t\t\t\t\tchanges = changes.concat(transposeVoices(abc, staff.voices, staff.key, steps))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn changes\n\t}\n\n\tfunction changeAllKeySigs(abc, steps) {\n\t\tvar changes = [];\n\t\tvar arr = abc.split(\"K:\")\n\t\t// now each line except the first one will start with whatever is right after \"K:\"\n\t\tvar count = arr[0].length\n\t\tfor (var i = 1; i < arr.length; i++) {\n\t\t\tvar segment = arr[i]\n\t\t\tvar match = segment.match(/^( *)([A-G])([#b]?)(\\w*)/)\n\t\t\tif (match) {\n\t\t\t\tvar start = count + 2 + match[1].length // move past the 'K:' and optional white space\n\t\t\t\tvar key = match[2] + match[3] + match[4] // key name, accidental, and mode\n\t\t\t\tvar destinationKey = newKey({ root: match[2], acc: match[3], mode: match[4] }, steps)\n\t\t\t\tvar dest = destinationKey.root + destinationKey.acc + destinationKey.mode\n\t\t\t\tchanges.push({ start: start, end: start + key.length, note: dest })\n\t\t\t}\n\t\t\tcount += segment.length + 2\n\t\t}\n\t\treturn changes\n\t}\n\n\tfunction transposeVoices(abc, voices, key, steps) {\n\t\tvar changes = [];\n\t\tvar destinationKey = newKey(key, steps)\n\t\tfor (var i = 0; i < voices.length; i++) {\n\t\t\tchanges = changes.concat(transposeVoice(abc, voices[i], key.root, createKeyAccidentals(key), destinationKey, steps))\n\t\t}\n\t\treturn changes\n\t}\n\n\tfunction createKeyAccidentals(key) {\n\t\tvar ret = {}\n\t\tfor (var i = 0; i < key.accidentals.length; i++) {\n\t\t\tvar acc = key.accidentals[i];\n\t\t\tif (acc.acc === 'flat')\n\t\t\t\tret[acc.note.toUpperCase()] = '_'\n\t\t\telse if (acc.acc === 'sharp')\n\t\t\t\tret[acc.note.toUpperCase()] = '^'\n\t\t}\n\t\treturn ret\n\t}\n\n\tfunction setLetterDistance(destinationKey, keyRoot, steps) {\n\t\tvar letterDistance = letters.indexOf(destinationKey.root) - letters.indexOf(keyRoot)\n\t\tif (keyRoot === \"none\")\n\t\t\tletterDistance = letters.indexOf(destinationKey.root)\n\t\tif (letterDistance === 0) {\n\t\t\t// This could either be a half step (like Eb => E) or almost an octave (like E => Eb)\n\t\t\tif (steps > 2) // If it is a large leap, then we are going up an octave\n\t\t\t\tletterDistance += 7\n\t\t\telse if (steps === -12) // If it is a large leap, then we are going down an octave\t\n\t\t\t \tletterDistance -= 7\n\t\t} else if (steps > 0 && letterDistance < 0) \n\t\t\tletterDistance += 7\n\t\telse if (steps < 0 && letterDistance > 0) \n\t\t\tletterDistance -= 7\n\n\t\tif (steps > 12)\n\t\t\tletterDistance += 7\n\t\telse if (steps < -12)\n\t\t\tletterDistance -= 7\n\n\t\treturn letterDistance\n\t}\n\n\tfunction transposeVoice(abc, voice, keyRoot, keyAccidentals, destinationKey, steps) {\n\t\tvar changes = []\n\t\tvar letterDistance = setLetterDistance(destinationKey, keyRoot, steps)\n\n\t\tvar measureAccidentals = {}\n\t\tvar transposedMeasureAccidentals = {}\n\t\tfor (var i = 0; i < voice.length; i++) {\n\t\t\tvar el = voice[i];\n\t\t\tif (el.chord) {\n\t\t\t\tfor (var c = 0; c < el.chord.length; c++) {\n\t\t\t\t\tvar ch = el.chord[c]\n\t\t\t\t\tif (ch.position === 'default') {\n\t\t\t\t\t\tvar prefersFlats = destinationKey.accidentals.length && destinationKey.accidentals[0].acc === 'flat'\n\t\t\t\t\t\tvar newChord = transposeChordName(ch.name, steps, prefersFlats, true)\n\t\t\t\t\t\tnewChord = newChord.replace(/♭/g, \"b\").replace(/♯/g, \"#\")\n\t\t\t\t\t\tif (newChord !== ch.name) // If we didn't recognize the chord the input is returned unchanged and there is nothing to replace\n\t\t\t\t\t\t\tchanges.push(replaceChord(abc, el.startChar, el.endChar, newChord))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (el.el_type === 'note' && el.pitches) {\n\t\t\t\tfor (var j = 0; j < el.pitches.length; j++) {\n\t\t\t\t\tvar note = parseNote(el.pitches[j].name, keyRoot, keyAccidentals, measureAccidentals)\n\t\t\t\t\tif (note.acc)\n\t\t\t\t\t\tmeasureAccidentals[note.name.toUpperCase()] = note.acc\n\t\t\t\t\tvar newPitch = transposePitch(note, destinationKey, letterDistance, transposedMeasureAccidentals)\n\t\t\t\t\tif (newPitch.acc)\n\t\t\t\t\t\ttransposedMeasureAccidentals[newPitch.upper] = newPitch.acc\n\t\t\t\t\tchanges.push(replaceNote(abc, el.startChar, el.endChar, newPitch.acc + newPitch.name, j))\n\t\t\t\t}\n\t\t\t\tif (el.gracenotes) {\n\t\t\t\t\tfor (var g = 0; g < el.gracenotes.length; g++) {\n\t\t\t\t\t\tvar grace = parseNote(el.gracenotes[g].name, keyRoot, keyAccidentals, measureAccidentals)\n\t\t\t\t\t\tif (grace.acc)\n\t\t\t\t\t\t\tmeasureAccidentals[grace.name.toUpperCase()] = grace.acc\n\t\t\t\t\t\tvar newGrace = transposePitch(grace, destinationKey, letterDistance, measureAccidentals)\n\t\t\t\t\t\tif (newGrace.acc)\n\t\t\t\t\t\t\ttransposedMeasureAccidentals[newGrace.upper] = newGrace.acc\n\t\t\t\t\t\tchanges.push(replaceGrace(abc, el.startChar, el.endChar, newGrace.acc + newGrace.name, g))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (el.el_type === \"bar\") {\n\t\t\t\tmeasureAccidentals = {}\n\t\t\t\ttransposedMeasureAccidentals = {}\n\t\t\t} else if (el.el_type === \"keySignature\") {\n\t\t\t\tkeyRoot = el.root\n\t\t\t\tkeyAccidentals = createKeyAccidentals(el)\n\t\t\t\tdestinationKey = newKey(el, steps)\n\t\t\t\tletterDistance = setLetterDistance(destinationKey, keyRoot, steps)\n\t\t\t}\n\t\t}\n\t\treturn changes\n\t}\n\n\tvar letters = \"CDEFGAB\"\n\tvar octaves = [\",,,,\", \",,,\", \",,\", \",\", \"\", \"'\", \"''\", \"'''\", \"''''\"]\n\n\tfunction newKey(key, steps) {\n\t\tif (key.root === \"none\") {\n\t\t\treturn { root: transposeKey(\"C\", steps), mode: \"\", acc: \"\", accidentals: [] }\n\t\t}\n\t\tvar major = relativeMajor(key.root + key.acc + key.mode)\n\t\tvar newMajor = transposeKey(major, steps)\n\t\tvar newMode = relativeMode(newMajor, key.mode)\n\t\tvar acc = keyAccidentals(newMajor)\n\t\treturn { root: newMode[0], mode: key.mode, acc: newMode.length > 1 ? newMode[1] : '', accidentals: acc }\n\t}\n\n\tfunction transposePitch(note, key, letterDistance, measureAccidentals) {\n\t\t// Depending on what the current note and new note are, the octave might have changed\n\t\t// The letterDistance is how far the change is to see if we passed \"C\" when transposing.\n\n\t\tvar pitch = note.pitch\n\t\tvar origDistFromC = letters.indexOf(note.name)\n\t\tvar root = letters.indexOf(key.root)\n\t\tvar index = (root + pitch) % 7\n\t\t// if the note crosses \"c\" then the octave changes, so that is true of \"B\" when going up one step, \"A\" and \"B\" when going up two steps, etc., and reverse when going down.\n\t\tvar newDistFromC = origDistFromC + letterDistance\n\t\tvar oct = note.oct\n\t\twhile (newDistFromC > 6) {\n\t\t\toct++\n\t\t\tnewDistFromC -= 7\n\t\t}\n\t\twhile (newDistFromC < 0) {\n\t\t\toct--\n\t\t\tnewDistFromC += 7\n\t\t}\n\n\t\tvar name = letters[index]\n\n\t\tvar acc = '';\n\t\tvar adj = note.adj\n\t\t// the amount of adjustment depends on the key - if there is a sharp in the key sig, then -1 is a natural, if there isn't, then -1 is a flat.\n\t\tvar keyAcc = '=';\n\t\tfor (var i = 0; i < key.accidentals.length; i++) {\n\t\t\tif (key.accidentals[i].note.toLowerCase() === name.toLowerCase()) {\n\t\t\t\tadj = adj + (key.accidentals[i].acc === 'flat' ? -1 : 1)\n\t\t\t\tkeyAcc = (key.accidentals[i].acc === 'flat' ? '_' : '^')\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tswitch (adj) {\n\t\t\tcase -2: acc = \"__\"; break;\n\t\t\tcase -1: acc = \"_\"; break;\n\t\t\tcase 0: acc = \"=\"; break;\n\t\t\tcase 1: acc = \"^\"; break;\n\t\t\tcase 2: acc = \"^^\"; break;\n\t\t\tcase -3:\n\t\t\t\t// This requires a triple flat, so bump down the pitch and try again\n\t\t\t\tvar newNote = {}\n\t\t\t\tnewNote.pitch = note.pitch - 1\n\t\t\t\tnewNote.oct = note.oct\n\t\t\t\tnewNote.name = letters[letters.indexOf(note.name) - 1]\n\t\t\t\tif (!newNote.name) {\n\t\t\t\t\tnewNote.name = \"B\"\n\t\t\t\t\tnewNote.oct--\n\t\t\t\t}\n\t\t\t\tif (newNote.name === \"B\" || newNote.name === \"E\")\n\t\t\t\t\tnewNote.adj = note.adj + 1;\n\t\t\t\telse\n\t\t\t\t\tnewNote.adj = note.adj + 2;\n\t\t\t\treturn transposePitch(newNote, key, letterDistance + 1, measureAccidentals)\n\t\t\tcase 3:\n\t\t\t\t// This requires a triple sharp, so bump up the pitch and try again\n\t\t\t\tvar newNote = {}\n\t\t\t\tnewNote.pitch = note.pitch + 1\n\t\t\t\tnewNote.oct = note.oct\n\t\t\t\tnewNote.name = letters[letters.indexOf(note.name) + 1]\n\t\t\t\tif (!newNote.name) {\n\t\t\t\t\tnewNote.name = \"C\"\n\t\t\t\t\tnewNote.oct++\n\t\t\t\t}\n\t\t\t\tif (newNote.name === \"C\" || newNote.name === \"F\")\n\t\t\t\t\tnewNote.adj = note.adj - 1;\n\t\t\t\telse\n\t\t\t\t\tnewNote.adj = note.adj - 2;\n\t\t\t\treturn transposePitch(newNote, key, letterDistance + 1, measureAccidentals)\n\t\t}\n\t\tif ((measureAccidentals[name] === acc || (!measureAccidentals[name] && acc === keyAcc)) && !note.courtesy)\n\t\t\tacc = \"\"\n\n\t\tswitch (oct) {\n\t\t\tcase 0: name = name + \",,,\"; break;\n\t\t\tcase 1: name = name + \",,\"; break;\n\t\t\tcase 2: name = name + \",\"; break;\n\t\t\t// case 3: it is already correct\n\t\t\tcase 4: name = name.toLowerCase(); break;\n\t\t\tcase 5: name = name.toLowerCase() + \"'\"; break;\n\t\t\tcase 6: name = name.toLowerCase() + \"''\"; break;\n\t\t\tcase 7: name = name.toLowerCase() + \"'''\"; break;\n\t\t\tcase 8: name = name.toLowerCase() + \"''''\"; break;\n\t\t}\n\t\tif (oct > 4)\n\t\t\tname = name.toLowerCase();\n\n\t\treturn { acc: acc, name: name, upper: name.toUpperCase() }\n\t}\n\n\tvar regPitch = /([_^=]*)([A-Ga-g])([,']*)/\n\tvar regNote = /([_^=]*[A-Ga-g][,']*)(\\d*\\/*\\d*)([\\>\\<\\-\\)\\.\\s\\\\]*)/\n\tvar regOptionalNote = /([_^=]*[A-Ga-g][,']*)?(\\d*\\/*\\d*)?([\\>\\<\\-\\)]*)?/\n\tvar regSpace = /(\\s*)$/\n\n\t// This the relationship of the note to the tonic and an octave. So what is returned is a distance in steps from the tonic and the amount of adjustment from\n\t// a normal scale. That is - in the key of D an F# is two steps from the tonic and no adjustment. A G# is three steps from the tonic and one half-step higher.\n\t// I don't think there is any adjustment needed for minor keys since the adjustment is based on the key signature and the accidentals.\n\tfunction parseNote(note, keyRoot, keyAccidentals, measureAccidentals) {\n\t\tvar root = keyRoot === \"none\" ? 0 : letters.indexOf(keyRoot)\n\t\tvar reg = note.match(regPitch)\n\t\t// reg[1] : \"__\", \"_\", \"\", \"=\", \"^\", or \"^^\"\n\t\t// reg[2] : A-G a-g\n\t\t// reg[3] : commas or apostrophes\n\t\tvar name = reg[2].toUpperCase()\n\t\tvar pos = letters.indexOf(name) - root;\n\t\tif (pos < 0) pos += 7\n\t\tvar oct = octaves.indexOf(reg[3])\n\t\tif (name === reg[2]) // See if it is a capital letter and subtract an octave if so.\n\t\t\toct--;\n\t\tvar currentAcc = measureAccidentals[name] || keyAccidentals[name] || \"=\" // use the key accidentals if they exist, but override with the measure accidentals, and if neither of them exist, use a natural.\n\t\treturn { acc: reg[1], name: name, pitch: pos, oct: oct, adj: calcAdjustment(reg[1], keyAccidentals[name], measureAccidentals[name]), courtesy: reg[1] === currentAcc }\n\t}\n\n\tfunction replaceNote(abc, start, end, newPitch, index) {\n\t\t// There may be more than just the note between the start and end - there could be spaces, there could be a chord symbol, there could be a decoration.\n\t\t// This could also be a part of a chord. If so, then the particular note needs to be teased out.\n\t\tvar note = abc.substring(start, end)\n\t\tvar match = note.match(new RegExp(regNote.source + regSpace.source), '')\n\t\tif (match) {\n\t\t\t// This will match a single note\n\t\t\tvar noteLen = match[1].length\n\t\t\tvar trailingLen = match[2].length + match[3].length + match[4].length\n\t\t\tvar leadingLen = end - start - noteLen - trailingLen\n\t\t\tstart += leadingLen\n\t\t\tend -= trailingLen\n\t\t} else {\n\t\t\t// I don't know how to capture more than one note, so I'm separating them. There is a limit of the number of notes in a chord depending on the repeats I have here, but it is unlikely to happen in real music.\n\t\t\tvar regPreBracket = /([^\\[]*)/\n\t\t\tvar regOpenBracket = /\\[/\n\t\t\tvar regCloseBracket = /\\-?](\\d*\\/*\\d*)?([\\>\\<\\-\\)]*)/\n\t\t\tmatch = note.match(new RegExp(regPreBracket.source + regOpenBracket.source + regOptionalNote.source +\n\t\t\t\tregOptionalNote.source + regOptionalNote.source + regOptionalNote.source +\n\t\t\t\tregOptionalNote.source + regOptionalNote.source + regOptionalNote.source +\n\t\t\t\tregOptionalNote.source + regCloseBracket.source + regSpace.source))\n\n\t\t\tif (match) {\n\t\t\t\t// This will match a chord\n\t\t\t\t// Get the number of chars used by the previous notes in this chord\n\t\t\t\tvar count = 1 + match[1].length // one character for the open bracket\n\t\t\t\tfor (var i = 0; i < index; i++) { // index is the iteration through the chord. This function gets called for each one.\n\t\t\t\t\tif (match[i * 3 + 2])\n\t\t\t\t\t\tcount += match[i * 3 + 2].length\n\t\t\t\t\tif (match[i * 3 + 3])\n\t\t\t\t\t\tcount += match[i * 3 + 3].length\n\t\t\t\t\tif (match[i * 3 + 4])\n\t\t\t\t\t\tcount += match[i * 3 + 4].length\n\t\t\t\t}\n\t\t\t\tstart += count\n\t\t\t\tvar endLen = match[index * 3 + 2] ? match[index * 3 + 2].length : 0\n\t\t\t\t// endLen += match[index * 3 + 3] ? match[index * 3 + 3].length : 0\n\t\t\t\t// endLen += match[index * 3 + 4] ? match[index * 3 + 4].length : 0\n\n\t\t\t\tend = start + endLen\n\t\t\t}\n\t\t}\n\t\treturn { start: start, end: end, note: newPitch }\n\t}\n\n\tfunction replaceGrace(abc, start, end, newGrace, index) {\n\t\tvar note = abc.substring(start, end)\n\t\t// I don't know how to capture more than one note, so I'm separating them. There is a limit of the number of notes in a chord depending on the repeats I have here, but it is unlikely to happen in real music.\n\t\tvar regOpenBrace = /\\{/\n\t\tvar regCloseBrace = /\\}/\n\t\tvar regPreBrace = /([^\\{]*)/\n\t\tvar regPreNote = /(\\/*)/\n\t\tvar match = note.match(new RegExp(regPreBrace.source + regOpenBrace.source + regPreNote.source + regOptionalNote.source +\n\t\t\tregPreNote.source + regOptionalNote.source + regPreNote.source + regOptionalNote.source + regPreNote.source + regOptionalNote.source +\n\t\t\tregPreNote.source + regOptionalNote.source + regPreNote.source + regOptionalNote.source + regPreNote.source + regOptionalNote.source +\n\t\t\tregPreNote.source + regOptionalNote.source + regCloseBrace.source))\n\t\tif (match) {\n\t\t\t// This will match all notes inside a grace symbol\n\t\t\t// Get the number of chars used by the previous graces\n\t\t\tvar count = 1 + match[1].length // one character for the open brace, and whatever comes before the brace\n\t\t\tfor (var i = 0; i < index; i++) { // index is the iteration through the chord. This function gets called for each one.\n\t\t\t\tif (match[i * 3 + 2])\n\t\t\t\t\tcount += match[i * 3 + 2].length\n\t\t\t\tif (match[i * 3 + 3])\n\t\t\t\t\tcount += match[i * 3 + 3].length\n\t\t\t\tif (match[i * 3 + 4])\n\t\t\t\t\tcount += match[i * 3 + 4].length\n\t\t\t\tif (match[i * 3 + 5])\n\t\t\t\t\tcount += match[i * 3 + 5].length\n\t\t\t}\n\t\t\tif (match[index * 3 + 2])\n\t\t\t\tcount += match[i * 3 + 2].length\n\t\t\tstart += count\n\t\t\tvar endLen = match[index * 3 + 3] ? match[index * 3 + 3].length : 0\n\t\t\tendLen += match[index * 3 + 4] ? match[index * 3 + 4].length : 0\n\t\t\tendLen += match[index * 3 + 5] ? match[index * 3 + 5].length : 0\n\n\t\t\tend = start + endLen\n\t\t}\n\t\treturn { start: start, end: end, note: newGrace }\n\t}\n\n\tfunction replaceChord(abc, start, end, newChord) {\n\t\t// Isolate the chord and just replace that\n\t\tvar match = abc.substring(start, end).match(/([^\"]+)?(\".+\")+/)\n\t\tif (match[1])\n\t\t\tstart += match[1].length\n\t\tend = start + match[2].length\n\t\t// leave the quote in, so skip one more\n\t\treturn { start: start + 1, end: end - 1, note: newChord }\n\t}\n\n\tfunction calcAdjustment(thisAccidental, keyAccidental, measureAccidental) {\n\t\tif (!thisAccidental && measureAccidental) {\n\t\t\t// There was no accidental on this note, but there was earlier in the measure, so we'll use that\n\t\t\tthisAccidental = measureAccidental\n\t\t}\n\t\tif (!thisAccidental)\n\t\t\treturn 0; // there is no deviation from the key.\n\n\t\tswitch (keyAccidental) {\n\t\t\tcase undefined:\n\t\t\t\tswitch (thisAccidental) {\n\t\t\t\t\tcase '__': return -2;\n\t\t\t\t\tcase '_': return -1;\n\t\t\t\t\tcase '=': return 0;\n\t\t\t\t\tcase '^': return 1;\n\t\t\t\t\tcase '^^': return 2;\n\t\t\t\t\tdefault: return 0; // this should never happen\n\t\t\t\t}\n\t\t\tcase '_':\n\t\t\t\tswitch (thisAccidental) {\n\t\t\t\t\tcase '__': return -1;\n\t\t\t\t\tcase '_': return 0;\n\t\t\t\t\tcase '=': return 1;\n\t\t\t\t\tcase '^': return 2;\n\t\t\t\t\tcase '^^': return 3;\n\t\t\t\t\tdefault: return 0; // this should never happen\n\t\t\t\t}\n\t\t\tcase '^':\n\t\t\t\tswitch (thisAccidental) {\n\t\t\t\t\tcase '__': return -3;\n\t\t\t\t\tcase '_': return -2;\n\t\t\t\t\tcase '=': return -1;\n\t\t\t\t\tcase '^': return 0;\n\t\t\t\t\tcase '^^': return 1;\n\t\t\t\t\tdefault: return 0; // this should never happen\n\t\t\t\t}\n\t\t}\n\t\treturn 0// this should never happen\n\t}\n})();\n\nmodule.exports = strTranspose;\n","// abc_midi_flattener.js: Turn a linear series of events into a series of MIDI commands.\n\n// We input a set of voices, but the notes are still complex. This pass changes the logical definitions\n// of the grace notes, decorations, ties, triplets, rests, transpositions, keys, and accidentals into actual note durations.\n// It also extracts guitar chords to a separate voice and resolves their rhythm.\n\nvar flatten;\nvar ChordTrack = require(\"./chord-track\");\nvar pitchesToPerc = require('./pitches-to-perc');\n\n(function() {\n\t\"use strict\";\n\n\tvar barAccidentals;\n\tvar accidentals;\n\tvar transpose;\n\tvar bagpipes;\n\tvar tracks;\n\tvar startingTempo;\n\tvar startingMeter;\n\tvar tempoChangeFactor = 1;\n\tvar instrument;\n\tvar currentInstrument;\n\t// var channel;\n\tvar currentTrack;\n\tvar lastNoteDurationPosition;\n\tvar currentTrackName;\n\tvar lastEventTime;\n\tvar chordTrack;\n\n\tvar meter = { num: 4, den: 4 };\n\tvar drumInstrument = 128;\n\tvar lastBarTime;\n\tvar doBeatAccents = true;\n\tvar stressBeat1 = 105;\n\tvar stressBeatDown = 95;\n\tvar stressBeatUp = 85;\n\tvar beatFraction = 0.25;\n\tvar nextVolume;\n\tvar nextVolumeDelta;\n\tvar slurCount = 0;\n\n\tvar drumTrack;\n\tvar drumTrackFinished;\n\tvar drumDefinition = {};\n\tvar drumBars;\n\n\tvar pickupLength = 0;\n\tvar percmap;\n\n\t// The gaps per beat. The first two are in seconds, the third is in fraction of a duration.\n\tvar normalBreakBetweenNotes = 0; //0.000520833333325*1.5; // for articulation (matches muse score value)\n\tvar slurredBreakBetweenNotes = -0.001; // make the slurred notes actually overlap\n\tvar staccatoBreakBetweenNotes = 0.4; // some people say staccato is half duration, some say 3/4 so this splits it\n\n\tflatten = function(voices, options, percmap_, midiOptions) {\n\t\tif (!options) options = {};\n\t\tif (!midiOptions) midiOptions = {};\n\t\tbarAccidentals = [];\n\t\taccidentals = [0,0,0,0,0,0,0];\n\t\tbagpipes = false;\n\t\ttracks = [];\n\t\tstartingTempo = options.qpm;\n\t\tstartingMeter = undefined;\n\t\ttempoChangeFactor = 1;\n\t\tinstrument = undefined;\n\t\tcurrentInstrument = undefined;\n\t\t// channel = undefined;\n\t\tcurrentTrack = undefined;\n\t\tcurrentTrackName = undefined;\n\t\tlastEventTime = 0;\n\t\tpercmap = percmap_;\n\n\t\tmeter = { num: 4, den: 4 };\n\n\t\tdoBeatAccents = true;\n\t\tstressBeat1 = 105;\n\t\tstressBeatDown = 95;\n\t\tstressBeatUp = 85;\n\t\tbeatFraction = 0.25;\n\t\tnextVolume = undefined;\n\t\tnextVolumeDelta = undefined;\n\t\tslurCount = 0;\n\n\t\t// For the drum/metronome track.\n\t\tdrumTrack = [];\n\t\tdrumTrackFinished = false;\n\t\tdrumDefinition = {};\n\t\tdrumBars = 1;\n\n\t\tif (voices.length > 0 && voices[0].length > 0)\n\t\t\tpickupLength = voices[0][0].pickupLength;\n\n\t\t// For resolving chords.\n\t\tif (options.bassprog !== undefined && !midiOptions.bassprog)\n\t\t\tmidiOptions.bassprog = [options.bassprog]\n\t\tif (options.bassvol !== undefined && !midiOptions.bassvol)\n\t\t\tmidiOptions.bassvol = [options.bassvol]\n\t\tif (options.chordprog !== undefined && !midiOptions.chordprog)\n\t\t\tmidiOptions.chordprog = [options.chordprog]\n\t\tif (options.chordvol !== undefined && !midiOptions.chordvol)\n\t\t\tmidiOptions.chordvol = [options.chordvol]\n\t\tif (options.gchord !== undefined && !midiOptions.gchord)\n\t\t\tmidiOptions.gchord = [options.gchord]\n\t\tchordTrack = new ChordTrack(voices.length, options.chordsOff, midiOptions, meter)\n\n\t\t// First adjust the input to resolve ties, set the starting time for each note, etc. That will make the rest of the logic easier\n\t\tpreProcess(voices, options);\n\n\t\tfor (var i = 0; i < voices.length; i++) {\n\t\t\ttranspose = 0;\n\t\t\tchordTrack.setTranspose(transpose)\n\t\t\tlastNoteDurationPosition = -1;\n\t\t\tvar voice = voices[i];\n\t\t\tcurrentTrack = [{ cmd: 'program', channel: i, instrument: instrument }];\n\t\t\tcurrentTrackName = undefined;\n\t\t\tlastBarTime = 0;\n\t\t\tchordTrack.setLastBarTime(0)\n\t\t\tvar voiceOff = false;\n\t\t\tif (options.voicesOff === true)\n\t\t\t\tvoiceOff = true;\n\t\t\telse if (options.voicesOff && options.voicesOff.length && options.voicesOff.indexOf(i) >= 0)\n\t\t\t\tvoiceOff = true;\n\t\t\tfor (var j = 0; j < voice.length; j++) {\n\t\t\t\tvar element = voice[j];\n\t\t\t\tswitch (element.el_type) {\n\t\t\t\t\tcase \"name\":\n\t\t\t\t\t\tcurrentTrackName = {cmd: 'text', type: \"name\", text: element.trackName };\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"note\":\n\t\t\t\t\t\twriteNote(element, voiceOff);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"key\":\n\t\t\t\t\t\taccidentals = setKeySignature(element);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"meter\":\n\t\t\t\t\t\tif (!startingMeter)\n\t\t\t\t\t\t\tstartingMeter = element;\n\t\t\t\t\t\tmeter = element;\n\t\t\t\t\t\tchordTrack.setMeter(meter)\n\t\t\t\t\t\tbeatFraction = getBeatFraction(meter);\n\t\t\t\t\t\talignDrumToMeter();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tempo\":\n\t\t\t\t\t\tif (!startingTempo)\n\t\t\t\t\t\t\tstartingTempo = element.qpm;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ttempoChangeFactor = element.qpm ? startingTempo / element.qpm : 1;\n\t\t\t\t\t\tchordTrack.setTempoChangeFactor(tempoChangeFactor)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"transpose\":\n\t\t\t\t\t\ttranspose = element.transpose;\n\t\t\t\t\t\tchordTrack.setTranspose(transpose)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"bar\":\n\t\t\t\t\t\tchordTrack.barEnd(element)\n\n\t\t\t\t\t\tbarAccidentals = [];\n\t\t\t\t\t\tif (i === 0) // Only write the drum part on the first voice so that it is not duplicated.\n\t\t\t\t\t\t\twriteDrum(voices.length+1);\n\t\t\t\t\t\t\tchordTrack.setRhythmHead(false) // decide whether there are rhythm heads each measure.\n\t\t\t\t\t\tlastBarTime = timeToRealTime(element.time);\n\t\t\t\t\t\tchordTrack.setLastBarTime(lastBarTime)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"bagpipes\":\n\t\t\t\t\t\tbagpipes = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"instrument\":\n\t\t\t\t\t\tif (instrument === undefined)\n\t\t\t\t\t\t\tinstrument = element.program;\n\t\t\t\t\t\tcurrentInstrument = element.program;\n\t\t\t\t\t\tif (currentTrack.length > 0 && currentTrack[currentTrack.length-1].cmd === 'program')\n\t\t\t\t\t\t\tcurrentTrack[currentTrack.length-1].instrument = element.program;\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvar ii;\n\t\t\t\t\t\t\tfor (ii = currentTrack.length-1; ii >= 0 && currentTrack[ii].cmd !== 'program'; ii--)\n\t\t\t\t\t\t\t\t;\n\t\t\t\t\t\t\tif (ii < 0 || currentTrack[ii].instrument !== element.program)\n\t\t\t\t\t\t\t\tcurrentTrack.push({cmd: 'program', channel: 0, instrument: element.program});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"channel\":\n\t\t\t\t\t\tsetChannel(element.channel);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"drum\":\n\t\t\t\t\t\tdrumDefinition = normalizeDrumDefinition(element.params);\n\t\t\t\t\t\talignDrumToMeter();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"gchordOn\":\n\t\t\t\t\t\tchordTrack.gChordOn(element)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"beat\":\n\t\t\t\t\t\tstressBeat1 = element.beats[0];\n\t\t\t\t\t\tstressBeatDown = element.beats[1];\n\t\t\t\t\t\tstressBeatUp = element.beats[2];\n\t\t\t\t\t\t// TODO-PER: also use the last parameter - which changes which beats are strong.\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"vol\":\n\t\t\t\t\t\tnextVolume = element.volume;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"volinc\":\n\t\t\t\t\t\tnextVolumeDelta = element.volume;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"beataccents\":\n\t\t\t\t\t\tdoBeatAccents = element.value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"gchord\":\n\t\t\t\t\tcase \"bassprog\":\n\t\t\t\t\tcase \"chordprog\":\n\t\t\t\t\tcase \"bassvol\":\n\t\t\t\t\tcase \"chordvol\":\n\t\t\t\t\t\tchordTrack.paramChange(element)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// This should never happen\n\t\t\t\t\t\tconsole.log(\"MIDI creation. Unknown el_type: \" + element.el_type + \"\\n\");// jshint ignore:line\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (currentTrack[0].instrument === undefined)\n\t\t\t\tcurrentTrack[0].instrument = instrument ? instrument : 0;\n\t\t\tif (currentTrackName)\n\t\t\t\tcurrentTrack.unshift(currentTrackName);\n\t\t\ttracks.push(currentTrack);\n\t\t\tchordTrack.finish()\n\t\t\tif (drumTrack.length > 0) // Don't do drums on more than one track, so turn off drum after we create it.\n\t\t\t\tdrumTrackFinished = true;\n\t\t}\n\t\t// See if any notes are octaves played at the same time. If so, raise the pitch of the higher one.\n\t\tif (options.detuneOctave)\n\t\t\tfindOctaves(tracks, parseInt(options.detuneOctave, 10));\n\n\t\tchordTrack.addTrack(tracks)\n\t\tif (drumTrack.length > 0)\n\t\t\ttracks.push(drumTrack);\n\n\t\treturn { tempo: startingTempo, instrument: instrument, tracks: tracks, totalDuration: lastEventTime };\n\t};\n\n\tfunction setChannel(channel) {\n\t\tfor (var i = currentTrack.length-1; i>=0; i--) {\n\t\t\tif (currentTrack[i].cmd === \"program\") {\n\t\t\t\tcurrentTrack[i].channel = channel;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction timeToRealTime(time) {\n\t\treturn time/1000000;\n\t}\n\n\tfunction durationRounded(duration) {\n\t\treturn Math.round(duration*tempoChangeFactor*1000000)/1000000;\n\t}\n\n\tfunction preProcess(voices, options) {\n\t\tfor (var i = 0; i < voices.length; i++) {\n\t\t\tvar voice = voices[i];\n\t\t\tvar ties = {};\n\t\t\tvar startingTempo = options.qpm;\n\t\t\tvar timeCounter = 0;\n\t\t\tvar tempoMultiplier = 1;\n\t\t\tfor (var j = 0; j < voice.length; j++) {\n\t\t\t\tvar element = voice[j];\n\n\t\t\t\tif (element.el_type === 'tempo') {\n\t\t\t\t\tif (!startingTempo)\n\t\t\t\t\t\tstartingTempo = element.qpm;\n\t\t\t\t\telse\n\t\t\t\t\t\ttempoMultiplier = element.qpm ? startingTempo / element.qpm : 1;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// For convenience, put the current time in each event so that it doesn't have to be calculated in the complicated stuff that follows.\n\t\t\t\telement.time = timeCounter;\n\t\t\t\tvar thisDuration = element.duration ? element.duration : 0;\n\t\t\t\ttimeCounter += Math.round(thisDuration*tempoMultiplier*1000000); // To compensate for JS rounding problems, do all intermediate calcs on integers.\n\n\t\t\t\t// If there are pitches then put the duration in the pitch object and if there are ties then change the duration of the first note in the tie.\n\t\t\t\tif (element.pitches) {\n\t\t\t\t\tfor (var k = 0; k < element.pitches.length; k++) {\n\t\t\t\t\t\tvar pitch = element.pitches[k];\n\t\t\t\t\t\tif (pitch) {\n\t\t\t\t\t\t\tpitch.duration = element.duration;\n\t\t\t\t\t\t\tif (pitch.startTie) {\n\t\t\t\t\t\t\t\t//console.log(element)\n\t\t\t\t\t\t\t\tif (ties[pitch.pitch] === undefined) // We might have three notes tied together - if so just add this duration.\n\t\t\t\t\t\t\t\t\tties[pitch.pitch] = {el: j, pitch: k};\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tvoice[ties[pitch.pitch].el].pitches[ties[pitch.pitch].pitch].duration += pitch.duration;\n\t\t\t\t\t\t\t\t\telement.pitches[k] = null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t//console.log(\">>> START\", JSON.stringify(ties));\n\t\t\t\t\t\t\t} else if (pitch.endTie) {\n\t\t\t\t\t\t\t\t//console.log(element)\n\t\t\t\t\t\t\t\tvar tie = ties[pitch.pitch];\n\t\t\t\t\t\t\t\t//console.log(\">>> END\", pitch.pitch, tie, JSON.stringify(ties));\n\t\t\t\t\t\t\t\tif (tie) {\n\t\t\t\t\t\t\t\t\tvar dur = pitch.duration;\n\t\t\t\t\t\t\t\t\tdelete voice[tie.el].pitches[tie.pitch].startTie;\n\t\t\t\t\t\t\t\t\tvoice[tie.el].pitches[tie.pitch].duration += dur;\n\t\t\t\t\t\t\t\t\telement.pitches[k] = null;\n\t\t\t\t\t\t\t\t\tdelete ties[pitch.pitch];\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tdelete pitch.endTie;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdelete element.duration;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var key in ties) {\n\t\t\t\tif (ties.hasOwnProperty(key)) {\n\t\t\t\t\tvar item = ties[key];\n\t\t\t\t\tdelete voice[item.el].pitches[item.pitch].startTie;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// voices[0].forEach(v => delete v.elem)\n\t\t\t// voices[1].forEach(v => delete v.elem)\n\t\t\t// console.log(JSON.stringify(voices))\n\t\t}\n\t}\n\n\tfunction getBeatFraction(meter) {\n\t\tswitch (parseInt(meter.den,10)) {\n\t\t\tcase 2: return 0.5;\n\t\t\tcase 4: return 0.25;\n\t\t\tcase 8:\n\t\t\t\tif (meter.num % 3 === 0)\n\t\t\t\t\treturn 0.375;\n\t\t\t\telse\n\t\t\t\t\treturn 0.125;\n\t\t\tcase 16: return 0.125;\n\t\t}\n\t\treturn 0.25;\n\t}\n\n\tfunction calcBeat(measureStart, beatLength, currTime) {\n\t\tvar distanceFromStart = currTime - measureStart;\n\t\treturn distanceFromStart / beatLength;\n\t}\n\n\tfunction processVolume(beat, voiceOff) {\n\t\tif (voiceOff)\n\t\t\treturn 0;\n\n\t\tvar volume;\n\t\tif (nextVolume) {\n\t\t\tvolume = nextVolume;\n\t\t\tnextVolume = undefined;\n\t\t} else if (!doBeatAccents) {\n\t\t\tvolume = stressBeatDown;\n\t\t} else if (pickupLength > beat) {\n\t\t\tvolume = stressBeatUp;\n\t\t} else {\n\t\t\t//var barLength = meter.num / meter.den;\n\t\t\tvar barBeat = calcBeat(lastBarTime, getBeatFraction(meter), beat);\n\t\t\tif (barBeat === 0)\n\t\t\t\tvolume = stressBeat1;\n\t\t\telse if (parseInt(barBeat,10) === barBeat)\n\t\t\t\tvolume = stressBeatDown;\n\t\t\telse\n\t\t\t\tvolume = stressBeatUp;\n\t\t}\n\t\tif (nextVolumeDelta) {\n\t\t\tvolume += nextVolumeDelta;\n\t\t\tnextVolumeDelta = undefined;\n\t\t}\n\t\tif (volume < 0)\n\t\t\tvolume = 0;\n\t\tif (volume > 127)\n\t\t\tvolume = 127;\n\t\treturn voiceOff ? 0 : volume;\n\t}\n\n\n\tfunction findNoteModifications(elem, velocity) {\n\t\tvar ret = { };\n\t\tif (elem.decoration) {\n\t\t\tfor (var d = 0; d < elem.decoration.length; d++) {\n\t\t\t\tif (elem.decoration[d] === 'staccato')\n\t\t\t\t\tret.thisBreakBetweenNotes = 'staccato';\n\t\t\t\telse if (elem.decoration[d] === 'tenuto')\n\t\t\t\t\tret.thisBreakBetweenNotes = 'tenuto';\n\t\t\t\telse if (elem.decoration[d] === 'accent')\n\t\t\t\t\tret.velocity = Math.min(127, velocity * 1.5);\n\t\t\t\telse if (elem.decoration[d] === 'trill')\n\t\t\t\t\tret.noteModification = \"trill\";\n\t\t\t\telse if (elem.decoration[d] === 'lowermordent')\n\t\t\t\t\tret.noteModification = \"lowermordent\";\n\t\t\t\telse if (elem.decoration[d] === 'uppermordent')\n\t\t\t\t\tret.noteModification = \"mordent\";\n\t\t\t\telse if (elem.decoration[d] === 'mordent')\n\t\t\t\t\tret.noteModification = \"mordent\";\n\t\t\t\telse if (elem.decoration[d] === 'turn')\n\t\t\t\t\tret.noteModification = \"turn\";\n\t\t\t\telse if (elem.decoration[d] === 'roll')\n\t\t\t\t\tret.noteModification = \"roll\";\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t}\n\n\tfunction doModifiedNotes(noteModification, p) {\n\t\tvar noteTime;\n\t\tvar numNotes;\n\t\tvar start = p.start;\n\t\tvar pp;\n\t\tvar runningDuration = p.duration;\n\t\tvar shortestNote = durationRounded(1.0 / 32);\n\n\t\tswitch (noteModification) {\n\t\t\tcase \"trill\":\n\t\t\t\tvar note = 1;\n\t\t\t\twhile (runningDuration > 0) {\n\t\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch+note, volume: p.volume, start: start, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\t\tnote = (note === 1) ? 0 : 1;\n\t\t\t\t\trunningDuration -= shortestNote;\n\t\t\t\t\tstart += shortestNote;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"mordent\":\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\trunningDuration -= shortestNote;\n\t\t\t\tstart += shortestNote;\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch+1, volume: p.volume, start: start, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\trunningDuration -= shortestNote;\n\t\t\t\tstart += shortestNote;\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start, duration: runningDuration, gap: 0, instrument: currentInstrument });\n\t\t\t\tbreak;\n\t\t\tcase \"lowermordent\":\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\trunningDuration -= shortestNote;\n\t\t\t\tstart += shortestNote;\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch-1, volume: p.volume, start: start, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\trunningDuration -= shortestNote;\n\t\t\t\tstart += shortestNote;\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start, duration: runningDuration, gap: 0, instrument: currentInstrument });\n\t\t\t\tbreak;\n\t\t\tcase \"turn\":\n\t\t\t\tshortestNote = p.duration / 5;\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch+1, volume: p.volume, start: start+shortestNote, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start+shortestNote*2, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch+1, volume: p.volume, start: start+shortestNote*3, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start+shortestNote*4, duration: shortestNote, gap: 0, instrument: currentInstrument });\n\t\t\t\tbreak;\n\t\t\tcase \"roll\":\n\t\t\t\twhile (runningDuration > 0) {\n\t\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\t\trunningDuration -= shortestNote*2;\n\t\t\t\t\tstart += shortestNote*2;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tfunction writeNote(elem, voiceOff) {\n\t\t//\n\t\t// Create a series of note events to append to the current track.\n\t\t// The output event is one of: { pitchStart: pitch_in_abc_units, volume: from_1_to_64 }\n\t\t// { pitchStop: pitch_in_abc_units }\n\t\t// { moveTime: duration_in_abc_units }\n\t\t// If there are guitar chords, then they are put in a separate track, but they have the same format.\n\t\t//\n\n\t\t//var trackStartingIndex = currentTrack.length;\n\n\t\tvar velocity = processVolume(timeToRealTime(elem.time), voiceOff);\n\t\tchordTrack.processChord(elem)\n\n\t\t// if there are grace notes, then also play them.\n\t\t// I'm not sure there is an exact rule for the length of the notes. My rule, unless I find\n\t\t// a better one is: the grace notes cannot take more than 1/2 of the main note's value.\n\t\t// A grace note (of 1/8 note duration) takes 1/8 of the main note's value.\n\t\tvar graces;\n\t\tif (elem.gracenotes && elem.pitches && elem.pitches.length > 0 && elem.pitches[0]) {\n\t\t\tgraces = processGraceNotes(elem.gracenotes, elem.pitches[0].duration);\n\t\t\tif (elem.elem)\n\t\t\t\telem.elem.midiGraceNotePitches = writeGraceNotes(graces, timeToRealTime(elem.time), velocity*2/3, currentInstrument); // make the graces a little quieter.\n\t\t}\n\n\t\t// The beat fraction is the note that gets a beat (.25 is a quarter note)\n\t\t// The tempo is in minutes and we want to get to milliseconds.\n\t\t// If the element is inside a repeat, there may be more than one value. If there is one value,\n\t\t// then just store that as a number. If there are more than one value, then change that to\n\t\t// an array and return all of them.\n\t\tif (elem.elem) {\n\t\t\tvar rt = timeToRealTime(elem.time);\n\t\t\tvar ms = rt / beatFraction / startingTempo * 60 * 1000;\n\t\t\tif (elem.elem.currentTrackMilliseconds === undefined) {\n\t\t\t\telem.elem.currentTrackMilliseconds = ms;\n\t\t\t\telem.elem.currentTrackWholeNotes = rt;\n\t\t\t} else {\n\t\t\t\tif (elem.elem.currentTrackMilliseconds.length === undefined) {\n\t\t\t\t\tif (elem.elem.currentTrackMilliseconds !== ms) {\n\t\t\t\t\t\telem.elem.currentTrackMilliseconds = [elem.elem.currentTrackMilliseconds, ms];\n\t\t\t\t\t\telem.elem.currentTrackWholeNotes = [elem.elem.currentTrackWholeNotes, rt];\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// There can be duplicates if there are multiple voices\n\t\t\t\t\tvar found = false;\n\t\t\t\t\tfor (var j = 0; j < elem.elem.currentTrackMilliseconds.length; j++) {\n\t\t\t\t\t\tif (elem.elem.currentTrackMilliseconds[j] === ms)\n\t\t\t\t\t\t\tfound = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (!found) {\n\t\t\t\t\t\telem.elem.currentTrackMilliseconds.push(ms);\n\t\t\t\t\t\telem.elem.currentTrackWholeNotes.push(rt);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t//var tieAdjustment = 0;\n\t\tif (elem.pitches) {\n\t\t\tvar thisBreakBetweenNotes = '';\n\t\t\tvar ret = findNoteModifications(elem, velocity);\n\t\t\tif (ret.thisBreakBetweenNotes)\n\t\t\t\tthisBreakBetweenNotes = ret.thisBreakBetweenNotes;\n\t\t\tif (ret.velocity)\n\t\t\t\tvelocity = ret.velocity;\n\n\t\t\t// TODO-PER: Can also make a different sound on style=x and style=harmonic\n\t\t\tvar ePitches = elem.pitches;\n\t\t\tif (elem.style === \"rhythm\") {\n\t\t\t\tePitches = chordTrack.setRhythmHead(true, elem)\n\t\t\t}\n\n\t\t\tif (elem.elem)\n\t\t\t\telem.elem.midiPitches = [];\n\t\t\tfor (var i=0; i 0)\n\t\t\t\t\t\tp.endType = 'tenuto';\n\t\t\t\t\telse if (thisBreakBetweenNotes)\n\t\t\t\t\t\tp.endType = thisBreakBetweenNotes;\n\n\t\t\t\t\tswitch (p.endType) {\n\t\t\t\t\t\tcase \"tenuto\":\n\t\t\t\t\t\t\tp.gap = slurredBreakBetweenNotes;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"staccato\":\n\t\t\t\t\t\t\tvar d = p.duration * staccatoBreakBetweenNotes;\n\t\t\t\t\t\t\tp.gap = startingTempo / 60 * d;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tp.gap = normalBreakBetweenNotes;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcurrentTrack.push(p);\n\t\t\t\t}\n\t\t\t}\n\t\t\tlastNoteDurationPosition = currentTrack.length-1;\n\n\t\t}\n\t\tvar realDur = getRealDuration(elem);\n\t\tlastEventTime = Math.max(lastEventTime, timeToRealTime(elem.time)+durationRounded(realDur));\n\t}\n\tfunction getRealDuration(elem) {\n\t\tif (elem.pitches && elem.pitches.length > 0 && elem.pitches[0])\n\t\t\treturn elem.pitches[0].duration;\n\t\tif (elem.elem)\n\t\t\treturn elem.elem.duration;\n\t\treturn elem.duration;\n\t}\n\n\tvar scale = [0,2,4,5,7,9,11];\n\tfunction adjustPitch(note) {\n\t\tif (note.midipitch !== undefined)\n\t\t\treturn note.midipitch; // The pitch might already be known, for instance if there is a drummap.\n\t\tvar pitch = note.pitch;\n\t\tif (note.accidental) {\n\t\t\tswitch(note.accidental) { // change that pitch (not other octaves) for the rest of the bar\n\t\t\t\tcase \"sharp\":\n\t\t\t\t\tbarAccidentals[pitch]=1; break;\n\t\t\t\tcase \"flat\":\n\t\t\t\t\tbarAccidentals[pitch]=-1; break;\n\t\t\t\tcase \"natural\":\n\t\t\t\t\tbarAccidentals[pitch]=0; break;\n\t\t\t\tcase \"dblsharp\":\n\t\t\t\t\tbarAccidentals[pitch]=2; break;\n\t\t\t\tcase \"dblflat\":\n\t\t\t\t\tbarAccidentals[pitch]=-2; break;\n\t\t\t\tcase \"quartersharp\":\n\t\t\t\t\tbarAccidentals[pitch]=0.25; break;\n\t\t\t\tcase \"quarterflat\":\n\t\t\t\t\tbarAccidentals[pitch]=-0.25; break;\n\t\t\t}\n\t\t}\n\n\t\tvar actualPitch = extractOctave(pitch) *12 + scale[extractNote(pitch)] + 60;\n\n\t\tif ( barAccidentals[pitch]!==undefined) {\n\t\t\t// An accidental is always taken at face value and supersedes the key signature.\n\t\t\tactualPitch += barAccidentals[pitch];\n\t\t} else { // use normal accidentals\n\t\t\tactualPitch += accidentals[extractNote(pitch)];\n\t\t}\n\t\tactualPitch += transpose;\n\t\treturn actualPitch;\n\t}\n\n\tfunction setKeySignature(elem) {\n\t\tvar accidentals = [0,0,0,0,0,0,0];\n\t\tif (!elem.accidentals) return accidentals;\n\t\tfor (var i = 0; i < elem.accidentals.length; i++) {\n\t\t\tvar acc = elem.accidentals[i];\n\t\t\tvar d;\n\t\t\tswitch (acc.acc) {\n\t\t\t\tcase \"flat\": d = -1; break;\n\t\t\t\tcase \"quarterflat\": d = -0.25; break;\n\t\t\t\tcase \"sharp\": d = 1; break;\n\t\t\t\tcase \"quartersharp\": d = 0.25; break;\n\t\t\t\tdefault: d = 0; break;\n\t\t\t}\n\n\t\t\tvar lowercase = acc.note.toLowerCase();\n\t\t\tvar note = extractNote(lowercase.charCodeAt(0)-'c'.charCodeAt(0));\n\t\t\taccidentals[note]+=d;\n\t\t}\n\t\treturn accidentals;\n\t}\n\n\tfunction processGraceNotes(graces, companionDuration) {\n\t\t// Grace notes take up half of the note value. So if there are many of them they are all real short.\n\t\tvar graceDuration = 0;\n\t\tvar ret = [];\n\t\tvar grace;\n\t\tfor (var g = 0; g < graces.length; g++) {\n\t\t\tgrace = graces[g];\n\t\t\tgraceDuration += grace.duration;\n\t\t}\n\t\tvar multiplier = companionDuration/2 / graceDuration;\n\n\t\tfor (g = 0; g < graces.length; g++) {\n\t\t\tgrace = graces[g];\n\t\t\tvar actualPitch = adjustPitch(grace);\n\t\t\tif (currentInstrument === drumInstrument && percmap) {\n\t\t\t\tvar name = pitchesToPerc(grace)\n\t\t\t\tif (name && percmap[name])\n\t\t\t\t\tactualPitch = percmap[name].sound;\n\t\t\t}\n\t\t\tvar pitch = { pitch: actualPitch, duration: grace.duration*multiplier };\n\t\t\tpitch = adjustForMicroTone(pitch);\n\t\t\tret.push(pitch);\n\t\t}\n\t\treturn ret;\n\t}\n\n\tfunction writeGraceNotes(graces, start, velocity, currentInstrument) {\n\t\tvar midiGrace = [];\n\t\tvelocity = Math.round(velocity)\n\t\tfor (var g = 0; g < graces.length; g++) {\n\t\t\tvar gp = graces[g];\n\t\t\tcurrentTrack.push({cmd: 'note', pitch: gp.pitch, volume: velocity, start: start, duration: gp.duration, gap: 0, instrument:currentInstrument, style: 'grace'});\n\t\t\tmidiGrace.push({\n\t\t\t\tpitch: gp.pitch,\n\t\t\t\tdurationInMeasures: gp.duration,\n\t\t\t\tvolume: velocity,\n\t\t\t\tinstrument: currentInstrument\n\t\t\t});\n\t\t\tstart += gp.duration;\n\t\t}\n\t\treturn midiGrace;\n\t}\n\n\tvar quarterToneFactor = 0.02930223664349;\n\tfunction adjustForMicroTone(description) {\n\t\t// if the pitch is not a whole number then make it a whole number and add a tuning factor\n\t\tvar pitch = ''+description.pitch;\n\t\tif (pitch.indexOf(\".75\") >= 0) {\n\t\t\tdescription.pitch = Math.round(description.pitch);\n\t\t\tdescription.cents = -50;\n\t\t} else if (pitch.indexOf(\".25\") >= 0) {\n\t\t\tdescription.pitch = Math.round(description.pitch);\n\t\t\tdescription.cents = 50;\n\t\t}\n\n\t\treturn description;\n\t}\n\n\tfunction extractOctave(pitch) {\n\t\treturn Math.floor(pitch/7);\n\t}\n\n\tfunction extractNote(pitch) {\n\t\tpitch = pitch%7;\n\t\tif (pitch<0) pitch+=7;\n\t\treturn pitch;\n\t}\n\n\n\tfunction normalizeDrumDefinition(params) {\n\t\t// Be very strict with the drum definition. If anything is not perfect,\n\t\t// just turn the drums off.\n\t\t// Perhaps all of this logic belongs in the parser instead.\n\t\tif (params.pattern.length === 0 || params.on === false)\n\t\t\treturn { on: false };\n\n\t\tvar str = params.pattern[0];\n\t\tvar events = [];\n\t\tvar event = \"\";\n\t\tvar totalPlay = 0;\n\t\tfor (var i = 0; i < str.length; i++) {\n\t\t\tif (str[i] === 'd')\n\t\t\t\ttotalPlay++;\n\t\t\tif (str[i] === 'd' || str[i] === 'z') {\n\t\t\t\tif (event.length !== 0) {\n\t\t\t\t\tevents.push(event);\n\t\t\t\t\tevent = str[i];\n\t\t\t\t} else\n\t\t\t\t\tevent = event + str[i];\n\t\t\t} else {\n\t\t\t\tif (event.length === 0) {\n\t\t\t\t\t// there was an error: the string should have started with d or z\n\t\t\t\t\treturn {on: false};\n\t\t\t\t}\n\t\t\t\tevent = event + str[i];\n\t\t\t}\n\t\t}\n\n\t\tif (event.length !== 0)\n\t\t\tevents.push(event);\n\n\t\t// Now the events array should have one item per event.\n\t\t// There should be two more params for each event: the volume and the pitch.\n\t\tif (params.pattern.length !== totalPlay*2 + 1)\n\t\t\treturn { on: false };\n\n\t\tvar ret = { on: true, bars: params.bars, pattern: []};\n\t\tvar beatLength = getBeatFraction(meter);\n\t\tvar playCount = 0;\n\t\tfor (var j = 0; j < events.length; j++) {\n\t\t\tevent = events[j];\n\t\t\tvar len = 1;\n\t\t\tvar div = false;\n\t\t\tvar num = 0;\n\t\t\tfor (var k = 1; k < event.length; k++) {\n\t\t\t\tswitch(event[k]) {\n\t\t\t\t\tcase \"/\":\n\t\t\t\t\t\tif (num !== 0)\n\t\t\t\t\t\t\tlen *= num;\n\t\t\t\t\t\tnum = 0;\n\t\t\t\t\t\tdiv = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"1\":\n\t\t\t\t\tcase \"2\":\n\t\t\t\t\tcase \"3\":\n\t\t\t\t\tcase \"4\":\n\t\t\t\t\tcase \"5\":\n\t\t\t\t\tcase \"6\":\n\t\t\t\t\tcase \"7\":\n\t\t\t\t\tcase \"8\":\n\t\t\t\t\tcase \"9\":\n\t\t\t\t\t\tnum = num*10 +event[k];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn { on: false };\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (div) {\n\t\t\t\tif (num === 0) num = 2; // a slash by itself is interpreted as \"/2\"\n\t\t\t\tlen /= num;\n\t\t\t} else if (num)\n\t\t\t\tlen *= num;\n\t\t\tif (event[0] === 'd') {\n\t\t\t\tret.pattern.push({ len: len * beatLength, pitch: params.pattern[1 + playCount], velocity: params.pattern[1 + playCount + totalPlay]});\n\t\t\t\tplayCount++;\n\t\t\t} else\n\t\t\t\tret.pattern.push({ len: len * beatLength, pitch: null});\n\t\t}\n\t\tdrumBars = params.bars ? params.bars : 1;\n\t\treturn ret;\n\t}\n\n\tfunction alignDrumToMeter() {\n\t\tif (!drumDefinition ||!drumDefinition.pattern) {\n\t\t\treturn;\n\t\t}\n\t\tvar ret = drumDefinition;\n\t\t// Now normalize the pattern to cover the correct number of measures. The note lengths passed are relative to each other and need to be scaled to fit a measure.\n\t\tvar totalTime = 0;\n\t\tvar measuresPerBeat = meter.num/meter.den;\n\t\tfor (var ii = 0; ii < ret.pattern.length; ii++)\n\t\t\ttotalTime += ret.pattern[ii].len;\n\t\tvar factor = totalTime / drumBars / measuresPerBeat;\n\t\tfor (ii = 0; ii < ret.pattern.length; ii++)\n\t\t\tret.pattern[ii].len = ret.pattern[ii].len / factor;\n\t\tdrumDefinition = ret;\n\t}\n\n\tfunction writeDrum(channel) {\n\t\tif (drumTrack.length === 0 && !drumDefinition.on)\n\t\t\treturn;\n\n\t\tvar measureLen = meter.num/meter.den;\n\t\tif (drumTrack.length === 0) {\n\t\t\tif (lastEventTime < measureLen)\n\t\t\t\treturn; // This is true if there are pickup notes. The drum doesn't start until the first full measure.\n\t\t\tdrumTrack.push({cmd: 'program', channel: channel, instrument: drumInstrument});\n\t\t}\n\n\t\tif (!drumDefinition.on) {\n\t\t\t// this is the case where there has been a drum track, but it was specifically turned off.\n\t\t\treturn;\n\t\t}\n\t\tvar start = lastBarTime;\n\t\tfor (var i = 0; i < drumDefinition.pattern.length; i++) {\n\t\t\tvar len = durationRounded(drumDefinition.pattern[i].len);\n\t\t\tif (drumDefinition.pattern[i].pitch) {\n\t\t\t\tdrumTrack.push({\n\t\t\t\t\tcmd: 'note',\n\t\t\t\t\tpitch: drumDefinition.pattern[i].pitch,\n\t\t\t\t\tvolume: drumDefinition.pattern[i].velocity,\n\t\t\t\t\tstart: start,\n\t\t\t\t\tduration: len,\n\t\t\t\t\tgap: 0,\n\t\t\t\t\tinstrument: drumInstrument});\n\t\t\t}\n\t\t\tstart += len;\n\t\t}\n\t}\n\n\tfunction findOctaves(tracks, detuneCents) {\n\t\tvar timing = {};\n\t\tfor (var i = 0; i < tracks.length; i++) {\n\t\t\tfor (var j = 0; j < tracks[i].length; j++) {\n\t\t\t\tvar note = tracks[i][j];\n\t\t\t\tif (note.cmd === \"note\") {\n\t\t\t\t\tif (timing[note.start] === undefined)\n\t\t\t\t\t\ttiming[note.start] = [];\n\t\t\t\t\ttiming[note.start].push({track: i, event: j, pitch: note.pitch});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tvar keys = Object.keys(timing);\n\t\tfor (i = 0; i < keys.length; i++) {\n\t\t\tvar arr = timing[keys[i]];\n\t\t\tif (arr.length > 1) {\n\t\t\t\tarr = arr.sort(function(a,b) {\n\t\t\t\t\treturn a.pitch - b.pitch;\n\t\t\t\t});\n\t\t\t\tvar topEvent = arr[arr.length-1];\n\t\t\t\tvar topNote = topEvent.pitch % 12;\n\t\t\t\tvar found = false;\n\t\t\t\tfor (j = 0; !found && j < arr.length-1; j++) {\n\t\t\t\t\tif (arr[j].pitch % 12 === topNote)\n\t\t\t\t\t\tfound = true;\n\t\t\t\t}\n\t\t\t\tif (found) {\n\t\t\t\t\tvar event = tracks[topEvent.track][topEvent.event];\n\t\t\t\t\tif (!event.cents)\n\t\t\t\t\t\tevent.cents = 0;\n\t\t\t\t\tevent.cents += detuneCents;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n})();\n\nmodule.exports = flatten;\n","// abc_midi_renderer.js: Create the actual format for the midi.\n\nvar centsToFactor = require(\"./cents-to-factor\");\nvar rendererFactory;\n\n(function() {\n\t\"use strict\";\n\tfunction setAttributes(elm, attrs) {\n\t\tfor (var attr in attrs)\n\t\t\tif (attrs.hasOwnProperty(attr))\n\t\t\t\telm.setAttribute(attr, attrs[attr]);\n\t\treturn elm;\n\t}\n\n\tfunction Midi() {\n\t\tthis.trackstrings = \"\";\n\t\tthis.trackcount = 0;\n\t\tthis.noteOnAndChannel = \"%90\";\n\t\tthis.noteOffAndChannel = \"%80\";\n\t}\n\n\tMidi.prototype.setTempo = function(qpm) {\n\t\tif (this.trackcount === 0) {\n\t\t\tthis.startTrack();\n\t\t\tthis.track += \"%00%FF%51%03\" + toHex(Math.round(60000000 / qpm), 6);\n\t\t\tthis.endTrack();\n\t\t}\n\t};\n\n\tMidi.prototype.setGlobalInfo = function(qpm, name, key, time) {\n\t\tif (this.trackcount === 0) {\n\t\t\tthis.startTrack();\n\t\t\tvar divisions = Math.round(60000000 / qpm);\n\t\t\t// Add the tempo\n\t\t\tthis.track += \"%00%FF%51%03\" + toHex(divisions, 6);\n\n\t\t\tif (key)\n\t\t\t\tthis.track += keySignature(key);\n\t\t\tif (time)\n\t\t\t\tthis.track += timeSignature(time);\n\t\t\tif (name) {\n\t\t\t\tthis.track += encodeString(name, \"%01\");\n\t\t\t}\n\t\t\tthis.endTrack();\n\t\t}\n\t};\n\n\tMidi.prototype.startTrack = function() {\n\t\tthis.noteWarped = {};\n\t\tthis.track = \"\";\n\t\tthis.trackName = \"\";\n\t\tthis.trackInstrument = \"\";\n\t\tthis.silencelength = 0;\n\t\tthis.trackcount++;\n\t\tif (this.instrument) {\n\t\t\tthis.setInstrument(this.instrument);\n\t\t}\n\t};\n\n\tMidi.prototype.endTrack = function() {\n\t\tthis.track = this.trackName + this.trackInstrument + this.track;\n\t\tvar tracklength = toHex(this.track.length / 3 + 4, 8);\n\t\tthis.track = \"MTrk\" + tracklength + // track header\n\t\t\tthis.track +\n\t\t\t'%00%FF%2F%00'; // track end\n\t\tthis.trackstrings += this.track;\n\t};\n\n\tMidi.prototype.setText = function(type, text) {\n\t\t// MIDI defines the following types of events:\n\t\t//FF 01 len text Text Event\n\t\t//FF 02 len text Copyright Notice\n\t\t//FF 03 len text Sequence/Track Name\n\t\t//FF 04 len text Instrument Name\n\t\t//FF 05 len text Lyric\n\t\t//FF 06 len text Marker\n\t\t//FF 07 len text Cue Point\n\t\tswitch(type) {\n\t\t\tcase 'name':\n\t\t\t\tthis.trackName = encodeString(text, \"%03\");\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\tMidi.prototype.setInstrument = function(number) {\n\t\tthis.trackInstrument = \"%00%C0\" + toHex(number, 2);\n\t\tthis.instrument = number;\n\t};\n\n\tMidi.prototype.setChannel = function(number, pan) {\n\t\tthis.channel = number;\n\t\tvar ccPrefix = \"%00%B\" + this.channel.toString(16);\n\t\t// Reset midi, in case it was set previously.\n\t\tthis.track += ccPrefix + \"%79%00\"; // Reset All Controllers\n\t\tthis.track += ccPrefix + \"%40%00\"; // Damper pedal\n\t\tthis.track += ccPrefix + \"%5B%30\"; // Effect 1 Depth (reverb)\n\t\t// Translate pan as -1 to 1 to 0 to 127\n\t\tif (!pan)\n\t\t\tpan = 0;\n\t\tpan = Math.round((pan + 1) * 64);\n\t\tthis.track += ccPrefix + \"%0A\" + toHex(pan, 2); // Pan\n\t\tthis.track += ccPrefix + \"%07%64\"; // Channel Volume\n\n\t\tthis.noteOnAndChannel = \"%9\" + this.channel.toString(16);\n\t\tthis.noteOffAndChannel = \"%8\" + this.channel.toString(16);\n\t};\n\n\tvar HALF_STEP = 4096; // For the pitch wheel - (i.e. the distance from C to C#)\n\tMidi.prototype.startNote = function(pitch, loudness, cents) {\n\t\tthis.track += toDurationHex(this.silencelength); // only need to shift by amount of silence (if there is any)\n\t\tthis.silencelength = 0;\n\t\tif (cents) {\n\t\t\t// the pitch is altered so send a midi pitch wheel event\n\t\t\tthis.track += \"%e\" + this.channel.toString(16);\n\t\t\tvar bend = Math.round(centsToFactor(cents)*HALF_STEP);\n\t\t\tthis.track += to7BitHex(0x2000 + bend);\n\t\t\tthis.track += toDurationHex(0); // this all happens at once so there is a zero length here\n\t\t\tthis.noteWarped[pitch] = true;\n\t\t}\n\t\tthis.track += this.noteOnAndChannel;\n\t\tthis.track += \"%\" + pitch.toString(16) + toHex(loudness, 2); //note\n\t};\n\n\tMidi.prototype.endNote = function(pitch) {\n\t\tthis.track += toDurationHex(this.silencelength); // only need to shift by amount of silence (if there is any)\n\t\tthis.silencelength = 0;\n\t\tif (this.noteWarped[pitch]) {\n\t\t\t// the pitch was altered so alter it back.\n\t\t\tthis.track += \"%e\" + this.channel.toString(16);\n\t\t\tthis.track += to7BitHex(0x2000);\n\t\t\tthis.track += toDurationHex(0); // this all happens at once so there is a zero length here\n\t\t\tthis.noteWarped[pitch] = false;\n\t\t}\n\t\tthis.track += this.noteOffAndChannel;\n\t\tthis.track += \"%\" + pitch.toString(16) + \"%00\";//end note\n\t};\n\n\tMidi.prototype.addRest = function(length) {\n\t\tthis.silencelength += length;\n\t\tif (this.silencelength < 0)\n\t\t\tthis.silencelength = 0;\n\t};\n\n\tMidi.prototype.getData = function() {\n\t\treturn \"data:audio/midi,\" +\n\t\t\t\"MThd%00%00%00%06%00%01\" + toHex(this.trackcount, 4) + \"%01%e0\" + // header\n\t\t\tthis.trackstrings;\n\t};\n\n\tMidi.prototype.embed = function(parent, noplayer) {\n\n\t\tvar data = this.getData();\n\n\t\tvar link = setAttributes(document.createElement('a'), {\n\t\t\thref: data\n\t\t});\n\t\tlink.innerHTML = \"download midi\";\n\t\tparent.insertBefore(link, parent.firstChild);\n\n\t\tif (noplayer) return;\n\n\t\tvar embed = setAttributes(document.createElement('embed'), {\n\t\t\tsrc: data,\n\t\t\ttype: 'video/quicktime',\n\t\t\tcontroller: 'true',\n\t\t\tautoplay: 'false',\n\t\t\tloop: 'false',\n\t\t\tenablejavascript: 'true',\n\t\t\tstyle: 'display:block; height: 20px;'\n\t\t});\n\t\tparent.insertBefore(embed, parent.firstChild);\n\t};\n\n\tfunction encodeString(str, cmdType) {\n\t\t// If there are multi-byte chars, we don't know how long the string will be until we create it.\n\t\tvar nameArray = \"\";\n\t\tfor (var i = 0; i < str.length; i++)\n\t\t\tnameArray += toHex(str.charCodeAt(i), 2);\n\t\treturn \"%00%FF\" + cmdType + toHex(nameArray.length/3, 2) + nameArray; // Each byte is represented by three chars \"%XX\", so divide by 3 to get the length.\n\t}\n\n\tfunction keySignature(key) {\n\t\t//00 FF 5902 03 00 - key signature\n\t\tif (!key || !key.accidentals)\n\t\t\treturn \"\";\n\t\tvar hex = \"%00%FF%59%02\";\n\t\tvar sharpCount = 0;\n\t\tvar flatCount = 256;\n\t\tfor (var i = 0; i < key.accidentals.length; i++) {\n\t\t\tif (key.accidentals[i].acc === \"sharp\") sharpCount++;\n\t\t\telse if (key.accidentals[i].acc === \"flat\") flatCount--;\n\t\t}\n\t\tvar sig = flatCount !== 256 ? toHex(flatCount, 2) : toHex(sharpCount, 2);\n\t\tvar mode = (key.mode === \"m\") ? \"%01\" : \"%00\";\n\t\treturn hex + sig + mode;\n\t}\n\n\tfunction timeSignature(time) {\n\t\t//00 FF 58 04 04 02 30 08 - time signature\n\t\tvar hex = \"%00%FF%58%04\" + toHex(time.num,2);\n\t\tvar dens = { 1: 0, 2: 1, 4: 2, 8: 3, 16: 4, 32: 5 };\n\t\tvar den = dens[time.den];\n\t\tif (!den)\n\t\t\treturn \"\"; // the denominator is not supported, so just don't include this.\n\t\thex += toHex(den, 2);\n\n\t\tvar clocks;\n\t\tswitch (time.num+\"/\"+time.den) {\n\t\t\tcase \"2/4\":\n\t\t\tcase \"3/4\":\n\t\t\tcase \"4/4\":\n\t\t\tcase \"5/4\":\n\t\t\t\tclocks = 24;\n\t\t\t\tbreak;\n\t\t\tcase \"6/4\":\n\t\t\t\tclocks = 72;\n\t\t\t\tbreak;\n\t\t\tcase \"2/2\":\n\t\t\tcase \"3/2\":\n\t\t\tcase \"4/2\":\n\t\t\t\tclocks = 48;\n\t\t\t\tbreak;\n\t\t\tcase \"3/8\":\n\t\t\tcase \"6/8\":\n\t\t\tcase \"9/8\":\n\t\t\tcase \"12/8\":\n\t\t\t\tclocks = 36;\n\t\t\t\tbreak;\n\t\t}\n\t\tif (!clocks)\n\t\t\treturn \"\"; // time sig is not supported.\n\t\thex += toHex(clocks, 2);\n\t\treturn hex + \"%08\";\n\t}\n\n\t// s is assumed to be of even length\n\tfunction encodeHex(s) {\n\t\tvar ret = \"\";\n\t\tfor (var i = 0; i < s.length; i += 2) {\n\t\t\tret += \"%\";\n\t\t\tret += s.substr(i, 2);\n\t\t}\n\t\treturn ret;\n\t}\n\n\tfunction toHex(n, padding) {\n\t\tvar s = n.toString(16);\n\t\ts = s.split(\".\")[0];\n\t\twhile (s.length < padding) {\n\t\t\ts = \"0\" + s;\n\t\t}\n\t\tif (s.length > padding)\n\t\t\ts = s.substring(0,padding)\n\t\treturn encodeHex(s);\n\t}\n\n\tfunction to7BitHex(n) {\n\t\t// this takes a number and shifts all digits from the 7th one to the left.\n\t\tn = Math.round(n);\n\t\tvar lower = n % 128;\n\t\tvar higher = n - lower;\n\t\treturn toHex(higher*2+lower, 4);\n\t}\n\n\tfunction toDurationHex(n) {\n\t\tvar res = 0;\n\t\tvar a = [];\n\n\t\t// cut up into 7 bit chunks;\n\t\tn = Math.round(n);\n\t\twhile (n !== 0) {\n\t\t\ta.push(n & 0x7F);\n\t\t\tn = n >> 7;\n\t\t}\n\n\t\t// join the 7 bit chunks together, all but last chunk get leading 1\n\t\tfor (var i = a.length - 1; i >= 0; i--) {\n\t\t\tres = res << 8;\n\t\t\tvar bits = a[i];\n\t\t\tif (i !== 0) {\n\t\t\t\tbits = bits | 0x80;\n\t\t\t}\n\t\t\tres = res | bits;\n\t\t}\n\n\t\tvar padding = res.toString(16).length;\n\t\tpadding += padding % 2;\n\n\t\treturn toHex(res, padding);\n\t}\n\n\trendererFactory = function() {\n\t\treturn new Midi();\n\t};\n})();\n\nmodule.exports = rendererFactory;\n","// abc_midi_sequencer.js: Turn parsed abc into a linear series of events.\n\nvar sequence;\nvar parseCommon = require(\"../parse/abc_common\");\n\n(function() {\n\t\"use strict\";\n\n\tvar measureLength = 1; // This should be set by the meter, but just in case that is missing, we'll take a guess.\n\t// The abc is provided to us line by line. It might have repeats in it. We want to re arrange the elements to\n\t// be an array of voices with all the repeats embedded, and no lines. Then it is trivial to go through the events\n\t// one at a time and turn it into midi.\n\n\tvar PERCUSSION_PROGRAM = 128;\n\n\tsequence = function(abctune, options) {\n\t\t// Global options\n\t\toptions = options || {};\n\t\tvar qpm;\n\t\tvar program = options.program || 0;\t// The program if there isn't a program specified.\n\t\tvar transpose = options.midiTranspose || 0;\n\t\t// If the tune has a visual transpose then that needs to be subtracted out because we are getting the visual object.\n\t\tif (abctune.visualTranspose)\n\t\t\ttranspose -= abctune.visualTranspose;\n\t\tvar channel = options.channel || 0;\n\t\tvar channelExplicitlySet = false;\n\t\tvar drumPattern = options.drum || \"\";\n\t\tvar drumBars = options.drumBars || 1;\n\t\tvar drumIntro = options.drumIntro || 0;\n\t\tvar drumOn = drumPattern !== \"\";\n\t\tvar drumOffAfterIntro = !!options.drumOff\n\t\tvar style = []; // The note head style for each voice.\n\t\tvar rhythmHeadThisBar = false; // Rhythm notation was detected.\n\t\tvar crescendoSize = 50; // how much to increase or decrease volume when crescendo/diminuendo is encountered.\n\n\t\t// All of the above overrides need to be integers\n\t\tprogram = parseInt(program, 10);\n\t\ttranspose = parseInt(transpose, 10);\n\t\tchannel = parseInt(channel, 10);\n\t\tif (channel === 10)\n\t\t\tprogram = PERCUSSION_PROGRAM;\n\t\tdrumPattern = drumPattern.split(\" \");\n\t\tdrumBars = parseInt(drumBars, 10);\n\t\tdrumIntro = parseInt(drumIntro, 10);\n\n\t\tvar bagpipes = abctune.formatting.bagpipes; // If it is bagpipes, then the gracenotes are played on top of the main note.\n\t\tif (bagpipes)\n\t\t\tprogram = 71;\n\n\t\t// %%MIDI fermatafixed\n\t\t// %%MIDI fermataproportional\n\t\t// %%MIDI deltaloudness n\n\t\t// %%MIDI gracedivider b\n\t\t// %%MIDI ratio n m\n\t\t// %%MIDI beat a b c n\n\t\t// %%MIDI grace a/b\n\t\t// %%MIDI trim x/y\n\n\t\t// %MIDI gchordon\n\t\t// %MIDI gchordoff\n\t\t// %%MIDI bassprog 45\n\t\t// %%MIDI chordprog 24\n\t\t// %%MIDI chordname name n1 n2 n3 n4 n5 n6\n\n\t\t//%%MIDI beat ⟨int1⟩ ⟨int2⟩ ⟨int3⟩ ⟨int4⟩: controls the volumes of the notes in a measure. The first note in a bar has volume ⟨int1⟩; other ‘strong’ notes have volume ⟨int2⟩ and all the rest have volume ⟨int3⟩. These values must be in the range 0–127. The parameter ⟨int4⟩ determines which notes are ‘strong’. If the time signature is x/y, then each note is given a position number k = 0, 1, 2. . . x-1 within each bar. If k is a multiple of ⟨int4⟩, then the note is ‘strong’.\n\n\t\tvar startingMidi = [];\n\t\tif (abctune.formatting.midi) {\n\t\t\t//console.log(\"MIDI Formatting:\", abctune.formatting.midi);\n\t\t\tvar globals = abctune.formatting.midi;\n\t\t\tif (globals.program && globals.program.length > 0) {\n\t\t\t\tprogram = globals.program[0];\n\t\t\t\tif (globals.program.length > 1) {\n\t\t\t\t\tprogram = globals.program[1];\n\t\t\t\t\tchannel = globals.program[0];\n\t\t\t\t}\n\t\t\t\tchannelExplicitlySet = true;\n\t\t\t}\n\t\t\tif (globals.transpose)\n\t\t\t\ttranspose = globals.transpose[0];\n\t\t\tif (globals.channel) {\n\t\t\t\tchannel = globals.channel[0];\n\t\t\t\tchannelExplicitlySet = true;\n\t\t\t}\n\t\t\tif (globals.drum)\n\t\t\t\tdrumPattern = globals.drum;\n\t\t\tif (globals.drumbars)\n\t\t\t\tdrumBars = globals.drumbars[0];\n\t\t\tif (globals.drumon)\n\t\t\t\tdrumOn = true;\n\t\t\tif (channel === 10)\n\t\t\t\tprogram = PERCUSSION_PROGRAM;\n\t\t\tif (globals.beat)\n\t\t\t\tstartingMidi.push({ el_type: 'beat', beats: globals.beat })\n\t\t\tif (globals.nobeataccents)\n\t\t\t\tstartingMidi.push({ el_type: 'beataccents', value: false });\n\n\t\t}\n\n\t\t// Specified options in abc string.\n\n\t\t// If the tempo was passed in, use that.\n\t\t// If the tempo is specified, use that.\n\t\t// If there is a default, use that.\n\t\t// Otherwise, use the default.\n\t\tif (options.qpm)\n\t\t\tqpm = parseInt(options.qpm, 10);\n\t\telse if (abctune.metaText.tempo)\n\t\t\tqpm = interpretTempo(abctune.metaText.tempo, abctune.getBeatLength());\n\t\telse if (options.defaultQpm)\n\t\t\tqpm = options.defaultQpm;\n\t\telse\n\t\t\tqpm = 180; \t// The tempo if there isn't a tempo specified.\n\n\t\tvar startVoice = [];\n\t\tif (bagpipes)\n\t\t\tstartVoice.push({ el_type: 'bagpipes' });\n\t\tstartVoice.push({ el_type: 'instrument', program: program });\n\t\tif (channel)\n\t\t\tstartVoice.push({ el_type: 'channel', channel: channel });\n\t\tif (transpose)\n\t\t\tstartVoice.push({ el_type: 'transpose', transpose: transpose });\n\t\tstartVoice.push({ el_type: 'tempo', qpm: qpm });\n\t\tfor (var ss = 0; ss < startingMidi.length;ss++)\n\t\t\tstartVoice.push(startingMidi[ss]);\n\n\t\t// the relevant part of the input structure is:\n\t\t// abctune\n\t\t//\t\tarray lines\n\t\t//\t\t\tarray staff\n\t\t//\t\t\t\tobject key\n\t\t//\t\t\t\tobject meter\n\t\t//\t\t\t\tarray voices\n\t\t//\t\t\t\t\tarray abcelem\n\n\t\t// visit each voice completely in turn\n\t\tvar voices = [];\n\t\tvar inCrescendo = [];\n\t\tvar inDiminuendo = [];\n\t\tvar durationCounter = [0];\n\t\tvar tempoChanges = {};\n\t\ttempoChanges[\"0\"] = { el_type: 'tempo', qpm: qpm, timing: 0 };\n\t\tvar currentVolume;\n\t\tvar startRepeatPlaceholder = []; // There is a place holder for each voice.\n\t\tvar skipEndingPlaceholder = []; // This is the place where the first ending starts.\n\t\tvar startingDrumSet = false;\n\t\tvar lines = abctune.lines; //abctune.deline(); TODO-PER: can switch to this, then simplify the loops below.\n\t\tfor (var i = 0; i < lines.length; i++) {\n\t\t\t// For each group of staff lines in the tune.\n\t\t\tvar line = lines[i];\n\t\t\tif (line.staff) {\n\t\t\t\tvar staves = line.staff;\n\t\t\t\tvar voiceNumber = 0;\n\t\t\t\tfor (var j = 0; j < staves.length; j++) {\n\t\t\t\t\tvar staff = staves[j];\n\t\t\t\t\tif (staff.clef && staff.clef.type === \"TAB\")\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t// For each staff line\n\t\t\t\t\tfor (var k = 0; k < staff.voices.length; k++) {\n\t\t\t\t\t\t// For each voice in a staff line\n\t\t\t\t\t\tvar voice = staff.voices[k];\n\t\t\t\t\t\tif (!voices[voiceNumber]) {\n\t\t\t\t\t\t\tvoices[voiceNumber] = [].concat(JSON.parse(JSON.stringify(startVoice)));\n\t\t\t\t\t\t\tvar voiceName = getTrackTitle(line.staff, voiceNumber);\n\t\t\t\t\t\t\tif (voiceName)\n\t\t\t\t\t\t\t\tvoices[voiceNumber].unshift({el_type: \"name\", trackName: voiceName});\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Negate any transposition for the percussion staff.\n\t\t\t\t\t\tif (transpose && staff.clef.type === \"perc\")\n\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: 0 });\n\n\t\t\t\t\t\tif (staff.clef && staff.clef.type === 'perc' && !channelExplicitlySet) {\n\t\t\t\t\t\t\tfor (var cl = 0; cl < voices[voiceNumber].length; cl++) {\n\t\t\t\t\t\t\t\tif (voices[voiceNumber][cl].el_type === 'instrument')\n\t\t\t\t\t\t\t\t\tvoices[voiceNumber][cl].program = PERCUSSION_PROGRAM;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (staff.key) {\n\t\t\t\t\t\t\taddKey(voices[voiceNumber], staff.key);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (staff.meter) {\n\t\t\t\t\t\t\taddMeter(voices[voiceNumber], staff.meter);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!startingDrumSet && drumOn) { // drum information is only needed once, so use the first line and track 0.\n\t\t\t\t\t\t\tvoices[voiceNumber].push({el_type: 'drum', params: {pattern: drumPattern, bars: drumBars, on: drumOn, intro: drumIntro}});\n\t\t\t\t\t\t\tstartingDrumSet = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (staff.clef && staff.clef.type !== \"perc\" && staff.clef.transpose) {\n\t\t\t\t\t\t\tstaff.clef.el_type = 'clef';\n\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: staff.clef.transpose });\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (staff.clef && staff.clef.type) {\n\t\t\t\t\t\t\tif (staff.clef.type.indexOf(\"-8\") >= 0)\n\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: -12 });\n\t\t\t\t\t\t\telse if (staff.clef.type.indexOf(\"+8\") >= 0)\n\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: 12 });\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (abctune.formatting.midi && abctune.formatting.midi.drumoff) {\n\t\t\t\t\t\t\t// If there is a drum off command right at the beginning it is put in the metaText instead of the stream,\n\t\t\t\t\t\t\t// so we will just insert it here.\n\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'bar' });\n\t\t\t\t\t\t\tvoices[voiceNumber].push({el_type: 'drum', params: {pattern: \"\", on: false }});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar noteEventsInBar = 0;\n\t\t\t\t\t\tvar tripletMultiplier = 0;\n\t\t\t\t\t\tvar tripletDurationTotal = 0; // try to mitigate the js rounding problems.\n\t\t\t\t\t\tvar tripletDurationCount = 0;\n\t\t\t\t\t\tcurrentVolume = [105, 95, 85, 1];\n\n\t\t\t\t\t\tfor (var v = 0; v < voice.length; v++) {\n\t\t\t\t\t\t\t// For each element in a voice\n\t\t\t\t\t\t\tvar elem = voice[v];\n\t\t\t\t\t\t\tswitch (elem.el_type) {\n\t\t\t\t\t\t\t\tcase \"note\":\n\t\t\t\t\t\t\t\t\tif (inCrescendo[k]) {\n\t\t\t\t\t\t\t\t\t\tcurrentVolume[0] += inCrescendo[k];\n\t\t\t\t\t\t\t\t\t\tcurrentVolume[1] += inCrescendo[k];\n\t\t\t\t\t\t\t\t\t\tcurrentVolume[2] += inCrescendo[k];\n\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'beat', beats: currentVolume.slice(0) });\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (inDiminuendo[k]) {\n\t\t\t\t\t\t\t\t\t\tcurrentVolume[0] += inDiminuendo[k];\n\t\t\t\t\t\t\t\t\t\tcurrentVolume[1] += inDiminuendo[k];\n\t\t\t\t\t\t\t\t\t\tcurrentVolume[2] += inDiminuendo[k];\n\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'beat', beats: currentVolume.slice(0) });\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tsetDynamics(elem);\n\n\t\t\t\t\t\t\t\t\t// regular items are just pushed.\n\t\t\t\t\t\t\t\t\tif (!elem.rest || elem.rest.type !== 'spacer') {\n\t\t\t\t\t\t\t\t\t\tvar noteElem = { elem: elem, el_type: \"note\", timing: durationCounter[voiceNumber] }; // Make a copy so that modifications aren't kept except for adding the midiPitches\n\t\t\t\t\t\t\t\t\t\tif (elem.style)\n\t\t\t\t\t\t\t\t\t\t\tnoteElem.style = elem.style;\n\t\t\t\t\t\t\t\t\t\telse if (style[voiceNumber])\n\t\t\t\t\t\t\t\t\t\t\tnoteElem.style = style[voiceNumber];\n\t\t\t\t\t\t\t\t\t\tnoteElem.duration = (elem.duration === 0) ? 0.25 : elem.duration;\n\t\t\t\t\t\t\t\t\t\tif (elem.startTriplet) {\n\t\t\t\t\t\t\t\t\t\t\ttripletMultiplier = elem.tripletMultiplier;\n\t\t\t\t\t\t\t\t\t\t\ttripletDurationTotal = elem.startTriplet * tripletMultiplier * elem.duration;\n\t\t\t\t\t\t\t\t\t\t\tif (elem.startTriplet !== elem.tripletR) { // most commonly (3:2:2\n\t\t\t\t\t\t\t\t\t\t\t\tif (v + elem.tripletR <= voice.length) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar durationTotal = 0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor (var w = v; w < v + elem.tripletR; w++) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdurationTotal += voice[w].duration;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttripletDurationTotal = tripletMultiplier * durationTotal;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tnoteElem.duration = noteElem.duration * tripletMultiplier;\n\t\t\t\t\t\t\t\t\t\t\tnoteElem.duration = Math.round(noteElem.duration*1000000)/1000000;\n\t\t\t\t\t\t\t\t\t\t\ttripletDurationCount = noteElem.duration;\n\t\t\t\t\t\t\t\t\t\t} else if (tripletMultiplier) {\n\t\t\t\t\t\t\t\t\t\t\tif (elem.endTriplet) {\n\t\t\t\t\t\t\t\t\t\t\t\ttripletMultiplier = 0;\n\t\t\t\t\t\t\t\t\t\t\t\tnoteElem.duration = Math.round((tripletDurationTotal - tripletDurationCount)*1000000)/1000000;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tnoteElem.duration = noteElem.duration * tripletMultiplier;\n\t\t\t\t\t\t\t\t\t\t\t\tnoteElem.duration = Math.round(noteElem.duration*1000000)/1000000;\n\t\t\t\t\t\t\t\t\t\t\t\ttripletDurationCount += noteElem.duration;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif (elem.rest) noteElem.rest = elem.rest;\n\t\t\t\t\t\t\t\t\t\tif (elem.decoration) noteElem.decoration = elem.decoration.slice(0);\n\t\t\t\t\t\t\t\t\t\tif (elem.pitches) noteElem.pitches = parseCommon.cloneArray(elem.pitches);\n\t\t\t\t\t\t\t\t\t\tif (elem.gracenotes) noteElem.gracenotes = parseCommon.cloneArray(elem.gracenotes);\n\t\t\t\t\t\t\t\t\t\tif (elem.chord) noteElem.chord = parseCommon.cloneArray(elem.chord);\n\n\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push(noteElem);\n\t\t\t\t\t\t\t\t\t\tif (elem.style === \"rhythm\") {\n\t\t\t\t\t\t\t\t\t\t\trhythmHeadThisBar = true;\n\t\t\t\t\t\t\t\t\t\t\tchordVoiceOffThisBar(voices)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tnoteEventsInBar++;\n\t\t\t\t\t\t\t\t\t\tdurationCounter[voiceNumber] += noteElem.duration;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"key\":\n\t\t\t\t\t\t\t\tcase \"keySignature\":\n\t\t\t\t\t\t\t\t\taddKey(voices[voiceNumber], elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"meter\":\n\t\t\t\t\t\t\t\t\taddMeter(voices[voiceNumber], elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"clef\": // need to keep this to catch the \"transpose\" element.\n\t\t\t\t\t\t\t\t\tif (elem.transpose)\n\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: elem.transpose });\n\t\t\t\t\t\t\t\t\tif (elem.type) {\n\t\t\t\t\t\t\t\t\t\tif (elem.type.indexOf(\"-8\") >= 0)\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: -12 });\n\t\t\t\t\t\t\t\t\t\telse if (elem.type.indexOf(\"+8\") >= 0)\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: 12 });\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"tempo\":\n\t\t\t\t\t\t\t\t\tqpm = interpretTempo(elem, abctune.getBeatLength());\n\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'tempo', qpm: qpm, timing: durationCounter[voiceNumber] });\n\t\t\t\t\t\t\t\t\ttempoChanges[''+durationCounter[voiceNumber]] = { el_type: 'tempo', qpm: qpm, timing: durationCounter[voiceNumber] };\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"bar\":\n\t\t\t\t\t\t\t\t\tif (noteEventsInBar > 0) // don't add two bars in a row.\n\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'bar' }); // We need the bar marking to reset the accidentals.\n\t\t\t\t\t\t\t\t\tsetDynamics(elem);\n\t\t\t\t\t\t\t\t\tnoteEventsInBar = 0;\n\t\t\t\t\t\t\t\t\t// figure out repeats and endings --\n\t\t\t\t\t\t\t\t\t// The important part is where there is a start repeat, and end repeat, or a first ending.\n\t\t\t\t\t\t\t\t\tvar endRepeat = (elem.type === \"bar_right_repeat\" || elem.type === \"bar_dbl_repeat\");\n\t\t\t\t\t\t\t\t\tvar startEnding = (elem.startEnding === '1');\n\t\t\t\t\t\t\t\t\tvar startRepeat = (elem.type === \"bar_left_repeat\" || elem.type === \"bar_dbl_repeat\" || elem.type === \"bar_right_repeat\");\n\t\t\t\t\t\t\t\t\tif (endRepeat) {\n\t\t\t\t\t\t\t\t\t\tvar s = startRepeatPlaceholder[voiceNumber];\n\t\t\t\t\t\t\t\t\t\tif (!s) s = 0; // If there wasn't a left repeat, then we repeat from the beginning.\n\t\t\t\t\t\t\t\t\t\tvar e = skipEndingPlaceholder[voiceNumber];\n\t\t\t\t\t\t\t\t\t\tif (!e) e = voices[voiceNumber].length; // If there wasn't a first ending marker, then we copy everything.\n\t\t\t\t\t\t\t\t\t\t// duplicate each of the elements - this has to be a deep copy.\n\t\t\t\t\t\t\t\t\t\tfor (var z = s; z < e; z++) {\n\t\t\t\t\t\t\t\t\t\t\tvar item = parseCommon.clone(voices[voiceNumber][z]);\n\t\t\t\t\t\t\t\t\t\t\tif (item.pitches)\n\t\t\t\t\t\t\t\t\t\t\t\titem.pitches = parseCommon.cloneArray(item.pitches);\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push(item);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// reset these in case there is a second repeat later on.\n\t\t\t\t\t\t\t\t\t\tskipEndingPlaceholder[voiceNumber] = undefined;\n\t\t\t\t\t\t\t\t\t\tstartRepeatPlaceholder[voiceNumber] = undefined;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (startEnding)\n\t\t\t\t\t\t\t\t\t\tskipEndingPlaceholder[voiceNumber] = voices[voiceNumber].length;\n\t\t\t\t\t\t\t\t\tif (startRepeat)\n\t\t\t\t\t\t\t\t\t\tstartRepeatPlaceholder[voiceNumber] = voices[voiceNumber].length;\n\t\t\t\t\t\t\t\t\trhythmHeadThisBar = false;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 'style':\n\t\t\t\t\t\t\t\t\tstyle[voiceNumber] = elem.head;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 'timeSignature':\n\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push(interpretMeter(elem));\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 'part':\n\t\t\t\t\t\t\t\t\t// TODO-PER: If there is a part section in the header, then this should probably affect the repeats.\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 'stem':\n\t\t\t\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\t\t\tcase 'break':\n\t\t\t\t\t\t\t\tcase 'font':\n\t\t\t\t\t\t\t\t\t// These elements don't affect sound\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 'midi':\n\t\t\t\t\t\t\t\t\t//console.log(\"MIDI inline\", elem); // TODO-PER: for debugging. Remove this.\n\t\t\t\t\t\t\t\t\tvar drumChange = false;\n\t\t\t\t\t\t\t\t\tswitch (elem.cmd) {\n\t\t\t\t\t\t\t\t\t\tcase \"drumon\": drumOn = true; drumChange = true; break;\n\t\t\t\t\t\t\t\t\t\tcase \"drumoff\": drumOn = false; drumChange = true; break;\n\t\t\t\t\t\t\t\t\t\tcase \"drum\": drumPattern = elem.params; drumChange = true; break;\n\t\t\t\t\t\t\t\t\t\tcase \"drumbars\": drumBars = elem.params[0]; drumChange = true; break;\n\t\t\t\t\t\t\t\t\t\tcase \"drummap\":\n\t\t\t\t\t\t\t\t\t\t\t// This is handled before getting here so it can be ignored.\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"channel\":\n\t\t\t\t\t\t\t\t\t\t\t// There's not much needed for the channel except to look out for the percussion channel\n\t\t\t\t\t\t\t\t\t\t\tif (elem.params[0] === 10)\n\t\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'instrument', program: PERCUSSION_PROGRAM });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"program\":\n\t\t\t\t\t\t\t\t\t\t\taddIfDifferent(voices[voiceNumber], { el_type: 'instrument', program: elem.params[0] });\n\t\t\t\t\t\t\t\t\t\t\tchannelExplicitlySet = true;\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"transpose\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: elem.params[0] });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"gchordoff\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'gchordOn', tacet: true });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"gchordon\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'gchordOn', tacet: false });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"beat\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'beat', beats: elem.params });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"nobeataccents\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'beataccents', value: false });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"beataccents\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'beataccents', value: true });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"vol\":\n\t\t\t\t\t\t\t\t\t\tcase \"volinc\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: elem.cmd, volume: elem.params[0] });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"swing\":\n\t\t\t\t\t\t\t\t\t\tcase \"gchord\":\n\t\t\t\t\t\t\t\t\t\tcase \"bassprog\":\n\t\t\t\t\t\t\t\t\t\tcase \"chordprog\":\n\t\t\t\t\t\t\t\t\t\tcase \"bassvol\":\n\t\t\t\t\t\t\t\t\t\tcase \"chordvol\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: elem.cmd, param: elem.params[0] });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\t\tconsole.log(\"MIDI seq: midi cmd not handled: \", elem.cmd, elem);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (drumChange) {\n\t\t\t\t\t\t\t\t\t\tvoices[0].push({el_type: 'drum', params: { pattern: drumPattern, bars: drumBars, intro: drumIntro, on: drumOn}});\n\t\t\t\t\t\t\t\t\t\tstartingDrumSet = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tconsole.log(\"MIDI: element type \" + elem.el_type + \" not handled.\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvoiceNumber++;\n\t\t\t\t\t\tif (!durationCounter[voiceNumber])\n\t\t\t\t\t\t\tdurationCounter[voiceNumber] = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfunction setDynamics(elem) {\n\t\t\t\t\tvar volumes = {\n\t\t\t\t\t\t'pppp': [15, 10, 5, 1],\n\t\t\t\t\t\t'ppp': [30, 20, 10, 1],\n\t\t\t\t\t\t'pp': [45, 35, 20, 1],\n\t\t\t\t\t\t'p': [60, 50, 35, 1],\n\t\t\t\t\t\t'mp': [75, 65, 50, 1],\n\t\t\t\t\t\t'mf': [90, 80, 65, 1],\n\t\t\t\t\t\t'f': [105, 95, 80, 1],\n\t\t\t\t\t\t'ff': [120, 110, 95, 1],\n\t\t\t\t\t\t'fff': [127, 125, 110, 1],\n\t\t\t\t\t\t'ffff': [127, 125, 110, 1]\n\t\t\t\t\t};\n\n\t\t\t\t\tvar dynamicType;\n\t\t\t\t\tif (elem.decoration) {\n\t\t\t\t\t\tif (elem.decoration.indexOf('pppp') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'pppp';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('ppp') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'ppp';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('pp') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'pp';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('p') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'p';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('mp') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'mp';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('mf') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'mf';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('f') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'f';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('ff') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'ff';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('fff') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'fff';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('ffff') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'ffff';\n\n\t\t\t\t\t\tif (dynamicType) {\n\t\t\t\t\t\t\tcurrentVolume = volumes[dynamicType].slice(0);\n\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'beat', beats: currentVolume.slice(0) });\n\t\t\t\t\t\t\tinCrescendo[k] = false;\n\t\t\t\t\t\t\tinDiminuendo[k] = false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (elem.decoration.indexOf(\"crescendo(\") >= 0) {\n\t\t\t\t\t\t\tvar n = numNotesToDecoration(voice, v, \"crescendo)\");\n\t\t\t\t\t\t\tvar top = Math.min(127, currentVolume[0] + crescendoSize);\n\t\t\t\t\t\t\tvar endDec = endingVolume(voice, v+n+1, Object.keys(volumes));\n\t\t\t\t\t\t\tif (endDec)\n\t\t\t\t\t\t\t\ttop = volumes[endDec][0];\n\t\t\t\t\t\t\tif (n > 0)\n\t\t\t\t\t\t\t\tinCrescendo[k] = Math.floor((top - currentVolume[0]) / n);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tinCrescendo[k] = false;\n\t\t\t\t\t\t\tinDiminuendo[k] = false;\n\t\t\t\t\t\t} else if (elem.decoration.indexOf(\"crescendo)\") >= 0) {\n\t\t\t\t\t\t\tinCrescendo[k] = false;\n\t\t\t\t\t\t} else if (elem.decoration.indexOf(\"diminuendo(\") >= 0) {\n\t\t\t\t\t\t\tvar n2 = numNotesToDecoration(voice, v, \"diminuendo)\");\n\t\t\t\t\t\t\tvar bottom = Math.max(15, currentVolume[0] - crescendoSize);\n\t\t\t\t\t\t\tvar endDec2 = endingVolume(voice, v+n2+1, Object.keys(volumes));\n\t\t\t\t\t\t\tif (endDec2)\n\t\t\t\t\t\t\t\tbottom = volumes[endDec2][0];\n\t\t\t\t\t\t\tinCrescendo[k] = false;\n\t\t\t\t\t\t\tif (n2 > 0)\n\t\t\t\t\t\t\t\tinDiminuendo[k] = Math.floor((bottom - currentVolume[0]) / n2);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tinDiminuendo[k] = false;\n\t\t\t\t\t\t} else if (elem.decoration.indexOf(\"diminuendo)\") >= 0) {\n\t\t\t\t\t\t\tinDiminuendo[k] = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// If there are tempo changes, make sure they are in all the voices. This must be done post process because all the elements in all the voices need to be created first.\n\t\tinsertTempoChanges(voices, tempoChanges);\n\n\t\tif (drumIntro) {\n\t\t\tvar pickups = abctune.getPickupLength();\n\t\t\t// add some measures of rests to the start of each track.\n\t\t\tfor (var vv = 0; vv < voices.length; vv++) {\n\t\t\t\tvar insertPoint = 0;\n\t\t\t\twhile (voices[vv][insertPoint].el_type !== \"note\" && voices[vv].length > insertPoint)\n\t\t\t\t\tinsertPoint++;\n\t\t\t\tif (voices[vv].length > insertPoint) {\n\t\t\t\t\tfor (var w = 0; w < drumIntro; w++) {\n\t\t\t\t\t\t// If it is the last measure of intro, subtract the pickups.\n\t\t\t\t\t\tif (pickups === 0 || w < drumIntro-1) {\n\t\t\t\t\t\t\tvoices[vv].splice(insertPoint, 0, \n\t\t\t\t\t\t\t\t{el_type: \"note\", rest: {type: \"rest\"}, duration: measureLength},\n\t\t\t\t\t\t\t\t{ el_type: \"bar\" }\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tinsertPoint += 2\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvoices[vv].splice(insertPoint++, 0, {el_type: \"note\", rest: {type: \"rest\"}, duration: measureLength-pickups});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (drumOffAfterIntro) {\n\t\t\t\t\t\tdrumOn = false\n\t\t\t\t\t\tvoices[vv].splice(insertPoint++, 0, {el_type: 'drum', params: { pattern: drumPattern, bars: drumBars, intro: drumIntro, on: drumOn}});\n\t\t\t\t\t\tdrumOffAfterIntro = false\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (voices.length > 0 && voices[0].length > 0) {\n\t\t\tvoices[0][0].pickupLength = abctune.getPickupLength();\n\t\t}\n\t\treturn voices;\n\t};\n\n\tfunction numNotesToDecoration(voice, start, decoration) {\n\t\tvar counter = 0;\n\t\tfor (var i = start+1; i < voice.length; i++) {\n\t\t\tif (voice[i].el_type === \"note\")\n\t\t\t\tcounter++;\n\t\t\tif (voice[i].decoration && voice[i].decoration.indexOf(decoration) >= 0)\n\t\t\t\treturn counter;\n\t\t}\n\t\treturn counter;\n\t}\n\tfunction endingVolume(voice, start, volumeDecorations) {\n\t\tvar end = Math.min(voice.length, start + 3); // If we have a volume within a couple notes of the end then assume that is the destination.\n\t\tfor (var i = start; i < end; i++) {\n\t\t\tif (voice[i].el_type === \"note\") {\n\t\t\t\tif (voice[i].decoration) {\n\t\t\t\t\tfor (var j = 0; j < voice[i].decoration.length; j++) {\n\t\t\t\t\t\tif (volumeDecorations.indexOf(voice[i].decoration[j]) >= 0)\n\t\t\t\t\t\t\treturn voice[i].decoration[j];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tfunction insertTempoChanges(voices, tempoChanges) {\n\t\tif (!tempoChanges || tempoChanges.length === 0)\n\t\t\treturn;\n\t\tvar changePositions = Object.keys(tempoChanges);\n\t\tfor (var i = 0; i < voices.length; i++) {\n\t\t\tvar voice = voices[i];\n\t\t\tvar lastTempo = tempoChanges['0'] ? tempoChanges['0'].qpm : 0; // Don't insert redundant changes. This happens normally when repeating from the beginning, but could happen anywhere that there is a tempo marking that is the same as the last one.\n\t\t\tfor (var j = 0; j < voice.length; j++) {\n\t\t\t\tvar el = voice[j];\n\t\t\t\tif (el.el_type === \"tempo\")\n\t\t\t\t\tlastTempo = el.qpm;\n\t\t\t\tif (changePositions.indexOf(''+el.timing) >= 0 && lastTempo !== tempoChanges[''+el.timing].qpm) {\n\t\t\t\t\tlastTempo = tempoChanges[''+el.timing].qpm;\n\t\t\t\t\tif (el.el_type === \"tempo\") {\n\t\t\t\t\t\tel.qpm = tempoChanges[''+el.timing].qpm;\n\t\t\t\t\t\tj++; // when there is a tempo element the next element has the same timing and we don't want it to match the second time.\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//console.log(\"tempo position\", i, j, el);\n\t\t\t\t\t\tvoices[i].splice(j, 0, {el_type: \"tempo\", qpm: tempoChanges[''+el.timing].qpm, timing: el.timing});\n\t\t\t\t\t\tj +=2; // skip the element we just inserted.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction chordVoiceOffThisBar(voices) {\n\t\tfor (var i = 0; i < voices.length; i++) {\n\t\t\tvar voice = voices[i];\n\t\t\tvar j = voice.length-1;\n\t\t\twhile (j >= 0 && voice[j].el_type !== 'bar') {\n\t\t\t\tvoice[j].noChordVoice = true;\n\t\t\t\tj--;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction getTrackTitle(staff, voiceNumber) {\n\t\tif (!staff || staff.length <= voiceNumber || !staff[voiceNumber].title)\n\t\t\treturn undefined;\n\t\treturn staff[voiceNumber].title.join(\" \");\n\t}\n\n\tfunction interpretTempo(element, beatLength) {\n\t\tvar duration = 1/4;\n\t\tif (element.duration) {\n\t\t\tduration = element.duration[0];\n\t\t}\n\t\tvar bpm = 60;\n\t\tif (element.bpm) {\n\t\t\tbpm = element.bpm;\n\t\t}\n\t\t// The tempo is defined with a beat length of \"duration\". If that isn't the natural beat length then there is a translation.\n\t\treturn duration * bpm / beatLength;\n\t}\n\n\tfunction interpretMeter(element) {\n\t\tvar meter;\n\t\tswitch (element.type) {\n\t\t\tcase \"common_time\":\n\t\t\t\tmeter = { el_type: 'meter', num: 4, den: 4 };\n\t\t\t\tbreak;\n\t\t\tcase \"cut_time\":\n\t\t\t\tmeter = { el_type: 'meter', num: 2, den: 2 };\n\t\t\t\tbreak;\n\t\t\tcase \"specified\":\n\t\t\t\t// TODO-PER: only taking the first meter, so the complex meters are not handled.\n\t\t\t\tmeter = { el_type: 'meter', num: element.value[0].num, den: element.value[0].den };\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// This should never happen.\n\t\t\t\tmeter = { el_type: 'meter' };\n\t\t}\n\t\tmeasureLength = meter.num/meter.den;\n\t\treturn meter;\n\t}\n\n\tfunction removeNaturals(accidentals) {\n\t\tvar acc = [];\n\t\tfor (var i = 0; i < accidentals.length; i++) {\n\t\t\tif (accidentals[i].acc !== \"natural\")\n\t\t\t\tacc.push(accidentals[i])\n\t\t}\n\t\treturn acc;\n\t}\n\tfunction addKey(arr, key) {\n\t\tvar newKey;\n\t\tif (key.root === 'HP')\n\t\t\tnewKey = {el_type: 'key', accidentals: [{acc: 'natural', note: 'g'}, {acc: 'sharp', note: 'f'}, {acc: 'sharp', note: 'c'}]};\n\t\telse\n\t\t\tnewKey = {el_type: 'key', accidentals: removeNaturals(key.accidentals) };\n\t\taddIfDifferent(arr, newKey);\n\t}\n\tfunction addMeter(arr, meter) {\n\t\tvar newMeter = interpretMeter(meter);\n\t\taddIfDifferent(arr, newMeter);\n\t}\n\tfunction addIfDifferent(arr, item) {\n\t\tfor (var i = arr.length-1; i >= 0; i--) {\n\t\t\tif (arr[i].el_type === item.el_type) {\n\t\t\t\tif (JSON.stringify(arr[i]) !== JSON.stringify(item))\n\t\t\t\t\tarr.push(item);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tarr.push(item);\n\t}\n\n})();\n\nmodule.exports = sequence;\n","var registerAudioContext = require('./register-audio-context.js');\n\nfunction activeAudioContext() {\n\tif (!window.abcjsAudioContext)\n\t\tregisterAudioContext();\n\treturn window.abcjsAudioContext;\n}\n\nmodule.exports = activeAudioContext;\n","// This turns the number of cents to detune into a value that is convenient to use in pitch calculations\n// A cent is 1/100 of a musical half step and is calculated exponentially over the course of an octave.\n// The equation is:\n// Two to the power of cents divided by 1200\n\nfunction centsToFactor(cents) {\n\treturn Math.pow(2, cents/1200);\n}\n\nmodule.exports = centsToFactor;\n","//\n// The algorithm for chords is:\n// - The chords are done in a separate track.\n// - If there are notes before the first chord, then put that much silence to start the track.\n// - The pattern of chord expression depends on the meter, and how many chords are in a measure.\n// - There is a possibility that a measure will have an incorrect number of beats, if that is the case, then\n// start the pattern anew on the next measure number.\n// - If a chord root is not A-G, then ignore it as if the chord wasn't there at all.\n// - If a chord modification isn't in our supported list, change it to a major triad.\n//\n// - There is a standard pattern of boom-chick for each time sig, or it can be overridden.\n// - For any unrecognized meter, play the full chord on each beat.\n//\n//\t- If there is a chord specified that is not on a beat, move it earlier to the previous beat, unless there is already a chord on that beat.\n//\t- Otherwise, move it later, unless there is already a chord on that beat.\n// \t- Otherwise, ignore it. (TODO-PER: expand this as more support is added.)\n//\n// If there is any note in the melody that has a rhythm head, then assume the melody controls the rhythm, so there is no chord added for that entire measure.\n\nvar parseCommon = require(\"../parse/abc_common\");\n\nvar ChordTrack = function ChordTrack(numVoices, chordsOff, midiOptions, meter) {\n\tthis.chordTrack = [];\n\tthis.chordTrackFinished = false;\n\tthis.chordChannel = numVoices; // first free channel for chords\n\tthis.currentChords = [];\n\tthis.lastChord;\n\tthis.chordLastBar;\n\tthis.chordsOff = !!chordsOff\n\tthis.gChordTacet = this.chordsOff;\n\tthis.hasRhythmHead = false;\n\tthis.transpose = 0;\n\tthis.lastBarTime = 0;\n\tthis.meter = meter;\n\tthis.tempoChangeFactor = 1;\n\n\tthis.bassInstrument = midiOptions.bassprog && midiOptions.bassprog.length === 1 ? midiOptions.bassprog[0] : 0;\n\tthis.chordInstrument = midiOptions.chordprog && midiOptions.chordprog.length === 1 ? midiOptions.chordprog[0] : 0;\n\tthis.boomVolume = midiOptions.bassvol && midiOptions.bassvol.length === 1 ? midiOptions.bassvol[0] : 64;\n\tthis.chickVolume = midiOptions.chordvol && midiOptions.chordvol.length === 1 ? midiOptions.chordvol[0] : 48;\n\n\tthis.overridePattern = midiOptions.gchord ? parseGChord(midiOptions.gchord[0]) : undefined\n};\n\nChordTrack.prototype.setMeter = function (meter) {\n\tthis.meter = meter\n};\n\nChordTrack.prototype.setTempoChangeFactor = function (tempoChangeFactor) {\n\tthis.tempoChangeFactor = tempoChangeFactor\n};\n\nChordTrack.prototype.setLastBarTime = function (lastBarTime) {\n\tthis.lastBarTime = lastBarTime\n};\n\nChordTrack.prototype.setTranspose = function (transpose) {\n\tthis.transpose = transpose\n};\n\nChordTrack.prototype.setRhythmHead = function (isRhythmHead, elem) {\n\tthis.hasRhythmHead = isRhythmHead\n\tvar ePitches = [];\n\tif (isRhythmHead) {\n\t\tif (this.lastChord && this.lastChord.chick) {\n\t\t\tfor (var i2 = 0; i2 < this.lastChord.chick.length; i2++) {\n\t\t\t\tvar note2 = parseCommon.clone(elem.pitches[0]);\n\t\t\t\tnote2.actualPitch = this.lastChord.chick[i2];\n\t\t\t\tePitches.push(note2);\n\t\t\t}\n\t\t}\n\t}\n\treturn ePitches\n};\n\nChordTrack.prototype.barEnd = function (element) {\n\tif (this.chordTrack.length > 0 && !this.chordTrackFinished) {\n\t\tthis.resolveChords(this.lastBarTime, timeToRealTime(element.time));\n\t\tthis.currentChords = [];\n\t}\n\tthis.chordLastBar = this.lastChord;\n};\n\nChordTrack.prototype.gChordOn = function (element) {\n\tif (!this.chordsOff)\n\t\tthis.gChordTacet = element.tacet;\n};\n\nChordTrack.prototype.paramChange = function (element) {\n\tswitch (element.el_type) {\n\t\tcase \"gchord\":\n\t\t\tthis.overridePattern = parseGChord(element.param);\n\t\t\tbreak;\n\t\tcase \"bassprog\":\n\t\t\tthis.bassInstrument = element.param;\n\t\t\tbreak;\n\t\tcase \"chordprog\":\n\t\t\tthis.chordInstrument = element.param;\n\t\t\tbreak;\n\t\tcase \"bassvol\":\n\t\t\tthis.boomVolume = element.param;\n\t\t\tbreak;\n\t\tcase \"chordvol\":\n\t\t\tthis.chickVolume = element.param;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tconsole.log(\"unhandled midi param\", element)\t\n\t}\n};\n\nChordTrack.prototype.finish = function () {\n\tif (!this.chordTrackEmpty()) // Don't do chords on more than one track, so turn off chord detection after we create it.\n\t\tthis.chordTrackFinished = true;\n};\n\nChordTrack.prototype.addTrack = function (tracks) {\n\tif (!this.chordTrackEmpty())\n\t\ttracks.push(this.chordTrack);\n};\n\nChordTrack.prototype.findChord = function (elem) {\n\tif (this.gChordTacet)\n\t\treturn 'break';\n\n\t// TODO-PER: Just using the first chord if there are more than one.\n\tif (this.chordTrackFinished || !elem.chord || elem.chord.length === 0)\n\t\treturn null;\n\n\t// Return the first annotation that is a regular chord: that is, it is in the default place or is a recognized \"tacet\" phrase.\n\tfor (var i = 0; i < elem.chord.length; i++) {\n\t\tvar ch = elem.chord[i];\n\t\tif (ch.position === 'default')\n\t\t\treturn ch.name;\n\t\tif (this.breakSynonyms.indexOf(ch.name.toLowerCase()) >= 0)\n\t\t\treturn 'break';\n\t}\n\treturn null;\n}\n\nChordTrack.prototype.interpretChord = function (name) {\n\t// chords have the format:\n\t// [root][acc][modifier][/][bass][acc]\n\t// (The chord might be surrounded by parens. Just ignore them.)\n\t// root must be present and must be from A-G.\n\t// acc is optional and can be # or b\n\t// The modifier can be a wide variety of things, like \"maj7\". As they are discovered, more are supported here.\n\t// If there is a slash, then there is a bass note, which can be from A-G, with an optional acc.\n\t// If the root is unrecognized, then \"undefined\" is returned and there is no chord.\n\t// If the modifier is unrecognized, a major triad is returned.\n\t// If the bass notes is unrecognized, it is ignored.\n\tif (name.length === 0)\n\t\treturn undefined;\n\tif (name === 'break')\n\t\treturn { chick: [] };\n\tvar root = name.substring(0, 1);\n\tif (root === '(') {\n\t\tname = name.substring(1, name.length - 2);\n\t\tif (name.length === 0)\n\t\t\treturn undefined;\n\t\troot = name.substring(0, 1);\n\t}\n\tvar bass = this.basses[root];\n\tif (!bass)\t// If the bass note isn't listed, then this was an unknown root. Only A-G are accepted.\n\t\treturn undefined;\n\t// Don't transpose the chords more than an octave.\n\tvar chordTranspose = this.transpose;\n\twhile (chordTranspose < -8)\n\t\tchordTranspose += 12;\n\twhile (chordTranspose > 8)\n\t\tchordTranspose -= 12;\n\tbass += chordTranspose;\n\tvar bass2 = bass - 5;\t// The alternating bass is a 4th below\n\tvar chick;\n\tif (name.length === 1)\n\t\tchick = this.chordNotes(bass, '');\n\tvar remaining = name.substring(1);\n\tvar acc = remaining.substring(0, 1);\n\tif (acc === 'b' || acc === '♭') {\n\t\tbass--;\n\t\tbass2--;\n\t\tremaining = remaining.substring(1);\n\t} else if (acc === '#' || acc === '♯') {\n\t\tbass++;\n\t\tbass2++;\n\t\tremaining = remaining.substring(1);\n\t}\n\tvar arr = remaining.split('/');\n\tchick = this.chordNotes(bass, arr[0]);\n\t// If the 5th is altered then the bass is altered. Normally the bass is 7 from the root, so adjust if it isn't.\n\tif (chick.length >= 3) {\n\t\tvar fifth = chick[2] - chick[0];\n\t\tbass2 = bass2 + fifth - 7;\n\t}\n\n\tif (arr.length === 2) {\n\t\tvar explicitBass = this.basses[arr[1].substring(0, 1)];\n\t\tif (explicitBass) {\n\t\t\tvar bassAcc = arr[1].substring(1);\n\t\t\tvar bassShift = { '#': 1, '♯': 1, 'b': -1, '♭': -1 }[bassAcc] || 0;\n\t\t\tbass = this.basses[arr[1].substring(0, 1)] + bassShift + chordTranspose;\n\t\t\tbass2 = bass;\n\t\t}\n\t}\n\treturn { boom: bass, boom2: bass2, chick: chick };\n}\n\nChordTrack.prototype.chordNotes = function (bass, modifier) {\n\tvar intervals = this.chordIntervals[modifier];\n\tif (!intervals) {\n\t\tif (modifier.slice(0, 2).toLowerCase() === 'ma' || modifier[0] === 'M')\n\t\t\tintervals = this.chordIntervals.M;\n\t\telse if (modifier[0] === 'm' || modifier[0] === '-')\n\t\t\tintervals = this.chordIntervals.m;\n\t\telse\n\t\t\tintervals = this.chordIntervals.M;\n\t}\n\tbass += 12;\t// the chord is an octave above the bass note.\n\tvar notes = [];\n\tfor (var i = 0; i < intervals.length; i++) {\n\t\tnotes.push(bass + intervals[i]);\n\t}\n\treturn notes;\n}\n\nChordTrack.prototype.writeNote = function (note, beatLength, volume, beat, noteLength, instrument) {\n\t// undefined means there is a stop time.\n\tif (note !== undefined)\n\t\tthis.chordTrack.push({ cmd: 'note', pitch: note, volume: volume, start: this.lastBarTime + beat * durationRounded(beatLength, this.tempoChangeFactor), duration: durationRounded(noteLength, this.tempoChangeFactor), gap: 0, instrument: instrument });\n}\n\nChordTrack.prototype.chordTrackEmpty = function () {\n\tvar isEmpty = true;\n\tfor (var i = 0; i < this.chordTrack.length && isEmpty; i++) {\n\t\tif (this.chordTrack[i].cmd === 'note')\n\t\t\tisEmpty = false\n\t}\n\treturn isEmpty;\n}\n\nChordTrack.prototype.resolveChords = function (startTime, endTime) {\n\t// If there is a rhythm head anywhere in the measure then don't add a separate rhythm track\n\tif (this.hasRhythmHead)\n\t\treturn\n\n\tvar num = this.meter.num;\n\tvar den = this.meter.den;\n\tvar beatLength = 1 / den;\n\tvar noteLength = beatLength / 2;\n\tvar thisMeasureLength = parseInt(num, 10) / parseInt(den, 10);\n\tvar portionOfAMeasure = thisMeasureLength - (endTime - startTime) / this.tempoChangeFactor;\n\tif (Math.abs(portionOfAMeasure) < 0.00001)\n\t\tportionOfAMeasure = 0;\n\n\t // there wasn't a new chord this measure, so use the last chord declared.\n\t // also the case where there is a chord declared in the measure, but not on its first beat.\n\tif (this.currentChords.length === 0 || this.currentChords[0].beat !== 0) {\n\t\tthis.currentChords.unshift({ beat: 0, chord: this.chordLastBar });\n\t}\n\n\t//console.log(this.currentChords)\n\tvar currentChordsExpanded = expandCurrentChords(this.currentChords, 8*num/den, beatLength)\n\t//console.log(currentChordsExpanded)\n\tvar thisPattern = this.overridePattern ? this.overridePattern : this.rhythmPatterns[num + '/' + den]\n\tif (portionOfAMeasure) {\n\t\tthisPattern = [];\n\t\tvar beatsPresent = ((endTime - startTime) / this.tempoChangeFactor) * 8;\n\t\tfor (var p = 0; p < beatsPresent/2; p += 2) {\n\t\t\tthisPattern.push(\"chick\");\n\t\t\tthisPattern.push(\"\");\n\t\t}\n\t}\n\tif (!thisPattern) {\n\t\tthisPattern = []\n\t\tfor (var p = 0; p < (8*num/den)/2; p++) {\n\t\t\tthisPattern.push('chick')\n\t\t\tthisPattern.push(\"\");\n\t\t}\n\t}\n\tvar firstBoom = true\n\t// If the pattern is overridden, it might be longer than the length of a measure. If so, then ignore the rest of it\n\tvar minLength = Math.min(thisPattern.length, currentChordsExpanded.length)\n\tfor (var p = 0; p < minLength; p++) {\n\t\tif (p > 0 && currentChordsExpanded[p-1] && currentChordsExpanded[p] && currentChordsExpanded[p-1].boom !== currentChordsExpanded[p].boom)\n\t\t\tfirstBoom = true\n\t\tvar type = thisPattern[p]\n\t\tvar isBoom = type.indexOf('boom') >= 0\n\t\t// If we changed chords at a time when we're not expecting a bass note, then add an extra bass note in.\n\t\tvar newBass = !isBoom && p !== 0 && (!currentChordsExpanded[p-1] || currentChordsExpanded[p-1].boom !== currentChordsExpanded[p].boom)\n\t\tvar pitches = resolvePitch(currentChordsExpanded[p], type, firstBoom, newBass)\n\t\tif (isBoom)\n\t\t\tfirstBoom = false\n\t\tfor (var oo = 0; oo < pitches.length; oo++) {\n\t\t\tthis.writeNote(pitches[oo], \n\t\t\t\t0.125,\n\t\t\t\tisBoom || newBass ? this.boomVolume : this.chickVolume,\n\t\t\t\tp,\n\t\t\t\tnoteLength,\n\t\t\t\tisBoom || newBass ? this.bassInstrument : this.chordInstrument\n\t\t\t)\n\t\t\tif (newBass)\n\t\t\t\tnewBass = false\n\t\t\telse\n\t\t\t\tisBoom = false // only the first note in a chord is a bass note. This handles the case where bass and chord are played at the same time.\n\t\t}\n\t}\n\treturn\n}\n\nChordTrack.prototype.processChord = function (elem) {\n\tif (this.chordTrackFinished)\n\t\treturn\n\tvar chord = this.findChord(elem);\n\tif (chord) {\n\t\tvar c = this.interpretChord(chord);\n\t\t// If this isn't a recognized chord, just completely ignore it.\n\t\tif (c) {\n\t\t\t// If we ever have a chord in this voice, then we add the chord track.\n\t\t\t// However, if there are chords on more than one voice, then just use the first voice.\n\t\t\tif (this.chordTrack.length === 0) {\n\t\t\t\tthis.chordTrack.push({ cmd: 'program', channel: this.chordChannel, instrument: this.chordInstrument });\n\t\t\t}\n\n\t\t\tthis.lastChord = c;\n\t\t\tvar barBeat = calcBeat(this.lastBarTime, timeToRealTime(elem.time));\n\t\t\tthis.currentChords.push({ chord: this.lastChord, beat: barBeat, start: timeToRealTime(elem.time) });\n\t\t}\n\t}\n}\n\nfunction resolvePitch(currentChord, type, firstBoom, newBass) {\n\tvar ret = []\n\tif (!currentChord)\n\t\treturn ret\n\tif (type.indexOf('boom') >= 0)\n\t\tret.push(firstBoom ? currentChord.boom : currentChord.boom2)\n\telse if (newBass)\n\t\tret.push(currentChord.boom)\n\tif (type.indexOf('chick') >= 0) {\n\t\tfor (var i = 0; i < currentChord.chick.length; i++)\n\t\t\tret.push(currentChord.chick[i])\n\t}\n\tswitch (type) {\n\t\tcase 'DO': ret.push(currentChord.chick[0]); break;\n\t\tcase 'MI': ret.push(currentChord.chick[1]); break;\n\t\tcase 'SOL': ret.push(currentChord.chick[2]); break;\n\t\tcase 'TI': currentChord.chick.length > 3 ? ret.push(currentChord.chick[2]) : ret.push(currentChord.chick[0]+12); break;\n\t\tcase 'TOP': currentChord.chick.length > 4 ? ret.push(currentChord.chick[2]) : ret.push(currentChord.chick[1]+12); break;\n\t\tcase 'do': ret.push(currentChord.chick[0]+12); break;\n\t\tcase 'mi': ret.push(currentChord.chick[1]+12); break;\n\t\tcase 'sol': ret.push(currentChord.chick[2]+12); break;\n\t\tcase 'ti': currentChord.chick.length > 3 ? ret.push(currentChord.chick[2]+12) : ret.push(currentChord.chick[0]+24); break;\n\t\tcase 'top': currentChord.chick.length > 4 ? ret.push(currentChord.chick[2]+12) : ret.push(currentChord.chick[1]+24); break;\n\t}\n\treturn ret\n}\n\nfunction parseGChord(gchord) {\n\t// TODO-PER: The spec is more complicated than this but for now this will not try to do anything with error cases like the wrong number of beats.\n\tvar pattern = []\n\tfor (var i = 0; i < gchord.length; i++) {\n\t\tvar ch = gchord[i]\n\t\tswitch(ch) {\n\t\t\tcase 'z' : pattern.push(''); break;\n\t\t\tcase '2' : pattern.push(''); break; // TODO-PER: This should extend the last note, but that's a small effect\n\t\t\tcase 'c' : pattern.push('chick'); break;\n\t\t\tcase 'b' : pattern.push('boom&chick'); break;\n\t\t\tcase 'f' : pattern.push('boom'); break;\n\t\t\tcase 'G' : pattern.push('DO'); break;\n\t\t\tcase 'H' : pattern.push('MI'); break;\n\t\t\tcase 'I' : pattern.push('SOL'); break;\n\t\t\tcase 'J' : pattern.push('TI'); break;\n\t\t\tcase 'K' : pattern.push('TOP'); break;\n\t\t\tcase 'g' : pattern.push('do'); break;\n\t\t\tcase 'h' : pattern.push('mi'); break;\n\t\t\tcase 'i' : pattern.push('sol'); break;\n\t\t\tcase 'j' : pattern.push('ti'); break;\n\t\t\tcase 'k' : pattern.push('top'); break;\n\t\t}\n\t}\n\treturn pattern\n}\n\n// This returns an array that has a chord for each 1/8th note position in the current measure\nfunction expandCurrentChords(currentChords, num8thNotes, beatLength) {\n\tbeatLength = beatLength * 8 // this is expressed as a fraction, so that 0.25 is a quarter notes. We want it to be the number of 8th notes\n\tvar chords = []\n\tif (currentChords.length === 0)\n\t\treturn chords\n\n\tvar currentChord = currentChords[0].chord\n\tfor (var i = 1; i < currentChords.length; i++) {\n\t\tvar current = currentChords[i]\n\t\twhile (chords.length < current.beat) {\n\t\t\tchords.push(currentChord)\n\t\t}\n\t\tcurrentChord = current.chord\n\t}\n\twhile (chords.length < num8thNotes)\n\t\tchords.push(currentChord)\n\treturn chords\n}\n\nfunction calcBeat(measureStart, currTime) {\n\tvar distanceFromStart = currTime - measureStart;\n\treturn distanceFromStart * 8;\n}\n\nChordTrack.prototype.breakSynonyms = ['break', '(break)', 'no chord', 'n.c.', 'tacet'];\n\nChordTrack.prototype.basses = {\n\t'A': 33, 'B': 35, 'C': 36, 'D': 38, 'E': 40, 'F': 41, 'G': 43\n};\n\nChordTrack.prototype.chordIntervals = {\n\t// diminished (all flat 5 chords)\n\t'dim': [0, 3, 6],\n\t'°': [0, 3, 6],\n\t'˚': [0, 3, 6],\n\n\t'dim7': [0, 3, 6, 9],\n\t'°7': [0, 3, 6, 9],\n\t'˚7': [0, 3, 6, 9],\n\n\t'ø7': [0, 3, 6, 10],\n\t'm7(b5)': [0, 3, 6, 10],\n\t'm7b5': [0, 3, 6, 10],\n\t'm7♭5': [0, 3, 6, 10],\n\t'-7(b5)': [0, 3, 6, 10],\n\t'-7b5': [0, 3, 6, 10],\n\n\t'7b5': [0, 4, 6, 10],\n\t'7(b5)': [0, 4, 6, 10],\n\t'7♭5': [0, 4, 6, 10],\n\n\t'7(b9,b5)': [0, 4, 6, 10, 13],\n\t'7b9,b5': [0, 4, 6, 10, 13],\n\t'7(#9,b5)': [0, 4, 6, 10, 15],\n\t'7#9b5': [0, 4, 6, 10, 15],\n\t'maj7(b5)': [0, 4, 6, 11],\n\t'maj7b5': [0, 4, 6, 11],\n\t'13(b5)': [0, 4, 6, 10, 14, 21],\n\t'13b5': [0, 4, 6, 10, 14, 21],\n\n\t// minor (all normal 5, minor 3 chords)\n\t'm': [0, 3, 7],\n\t'-': [0, 3, 7],\n\t'm6': [0, 3, 7, 9],\n\t'-6': [0, 3, 7, 9],\n\t'm7': [0, 3, 7, 10],\n\t'-7': [0, 3, 7, 10],\n\n\t'-(b6)': [0, 3, 7, 8],\n\t'-b6': [0, 3, 7, 8],\n\t'-6/9': [0, 3, 7, 9, 14],\n\t'-7(b9)': [0, 3, 7, 10, 13],\n\t'-7b9': [0, 3, 7, 10, 13],\n\t'-maj7': [0, 3, 7, 11],\n\t'-9+7': [0, 3, 7, 11, 13],\n\t'-11': [0, 3, 7, 11, 14, 17],\n\t'm11': [0, 3, 7, 11, 14, 17],\n\t'-maj9': [0, 3, 7, 11, 14],\n\t'-∆9': [0, 3, 7, 11, 14],\n\t'mM9': [0, 3, 7, 11, 14],\n\n\t// major (all normal 5, major 3 chords)\n\t'M': [0, 4, 7],\n\t'6': [0, 4, 7, 9],\n\t'6/9': [0, 4, 7, 9, 14],\n\t'6add9': [0, 4, 7, 9, 14],\n\t'69': [0, 4, 7, 9, 14],\n\n\t'7': [0, 4, 7, 10],\n\t'9': [0, 4, 7, 10, 14],\n\t'11': [0, 7, 10, 14, 17],\n\t'13': [0, 4, 7, 10, 14, 21],\n\t'7b9': [0, 4, 7, 10, 13],\n\t'7♭9': [0, 4, 7, 10, 13],\n\t'7(b9)': [0, 4, 7, 10, 13],\n\t'7(#9)': [0, 4, 7, 10, 15],\n\t'7#9': [0, 4, 7, 10, 15],\n\t'(13)': [0, 4, 7, 10, 14, 21],\n\t'7(9,13)': [0, 4, 7, 10, 14, 21],\n\t'7(#9,b13)': [0, 4, 7, 10, 15, 20],\n\t'7(#11)': [0, 4, 7, 10, 14, 18],\n\t'7#11': [0, 4, 7, 10, 14, 18],\n\t'7(b13)': [0, 4, 7, 10, 20],\n\t'7b13': [0, 4, 7, 10, 20],\n\t'9(#11)': [0, 4, 7, 10, 14, 18],\n\t'9#11': [0, 4, 7, 10, 14, 18],\n\t'13(#11)': [0, 4, 7, 10, 18, 21],\n\t'13#11': [0, 4, 7, 10, 18, 21],\n\n\t'maj7': [0, 4, 7, 11],\n\t'∆7': [0, 4, 7, 11],\n\t'Δ7': [0, 4, 7, 11],\n\t'maj9': [0, 4, 7, 11, 14],\n\t'maj7(9)': [0, 4, 7, 11, 14],\n\t'maj7(11)': [0, 4, 7, 11, 17],\n\t'maj7(#11)': [0, 4, 7, 11, 18],\n\t'maj7(13)': [0, 4, 7, 14, 21],\n\t'maj7(9,13)': [0, 4, 7, 11, 14, 21],\n\n\t'7sus4': [0, 5, 7, 10],\n\t'm7sus4': [0, 3, 7, 10, 17],\n\t'sus4': [0, 5, 7],\n\t'sus2': [0, 2, 7],\n\t'7sus2': [0, 2, 7, 10],\n\t'9sus4': [0, 5, 7, 10, 14],\n\t'13sus4': [0, 5, 7, 10, 14, 21],\n\n\t// augmented (all sharp 5 chords)\n\t'aug7': [0, 4, 8, 10],\n\t'+7': [0, 4, 8, 10],\n\t'+': [0, 4, 8],\n\t'7#5': [0, 4, 8, 10],\n\t'7♯5': [0, 4, 8, 10],\n\t'7+5': [0, 4, 8, 10],\n\t'9#5': [0, 4, 8, 10, 14],\n\t'9♯5': [0, 4, 8, 10, 14],\n\t'9+5': [0, 4, 8, 10, 14],\n\t'-7(#5)': [0, 3, 8, 10],\n\t'-7#5': [0, 3, 8, 10],\n\t'7(#5)': [0, 4, 8, 10],\n\t'7(b9,#5)': [0, 4, 8, 10, 13],\n\t'7b9#5': [0, 4, 8, 10, 13],\n\t'maj7(#5)': [0, 4, 8, 11],\n\t'maj7#5': [0, 4, 8, 11],\n\t'maj7(#5,#11)': [0, 4, 8, 11, 18],\n\t'maj7#5#11': [0, 4, 8, 11, 18],\n\t'9(#5)': [0, 4, 8, 10, 14],\n\t'13(#5)': [0, 4, 8, 10, 14, 21],\n\t'13#5': [0, 4, 8, 10, 14, 21]\n};\n\nChordTrack.prototype.rhythmPatterns = {\n\t\"2/2\": ['boom', '', '', '', 'chick', '', '', ''],\n\t\"3/2\": ['boom', '', '', '', 'chick', '', '', '', 'chick', '', '', ''],\n\t\"4/2\": ['boom', '', '', '', 'chick', '', '', '', 'boom', '', '', '', 'chick', '', '', ''],\n\n\t\"2/4\": ['boom', '', 'chick', ''],\n\t\"3/4\": ['boom', '', 'chick', '', 'chick', ''],\n\t\"4/4\": ['boom', '', 'chick', '', 'boom', '', 'chick', ''],\n\t\"5/4\": ['boom', '', 'chick', '', 'chick', '', 'boom', '', 'chick', ''],\n\t\"6/4\": ['boom', '', 'chick', '', 'boom', '', 'chick', '', 'boom', '', 'chick', ''],\n\n\t\"3/8\": ['boom', '', 'chick'],\n\t\"6/8\": ['boom', '', 'chick', 'boom', '', 'chick'],\n\t\"9/8\": ['boom', '', 'chick', 'boom', '', 'chick', 'boom', '', 'chick'],\n\t\"12/8\": ['boom', '', 'chick', 'boom', '', 'chick', 'boom', '', 'chick', 'boom', '', 'chick'],\n};\n\n// TODO-PER: these are repeated in flattener. Can it be shared?\n\nfunction timeToRealTime(time) {\n\treturn time / 1000000;\n}\n\nfunction durationRounded(duration, tempoChangeFactor) {\n\treturn Math.round(duration * tempoChangeFactor * 1000000) / 1000000;\n}\n\nmodule.exports = ChordTrack;\n","// Convert the input structure to a more useful structure where each item has a length of its own.\n\nvar instrumentIndexToName = require('./instrument-index-to-name');\n\nvar createNoteMap = function(sequence) {\n\tvar map = [];\n\tfor (var i = 0; i < sequence.tracks.length; i++)\n\t\tmap.push([]);\n\n\t// TODO-PER: handle more than one note in a track\n\tvar nextNote = {};\n\tvar currentInstrument = instrumentIndexToName[0];\n\t// ev.start and ev.duration are in whole notes. Need to turn them into\n\tsequence.tracks.forEach(function(track, i) {\n\t\ttrack.forEach(function(ev) {\n\t\t\tswitch (ev.cmd) {\n\t\t\t\tcase \"note\":\n\t\t\t\t\t// ev contains:\n\t\t\t\t\t// {\"cmd\":\"note\",\"pitch\":72,\"volume\":95,\"start\":0.125,\"duration\":0.25,\"instrument\":0,\"gap\":0}\n\t\t\t\t\t// where start and duration are in whole notes, gap is in 1/1920 of a second (i.e. MIDI ticks)\n\t\t\t\t\tvar inst = ev.instrument !== undefined ? instrumentIndexToName[ev.instrument] : currentInstrument\n\t\t\t\t\tif (ev.duration > 0) {\n\t\t\t\t\t\tvar gap = ev.gap ? ev.gap : 0;\n\t\t\t\t\t\tvar len = ev.duration;\n\t\t\t\t\t\tgap = Math.min(gap, len * 2 / 3);\n\t\t\t\t\t\tvar obj = {\n\t\t\t\t\t\t\tpitch: ev.pitch,\n\t\t\t\t\t\t\tinstrument: inst,\n\t\t\t\t\t\t\tstart: Math.round((ev.start) * 1000000)/1000000,\n\t\t\t\t\t\t\tend: Math.round((ev.start + len - gap) * 1000000)/1000000,\n\t\t\t\t\t\t\tvolume: ev.volume\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (ev.startChar)\n\t\t\t\t\t\t\tobj.startChar = ev.startChar;\n\t\t\t\t\t\tif (ev.endChar)\n\t\t\t\t\t\t\tobj.endChar = ev.endChar;\n\t\t\t\t\t\tif (ev.style)\n\t\t\t\t\t\t\tobj.style = ev.style;\n\t\t\t\t\t\tif (ev.cents)\n\t\t\t\t\t\t\tobj.cents = ev.cents;\n\t\t\t\t\t\tmap[i].push(obj);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"program\":\n\t\t\t\t\tcurrentInstrument = instrumentIndexToName[ev.instrument];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"text\":\n\t\t\t\t\t// Ignore the track names - that is just for midi files.\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t// TODO-PER: handle other event types\n\t\t\t\t\tconsole.log(\"Unhandled midi event\", ev);\n\t\t\t}\n\t\t});\n\t});\n\treturn map;\n};\n\nmodule.exports = createNoteMap;\n","var supportsAudio = require('./supports-audio');\nvar registerAudioContext = require('./register-audio-context');\nvar activeAudioContext = require('./active-audio-context');\nvar parseCommon = require('../parse/abc_common');\n\nvar loopImage = require('./images/loop.svg.js');\nvar playImage = require('./images/play.svg.js');\nvar pauseImage = require('./images/pause.svg.js');\nvar loadingImage = require('./images/loading.svg.js');\nvar resetImage = require('./images/reset.svg.js');\n\nfunction CreateSynthControl(parent, options) {\n\tvar self = this;\n\t// parent is either an element or a selector.\n\tif (typeof parent === \"string\") {\n\t\tvar selector = parent;\n\t\tparent = document.querySelector(selector);\n\t\tif (!parent)\n\t\t\tthrow new Error(\"Cannot find element \\\"\" + selector + \"\\\" in the DOM.\");\n\t} else if (!(parent instanceof HTMLElement))\n\t\tthrow new Error(\"The first parameter must be a valid element or selector in the DOM.\");\n\n\tself.parent = parent;\n\tself.options = {};\n\tif (options)\n\t\tself.options = parseCommon.clone(options);\n\n\t// This can be called in the following cases:\n\t// AC already registered and not suspended\n\t// AC already registered and suspended\n\t// AC not registered and not passed in\n\t// AC not registered but passed in (but suspended)\n\t// AC not registered but passed in (not suspended)\n\t// If the AC is already registered, then just use it - ignore what is passed in\n\t// Create the AC if necessary if there isn't one already.\n\t// We don't care right now if the AC is suspended - whenever a button is clicked then we check it.\n\tif (self.options.ac)\n\t\tregisterAudioContext(self.options.ac);\n\tbuildDom(self.parent, self.options);\n\tattachListeners(self);\n\n\tself.disable = function(isDisabled) {\n\t\tvar el = self.parent.querySelector(\".abcjs-inline-audio\");\n\t\tif (isDisabled)\n\t\t\tel.classList.add(\"abcjs-disabled\");\n\t\telse\n\t\t\tel.classList.remove(\"abcjs-disabled\");\n\t};\n\tself.setWarp = function(tempo, warp) {\n\t\tvar el = self.parent.querySelector(\".abcjs-midi-tempo\");\n\t\tel.value = Math.round(warp);\n\t\tself.setTempo(tempo)\n\t};\n\tself.setTempo = function(tempo) {\n\t\tvar el = self.parent.querySelector(\".abcjs-midi-current-tempo\");\n\t\tif (el)\n\t\t\tel.innerHTML = Math.round(tempo);\n\t};\n\tself.resetAll = function() {\n\t\tvar pushedButtons = self.parent.querySelectorAll(\".abcjs-pushed\");\n\t\tfor (var i = 0; i < pushedButtons.length; i++) {\n\t\t\tvar button = pushedButtons[i];\n\t\t\tbutton.classList.remove(\"abcjs-pushed\");\n\t\t}\n\t};\n\tself.pushPlay = function(push) {\n\t\tvar startButton = self.parent.querySelector(\".abcjs-midi-start\");\n\t\tif (!startButton)\n\t\t\treturn;\n\t\tif (push)\n\t\t\tstartButton.classList.add(\"abcjs-pushed\");\n\t\telse\n\t\t\tstartButton.classList.remove(\"abcjs-pushed\");\n\t};\n\tself.pushLoop = function(push) {\n\t\tvar loopButton = self.parent.querySelector(\".abcjs-midi-loop\");\n\t\tif (!loopButton)\n\t\t\treturn;\n\t\tif (push)\n\t\t\tloopButton.classList.add(\"abcjs-pushed\");\n\t\telse\n\t\t\tloopButton.classList.remove(\"abcjs-pushed\");\n\t};\n\n\tself.setProgress = function (percent, totalTime) {\n\t\tvar progressBackground = self.parent.querySelector(\".abcjs-midi-progress-background\");\n\t\tvar progressThumb = self.parent.querySelector(\".abcjs-midi-progress-indicator\");\n\t\tif (!progressBackground || !progressThumb)\n\t\t\treturn;\n\t\tvar width = progressBackground.clientWidth;\n\t\tvar left = width * percent;\n\t\tprogressThumb.style.left = left + \"px\";\n\n\t\tvar clock = self.parent.querySelector(\".abcjs-midi-clock\");\n\t\tif (clock) {\n\t\t\tvar totalSeconds = (totalTime * percent) / 1000;\n\t\t\tvar minutes = Math.floor(totalSeconds / 60);\n\t\t\tvar seconds = Math.floor(totalSeconds % 60);\n\t\t\tvar secondsFormatted = seconds < 10 ? \"0\" + seconds : seconds;\n\t\t\tclock.innerHTML = minutes + \":\" + secondsFormatted;\n\t\t}\n\t};\n\n\tif (self.options.afterResume) {\n\t\tvar isResumed = false;\n\t\tif (self.options.ac) {\n\t\t\tisResumed = self.options.ac.state !== \"suspended\";\n\t\t} else if (activeAudioContext()) {\n\t\t\tisResumed = activeAudioContext().state !== \"suspended\";\n\t\t}\n\t\tif (isResumed)\n\t\t\tself.options.afterResume();\n\t}\n}\n\nfunction buildDom(parent, options) {\n\tvar hasLoop = !!options.loopHandler;\n\tvar hasRestart = !!options.restartHandler;\n\tvar hasPlay = !!options.playHandler || !!options.playPromiseHandler;\n\tvar hasProgress = !!options.progressHandler;\n\tvar hasWarp = !!options.warpHandler;\n\tvar hasClock = options.hasClock !== false;\n\n\tvar html = '
\\n';\n\tif (hasLoop) {\n\t\tvar repeatTitle = options.repeatTitle ? options.repeatTitle : \"Click to toggle play once/repeat.\";\n\t\tvar repeatAria = options.repeatAria ? options.repeatAria : repeatTitle;\n\t\thtml += '\\n';\n\t}\n\tif (hasRestart) {\n\t\tvar restartTitle = options.restartTitle ? options.restartTitle : \"Click to go to beginning.\";\n\t\tvar restartAria = options.restartAria ? options.restartAria : restartTitle;\n\t\thtml += '\\n';\n\t}\n\tif (hasPlay) {\n\t\tvar playTitle = options.playTitle ? options.playTitle : \"Click to play/pause.\";\n\t\tvar playAria = options.playAria ? options.playAria : playTitle;\n\t\thtml += '\\n';\n\t}\n\tif (hasProgress) {\n\t\tvar randomTitle = options.randomTitle ? options.randomTitle : \"Click to change the playback position.\";\n\t\tvar randomAria = options.randomAria ? options.randomAria : randomTitle;\n\t\thtml += '\\n';\n\t}\n\tif (hasClock) {\n\t\thtml += '\\n';\n\t}\n\tif (hasWarp) {\n\t\tvar warpTitle = options.warpTitle ? options.warpTitle : \"Change the playback speed.\";\n\t\tvar warpAria = options.warpAria ? options.warpAria : warpTitle;\n\t\tvar bpm = options.bpm ? options.bpm : \"BPM\";\n\t\thtml += ' ( ' + bpm + ')\\n';\n\t}\n\thtml += '
CSS required: load abcjs-audio.css
';\n\thtml += '
\\n';\n\tparent.innerHTML = html;\n}\n\nfunction acResumerMiddleWare(next, ev, playBtn, afterResume, isPromise) {\n\tvar needsInit = true;\n\tif (!activeAudioContext()) {\n\t\tregisterAudioContext();\n\t} else {\n\t\tneedsInit = activeAudioContext().state === \"suspended\";\n\t}\n\tif (!supportsAudio()) {\n\t\tthrow { status: \"NotSupported\", message: \"This browser does not support audio.\"};\n\t}\n\n\tif ((needsInit || isPromise) && playBtn)\n\t\tplayBtn.classList.add(\"abcjs-loading\");\n\n\tif (needsInit) {\n\t\tactiveAudioContext().resume().then(function () {\n\t\t\tif (afterResume) {\n\t\t\t\tafterResume().then(function (response) {\n\t\t\t\t\tdoNext(next, ev, playBtn, isPromise);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tdoNext(next, ev, playBtn, isPromise);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tdoNext(next, ev, playBtn, isPromise);\n\t}\n}\n\nfunction doNext(next, ev, playBtn, isPromise) {\n\tif (isPromise) {\n\t\tnext(ev).then(function() {\n\t\t\tif (playBtn)\n\t\t\t\tplayBtn.classList.remove(\"abcjs-loading\");\n\t\t});\n\t} else {\n\t\tnext(ev);\n\t\tif (playBtn)\n\t\t\tplayBtn.classList.remove(\"abcjs-loading\");\n\t}\n}\n\nfunction attachListeners(self) {\n\tvar hasLoop = !!self.options.loopHandler;\n\tvar hasRestart = !!self.options.restartHandler;\n\tvar hasPlay = !!self.options.playHandler || !!self.options.playPromiseHandler;\n\tvar hasProgress = !!self.options.progressHandler;\n\tvar hasWarp = !!self.options.warpHandler;\n\tvar playBtn = self.parent.querySelector(\".abcjs-midi-start\");\n\n\tif (hasLoop)\n\t\tself.parent.querySelector(\".abcjs-midi-loop\").addEventListener(\"click\", function(ev){acResumerMiddleWare(self.options.loopHandler, ev, playBtn, self.options.afterResume)});\n\tif (hasRestart)\n\t\tself.parent.querySelector(\".abcjs-midi-reset\").addEventListener(\"click\", function(ev){acResumerMiddleWare(self.options.restartHandler, ev, playBtn, self.options.afterResume)});\n\tif (hasPlay)\n\t\tplayBtn.addEventListener(\"click\", function(ev){\n\t\t\tacResumerMiddleWare(\n\t\t\t\tself.options.playPromiseHandler || self.options.playHandler,\n\t\t\t\tev,\n\t\t\t\tplayBtn,\n\t\t\t\tself.options.afterResume,\n\t\t\t\t!!self.options.playPromiseHandler)\n\t\t});\n\tif (hasProgress)\n\t\tself.parent.querySelector(\".abcjs-midi-progress-background\").addEventListener(\"click\", function(ev){acResumerMiddleWare(self.options.progressHandler, ev, playBtn, self.options.afterResume)});\n\tif (hasWarp)\n\t\tself.parent.querySelector(\".abcjs-midi-tempo\").addEventListener(\"change\", function(ev){acResumerMiddleWare(self.options.warpHandler, ev, playBtn, self.options.afterResume)});\n}\nmodule.exports = CreateSynthControl;\n","var getNote = require('./load-note');\nvar createNoteMap = require('./create-note-map');\nvar registerAudioContext = require('./register-audio-context');\nvar activeAudioContext = require('./active-audio-context');\nvar supportsAudio = require('./supports-audio');\nvar pitchToNoteName = require('./pitch-to-note-name');\nvar instrumentIndexToName = require('./instrument-index-to-name');\nvar downloadBuffer = require('./download-buffer');\nvar placeNote = require('./place-note');\nvar soundsCache = require('./sounds-cache');\n\n// TODO-PER: remove the midi tests from here: I don't think the object can be constructed unless it passes.\nvar notSupportedMessage = \"MIDI is not supported in this browser.\";\n\nvar originalSoundFontUrl = \"https://paulrosen.github.io/midi-js-soundfonts/abcjs/\";\n// These are the original soundfonts supplied. They will need a volume boost:\nvar defaultSoundFontUrl = \"https://paulrosen.github.io/midi-js-soundfonts/FluidR3_GM/\";\nvar alternateSoundFontUrl = \"https://paulrosen.github.io/midi-js-soundfonts/MusyngKite/\";\n\nfunction CreateSynth() {\n\tvar self = this;\n\tself.audioBufferPossible = undefined;\n\tself.directSource = []; // type: AudioBufferSourceNode\n\tself.startTimeSec = undefined; // the time (in seconds) that the audio started: used for pause to get the pausedTimeSec.\n\tself.pausedTimeSec = undefined; // the position (in seconds) that the audio was paused: used for resume.\n\tself.audioBuffers = []; // cache of the buffers so starting play can be fast.\n\tself.duration = undefined; // the duration of the tune in seconds.\n\tself.isRunning = false; // whether there is currently a sound buffer running.\n\tself.options = undefined\n\tself.pickupLength = 0\n\n\t// Load and cache all needed sounds\n\tself.init = function(options) {\n\t\tif (!options)\n\t\t\toptions = {};\n\t\tif (options.options)\n\t\t\tself.options = options.options\n\t\tregisterAudioContext(options.audioContext); // This works no matter what - if there is already an ac it is a nop; if the context is not passed in, then it creates one.\n\t\tvar startTime = activeAudioContext().currentTime;\n\t\tself.debugCallback = options.debugCallback;\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"init called\");\n\t\tself.audioBufferPossible = self._deviceCapable();\n\t\tif (!self.audioBufferPossible)\n\t\t\treturn Promise.reject({ status: \"NotSupported\", message: notSupportedMessage});\n\t\tvar params = options.options ? options.options : {};\n\t\tself.soundFontUrl = params.soundFontUrl ? params.soundFontUrl : defaultSoundFontUrl;\n\t\tif (self.soundFontUrl[self.soundFontUrl.length-1] !== '/')\n\t\t\tself.soundFontUrl += '/';\n\t\tif (params.soundFontVolumeMultiplier || params.soundFontVolumeMultiplier === 0)\n\t\t\tself.soundFontVolumeMultiplier = params.soundFontVolumeMultiplier;\n\t\telse if (self.soundFontUrl === defaultSoundFontUrl || self.soundFontUrl === alternateSoundFontUrl)\n\t\t\tself.soundFontVolumeMultiplier = 3.0;\n\t\telse if (self.soundFontUrl === originalSoundFontUrl)\n\t\t\tself.soundFontVolumeMultiplier = 0.4;\n\t\telse\n\t\t\tself.soundFontVolumeMultiplier = 1.0;\n\t\tif (params.programOffsets)\n\t\t\tself.programOffsets = params.programOffsets;\n\t\telse if (self.soundFontUrl === originalSoundFontUrl)\n\t\t\tself.programOffsets = {\n\t\t\t\t\"bright_acoustic_piano\": 20,\n\t\t\t\t\"honkytonk_piano\": 20,\n\t\t\t\t\"electric_piano_1\": 30,\n\t\t\t\t\"electric_piano_2\": 30,\n\t\t\t\t\"harpsichord\": 40,\n\t\t\t\t\"clavinet\": 20,\n\t\t\t\t\"celesta\": 20,\n\t\t\t\t\"glockenspiel\": 40,\n\t\t\t\t\"vibraphone\": 30,\n\t\t\t\t\"marimba\": 35,\n\t\t\t\t\"xylophone\": 30,\n\t\t\t\t\"tubular_bells\": 35,\n\t\t\t\t\"dulcimer\": 30,\n\t\t\t\t\"drawbar_organ\": 20,\n\t\t\t\t\"percussive_organ\": 25,\n\t\t\t\t\"rock_organ\": 20,\n\t\t\t\t\"church_organ\": 40,\n\t\t\t\t\"reed_organ\": 40,\n\t\t\t\t\"accordion\": 40,\n\t\t\t\t\"harmonica\": 40,\n\t\t\t\t\"acoustic_guitar_nylon\": 20,\n\t\t\t\t\"acoustic_guitar_steel\": 30,\n\t\t\t\t\"electric_guitar_jazz\": 25,\n\t\t\t\t\"electric_guitar_clean\": 15,\n\t\t\t\t\"electric_guitar_muted\": 35,\n\t\t\t\t\"overdriven_guitar\": 25,\n\t\t\t\t\"distortion_guitar\": 20,\n\t\t\t\t\"guitar_harmonics\": 30,\n\t\t\t\t\"electric_bass_finger\": 15,\n\t\t\t\t\"electric_bass_pick\": 30,\n\t\t\t\t\"fretless_bass\": 40,\n\t\t\t\t\"violin\": 105,\n\t\t\t\t\"viola\": 50,\n\t\t\t\t\"cello\": 40,\n\t\t\t\t\"contrabass\": 60,\n\t\t\t\t\"trumpet\": 10,\n\t\t\t\t\"trombone\": 90,\n\t\t\t\t\"alto_sax\": 20,\n\t\t\t\t\"tenor_sax\": 20,\n\t\t\t\t\"clarinet\": 20,\n\t\t\t\t\"flute\": 50,\n\t\t\t\t\"banjo\": 50,\n\t\t\t\t\"woodblock\": 20,\n\t\t\t};\n\t\telse\n\t\t\tself.programOffsets = {};\n\t\tvar p = params.fadeLength !== undefined ? parseInt(params.fadeLength,10) : NaN;\n\t\tself.fadeLength = isNaN(p) ? 200 : p;\n\t\tp = params.noteEnd !== undefined ? parseInt(params.noteEnd,10) : NaN;\n\t\tself.noteEnd = isNaN(p) ? 0 : p;\n\n\t\tself.pan = params.pan;\n\t\tself.meterSize = 1;\n\t\tif (options.visualObj) {\n\t\t\tself.flattened = options.visualObj.setUpAudio(params);\n\t\t\tvar meter = options.visualObj.getMeterFraction();\n\t\t\tif (meter.den)\n\t\t\t\tself.meterSize = options.visualObj.getMeterFraction().num / options.visualObj.getMeterFraction().den;\n\t\t\tself.pickupLength = options.visualObj.getPickupLength()\n\t\t} else if (options.sequence)\n\t\t\tself.flattened = options.sequence;\n\t\telse\n\t\t\treturn Promise.reject(new Error(\"Must pass in either a visualObj or a sequence\"));\n\t\tself.millisecondsPerMeasure = options.millisecondsPerMeasure ? options.millisecondsPerMeasure : (options.visualObj ? options.visualObj.millisecondsPerMeasure(self.flattened.tempo) : 1000);\n\t\tself.beatsPerMeasure = options.visualObj ? options.visualObj.getBeatsPerMeasure() : 4;\n\t\tself.sequenceCallback = params.sequenceCallback;\n\t\tself.callbackContext = params.callbackContext;\n\t\tself.onEnded = params.onEnded;\n\t\tself.meterFraction = options.visualObj.getMeterFraction();\n\n\t\tvar allNotes = {};\n\t\tvar cached = [];\n\t\tvar errorNotes = [];\n\t\tvar currentInstrument = instrumentIndexToName[0];\n\t\tself.flattened.tracks.forEach(function(track) {\n\t\t\ttrack.forEach(function(event) {\n\t\t\t\tif (event.cmd === \"program\" && instrumentIndexToName[event.instrument])\n\t\t\t\t\tcurrentInstrument = instrumentIndexToName[event.instrument];\n\t\t\t\tif (event.pitch !== undefined) {\n\t\t\t\t\tvar pitchNumber = event.pitch;\n\t\t\t\t\tvar noteName = pitchToNoteName[pitchNumber];\n\t\t\t\t\tvar inst = event.instrument !== undefined ? instrumentIndexToName[event.instrument] : currentInstrument\n\t\t\t\t\tif (noteName) {\n\t\t\t\t\t\tif (!allNotes[inst])\n\t\t\t\t\t\t\tallNotes[inst] = {};\n\t\t\t\t\t\tif (!soundsCache[inst] || !soundsCache[inst][noteName])\n\t\t\t\t\t\t\tallNotes[inst][noteName] = true;\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvar label2 = inst+\":\"+noteName\n\t\t\t\t\t\t\tif (cached.indexOf(label2) < 0)\n\t\t\t\t\t\t\t\tcached.push(label2);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar label = inst+\":\"+noteName\n\t\t\t\t\t\tconsole.log(\"Can't find note: \", pitchNumber, label);\n\t\t\t\t\t\tif (errorNotes.indexOf(label) < 0)\n\t\t\t\t\t\t\terrorNotes.push(label)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"note gathering time = \" + Math.floor((activeAudioContext().currentTime - startTime)*1000)+\"ms\");\n\t\tstartTime = activeAudioContext().currentTime;\n\n\t\tvar notes = [];\n\t\tObject.keys(allNotes).forEach(function(instrument) {\n\t\t\tObject.keys(allNotes[instrument]).forEach(function(note) {\n\t\t\t\tnotes.push({ instrument: instrument, note: note });\n\t\t\t});\n\t\t});\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"notes \"+JSON.stringify(notes));\n\n\t\t// If there are lots of notes, load them in batches\n\t\tvar batches = [];\n\t\tvar CHUNK = 256;\n\t\tfor (var i=0; i < notes.length; i += CHUNK) {\n\t\t\tbatches.push(notes.slice(i, i + CHUNK));\n\t\t}\n\n\t\treturn new Promise(function(resolve, reject) {\n\t\t\tvar results = {\n\t\t\t\tcached: cached,\n\t\t\t\terror: errorNotes,\n\t\t\t\tloaded: []\n\t\t\t};\n\n\t\t\tvar index = 0;\n\t\t\tvar next = function() {\n\t\t\t\tif (self.debugCallback)\n\t\t\t\t\tself.debugCallback(\"loadBatch idx=\"+index+ \" len=\"+batches.length);\n\t\n\t\t\t\tif (index < batches.length) {\n\t\t\t\t\tself._loadBatch(batches[index], self.soundFontUrl, startTime).then(function(data) {\n\t\t\t\t\t\tif (self.debugCallback)\n\t\t\t\t\t\t\tself.debugCallback(\"loadBatch then\");\n\t\t\t\t\t\tstartTime = activeAudioContext().currentTime;\n\t\t\t\t\t\tif (data) {\n\t\t\t\t\t\t\tif (data.error)\n\t\t\t\t\t\t\t\tresults.error = results.error.concat(data.error);\n\t\t\t\t\t\t\tif (data.loaded)\n\t\t\t\t\t\t\t\tresults.loaded = results.loaded.concat(data.loaded);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t\tnext();\n\t\t\t\t\t}, reject);\n\t\t\t\t} else {\n\t\t\t\t\tif (self.debugCallback)\n\t\t\t\t\t\tself.debugCallback(\"resolve init\");\n\t\t\n\t\t\t\t\tresolve(results);\n\t\t\t\t}\n\t\t\t};\n\t\t\tnext();\n\t\t});\n\t};\n\n\tself._loadBatch = (function(batch, soundFontUrl, startTime, delay) {\n\t\t// This is called recursively to see if the sounds have loaded. The \"delay\" parameter is how long it has been since the original call.\n\t\tvar promises = [];\n\t\tbatch.forEach(function(item) {\n\t\t\tif (self.debugCallback)\n\t\t\t\tself.debugCallback(\"getNote \" + item.instrument+':'+item.note);\n\t\t\tpromises.push(getNote(soundFontUrl, item.instrument, item.note, activeAudioContext()));\n\t\t});\n\t\treturn Promise.all(promises).then(function(response) {\n\t\t\tif (self.debugCallback)\n\t\t\t\tself.debugCallback(\"mp3 load time = \" + Math.floor((activeAudioContext().currentTime - startTime)*1000)+\"ms\");\n\t\t\tvar loaded = [];\n\t\t\tvar cached = [];\n\t\t\tvar pending = [];\n\t\t\tvar error = [];\n\t\t\tfor (var i = 0; i < response.length; i++) {\n\t\t\t\tvar oneResponse = response[i];\n\t\t\t\tvar which = oneResponse.instrument + \":\" + oneResponse.name;\n\t\t\t\tif (oneResponse.status === \"loaded\")\n\t\t\t\t\tloaded.push(which);\n\t\t\t\telse if (oneResponse.status === \"pending\")\n\t\t\t\t\tpending.push(which);\n\t\t\t\telse if (oneResponse.status === \"cached\")\n\t\t\t\t\tcached.push(which);\n\t\t\t\telse\n\t\t\t\t\terror.push(which + ' ' + oneResponse.message);\n\t\t\t}\n\t\t\tif (pending.length > 0) {\n\t\t\t\tif (self.debugCallback)\n\t\t\t\t\tself.debugCallback(\"pending \" + JSON.stringify(pending));\n\t\t\t\t// There was probably a second call for notes before the first one finished, so just retry a few times to see if they stop being pending.\n\t\t\t\t// Retry quickly at first so that there isn't an unnecessary delay, but increase the delay each time.\n\t\t\t\tif (!delay)\n\t\t\t\t\tdelay = 50;\n\t\t\t\telse\n\t\t\t\t\tdelay = delay * 2;\n\t\t\t\tif (delay < 90000) {\n\t\t\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tvar newBatch = [];\n\t\t\t\t\t\t\tfor (i = 0; i < pending.length; i++) {\n\t\t\t\t\t\t\t\twhich = pending[i].split(\":\");\n\t\t\t\t\t\t\t\tnewBatch.push({instrument: which[0], note: which[1]});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (self.debugCallback)\n\t\t\t\t\t\t\t\tself.debugCallback(\"retry \" + JSON.stringify(newBatch));\n\t\t\t\t\t\t\t\t\tself._loadBatch(newBatch, soundFontUrl, startTime, delay).then(function (response) {\n\t\t\t\t\t\t\t\tresolve(response);\n\t\t\t\t\t\t\t}).catch(function (error) {\n\t\t\t\t\t\t\t\treject(error);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}, delay);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tvar list = [];\n\t\t\t\t\tfor (var j = 0; j < batch.length; j++)\n\t\t\t\t\t\tlist.push(batch[j].instrument+'/'+batch[j].note)\n\t\t\t\t\t\tif (self.debugCallback)\n\t\t\t\t\t\t\tself.debugCallback(\"loadBatch timeout\")\n\t\t\t\t\t\treturn Promise.reject(new Error(\"timeout attempting to load: \" + list.join(\", \")));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (self.debugCallback)\n\t\t\t\t\tself.debugCallback(\"loadBatch resolve\")\n\t\t\t\treturn Promise.resolve({loaded: loaded, cached: cached, error: error});\n\t\t\t}\n\t\t}).catch(function (error) {\n\t\t\tif (self.debugCallback)\n\t\t\t\tself.debugCallback(\"loadBatch catch \"+error.message)\n\t\t});\n\t});\n\n\tself.prime = function() {\n\t\t// At this point all of the notes are loaded. This function writes them into the output buffer.\n\t\t// Most music has a lot of repeating notes. If a note is the same pitch, volume, length, etc. as another one,\n\t\t// It saves a lot of time to just create it once and place it repeatedly where ever it needs to be.\n\t\tvar fadeTimeSec = self.fadeLength/1000;\n\t\tself.isRunning = false;\n\t\tif (!self.audioBufferPossible)\n\t\t\treturn Promise.reject(new Error(notSupportedMessage));\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"prime called\");\n\t\treturn new Promise(function(resolve) {\n\t\t\tvar startTime = activeAudioContext().currentTime;\n\t\t\tvar tempoMultiplier = self.millisecondsPerMeasure / 1000 / self.meterSize;\n\t\t\tself.duration = self.flattened.totalDuration * tempoMultiplier;\n\t\t\tif(self.duration <= 0) {\n\t\t\t\tself.audioBuffers = [];\n\t\t\t\treturn resolve({ status: \"empty\", seconds: 0});\n\t\t\t}\n\t\t\tself.duration += fadeTimeSec;\n\t\t\tvar totalSamples = Math.floor(activeAudioContext().sampleRate * self.duration);\n\n\t\t\t// There might be a previous run that needs to be turned off.\n\t\t\tself.stop();\n\n\t\t\tvar noteMapTracks = createNoteMap(self.flattened);\n\n\t\t\tif (self.options.swing)\n\t\t\t\taddSwing(noteMapTracks, self.options.swing, self.meterFraction, self.pickupLength)\n\n\t\t\tif (self.sequenceCallback)\n\t\t\t\tself.sequenceCallback(noteMapTracks, self.callbackContext);\n\n\t\t\tvar panDistances = setPan(noteMapTracks.length, self.pan);\n\n\t\t\t// Create a simple list of all the unique sounds in this music and where they should be placed.\n\t\t\t// There appears to be a limit on how many audio buffers can be created at once so this technique limits the number needed.\n\t\t\tvar uniqueSounds = {};\n\t\t\tnoteMapTracks.forEach(function(noteMap, trackNumber) {\n\t\t\t\tvar panDistance = panDistances && panDistances.length > trackNumber ? panDistances[trackNumber] : 0;\n\t\t\t\tnoteMap.forEach(function(note) {\n\t\t\t\t\tvar key = note.instrument + ':' + note.pitch + ':' +note.volume + ':' + Math.round((note.end-note.start)*1000)/1000 + ':' + panDistance + ':' + tempoMultiplier + ':' + (note.cents ? note.cents : 0);\n\t\t\t\t\tif (self.debugCallback)\n\t\t\t\t\t\tself.debugCallback(\"noteMapTrack \"+key)\n\t\t\t\t\tif (!uniqueSounds[key])\n\t\t\t\t\t\tuniqueSounds[key] = [];\n\t\t\t\t\tuniqueSounds[key].push(note.start);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t// Now that we know what we are trying to create, construct the audio buffer by creating each sound and placing it.\n\t\t\tvar allPromises = [];\n\t\t\tvar audioBuffer = activeAudioContext().createBuffer(2, totalSamples, activeAudioContext().sampleRate);\n\t\t\tfor (var key2 = 0; key2 < Object.keys(uniqueSounds).length; key2++) {\n\t\t\t\tvar k = Object.keys(uniqueSounds)[key2];\n\t\t\t\tvar parts = k.split(\":\");\n\t\t\t\tvar cents = parts[6] !== undefined ? parseFloat(parts[6]) : 0;\n\t\t\t\tparts = {instrument: parts[0], pitch: parseInt(parts[1], 10), volume: parseInt(parts[2], 10), len: parseFloat(parts[3]), pan: parseFloat(parts[4]), tempoMultiplier: parseFloat(parts[5]), cents: cents};\n\t\t\t\tallPromises.push(placeNote(audioBuffer, activeAudioContext().sampleRate, parts, uniqueSounds[k], self.soundFontVolumeMultiplier, self.programOffsets[parts.instrument], fadeTimeSec, self.noteEnd/1000, self.debugCallback));\n\t\t\t}\n\t\t\tself.audioBuffers = [audioBuffer];\n\n\t\t\tif (self.debugCallback) {\n\t\t\t\tself.debugCallback(\"sampleRate = \" + activeAudioContext().sampleRate);\n\t\t\t\tself.debugCallback(\"totalSamples = \" + totalSamples);\n\t\t\t\tself.debugCallback(\"creationTime = \" + Math.floor((activeAudioContext().currentTime - startTime)*1000) + \"ms\");\n\t\t\t}\n\t\t\tfunction resolveData(me) {\n\t\t\t\tvar duration = me && me.audioBuffers && me.audioBuffers.length > 0 ? me.audioBuffers[0].duration : 0;\n\t\t\t\treturn { status: activeAudioContext().state, duration: duration}\n\t\t\t}\n\t\t\tPromise.all(allPromises).then(function() {\n\t\t\t\t// Safari iOS can mess with the audioContext state, so resume if needed.\n\t\t\t\tif (activeAudioContext().state === \"suspended\") {\n\t\t\t\t\tactiveAudioContext().resume().then(function () {\n\t\t\t\t\t\tresolve(resolveData(self));\n\t\t\t\t\t})\n\t\t\t\t} else if (activeAudioContext().state === \"interrupted\") {\n\t\t\t\t\tactiveAudioContext().suspend().then(function () {\n\t\t\t\t\t\tactiveAudioContext().resume().then(function () {\n\t\t\t\t\t\t\tresolve(resolveData(self));\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tresolve(resolveData(self));\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t};\n\n\tfunction setPan(numTracks, panParam) {\n\t\t// panParam, if it is set, can be either a number representing the separation between each track,\n\t\t// or an array, which is the absolute pan position for each track.\n\t\tif (panParam === null || panParam === undefined)\n\t\t\treturn null;\n\n\t\tvar panDistances = [];\n\t\tif (panParam.length) {\n\t\t\t// We received an array. If there are the same number of items in the pan array as the number of tracks,\n\t\t\t// it all lines up perfectly. If there are more items in the pan array than the tracks then the excess items are ignored.\n\t\t\t// If there are more tracks than items in the pan array then the remaining tracks are placed in the middle.\n\t\t\t// If any of the pan numbers are out of range then they are adjusted.\n\t\t\tfor (var pp = 0; pp < numTracks; pp++) {\n\t\t\t\tif (pp < panParam.length) {\n\t\t\t\t\tvar x = parseFloat(panParam[pp]);\n\t\t\t\t\tif (x < -1)\n\t\t\t\t\t\tx = -1;\n\t\t\t\t\telse if (x > 1)\n\t\t\t\t\t\tx = 1;\n\t\t\t\t\tpanDistances.push(x);\n\t\t\t\t} else\n\t\t\t\t\tpanDistances.push(0)\n\t\t\t}\n\t\t\treturn panDistances;\n\t\t} else {\n\t\t\tvar panNumber = parseFloat(panParam);\n\t\t\t// the separation needs to be no further than 2 (i.e. -1 to 1) so test to see if there are too many tracks for the passed in distance\n\t\t\tif (panNumber*(numTracks-1) > 2)\n\t\t\t\treturn null;\n\n\t\t\t// If there are an even number of tracks, then offset so that the first two are centered around the middle\n\t\t\tvar even = numTracks % 2 === 0;\n\t\t\tvar currLow = even ? 0 - panNumber/2 : 0;\n\t\t\tvar currHigh = currLow+panNumber;\n\t\t\t// Now add the tracks to either side\n\t\t\tfor (var p = 0; p < numTracks; p++) {\n\t\t\t\teven = p % 2 === 0;\n\t\t\t\tif (even) {\n\t\t\t\t\tpanDistances.push(currLow);\n\t\t\t\t\tcurrLow -= panNumber;\n\t\t\t\t} else {\n\t\t\t\t\tpanDistances.push(currHigh);\n\t\t\t\t\tcurrHigh += panNumber;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn panDistances;\n\t\t}\n\t\t// There was either no panning, or the parameters were illegal\n\t\treturn null;\n\t}\n\n\t// This is called after everything is set up, so it can quickly make sound\n\tself.start = function() {\n\t\tif (!self.audioBufferPossible)\n\t\t\tthrow new Error(notSupportedMessage);\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"start called\");\n\n\t\tvar resumePosition = self.pausedTimeSec ? self.pausedTimeSec : 0;\n\t\tself._kickOffSound(resumePosition);\n\t\tself.startTimeSec = activeAudioContext().currentTime - resumePosition;\n\t\tself.pausedTimeSec = undefined;\n\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"MIDI STARTED\", self.startTimeSec);\n\t};\n\n\tself.pause = function() {\n\t\tif (!self.audioBufferPossible)\n\t\t\tthrow new Error(notSupportedMessage);\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"pause called\");\n\n\t\tself.pausedTimeSec = self.stop();\n\t\treturn self.pausedTimeSec;\n\t};\n\n\tself.resume = function() {\n\t\tself.start();\n\t};\n\n\tself.seek = function(position, units) {\n\t\tvar offset;\n\t\tswitch (units) {\n\t\t\tcase \"seconds\":\n\t\t\t\toffset = position;\n\t\t\t\tbreak;\n\t\t\tcase \"beats\":\n\t\t\t\toffset = position * self.millisecondsPerMeasure / self.beatsPerMeasure / 1000;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// this is \"percent\" or any illegal value\n\t\t\t\toffset = (self.duration-self.fadeLength/1000) * position;\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// TODO-PER: can seek when paused or when playing\n\t\tif (!self.audioBufferPossible)\n\t\t\tthrow new Error(notSupportedMessage);\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"seek called sec=\" + offset);\n\n\t\tif (self.isRunning) {\n\t\t\tself.stop();\n\t\t\tself._kickOffSound(offset);\n\t\t} else {\n\t\t\tself.pausedTimeSec = offset;\n\t\t}\n\t\tself.pausedTimeSec = offset;\n\t};\n\n\tself.stop = function() {\n\t\tself.isRunning = false;\n\t\tself.pausedTimeSec = undefined;\n\t\tself.directSource.forEach(function(source) {\n\t\t\ttry {\n\t\t\t\tsource.stop();\n\t\t\t} catch (error) {\n\t\t\t\t// We don't care if self succeeds: it might fail if something else turned off the sound or it ended for some reason.\n\t\t\t\tconsole.log(\"direct source didn't stop:\", error)\n\t\t\t}\n\t\t});\n\t\tself.directSource = [];\n\t\tvar elapsed = activeAudioContext().currentTime - self.startTimeSec;\n\t\treturn elapsed;\n\t};\n\tself.finished = function() {\n\t\tself.startTimeSec = undefined;\n\t\tself.pausedTimeSec = undefined;\n\t\tself.isRunning = false;\n\t};\n\n\tself.download = function() {\n\t\treturn downloadBuffer(self);\n\t};\n\n\tself.getAudioBuffer = function() {\n\t\treturn self.audioBuffers[0];\n\t};\n\n\tself.getIsRunning = function() {\n\t\treturn self.isRunning;\n\t}\n\n\t/////////////// Private functions //////////////\n\n\tself._deviceCapable = function() {\n\t\tif (!supportsAudio()) {\n\t\t\tconsole.warn(notSupportedMessage);\n\t\t\tif (self.debugCallback)\n\t\t\t\tself.debugCallback(notSupportedMessage);\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\tself._kickOffSound = function(seconds) {\n\t\tself.isRunning = true;\n\t\tself.directSource = [];\n\t\tself.audioBuffers.forEach(function(audioBuffer, trackNum) {\n\t\t\tself.directSource[trackNum] = activeAudioContext().createBufferSource(); // creates a sound source\n\t\t\tself.directSource[trackNum].buffer = audioBuffer; // tell the source which sound to play\n\t\t\tself.directSource[trackNum].connect(activeAudioContext().destination); // connect the source to the context's destination (the speakers)\n\t\t});\n\t\tself.directSource.forEach(function(source) {\n\t\t\tsource.start(0, seconds);\n\t\t});\n\t\tif (self.onEnded) {\n\t\t\tself.directSource[0].onended = function () {\n\t\t\t\tself.onEnded(self.callbackContext);\n\t\t\t};\n\t\t}\n\t};\n\n\tfunction addSwing(noteMapTracks, swing, meterFraction, pickupLength) {\n\n\t\t// we can only swing in X/4 and X/8 meters.\n\t\tif (meterFraction.den != 4 && meterFraction.den != 8)\n\t\t\treturn;\n\n\t\tswing = parseFloat(swing);\n\n\t\t// 50 (or less) is no swing, \n\t\tif (isNaN(swing) || swing <= 50)\n\t\t\treturn;\n\n\t\t// 66 is triplet swing 2:1, and \n\t\t// 60 is swing with a ratio of 3:2. \n\t\t// 75 is the maximum swing where the first eight is played as a dotted eight and the second as a sixteenth. \n\t\tif (swing > 75)\n\t\t\tswing = 75;\n\n\t\t// convert the swing percentage to a percentage of increase for the first half of the beat\n\t\tswing = swing/50 - 1;\n\n\t\t// The volume of the swung notes is increased by this factor\n\t\t// could be also in the settings. Try out values such 0.1, 0.2\n\t\tvar volumeIncrease = 0.0;\n\n\t\t// the beatLength in X/8 meters\n\t\tvar beatLength = 0.25; \n\n\t\t// in X/8 meters the 16s swing so the beatLength is halved\n\t\tif (meterFraction.den === 8) \n\t\t\tbeatLength = beatLength/2; \n\n\t\t// duration of a half beat\n\t\tvar halfbeatLength = beatLength/2;\n\n\t\t// the extra duration of the first swung notes and the delay of the second notes\n\t\tvar swingDuration = halfbeatLength * swing;\n\n\t\tfor (var t = 0; t < noteMapTracks.length; t++) {\n\t\t\tvar track = noteMapTracks[t];\n\t\t\tfor (var i = 0; i < track.length; i++) {\n\t\t\t\tvar event = track[i];\n\t\t\t\tif (\n\t\t\t\t\t// is halfbeat\n\t\t\t\t\t(event.start-pickupLength) % halfbeatLength == 0 && (event.start-pickupLength) % beatLength != 0 \n\t\t\t\t\t&& (\n\t\t\t\t\t\t// the previous note is on the beat or before OR there is no previous note \n\t\t\t\t\t\ti == 0 \n\t\t\t\t\t\t|| track[i-1].start <= track[i].start - halfbeatLength\n\t\t\t\t\t)\n\t\t\t\t\t&& (\n\t\t\t\t\t\t// the next note is on the beat or after OR there is no next note\n\t\t\t\t\t\ti == track.length - 1 \n\t\t\t\t\t\t|| track[i+1].start >= track[i].start + halfbeatLength\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tvar oldEventStart = event.start;\n\n\t\t\t\t\tevent.start += swingDuration;\n\n\t\t\t\t\t// Increase volume of swung notes\n\t\t\t\t\tevent.volume *= 1 + volumeIncrease;\n\n\t\t\t\t\t// if there is a previous note ending at the start of this note, extend its end\n\t\t\t\t\t// and decrease its volume\n\t\t\t\t\tif (i > 0 && track[i-1].end == oldEventStart) {\n\t\t\t\t\t\ttrack[i-1].end = event.start;\n\t\t\t\t\t\ttrack[i-1].volume *= 1 - volumeIncrease;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n}\n\nmodule.exports = CreateSynth;\n","var downloadBuffer = function(buffer) {\n\treturn window.URL.createObjectURL(bufferToWave(buffer.audioBuffers));\n};\n\n// Convert an AudioBuffer to a Blob using WAVE representation\nfunction bufferToWave(audioBuffers) {\n\tvar audioBuffer = audioBuffers[0];\n\tvar numOfChan = audioBuffer.numberOfChannels;\n\tvar length = audioBuffer.length * numOfChan * 2 + 44;\n\tvar buffer = new ArrayBuffer(length);\n\tvar view = new DataView(buffer);\n\tvar channels = [];\n\tvar i;\n\tvar sample;\n\tvar offset = 0;\n\tvar pos = 0;\n\n\t// write WAVE header\n\tsetUint32(0x46464952); // \"RIFF\"\n\tsetUint32(length - 8); // file length - 8\n\tsetUint32(0x45564157); // \"WAVE\"\n\n\tsetUint32(0x20746d66); // \"fmt \" chunk\n\tsetUint32(16); // length = 16\n\tsetUint16(1); // PCM (uncompressed)\n\tsetUint16(numOfChan);\n\tsetUint32(audioBuffer.sampleRate);\n\tsetUint32(audioBuffer.sampleRate * 2 * numOfChan); // avg. bytes/sec\n\tsetUint16(numOfChan * 2); // block-align\n\tsetUint16(16); // 16-bit (hardcoded in this demo)\n\n\tsetUint32(0x61746164); // \"data\" - chunk\n\tsetUint32(length - pos - 4); // chunk length\n\n\t// write interleaved data\n\tfor(i = 0; i < numOfChan; i++)\n\t\tchannels.push(audioBuffer.getChannelData(i));\n\n\twhile(pos < length) {\n\t\tfor(i = 0; i < channels.length; i++) { // interleave channels\n\t\t\tsample = Math.max(-1, Math.min(1, channels[i][offset])); // clamp\n\t\t\tsample = (0.5 + sample < 0 ? sample * 32768 : sample * 32767)|0; // scale to 16-bit signed int\n\t\t\tview.setInt16(pos, sample, true); // write 16-bit sample\n\t\t\tpos += 2;\n\t\t}\n\t\toffset++; // next source sample\n\t}\n\n\t// create Blob\n\treturn new Blob([buffer], {type: \"audio/wav\"});\n\n\tfunction setUint16(data) {\n\t\tview.setUint16(pos, data, true);\n\t\tpos += 2;\n\t}\n\n\tfunction setUint32(data) {\n\t\tview.setUint32(pos, data, true);\n\t\tpos += 4;\n\t}\n}\n\nmodule.exports = downloadBuffer;\n","var tunebook = require('../api/abc_tunebook');\nvar midiCreate = require('../midi/abc_midi_create');\n\nvar getMidiFile = function(source, options) {\n\tvar params = {};\n\tif (options) {\n\t\tfor (var key in options) {\n\t\t\tif (options.hasOwnProperty(key)) {\n\t\t\t\tparams[key] = options[key];\n\t\t\t}\n\t\t}\n\t}\n\tparams.generateInline = false;\n\n\tfunction callback(div, tune, index) {\n\t\tvar downloadMidi = midiCreate(tune, params);\n\t\tswitch (params.midiOutputType) {\n\t\t\tcase \"encoded\":\n\t\t\t\treturn downloadMidi;\n\t\t\tcase \"binary\":\n\t\t\t\tvar decoded = downloadMidi.replace(\"data:audio/midi,\", \"\");\n\t\t\t\tdecoded = decoded.replace(/MThd/g,\"%4d%54%68%64\");\n\t\t\t\tdecoded = decoded.replace(/MTrk/g,\"%4d%54%72%6b\");\n\t\t\t\tvar buffer = new ArrayBuffer(decoded.length/3);\n\t\t\t\tvar output = new Uint8Array(buffer);\n\t\t\t\tfor (var i = 0; i < decoded.length/3; i++) {\n\t\t\t\t\tvar p = i*3+1;\n\t\t\t\t\tvar d = parseInt(decoded.substring(p, p+2), 16);\n\t\t\t\t\toutput[i] = d;\n\t\t\t\t}\n\t\t\t\treturn output;\n\t\t\tcase \"link\":\n\t\t\tdefault:\n\t\t\t\treturn generateMidiDownloadLink(tune, params, downloadMidi, index);\n\t\t}\n\t}\n\n\tif (typeof source === \"string\")\n\t\treturn tunebook.renderEngine(callback, \"*\", source, params);\n\telse\n\t\treturn callback(null, source, 0);\n};\n\nfunction isFunction(functionToCheck) {\n\tvar getType = {};\n\treturn functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\nvar generateMidiDownloadLink = function(tune, midiParams, midi, index) {\n\tvar divClasses = ['abcjs-download-midi', 'abcjs-midi-' + index]\n\tif (midiParams.downloadClass)\n\t\tdivClasses.push(midiParams.downloadClass)\n\tvar html = '
';\n\tif (midiParams.preTextDownload)\n\t\thtml += midiParams.preTextDownload;\n\tvar title = tune.metaText && tune.metaText.title ? tune.metaText.title : 'Untitled';\n\tvar label;\n\tif (midiParams.downloadLabel && isFunction(midiParams.downloadLabel))\n\t\tlabel = midiParams.downloadLabel(tune, index);\n\telse if (midiParams.downloadLabel)\n\t\tlabel = midiParams.downloadLabel.replace(/%T/, title);\n\telse\n\t\tlabel = \"Download MIDI for \\\"\" + title + \"\\\"\";\n\ttitle = title.toLowerCase().replace(/'/g, '').replace(/\\W/g, '_').replace(/__/g, '_');\n\tvar filename = (midiParams.fileName) ? midiParams.fileName : title + '.midi';\n\thtml += '' + label + '';\n\tif (midiParams.postTextDownload)\n\t\thtml += midiParams.postTextDownload;\n\treturn html + \"
\";\n};\n\n\nmodule.exports = getMidiFile;\n","var svg = `\n\n \n\n`\n\nmodule.exports = svg\n","var svg = `\n\n\t\n\t\n\t\n\t\n\n`\n\nmodule.exports = svg\n","var svg = `\n\n \n \n \n \n\n`\n\nmodule.exports = svg\n","var svg = `\n\n \n \n \n\n`\n\nmodule.exports = svg\n","var svg = `\n\n \n \n \n \n\n`\n\nmodule.exports = svg\n","var instrumentIndexToName = [\n\t\"acoustic_grand_piano\",\n\t\"bright_acoustic_piano\",\n\t\"electric_grand_piano\",\n\t\"honkytonk_piano\",\n\t\"electric_piano_1\",\n\t\"electric_piano_2\",\n\t\"harpsichord\",\n\t\"clavinet\",\n\n\t\"celesta\",\n\t\"glockenspiel\",\n\t\"music_box\",\n\t\"vibraphone\",\n\t\"marimba\",\n\t\"xylophone\",\n\t\"tubular_bells\",\n\t\"dulcimer\",\n\n\t\"drawbar_organ\",\n\t\"percussive_organ\",\n\t\"rock_organ\",\n\t\"church_organ\",\n\t\"reed_organ\",\n\t\"accordion\",\n\t\"harmonica\",\n\t\"tango_accordion\",\n\n\t\"acoustic_guitar_nylon\",\n\t\"acoustic_guitar_steel\",\n\t\"electric_guitar_jazz\",\n\t\"electric_guitar_clean\",\n\t\"electric_guitar_muted\",\n\t\"overdriven_guitar\",\n\t\"distortion_guitar\",\n\t\"guitar_harmonics\",\n\n\t\"acoustic_bass\",\n\t\"electric_bass_finger\",\n\t\"electric_bass_pick\",\n\t\"fretless_bass\",\n\t\"slap_bass_1\",\n\t\"slap_bass_2\",\n\t\"synth_bass_1\",\n\t\"synth_bass_2\",\n\n\t\"violin\",\n\t\"viola\",\n\t\"cello\",\n\t\"contrabass\",\n\t\"tremolo_strings\",\n\t\"pizzicato_strings\",\n\t\"orchestral_harp\",\n\t\"timpani\",\n\n\t\"string_ensemble_1\",\n\t\"string_ensemble_2\",\n\t\"synth_strings_1\",\n\t\"synth_strings_2\",\n\t\"choir_aahs\",\n\t\"voice_oohs\",\n\t\"synth_choir\",\n\t\"orchestra_hit\",\n\n\t\"trumpet\",\n\t\"trombone\",\n\t\"tuba\",\n\t\"muted_trumpet\",\n\t\"french_horn\",\n\t\"brass_section\",\n\t\"synth_brass_1\",\n\t\"synth_brass_2\",\n\n\t\"soprano_sax\",\n\t\"alto_sax\",\n\t\"tenor_sax\",\n\t\"baritone_sax\",\n\t\"oboe\",\n\t\"english_horn\",\n\t\"bassoon\",\n\t\"clarinet\",\n\n\t\"piccolo\",\n\t\"flute\",\n\t\"recorder\",\n\t\"pan_flute\",\n\t\"blown_bottle\",\n\t\"shakuhachi\",\n\t\"whistle\",\n\t\"ocarina\",\n\n\t\"lead_1_square\",\n\t\"lead_2_sawtooth\",\n\t\"lead_3_calliope\",\n\t\"lead_4_chiff\",\n\t\"lead_5_charang\",\n\t\"lead_6_voice\",\n\t\"lead_7_fifths\",\n\t\"lead_8_bass_lead\",\n\n\t\"pad_1_new_age\",\n\t\"pad_2_warm\",\n\t\"pad_3_polysynth\",\n\t\"pad_4_choir\",\n\t\"pad_5_bowed\",\n\t\"pad_6_metallic\",\n\t\"pad_7_halo\",\n\t\"pad_8_sweep\",\n\n\t\"fx_1_rain\",\n\t\"fx_2_soundtrack\",\n\t\"fx_3_crystal\",\n\t\"fx_4_atmosphere\",\n\t\"fx_5_brightness\",\n\t\"fx_6_goblins\",\n\t\"fx_7_echoes\",\n\t\"fx_8_scifi\",\n\n\t\"sitar\",\n\t\"banjo\",\n\t\"shamisen\",\n\t\"koto\",\n\t\"kalimba\",\n\t\"bagpipe\",\n\t\"fiddle\",\n\t\"shanai\",\n\n\t\"tinkle_bell\",\n\t\"agogo\",\n\t\"steel_drums\",\n\t\"woodblock\",\n\t\"taiko_drum\",\n\t\"melodic_tom\",\n\t\"synth_drum\",\n\t\"reverse_cymbal\",\n\n\t\"guitar_fret_noise\",\n\t\"breath_noise\",\n\t\"seashore\",\n\t\"bird_tweet\",\n\t\"telephone_ring\",\n\t\"helicopter\",\n\t\"applause\",\n\t\"gunshot\",\n\n\t\"percussion\"\n];\n\nmodule.exports = instrumentIndexToName;\n","// Load one mp3 file for one note.\n// url = the base url for the soundfont\n// instrument = the instrument name (e.g. \"acoustic_grand_piano\")\n// name = the pitch name (e.g. \"A3\")\nvar soundsCache = require(\"./sounds-cache\");\n\nvar getNote = function (url, instrument, name, audioContext) {\n\tif (!soundsCache[instrument]) soundsCache[instrument] = {};\n\tvar instrumentCache = soundsCache[instrument];\n\n\tif (!instrumentCache[name])\n\t\tinstrumentCache[name] = new Promise(function (resolve, reject) {\n\t\t\tvar xhr = new XMLHttpRequest();\n\t\t\tlet noteUrl = url + instrument + \"-mp3/\" + name + \".mp3\";\n\t\t\txhr.open(\"GET\", noteUrl, true);\n\t\t\txhr.responseType = \"arraybuffer\";\n\t\t\txhr.onload = function () {\n\t\t\t\tif (xhr.status !== 200) {\n\t\t\t\t\treject(Error(\"Can't load sound at \" + noteUrl + ' status=' + xhr.status));\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tvar noteDecoded = function(audioBuffer) {\n\t\t\t\t\tresolve({instrument: instrument, name: name, status: \"loaded\", audioBuffer: audioBuffer})\n\t\t\t\t}\n\t\t\t\tvar maybePromise = audioContext.decodeAudioData(xhr.response, noteDecoded, function () {\n\t\t\t\t\treject(Error(\"Can't decode sound at \" + noteUrl));\n\t\t\t\t});\n\t\t\t\t// In older browsers `BaseAudioContext.decodeAudio()` did not return a promise\n\t\t\t\tif (maybePromise && typeof maybePromise.catch === \"function\") maybePromise.catch(reject);\n\t\t\t};\n\t\t\txhr.onerror = function () {\n\t\t\t\treject(Error(\"Can't load sound at \" + noteUrl));\n\t\t\t};\n\t\t\txhr.send();\n\t\t})\n\t\t\t.catch(err => {\n\t\t\t\tconsole.error(\"Didn't load note\", instrument, name, \":\", err.message);\n\t\t\t\tthrow err;\n\t\t\t});\n\n\treturn instrumentCache[name];\n};\n\nmodule.exports = getNote;\n","var accidentals = {\n\t\"__\": -2,\n\t\"_\": -1,\n\t\"_/\": -0.5,\n\t\"=\": 0,\n\t\"\": 0,\n\t\"^/\": 0.5,\n\t\"^\": 1,\n\t\"^^\": 2\n}\n\nvar notesInOrder = ['C', '-', 'D', '-', 'E', 'F', '-', 'G', '-', 'A', '-', 'B', 'c', '-', 'd', '-', 'e', 'f', '-', 'g', '-', 'a', '-', 'b']\n\nfunction noteToMidi(note) {\n\tvar reg = note.match(/([_^\\/]*)([ABCDEFGabcdefg])(,*)('*)/)\n\tif (reg && reg.length === 5) {\n\t\tvar acc = accidentals[reg[1]]\n\t\tvar pitch = notesInOrder.indexOf(reg[2])\n\t\tvar octave = reg[4].length - reg[3].length\n\t\treturn 48 + pitch + acc + octave * 12;\n\t}\n\treturn 0;\n}\n\nfunction midiToNote(midi) {\n\tmidi = parseInt(midi, 10) // TODO-PER: not sure how to handle quarter sharps and flats, so strip them for now.\n\tvar octave = Math.floor(midi / 12)\n\tvar pitch = midi % 12\n\tvar name = notesInOrder[pitch]\n\tif (name === '-') {\n\t\tname = '^' + notesInOrder[pitch-1]\n\t}\n\t\n\tif (octave > 4) {\n\t\tname = name.toLowerCase()\n\t\toctave -= 5\n\t\twhile (octave > 0) {\n\t\t\tname += \"'\"\n\t\t\toctave--\n\t\t}\n\t} else {\n\t\twhile (octave < 4) {\n\t\t\tname += ','\n\t\t\toctave++\n\t\t}\n\t}\t\n\treturn name\n}\n\nmodule.exports = {noteToMidi: noteToMidi, midiToNote: midiToNote};\n","var pitchToNoteName = {\n\t21: 'A0',\n\t22: 'Bb0',\n\t23: 'B0',\n\t24: 'C1',\n\t25: 'Db1',\n\t26: 'D1',\n\t27: 'Eb1',\n\t28: 'E1',\n\t29: 'F1',\n\t30: 'Gb1',\n\t31: 'G1',\n\t32: 'Ab1',\n\t33: 'A1',\n\t34: 'Bb1',\n\t35: 'B1',\n\t36: 'C2',\n\t37: 'Db2',\n\t38: 'D2',\n\t39: 'Eb2',\n\t40: 'E2',\n\t41: 'F2',\n\t42: 'Gb2',\n\t43: 'G2',\n\t44: 'Ab2',\n\t45: 'A2',\n\t46: 'Bb2',\n\t47: 'B2',\n\t48: 'C3',\n\t49: 'Db3',\n\t50: 'D3',\n\t51: 'Eb3',\n\t52: 'E3',\n\t53: 'F3',\n\t54: 'Gb3',\n\t55: 'G3',\n\t56: 'Ab3',\n\t57: 'A3',\n\t58: 'Bb3',\n\t59: 'B3',\n\t60: 'C4',\n\t61: 'Db4',\n\t62: 'D4',\n\t63: 'Eb4',\n\t64: 'E4',\n\t65: 'F4',\n\t66: 'Gb4',\n\t67: 'G4',\n\t68: 'Ab4',\n\t69: 'A4',\n\t70: 'Bb4',\n\t71: 'B4',\n\t72: 'C5',\n\t73: 'Db5',\n\t74: 'D5',\n\t75: 'Eb5',\n\t76: 'E5',\n\t77: 'F5',\n\t78: 'Gb5',\n\t79: 'G5',\n\t80: 'Ab5',\n\t81: 'A5',\n\t82: 'Bb5',\n\t83: 'B5',\n\t84: 'C6',\n\t85: 'Db6',\n\t86: 'D6',\n\t87: 'Eb6',\n\t88: 'E6',\n\t89: 'F6',\n\t90: 'Gb6',\n\t91: 'G6',\n\t92: 'Ab6',\n\t93: 'A6',\n\t94: 'Bb6',\n\t95: 'B6',\n\t96: 'C7',\n\t97: 'Db7',\n\t98: 'D7',\n\t99: 'Eb7',\n\t100: 'E7',\n\t101: 'F7',\n\t102: 'Gb7',\n\t103: 'G7',\n\t104: 'Ab7',\n\t105: 'A7',\n\t106: 'Bb7',\n\t107: 'B7',\n\t108: 'C8',\n\t109: 'Db8',\n\t110: 'D8',\n\t111: 'Eb8',\n\t112: 'E8',\n\t113: 'F8',\n\t114: 'Gb8',\n\t115: 'G8',\n\t116: 'Ab8',\n\t117: 'A8',\n\t118: 'Bb8',\n\t119: 'B8',\n\t120: 'C9',\n\t121: 'Db9'\n};\n\nmodule.exports = pitchToNoteName;\n","var pitchMap = {\n\tf0: \"_C\",\n\tn0: \"=C\",\n\ts0: \"^C\",\n\tx0: \"C\",\n\tf1: \"_D\",\n\tn1: \"=D\",\n\ts1: \"^D\",\n\tx1: \"D\",\n\tf2: \"_E\",\n\tn2: \"=E\",\n\ts2: \"^E\",\n\tx2: \"E\",\n\tf3: \"_F\",\n\tn3: \"=F\",\n\ts3: \"^F\",\n\tx3: \"F\",\n\tf4: \"_G\",\n\tn4: \"=G\",\n\ts4: \"^G\",\n\tx4: \"G\",\n\tf5: \"_A\",\n\tn5: \"=A\",\n\ts5: \"^A\",\n\tx5: \"A\",\n\tf6: \"_B\",\n\tn6: \"=B\",\n\ts6: \"^B\",\n\tx6: \"B\",\n\tf7: \"_c\",\n\tn7: \"=c\",\n\ts7: \"^c\",\n\tx7: \"c\",\n\tf8: \"_d\",\n\tn8: \"=d\",\n\ts8: \"^d\",\n\tx8: \"d\",\n\tf9: \"_e\",\n\tn9: \"=e\",\n\ts9: \"^e\",\n\tx9: \"e\",\n\tf10: \"_f\",\n\tn10: \"=f\",\n\ts10: \"^f\",\n\tx10: \"f\",\n\tf11: \"_g\",\n\tn11: \"=g\",\n\ts11: \"^g\",\n\tx11: \"g\",\n\tf12: \"_a\",\n\tn12: \"=a\",\n\ts12: \"^a\",\n\tx12: \"a\",\n\tf13: \"_b\",\n\tn13: \"=b\",\n\ts13: \"^b\",\n\tx13: \"b\",\n\tf14: \"_c'\",\n\tn14: \"=c'\",\n\ts14: \"^c'\",\n\tx14: \"c'\",\n\tf15: \"_d'\",\n\tn15: \"=d'\",\n\ts15: \"^d'\",\n\tx15: \"d'\",\n\tf16: \"_e'\",\n\tn16: \"=e'\",\n\ts16: \"^e'\",\n\tx16: \"e'\",\n}\n\nfunction pitchesToPerc(pitchObj) {\n\tvar pitch = (pitchObj.accidental ? pitchObj.accidental[0] : 'x') + pitchObj.verticalPos;\n\treturn pitchMap[pitch];\n}\nmodule.exports = pitchesToPerc;\n","var soundsCache = require('./sounds-cache');\nvar pitchToNoteName = require('./pitch-to-note-name');\nvar centsToFactor = require(\"./cents-to-factor\");\n\nfunction placeNote(outputAudioBuffer, sampleRate, sound, startArray, volumeMultiplier, ofsMs, fadeTimeSec, noteEndSec, debugCallback) {\n\t// sound contains { instrument, pitch, volume, len, pan, tempoMultiplier\n\t// len is in whole notes. Multiply by tempoMultiplier to get seconds.\n\t// ofsMs is an offset to subtract from the note to line up programs that have different length onsets.\n\tvar OfflineAC = window.OfflineAudioContext ||\n\t\twindow.webkitOfflineAudioContext;\n\n\tvar len = sound.len * sound.tempoMultiplier;\n\tif (ofsMs)\n\t\tlen +=ofsMs/1000;\n\tlen -= noteEndSec;\n\tif (len < 0)\n\t\tlen = 0.005; // Have some small audible length no matter how short the note is.\n\tvar offlineCtx = new OfflineAC(2,Math.floor((len+fadeTimeSec)*sampleRate),sampleRate);\n\tvar noteName = pitchToNoteName[sound.pitch];\n\tif (!soundsCache[sound.instrument]) {\n\t\t// It shouldn't happen that the entire instrument cache wasn't created, but this has been seen in practice, so guard against it.\n\t\tif (debugCallback)\n\t\t\tdebugCallback('placeNote skipped (instrument empty): '+sound.instrument+':'+noteName)\n\t\treturn Promise.resolve();\n\t}\n\tvar noteBufferPromise = soundsCache[sound.instrument][noteName];\n\n\tif (!noteBufferPromise) {\n\t\t// if the note isn't present then just skip it - it will leave a blank spot in the audio.\n\t\tif (debugCallback)\n\t\t\tdebugCallback('placeNote skipped: '+sound.instrument+':'+noteName)\n\t\treturn Promise.resolve();\n\t}\n\n\treturn noteBufferPromise\n\t\t.then(function (response) {\n\t\t\t// create audio buffer\n\t\t\tvar source = offlineCtx.createBufferSource();\n\t\t\tsource.buffer = response.audioBuffer;\n\n\t\t\t// add gain\n\t\t\t// volume can be between 1 to 127. This translation to gain is just trial and error.\n\t\t\t// The smaller the first number, the more dynamic range between the quietest to loudest.\n\t\t\t// The larger the second number, the louder it will be in general.\n\t\t\tvar volume = (sound.volume / 96) * volumeMultiplier;\n\t\t\tsource.gainNode = offlineCtx.createGain();\n\n\t\t\t// add pan if supported and present\n\t\t\tif (sound.pan && offlineCtx.createStereoPanner) {\n\t\t\t\tsource.panNode = offlineCtx.createStereoPanner();\n\t\t\t\tsource.panNode.pan.setValueAtTime(sound.pan, 0);\n\t\t\t}\n\t\t\tsource.gainNode.gain.value = volume; // Math.min(2, Math.max(0, volume));\n\t\t\tsource.gainNode.gain.linearRampToValueAtTime(source.gainNode.gain.value, len);\n\t\t\tsource.gainNode.gain.linearRampToValueAtTime(0.0, len + fadeTimeSec);\n\n\t\t\tif (sound.cents) {\n\t\t\t\tsource.playbackRate.value = centsToFactor(sound.cents);\n\t\t\t}\n\n\t\t\t// connect all the nodes\n\t\t\tif (source.panNode) {\n\t\t\t\tsource.panNode.connect(offlineCtx.destination);\n\t\t\t\tsource.gainNode.connect(source.panNode);\n\t\t\t} else {\n\t\t\t\tsource.gainNode.connect(offlineCtx.destination);\n\t\t\t}\n\t\t\tsource.connect(source.gainNode);\n\n\t\t\t// Do the process of creating the sound and placing it in the buffer\n\t\t\tsource.start(0);\n\n\t\t\tif (source.noteOff) {\n\t\t\t\tsource.noteOff(len + fadeTimeSec);\n\t\t\t} else {\n\t\t\t\tsource.stop(len + fadeTimeSec);\n\t\t\t}\n\t\t\tvar fnResolve;\n\t\t\tofflineCtx.oncomplete = function(e) {\n\t\t\t\tif (e.renderedBuffer && e.renderedBuffer.getChannelData) { // If the system gets overloaded or there are network problems then this can start failing. Just drop the note if so.\n\t\t\t\t\tfor (var i = 0; i < startArray.length; i++) {\n\t\t\t\t\t\t//Math.floor(startArray[i] * sound.tempoMultiplier * sampleRate)\n\t\t\t\t\t\tvar start = startArray[i] * sound.tempoMultiplier;\n\t\t\t\t\t\tif (ofsMs)\n\t\t\t\t\t\t\tstart -=ofsMs/1000;\n\t\t\t\t\t\tif (start < 0)\n\t\t\t\t\t\t\tstart = 0; // If the item that is moved back is at the very beginning of the buffer then don't move it back. To do that would be to push everything else forward. TODO-PER: this should probably be done at some point but then it would change timing in existing apps.\n\t\t\t\t\t\tstart = Math.floor(start*sampleRate);\n\t\t\t\t\t\tcopyToChannel(outputAudioBuffer, e.renderedBuffer, start);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (debugCallback)\n\t\t\t\t\tdebugCallback('placeNote: '+sound.instrument+':'+noteName)\n\t\t\t\tfnResolve();\n\t\t\t};\n\t\t\tofflineCtx.startRendering();\n\t\t\treturn new Promise(function(resolve) {\n\t\t\t\tfnResolve = resolve;\n\t\t\t});\n\t\t})\n\t\t.catch(function (error) {\n\t\t\tif (debugCallback)\n\t\t\t\tdebugCallback('placeNote catch: '+error.message)\n\t\t\treturn Promise.resolve()\n\t\t});\n}\n\nvar copyToChannel = function(toBuffer, fromBuffer, start) {\n\tfor (var ch = 0; ch < 2; ch++) {\n\t\tvar fromData = fromBuffer.getChannelData(ch);\n\t\tvar toData = toBuffer.getChannelData(ch);\n\n\t\t// Mix the current note into the existing track\n\t\tfor (var n = 0; n < fromData.length; n++) {\n\t\t\ttoData[n + start] += fromData[n];\n\t\t}\n\t}\n};\n\nmodule.exports = placeNote;\n","var SynthSequence = require('./synth-sequence');\nvar CreateSynth = require('./create-synth');\nvar activeAudioContext = require(\"./active-audio-context\");\n\nfunction playEvent(midiPitches, midiGracePitches, millisecondsPerMeasure, soundFontUrl, debugCallback) {\n\tvar sequence = new SynthSequence();\n\n\tfor (var i = 0; i < midiPitches.length; i++) {\n\t\tvar note = midiPitches[i];\n\t\tvar trackNum = sequence.addTrack();\n\t\tsequence.setInstrument(trackNum, note.instrument);\n\t\tif (i === 0 && midiGracePitches) {\n\t\t\tfor (var j = 0; j < midiGracePitches.length; j++) {\n\t\t\t\tvar grace = midiGracePitches[j];\n\t\t\t\tsequence.appendNote(trackNum, grace.pitch, 1 / 64, grace.volume, grace.cents);\n\t\t\t}\n\t\t}\n\t\tsequence.appendNote(trackNum, note.pitch, note.duration, note.volume, note.cents);\n\t}\n\n\tvar ac = activeAudioContext();\n\tif (ac.state === \"suspended\") {\n\t\treturn ac.resume().then(function () {\n\t\t\treturn doPlay(sequence, millisecondsPerMeasure, soundFontUrl, debugCallback);\n\t\t});\n\t} else {\n\t\treturn doPlay(sequence, millisecondsPerMeasure, soundFontUrl, debugCallback);\n\t}\n}\n\nfunction doPlay(sequence, millisecondsPerMeasure, soundFontUrl, debugCallback) {\n\tvar buffer = new CreateSynth();\n\treturn buffer.init({\n\t\tsequence: sequence,\n\t\tmillisecondsPerMeasure: millisecondsPerMeasure,\n\t\toptions: { soundFontUrl: soundFontUrl },\n\t\tdebugCallback: debugCallback,\n\t}).then(function () {\n\t\treturn buffer.prime();\n\t}).then(function () {\n\t\tbuffer.start();\n\t\treturn Promise.resolve();\n\t});\n}\n\nmodule.exports = playEvent;\n","// Call this when it is safe for the abcjs to produce sound. This is after the first user gesture on the page.\n// If you call it with no parameters, then an AudioContext is created and stored.\n// If you call it with a parameter, that is used as an already created AudioContext.\n\nfunction registerAudioContext(ac) {\n\t// If one is passed in, that is the one to use even if there was already one created.\n\tif (ac)\n\t\twindow.abcjsAudioContext = ac;\n\telse {\n\t\t// no audio context passed in, so create it unless there is already one from before.\n\t\tif (!window.abcjsAudioContext) {\n\t\t\tvar AudioContext = window.AudioContext || window.webkitAudioContext;\n\t\t\tif (AudioContext)\n\t\t\t\twindow.abcjsAudioContext = new AudioContext();\n\t\t\telse\n\t\t\t\treturn false;\n\t\t}\n\t}\n\treturn window.abcjsAudioContext.state !== \"suspended\";\n}\n\nmodule.exports = registerAudioContext;\n","var soundsCache = {\n};\n\nmodule.exports = soundsCache;\n","var activeAudioContext = require('./active-audio-context');\n\n//\n// Support for audio depends on three things: support for Promise, support for AudioContext, and support for AudioContext.resume.\n// Unfortunately, AudioContext.resume cannot be detected unless an AudioContext is created, and creating an AudioContext can't\n// be done until a user click, so there is no way to know for sure if audio is supported until the user tries.\n// We can get close, though - we can test for Promises and AudioContext - there are just a few evergreen browsers that supported\n// that before supporting resume, so we'll test what we can.\n\n// The best use of this routine is to call it before doing any audio related stuff to decide whether to bother.\n// But then, call it again after a user interaction to test for resume.\n\nfunction supportsAudio() {\n\tif (!window.Promise)\n\t\treturn false;\n\n\tif (!window.AudioContext &&\n\t\t!window.webkitAudioContext &&\n\t\t!navigator.mozAudioContext &&\n\t\t!navigator.msAudioContext)\n\t\treturn false;\n\n\tvar aac = activeAudioContext();\n\tif (aac)\n\t\treturn aac.resume !== undefined;\n}\n\nmodule.exports = supportsAudio;\n","var CreateSynthControl = require('./create-synth-control');\nvar CreateSynth = require('./create-synth');\nvar TimingCallbacks = require('../api/abc_timing_callbacks');\nvar activeAudioContext = require('./active-audio-context');\n\nfunction SynthController() {\n\tvar self = this;\n\tself.warp = 100;\n\tself.cursorControl = null;\n\tself.visualObj = null;\n\tself.timer = null;\n\tself.midiBuffer = null;\n\tself.options = null;\n\tself.currentTempo = null;\n\tself.control = null;\n\tself.isLooping = false;\n\tself.isStarted = false;\n\tself.isLoaded = false;\n\tself.isLoading = false;\n\n\tself.load = function (selector, cursorControl, visualOptions) {\n\t\tif (!visualOptions)\n\t\t\tvisualOptions = {};\n\t\tif (visualOptions.displayPlay === undefined)\n\t\t\tvisualOptions.displayPlay = true\n\t\tif (visualOptions.displayProgress === undefined)\n\t\t\tvisualOptions.displayProgress = true\n\t\tself.control = new CreateSynthControl(selector, {\n\t\t\tloopHandler: visualOptions.displayLoop ? self.toggleLoop : undefined,\n\t\t\trestartHandler: visualOptions.displayRestart ? self.restart : undefined,\n\t\t\tplayPromiseHandler: visualOptions.displayPlay ? self.play : undefined,\n\t\t\tprogressHandler: visualOptions.displayProgress ? self.randomAccess : undefined,\n\t\t\twarpHandler: visualOptions.displayWarp ? self.onWarp : undefined,\n\t\t\tafterResume: self.init\n\t\t});\n\t\tself.cursorControl = cursorControl;\n\t\tself.disable(true);\n\t};\n\n\tself.disable = function(isDisabled) {\n\t\tif (self.control)\n\t\t\tself.control.disable(isDisabled);\n\t};\n\n\tself.setTune = function(visualObj, userAction, audioParams) {\n\t\tself.visualObj = visualObj;\n\t\tself.disable(false);\n\t\tself.options = audioParams ? audioParams : {};\n\n\t\tif (self.control) {\n\t\t\tself.pause();\n\t\t\tself.setProgress(0, 1);\n\t\t\tself.control.resetAll();\n\t\t\tself.restart();\n\t\t\tself.isStarted = false;\n\t\t}\n\t\tself.isLooping = false;\n\n\t\tif (userAction)\n\t\t\treturn self.go();\n\t\telse {\n\t\t\treturn Promise.resolve({status: \"no-audio-context\"});\n\t\t}\n\t};\n\n\tself.go = function () {\n\t\tself.isLoading = true;\n\t\tvar millisecondsPerMeasure = self.visualObj.millisecondsPerMeasure() * 100 / self.warp;\n\t\tself.currentTempo = Math.round(self.visualObj.getBeatsPerMeasure() / millisecondsPerMeasure * 60000);\n\t\tif (self.control)\n\t\t\tself.control.setTempo(self.currentTempo);\n\t\tself.percent = 0;\n\t\tvar loadingResponse;\n\n\t\tif (!self.midiBuffer)\n\t\t\tself.midiBuffer = new CreateSynth();\n\t\treturn activeAudioContext().resume().then(function (response) {\n\t\t\treturn self.midiBuffer.init({\n\t\t\t\tvisualObj: self.visualObj,\n\t\t\t\toptions: self.options,\n\t\t\t\tmillisecondsPerMeasure: millisecondsPerMeasure\n\t\t\t});\n\t\t}).then(function (response) {\n\t\t\tloadingResponse = response;\n\t\t\treturn self.midiBuffer.prime();\n\t\t}).then(function () {\n\t\t\tvar subdivisions = 16;\n\t\t\tif (self.cursorControl &&\n\t\t\t\tself.cursorControl.beatSubdivisions !== undefined &&\n\t\t\t\tparseInt(self.cursorControl.beatSubdivisions, 10) >= 1 &&\n\t\t\t\tparseInt(self.cursorControl.beatSubdivisions, 10) <= 64)\n\t\t\t\tsubdivisions = parseInt(self.cursorControl.beatSubdivisions, 10);\n\n\t\t\t// Need to create the TimingCallbacks after priming the midi so that the midi data is available for the callbacks.\n\t\t\tself.timer = new TimingCallbacks(self.visualObj, {\n\t\t\t\tbeatCallback: self.beatCallback,\n\t\t\t\teventCallback: self.eventCallback,\n\t\t\t\tlineEndCallback: self.lineEndCallback,\n\t\t\t\tqpm: self.currentTempo,\n\n\t\t\t\textraMeasuresAtBeginning: self.cursorControl ? self.cursorControl.extraMeasuresAtBeginning : undefined,\n\t\t\t\tlineEndAnticipation: self.cursorControl ? self.cursorControl.lineEndAnticipation : 0,\n\t\t\t\tbeatSubdivisions: subdivisions,\n\t\t\t});\n\t\t\tif (self.cursorControl && self.cursorControl.onReady && typeof self.cursorControl.onReady === 'function')\n\t\t\t\tself.cursorControl.onReady(self);\n\t\t\tself.isLoaded = true;\n\t\t\tself.isLoading = false;\n\t\t\treturn Promise.resolve({ status: \"created\", notesStatus: loadingResponse });\n\t\t});\n\t};\n\n\tself.destroy = function () {\n\t\tif (self.timer) {\n\t\t\tself.timer.reset();\n\t\t\tself.timer.stop();\n\t\t\tself.timer = null;\n\t\t}\n\t\tif (self.midiBuffer) {\n\t\t\tself.midiBuffer.stop();\n\t\t\tself.midiBuffer = null;\n\t\t}\n\t\tself.setProgress(0, 1);\n\t\tif (self.control)\n\t\t\tself.control.resetAll();\n\t};\n\n\tself.play = function () {\n\t\treturn self.runWhenReady(self._play, undefined);\n\t};\n\n\tfunction sleep(ms) {\n\t\treturn new Promise(function (resolve) {\n\t\t\tsetTimeout(resolve, ms)\n\t\t});\n\t}\n\n\tself.runWhenReady = function(fn, arg1) {\n\t\tif (!self.visualObj)\n\t\t\treturn Promise.resolve({status: \"loading\"});\n\t\tif (self.isLoading) {\n\t\t\t// Some other promise is waiting for the tune to be loaded, so just wait.\n\t\t\treturn sleep(500).then(function() {\n\t\t\t\tif (self.isLoading)\n\t\t\t\t\treturn self.runWhenReady(fn, arg1);\n\t\t\t\treturn fn(arg1);\n\t\t\t})\n\t\t} else if (!self.isLoaded) {\n\t\t\treturn self.go().then(function () {\n\t\t\t\treturn fn(arg1);\n\t\t\t});\n\t\t} else {\n\t\t\treturn fn(arg1);\n\t\t}\n\t};\n\n\tself._play = function () {\n\t\treturn activeAudioContext().resume().then(function () {\n\t\t\tself.isStarted = !self.isStarted;\n\t\t\tif (self.isStarted) {\n\t\t\t\tif (self.cursorControl && self.cursorControl.onStart && typeof self.cursorControl.onStart === 'function')\n\t\t\t\t\tself.cursorControl.onStart();\n\t\t\t\tself.midiBuffer.start();\n\t\t\t\tself.timer.start(self.percent);\n\t\t\t\tif (self.control)\n\t\t\t\t\tself.control.pushPlay(true);\n\t\t\t} else {\n\t\t\t\tself.pause();\n\t\t\t}\n\t\t\treturn Promise.resolve({status: \"ok\"});\n\t\t})\n\t};\n\n\tself.pause = function() {\n\t\tif (self.timer) {\n\t\t\tself.timer.pause();\n\t\t\tself.midiBuffer.pause();\n\t\t\tif (self.control)\n\t\t\t\tself.control.pushPlay(false);\n\t\t}\n\t};\n\n\tself.toggleLoop = function () {\n\t\tself.isLooping = !self.isLooping;\n\t\tif (self.control)\n\t\t\tself.control.pushLoop(self.isLooping);\n\t};\n\n\tself.restart = function () {\n\t\tif (self.timer) {\n\t\t\tself.timer.setProgress(0);\n\t\t\tself.midiBuffer.seek(0);\n\t\t}\n\t};\n\n\tself.randomAccess = function (ev) {\n\t\treturn self.runWhenReady(self._randomAccess, ev);\n\t};\n\n\tself._randomAccess = function (ev) {\n\t\tvar background = (ev.target.classList.contains('abcjs-midi-progress-indicator')) ? ev.target.parentNode : ev.target;\n\t\tvar percent = (ev.x - background.getBoundingClientRect().left) / background.offsetWidth;\n\t\tif (percent < 0)\n\t\t\tpercent = 0;\n\t\tif (percent > 1)\n\t\t\tpercent = 1;\n\t\tself.seek(percent);\n\t\treturn Promise.resolve({status: \"ok\"});\n\t};\n\n\tself.seek = function (percent, units) {\n\t\tif (self.timer && self.midiBuffer) {\n\t\t\tself.timer.setProgress(percent, units);\n\t\t\tself.midiBuffer.seek(percent, units);\n\t\t}\n\t};\n\n\tself.setWarp = function (newWarp) {\n\t\tif (parseInt(newWarp, 10) > 0) {\n\t\t\tself.warp = parseInt(newWarp, 10);\n\t\t\tvar wasPlaying = self.isStarted;\n\t\t\tvar startPercent = self.percent;\n\t\t\tself.destroy();\n\t\t\tself.isStarted = false;\n\t\t\treturn self.go().then(function () {\n\t\t\t\tself.setProgress(startPercent, self.midiBuffer.duration * 1000);\n\t\t\t\tif (self.control)\n\t\t\t\t\tself.control.setWarp(self.currentTempo, self.warp);\n\t\t\t\tif (wasPlaying) {\n\t\t\t\t\treturn self.play().then(function () {\n\t\t\t\t\t\tself.seek(startPercent);\n\t\t\t\t\t\treturn Promise.resolve();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tself.seek(startPercent);\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t}\n\t\treturn Promise.resolve();\n\t};\n\n\tself.onWarp = function (ev) {\n\t\tvar newWarp = ev.target.value;\n\t\treturn self.setWarp(newWarp);\n\t};\n\n\tself.setProgress = function (percent, totalTime) {\n\t\tself.percent = percent;\n\t\tif (self.control)\n\t\t\tself.control.setProgress(percent, totalTime);\n\t};\n\n\tself.finished = function () {\n\t\tself.timer.reset();\n\t\tif (self.isLooping) {\n\t\t\tself.timer.start(0);\n\t\t\tself.midiBuffer.finished();\n\t\t\tself.midiBuffer.start();\n\t\t\treturn \"continue\";\n\t\t} else {\n\t\t\tself.timer.stop();\n\t\t\tif (self.isStarted) {\n\t\t\t\tif (self.control)\n\t\t\t\t\tself.control.pushPlay(false);\n\t\t\t\tself.isStarted = false;\n\t\t\t\tself.midiBuffer.finished();\n\t\t\t\tif (self.cursorControl && self.cursorControl.onFinished && typeof self.cursorControl.onFinished === 'function')\n\t\t\t\t\tself.cursorControl.onFinished();\n\t\t\t\tself.setProgress(0, 1);\n\t\t\t}\n\t\t}\n\t};\n\n\tself.beatCallback = function (beatNumber, totalBeats, totalTime, position) {\n\t\tvar percent = beatNumber / totalBeats;\n\t\tself.setProgress(percent, totalTime);\n\t\tif (self.cursorControl && self.cursorControl.onBeat && typeof self.cursorControl.onBeat === 'function')\n\t\t\tself.cursorControl.onBeat(beatNumber, totalBeats, totalTime, position);\n\t};\n\n\tself.eventCallback = function (event) {\n\t\tif (event) {\n\t\t\tif (self.cursorControl && self.cursorControl.onEvent && typeof self.cursorControl.onEvent === 'function')\n\t\t\t\tself.cursorControl.onEvent(event);\n\t\t} else {\n\t\t\treturn self.finished();\n\t\t}\n\t};\n\n\tself.lineEndCallback = function (lineEvent, leftEvent) {\n\t\tif (self.cursorControl && self.cursorControl.onLineEnd && typeof self.cursorControl.onLineEnd === 'function')\n\t\t\tself.cursorControl.onLineEnd(lineEvent, leftEvent);\n\t};\n\n\tself.getUrl = function () {\n\t\treturn self.midiBuffer.download();\n\t};\n\n\tself.download = function(fileName) {\n\t\tvar url = self.getUrl();\n\t\tvar link = document.createElement('a');\n\t\tdocument.body.appendChild(link);\n\t\tlink.setAttribute(\"style\",\"display: none;\");\n\t\tlink.href = url;\n\t\tlink.download = fileName ? fileName : 'output.wav';\n\t\tlink.click();\n\t\twindow.URL.revokeObjectURL(url);\n\t\tdocument.body.removeChild(link);\n\t};\n}\n\nmodule.exports = SynthController;\n","var SynthSequence = function() {\n\tvar self = this;\n\tself.tracks = [];\n\tself.totalDuration = 0;\n\tself.currentInstrument = [];\n\tself.starts = [];\n\n\tself.addTrack = function() {\n\t\tself.tracks.push([]);\n\t\tself.currentInstrument.push(0);\n\t\tself.starts.push(0);\n\t\treturn self.tracks.length - 1;\n\t};\n\n\tself.setInstrument = function(trackNumber, instrumentNumber) {\n\t\tself.tracks[trackNumber].push({\n\t\t\tchannel: 0,\n\t\t\tcmd: \"program\",\n\t\t\tinstrument: instrumentNumber\n\t\t});\n\t\tself.currentInstrument[trackNumber] = instrumentNumber;\n\t};\n\n\tself.appendNote = function(trackNumber, pitch, durationInMeasures, volume, cents) {\n\t\tvar note = {\n\t\t\tcmd: \"note\",\n\t\t\tduration: durationInMeasures,\n\t\t\tgap: 0,\n\t\t\tinstrument: self.currentInstrument[trackNumber],\n\t\t\tpitch: pitch,\n\t\t\tstart: self.starts[trackNumber],\n\t\t\tvolume: volume\n\t\t};\n\t\tif (cents)\n\t\t\tnote.cents = cents;\n\t\tself.tracks[trackNumber].push(note);\n\t\tself.starts[trackNumber] += durationInMeasures;\n\n\t\tself.totalDuration = Math.max(self.totalDuration, self.starts[trackNumber]);\n\t};\n};\n\nmodule.exports = SynthSequence;\n","const {noteToMidi} = require('../../synth/note-to-midi');\nvar TabNote = require('./tab-note');\nvar TabNotes = require('./tab-notes');\n\n\nfunction buildCapo(self) {\n var capoTuning = null;\n var tuning = self.tuning;\n if (self.capo > 0) {\n capoTuning = [];\n for (var iii = 0; iii < tuning.length; iii++) {\n var curNote = new TabNote.TabNote(tuning[iii]);\n for (var jjj = 0; jjj < self.capo; jjj++) {\n curNote = curNote.nextNote();\n }\n capoTuning[iii] = curNote.emit();\n }\n }\n return capoTuning;\n}\n\nfunction buildPatterns(self) {\n var strings = [];\n var tuning = self.tuning;\n if (self.capo > 0) {\n tuning = self.capoTuning;\n }\n var pos = tuning.length - 1;\n for (var iii = 0; iii < tuning.length; iii++) {\n var nextNote = self.highestNote; // highest handled note\n if (iii != tuning.length - 1) {\n nextNote = tuning[iii + 1];\n }\n var tabNotes = new TabNotes(tuning[iii],nextNote);\n var stringNotes = tabNotes.build();\n if (stringNotes.error) {\n return stringNotes;\n }\n strings[pos--] = stringNotes;\n }\n return strings;\n}\n\n\nfunction buildSecond(first) {\n var seconds = [];\n seconds[0] = [];\n var strings = first.strings;\n for (var iii = 1; iii < strings.length; iii++) {\n seconds[iii] = strings[iii - 1];\n }\n return seconds;\n}\n\nfunction sameString(self, chord) {\n for (var jjjj = 0; jjjj < chord.length - 1; jjjj++) {\n var curPos = chord[jjjj];\n var nextPos = chord[jjjj + 1];\n if (curPos.str == nextPos.str) {\n // same String\n // => change lower pos \n if (curPos.str == self.strings.length - 1) {\n // Invalid tab Chord position for instrument\n curPos.num = \"?\";\n nextPos.num = \"?\"; \n return; \n }\n // change lower pitch on lowest string\n if (nextPos.num < curPos.num) {\n nextPos.str++;\n nextPos = noteToNumber(self,\n nextPos.note,\n nextPos.str,\n self.secondPos,\n self.strings[nextPos.str].length\n );\n } else {\n curPos.str++;\n curPos = noteToNumber(self,\n curPos.note,\n curPos.str,\n self.secondPos,\n self.strings[curPos.str].length\n );\n }\n // update table\n chord[jjjj] = curPos;\n chord[jjjj + 1] = nextPos;\n }\n }\n return null;\n}\n\nfunction handleChordNotes(self, notes) {\n var retNotes = [];\n for (var iiii = 0; iiii < notes.length; iiii++) {\n if (notes[iiii].endTie)\n continue;\n var note = new TabNote.TabNote(notes[iiii].name, self.clefTranspose);\n note.checkKeyAccidentals(self.accidentals, self.measureAccidentals)\n var curPos = toNumber(self, note);\n retNotes.push(curPos);\n }\n sameString(self, retNotes);\n return retNotes;\n}\n\nfunction noteToNumber(self, note, stringNumber, secondPosition , firstSize) {\n var strings = self.strings;\n note.checkKeyAccidentals(self.accidentals, self.measureAccidentals) ;\n if (secondPosition) {\n strings = secondPosition;\n }\n var noteName = note.emitNoAccidentals();\n var num = strings[stringNumber].indexOf(noteName);\n var acc = note.acc;\n if (num != -1) {\n if (secondPosition) {\n num += firstSize;\n }\n if ( (note.isFlat || note.acc == -1) && (num == 0)) {\n // flat on 0 pos => previous string 7th position\n var noteEquiv = note.getAccidentalEquiv();\n stringNumber++;\n num = strings[stringNumber].indexOf(noteEquiv.emit());\n acc = 0;\n }\n return {\n num: (num + acc),\n str: stringNumber,\n note: note\n };\n }\n return null;\n}\n\nfunction toNumber(self, note) {\n if (note.isAltered || note.natural) {\n var acc;\n if (note.isFlat) {\n if (note.isDouble)\n acc = \"__\"\n else\n acc = \"_\" \n } else if (note.isSharp) {\n if (note.isDouble)\n acc = \"^^\"\n else\n acc = \"^\" \n } else if (note.natural)\n acc = \"=\"\n self.measureAccidentals[note.name.toUpperCase()] = acc \n }\n for (var i = self.stringPitches.length-1; i >= 0; i--) {\n if (note.pitch + note.pitchAltered >= self.stringPitches[i]) {\n var num = note.pitch + note.pitchAltered - self.stringPitches[i]\n if (note.quarter === '^') num -= 0.5\n else if (note.quarter === \"v\") num += 0.5\n return {\n num: Math.round(num),\n str: self.stringPitches.length-1-i, // reverse the strings because string 0 is on the bottom\n note: note\n }\n }\n }\n return {\n num: \"?\",\n str: self.stringPitches.length-1,\n note: note,\n };\n}\n\nStringPatterns.prototype.stringToPitch = function (stringNumber) {\n var startingPitch = 5.3;\n var bottom = this.strings.length - 1;\n return startingPitch + ((bottom - stringNumber) * this.linePitch);\n};\n\nfunction invalidNumber( retNotes , note ) {\n var number = {\n num: \"?\",\n str: 0,\n note: note\n };\n retNotes.push(number);\n retNotes.error = note.emit() + ': unexpected note for instrument' ;\n} \n\nStringPatterns.prototype.notesToNumber = function (notes, graces) {\n var note;\n var number;\n var error = null; \n var retNotes = null;\n if (notes) {\n retNotes = [];\n if (notes.length > 1) {\n retNotes = handleChordNotes(this, notes);\n if (retNotes.error) {\n error = retNotes.error;\n }\n } else {\n if (!notes[0].endTie) {\n note = new TabNote.TabNote(notes[0].name, this.clefTranspose);\n note.checkKeyAccidentals(this.accidentals, this.measureAccidentals)\n number = toNumber(this, note);\n if (number) {\n retNotes.push(number);\n } else {\n invalidNumber(retNotes, note);\n error = retNotes.error;\n }\n }\n }\n } \n if (error) return retNotes;\n var retGraces = null;\n if (graces) {\n retGraces = [];\n for (var iiii = 0; iiii < graces.length; iiii++) {\n note = new TabNote.TabNote(graces[iiii].name, this.clefTranspose);\n note.checkKeyAccidentals(this.accidentals, this.measureAccidentals)\n number = toNumber(this, note);\n if (number) {\n retGraces.push(number);\n } else {\n invalidNumber(retGraces, note);\n error = retNotes.error;\n }\n }\n }\n \n return {\n notes: retNotes,\n graces: retGraces,\n error: error\n };\n};\n\nStringPatterns.prototype.toString = function () {\n var arr = []\n for (var i = 0; i < this.tuning.length; i++) {\n var str = this.tuning[i].replaceAll(',', '').replaceAll(\"'\", '').toUpperCase();\n if (str[0] === '_') str = str[1] + 'b '\n else if (str[0] === '^') str = str[1] + \"# \"\n arr.push(str)\n }\n return arr.join('');\n};\n\nStringPatterns.prototype.tabInfos = function (plugin) {\n var _super = plugin._super;\n var name = _super.params.label;\n if (name) {\n var tunePos = name.indexOf('%T');\n var tuning = \"\";\n if (tunePos != -1) {\n tuning = this.toString();\n if (plugin.capo > 0) {\n tuning += ' capo:' + plugin.capo;\n }\n name = name.replace('%T', tuning);\n }\n return name;\n }\n return '';\n};\n\n// MAE 27 Nov 2023\nStringPatterns.prototype.suppress = function (plugin) {\n var _super = plugin._super;\n var suppress = _super.params.suppress;\n if (suppress){\n return true;\n }\n return false;\n};\n// MAE 27 Nov 2023 End\n\n/**\n * Common patterns for all string instruments\n * @param {} plugin\n * @param {} tuning\n * @param {*} capo\n * @param {*} highestNote \n */\nfunction StringPatterns(plugin) {\n var tuning = plugin.tuning;\n var capo = plugin.capo;\n var highestNote = plugin._super.params.highestNote;\n this.linePitch = plugin.linePitch;\n this.highestNote = \"a'\";\n if (highestNote) {\n // override default\n this.highestNote = highestNote;\n }\n this.measureAccidentals = {}\n this.capo = 0;\n if (capo) {\n this.capo = parseInt(capo,10);\n }\n this.transpose = plugin.transpose ? plugin.transpose : 0\n this.tuning = tuning;\n this.stringPitches = []\n for (var i = 0; i < this.tuning.length; i++) {\n var pitch = noteToMidi(this.tuning[i]) + this.capo\n this.stringPitches.push(pitch)\n }\n if (this.capo > 0) {\n this.capoTuning = buildCapo(this);\n }\n this.strings = buildPatterns(this);\n if (this.strings.error) {\n plugin._super.setError(this.strings.error);\n plugin.inError = true;\n return;\n }\n // second position pattern per string\n this.secondPos = buildSecond(this);\n}\n\n\n\nmodule.exports = StringPatterns;","\n/**\n * Layout tablature informations for draw\n * @param {*} numLines \n * @param {*} lineSpace \n */\n\nfunction StringTablature(numLines, lineSpace) {\n this.numLines = numLines;\n this.lineSpace = lineSpace;\n this.verticalSize = this.numLines * this.lineSpace;\n var pitch = 3;\n this.bar = {\n pitch: pitch,\n pitch2: lineSpace * numLines,\n height: 5,\n };\n}\n\n/**\n * return true if current line should not produce a tab\n * @param {} line \n */\nStringTablature.prototype.bypass = function (line) {\n var voices = line.staffGroup.voices;\n if (voices.length > 0) {\n if (voices[0].isPercussion) return true;\n }\n return false;\n}; \n\n\nStringTablature.prototype.setRelative = function (child, relative, first) {\n switch (child.type) {\n case 'bar':\n relative.pitch = this.bar.pitch;\n relative.pitch2 = this.bar.pitch2;\n relative.height = this.height;\n break;\n case 'symbol':\n var top = this.bar.pitch2 / 2;\n if (child.name == 'dots.dot') {\n if (first) {\n relative.pitch = top;\n return false;\n } else {\n relative.pitch = top + this.lineSpace;\n return true;\n }\n }\n break;\n }\n return first;\n};\n\nmodule.exports = StringTablature;","var {noteToMidi, midiToNote} = require('../../synth/note-to-midi');\n\n/**\n * \n * Note structure for Tabs\n * \n */\nvar notes = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];\n\n\nfunction TabNote(note, clefTranspose) {\n var pitch = noteToMidi(note)\n if (clefTranspose)\n pitch += clefTranspose\n var newNote = midiToNote(pitch);\n var isFlat = false;\n var isSharp = false;\n var isAltered = false;\n var natural = null;\n var quarter = null;\n var isDouble = false;\n var acc = 0;\n\n if (note.startsWith('_')) {\n isFlat = true;\n acc = -1;\n // check quarter flat\n if (note[1] == '/') {\n isFlat = false;\n quarter = \"v\";\n acc = 0;\n } else if (note[1] == '_') {\n // double flat\n isDouble = true;\n acc -= 1;\n }\n } else if (note.startsWith('^')) {\n isSharp = true;\n acc = +1;\n // check quarter sharp\n if (note[1] == '/') {\n isSharp = false;\n quarter = \"^\";\n acc = 0;\n } else if (note[1] == '^') {\n // double sharp\n isDouble = true;\n acc += 1;\n }\n } else if (note.startsWith('=')) {\n natural = true;\n acc = 0;\n }\n isAltered = isFlat || isSharp || (quarter != null);\n if (isAltered || natural) {\n if ((quarter != null) || (isDouble)) {\n newNote = note.slice(2);\n } else {\n newNote = note.slice(1);\n }\n }\n var hasComma = (newNote.match(/,/g) || []).length;\n var hasQuote = (newNote.match(/'/g) || []).length;\n\n this.pitch = pitch\n this.pitchAltered = 0\n this.name = newNote;\n this.acc = acc;\n this.isSharp = isSharp;\n this.isKeySharp = false;\n this.isDouble = isDouble;\n this.isAltered = isAltered;\n this.isFlat = isFlat;\n this.isKeyFlat = false;\n this.natural = natural;\n this.quarter = quarter;\n this.isLower = (this.name == this.name.toLowerCase());\n this.name = this.name[0].toUpperCase();\n this.hasComma = hasComma;\n this.isQuoted = hasQuote;\n}\n\nfunction cloneNote(self) {\n var newNote = self.name;\n var newTabNote = new TabNote(newNote);\n newTabNote.pitch = self.pitch;\n newTabNote.hasComma = self.hasComma;\n newTabNote.isLower = self.isLower;\n newTabNote.isQuoted = self.isQuoted;\n newTabNote.isSharp = self.isSharp;\n newTabNote.isKeySharp = self.isKeySharp;\n newTabNote.isFlat = self.isFlat;\n newTabNote.isKeyFlat = self.isKeyFlat;\n return newTabNote;\n} \nTabNote.prototype.sameNoteAs = function (note) {\n return note.pitch === this.pitch\n};\n\nTabNote.prototype.isLowerThan = function (note) {\n return note.pitch > this.pitch\n};\n\nTabNote.prototype.checkKeyAccidentals = function(accidentals, measureAccidentals) {\n if (this.isAltered || this.natural)\n return\n if (measureAccidentals[this.name.toUpperCase()]) {\n switch (measureAccidentals[this.name.toUpperCase()]) {\n case \"__\": this.acc = -2; this.pitchAltered = -2; return;\n case \"_\": this.acc = -1; this.pitchAltered = -1; return;\n case \"=\": this.acc = 0; this.pitchAltered = 0; return;\n case \"^\": this.acc = 1; this.pitchAltered = 1; return;\n case \"^^\": this.acc = 2; this.pitchAltered = 2; return;\n }\n } else if (accidentals) {\n var curNote = this.name;\n for (var iii = 0; iii < accidentals.length; iii++) {\n var curAccidentals = accidentals[iii];\n if (curNote == curAccidentals.note.toUpperCase()) {\n if (curAccidentals.acc == 'flat') {\n this.acc = -1;\n this.isKeyFlat = true;\n this.pitchAltered = -1\n }\n if (curAccidentals.acc == 'sharp') {\n this.acc = +1;\n this.isKeySharp = true;\n this.pitchAltered = 1\n }\n }\n }\n }\n};\n\nTabNote.prototype.getAccidentalEquiv = function () {\n var cloned = cloneNote(this);\n if (cloned.isSharp || cloned.isKeySharp ) {\n cloned = cloned.nextNote();\n cloned.isFlat = true;\n cloned.isSharp = false;\n cloned.isKeySharp = false;\n } else if (cloned.isFlat || cloned.isKeyFlat ) {\n cloned = cloned.prevNote();\n cloned.isSharp = true;\n cloned.isFlat = false;\n cloned.isKeyFlat = false;\n }\n return cloned;\n};\n\n\nTabNote.prototype.nextNote = function () {\n var note = midiToNote(this.pitch+1+this.pitchAltered)\n return new TabNote(note)\n};\n\nTabNote.prototype.prevNote = function () {\n var note = midiToNote(this.pitch-1+this.pitchAltered)\n return new TabNote(note)\n};\n\nTabNote.prototype.emitNoAccidentals = function ( ) {\n var returned = this.name;\n if (this.isLower) {\n returned = returned.toLowerCase();\n }\n for (var ii = 0; ii < this.isQuoted; ii++) {\n returned += \"'\";\n }\n for (var jj = 0; jj < this.hasComma; jj++) {\n returned += \",\";\n }\n return returned;\n};\n\nTabNote.prototype.emit = function () {\n var returned = this.name;\n if (this.isSharp || this.isKeySharp ) {\n returned = '^' + returned;\n if (this.isDouble) {\n returned = '^' + returned;\n }\n }\n if (this.isFlat || this.isKeyFlat) {\n returned = '_' + returned;\n if (this.isDouble) {\n returned = '_' + returned;\n }\n }\n if (this.quarter) {\n if (this.quarter == \"^\") {\n returned = \"^/\" + returned;\n } else {\n returned = \"_/\" + returned;\n }\n }\n if (this.natural) {\n returned = '=' + returned;\n }\n for (var ii = 1; ii <= this.hasComma; ii++) {\n returned += ',';\n }\n \n if (this.isLower) {\n returned = returned.toLowerCase();\n for (var jj = 1; jj <= this.isQuoted; jj++) {\n returned += \"'\";\n }\n }\n return returned;\n};\n\nmodule.exports = {\n 'TabNote': TabNote,\n 'notes': notes\n};","\nvar TabNote = require('./tab-note');\n\nvar notes = TabNote.notes;\n\nfunction TabNotes(fromNote, toNote) {\n this.fromN = new TabNote.TabNote(fromNote);\n this.toN = new TabNote.TabNote(toNote);\n}\n\n\nTabNotes.prototype.build = function () {\n var fromN = this.fromN;\n var toN = this.toN;\n // check that toN is not lower than fromN\n if (toN.isLowerThan(fromN)) {\n var from = fromN.emit();\n var tn = toN.emit();\n return {\n error: 'Invalid string Instrument tuning : ' +\n tn + ' string lower than ' + from + ' string'\n };\n }\n var buildReturned = [];\n var startIndex = notes.indexOf(fromN.name);\n var toIndex = notes.indexOf(toN.name);\n if ((startIndex == -1) || (toIndex == -1)) {\n return buildReturned;\n }\n var finished = false;\n while (!finished) {\n buildReturned.push(fromN.emit());\n fromN = fromN.nextNote();\n if (fromN.sameNoteAs(toN)) {\n finished = true;\n }\n }\n return buildReturned;\n};\n\nmodule.exports = TabNotes;\n","var StringPatterns = require('./string-patterns');\n\nfunction TabStringPatterns(plugin, defaultTuning) {\n this.tuning = plugin._super.params.tuning;\n if (!this.tuning) {\n this.tuning = defaultTuning;\n }\n plugin.tuning = this.tuning;\n this.strings = new StringPatterns(plugin);\n}\n\nTabStringPatterns.prototype.notesToNumber = function (notes, graces) {\n var converter = this.strings;\n return converter.notesToNumber(notes, graces);\n};\n\nTabStringPatterns.prototype.stringToPitch = function (stringNumber) {\n var converter = this.strings;\n return converter.stringToPitch(stringNumber);\n};\n\n\nmodule.exports = TabStringPatterns;\n","\nvar StringTablature = require('./string-tablature');\nvar TabCommon = require('../tab-common');\nvar TabRenderer = require('../tab-renderer');\nvar TabStringPatterns = require('./tab-string-patterns');\n\n\n/**\n * upon init mainly store provided instances for later usage\n * @param {*} abcTune the parsed tune AST tree\n* @param {*} tuneNumber the parsed tune AST tree\n * @param {*} params complementary args provided to Tablature Plugin\n */\nPlugin.prototype.init = function (abcTune, tuneNumber, params, staffNumber, tabSettings) {\n var _super = new TabCommon(abcTune, tuneNumber, params);\n this.abcTune = abcTune;\n this._super = _super;\n this.linePitch = 3;\n this.nbLines = tabSettings.defaultTuning.length;\n this.isTabBig = tabSettings.isTabBig;\n this.tabSymbolOffset = tabSettings.tabSymbolOffset;\n this.capo = params.capo;\n this.transpose = params.visualTranspose;\n this.hideTabSymbol = params.hideTabSymbol;\n this.tablature = new StringTablature(this.nbLines,\n this.linePitch);\n var semantics = new TabStringPatterns(this, tabSettings.defaultTuning);\n this.semantics = semantics;\n};\n\nPlugin.prototype.render = function (renderer, line, staffIndex) {\n if (this._super.inError) return;\n if (this.tablature.bypass(line)) return;\n var rndrer = new TabRenderer(this, renderer, line, staffIndex);\n rndrer.doLayout();\n};\n\nfunction Plugin() {}\n\n//\n// Tablature plugin definition\n//\nvar AbcStringTab = function () {\n return { name: 'StringTab', tablature: Plugin };\n};\n\nmodule.exports = AbcStringTab;\n","/**\n * Tablature Absolute elements factory\n */\nvar AbsoluteElement = require('../write/creation/elements/absolute-element');\nvar RelativeElement = require('../write/creation/elements/relative-element');\n\nfunction isObject(a) { return a != null && a.constructor === Object; }\nfunction cloneObject(dest, src) {\n for (var prop in src) {\n if (src.hasOwnProperty(prop)) {\n if (!(Array.isArray(src[prop]) || isObject(src[prop]))) {\n dest[prop] = src[prop];\n }\n }\n }\n}\n\nfunction cloneAbsolute(absSrc) {\n var returned = new AbsoluteElement('', 0, 0, '', 0);\n cloneObject(returned, absSrc);\n returned.top = 0;\n returned.bottom = -1;\n if (absSrc.abcelem) {\n returned.abcelem = {};\n cloneObject(returned.abcelem, absSrc.abcelem);\n if (returned.abcelem.el_type === \"note\")\n returned.abcelem.el_type = 'tabNumber';\n }\n // TODO-PER: This fixes the classes because the element isn't created at the right time.\n absSrc.cloned = returned\n return returned;\n}\n\nfunction cloneAbsoluteAndRelatives(absSrc, plugin) {\n var returned = cloneAbsolute(absSrc);\n if (plugin) {\n var children = absSrc.children;\n // proceed with relative as well\n var first = true;\n for (var ii = 0; ii < children.length; ii++) {\n var child = children[ii];\n var relative = new RelativeElement('', 0, 0, 0, '');\n cloneObject(relative, child);\n first = plugin.tablature.setRelative(child, relative, first);\n returned.children.push(relative);\n }\n }\n return returned;\n}\n\nfunction buildTabAbsolute(plugin, absX, relX) {\n var tabIcon = 'tab.tiny';\n var tabYPos = 7.5;\n if (plugin.isTabBig) {\n tabIcon = 'tab.big';\n tabYPos = 10;\n }\n var element = {\n el_type: \"tab\",\n icon: tabIcon,\n Ypos: tabYPos\n };\n\n // Offset the TAB symbol position if specified in the tab description\n tabYPos += plugin.tabSymbolOffset;\n\n // For tablature like whistle tab where you want the TAB symbol hidden\n if (!plugin.hideTabSymbol){\n\n var tabAbsolute = new AbsoluteElement(element, 0, 0, \"symbol\", 0);\n tabAbsolute.x = absX;\n var tabRelative = new RelativeElement(tabIcon, 0, 0, 7.5, \"tab\");\n tabRelative.x = relX;\n tabAbsolute.children.push(tabRelative);\n if (tabAbsolute.abcelem.el_type == 'tab') {\n tabRelative.pitch = tabYPos;\n }\n \n }\n return tabAbsolute;\n}\n\nfunction lyricsDim(abs) {\n if (abs.extra) {\n for (var ii = 0; ii < abs.extra.length; ii++) {\n var extra = abs.extra[ii];\n if (extra.type == 'lyric') {\n return {\n bottom: extra.bottom,\n height: extra.height\n };\n }\n }\n }\n return null;\n}\nfunction TabAbsoluteElements() {\n this.accidentals = null;\n}\n\nfunction getInitialStaffSize(staffGroup) {\n var returned = 0;\n for (var ii = 0; ii < staffGroup.length; ii++) {\n if (!staffGroup[ii].tabNameInfos) returned++;\n }\n return returned;\n}\n\nfunction buildRelativeTabNote(plugin, relX, def, curNote, isGrace) {\n var strNote = curNote.num;\n if (curNote.note.quarter != null) {\n // add tab quarter => needs to string conversion then \n strNote = strNote.toString();\n strNote += curNote.note.quarter;\n }\n var pitch = plugin.semantics.stringToPitch(curNote.str);\n def.notes.push({ num: strNote, str: curNote.str, pitch: curNote.note.emit() });\n var opt = {\n type: 'tabNumber'\n };\n var tabNoteRelative = new RelativeElement(\n strNote, 0, 0, pitch+0.3, opt);\n tabNoteRelative.x = relX;\n tabNoteRelative.isGrace = isGrace;\n tabNoteRelative.isAltered = curNote.note.isAltered;\n return tabNoteRelative;\n}\n\nfunction getXGrace(abs, index) {\n var found = 0;\n if (abs.extra) {\n for (var ii = 0; ii < abs.extra.length; ii++) {\n if (abs.extra[ii].c.indexOf('noteheads') >= 0) {\n if (found === index) {\n return abs.extra[ii].x + abs.extra[ii].w/2;\n } else {\n found++;\n }\n }\n }\n }\n return -1;\n}\n\nfunction graceInRest( absElem ) {\n if (absElem.abcelem) {\n var elem = absElem.abcelem; \n if (elem.rest) {\n return elem.gracenotes;\n }\n }\n return null;\n}\n\nfunction convertToNumber(plugin, pitches, graceNotes) {\n var tabPos = plugin.semantics.notesToNumber(pitches, graceNotes);\n if (tabPos.error) {\n plugin._super.setError(tabPos.error);\n return tabPos; // give up on error here\n }\n if (tabPos.graces && tabPos.notes) {\n // add graces to last note in notes\n var posNote = tabPos.notes.length - 1;\n tabPos.notes[posNote].graces = tabPos.graces;\n }\n return tabPos;\n}\n\nfunction buildGraceRelativesForRest(plugin,abs,absChild,graceNotes,tabVoice) {\n for (var mm = 0; mm < graceNotes.length; mm++) {\n var defGrace = { el_type: \"note\", startChar: absChild.abcelem.startChar, endChar: absChild.abcelem.endChar, notes: [], grace: true };\n var graceX = getXGrace(absChild, mm);\n var curGrace = graceNotes[mm];\n var tabGraceRelative = buildRelativeTabNote(plugin, graceX, defGrace, curGrace, true);\n abs.children.push(tabGraceRelative);\n tabVoice.push(defGrace);\n }\n}\n\n/**\n * Build tab absolutes by scanning current staff line absolute array\n * @param {*} staffAbsolute\n */\nTabAbsoluteElements.prototype.build = function (plugin,\n staffAbsolute,\n tabVoice,\n voiceIndex,\n staffIndex,\n keySig,\n tabVoiceIndex ) {\n var staffSize = getInitialStaffSize(staffAbsolute);\n var source = staffAbsolute[staffIndex+voiceIndex];\n var dest = staffAbsolute[tabVoiceIndex];\n var tabPos = null;\n var defNote = null;\n if (source.children[0].abcelem.el_type != 'clef') {\n // keysig missing => provide one for tabs\n if (keySig != 'none') {\n source.children.splice(0, 0, keySig);\n } \n }\n for (var ii = 0; ii < source.children.length; ii++) {\n var absChild = source.children[ii];\n var absX = absChild.x;\n var relX = absX;\n // if (absChild.children.length > 0) {\n // relX = absChild.children[0].x;\n // }\n if ( (absChild.isClef) ) {\n dest.children.push(buildTabAbsolute(plugin, absX, relX));\n if (absChild.abcelem.type.indexOf('-8') >= 0) plugin.semantics.strings.clefTranspose = -12\n if (absChild.abcelem.type.indexOf('+8') >= 0) plugin.semantics.strings.clefTranspose = 12\n }\n switch (absChild.type) {\n case 'staff-extra key-signature':\n // refresh key accidentals\n this.accidentals = absChild.abcelem.accidentals;\n plugin.semantics.strings.accidentals = this.accidentals;\n break;\n case 'bar':\n plugin.semantics.strings.measureAccidentals = {}\n var lastBar = false;\n if (ii === source.children.length-1) {\n // used for final line bar drawing\n // for multi tabs / multi staves\n lastBar = true;\n }\n var cloned = cloneAbsoluteAndRelatives(absChild, plugin);\n if (cloned.abcelem.barNumber) {\n delete cloned.abcelem.barNumber;\n for (var bn = 0; bn < cloned.children.length; bn++) {\n if (cloned.children[bn].type === \"barNumber\" ) {\n cloned.children.splice(bn, 1);\n break;\n }\n }\n }\n cloned.abcelem.lastBar = lastBar;\n dest.children.push(cloned);\n tabVoice.push({\n el_type: absChild.abcelem.el_type,\n type: absChild.abcelem.type,\n endChar: absChild.abcelem.endChar,\n startChar: absChild.abcelem.startChar,\n abselem: cloned\n });\n break;\n case 'rest':\n var restGraces = graceInRest(absChild);\n if (restGraces) {\n // to number conversion \n tabPos = convertToNumber(plugin, null, restGraces);\n if (tabPos.error) return;\n // build relative for grace\n defGrace = { el_type: \"note\", startChar: absChild.abcelem.startChar, endChar: absChild.abcelem.endChar, notes: [], grace: true };\n buildGraceRelativesForRest(plugin, abs, absChild, tabPos.graces, tabVoice);\n }\n break;\n case 'note':\n var abs = cloneAbsolute(absChild);\n abs.x = absChild.heads[0].x + absChild.heads[0].w / 2; // center the number\n abs.lyricDim = lyricsDim(absChild);\n var pitches = absChild.abcelem.pitches;\n var graceNotes = absChild.abcelem.gracenotes;\n abs.type = 'tabNumber';\n // to number conversion \n tabPos = convertToNumber(plugin, pitches, graceNotes); \n if (tabPos.error) return;\n if (tabPos.graces) {\n // add graces to last note in notes\n var posNote = tabPos.notes.length - 1;\n tabPos.notes[posNote].graces = tabPos.graces;\n }\n // build relative\n defNote = { el_type: \"note\", startChar: absChild.abcelem.startChar, endChar: absChild.abcelem.endChar, notes: [] };\n for (var ll = 0; ll < tabPos.notes.length; ll++) {\n var curNote = tabPos.notes[ll];\n if (curNote.graces) {\n for (var mm = 0; mm < curNote.graces.length; mm++) {\n var defGrace = { el_type: \"note\", startChar: absChild.abcelem.startChar, endChar: absChild.abcelem.endChar, notes: [], grace: true };\n var graceX = getXGrace(absChild , mm);\n var curGrace = curNote.graces[mm];\n var tabGraceRelative = buildRelativeTabNote(plugin, graceX, defGrace, curGrace, true);\n abs.children.push(tabGraceRelative);\n tabVoice.push(defGrace);\n }\n }\n var tabNoteRelative = buildRelativeTabNote(plugin, abs.x+absChild.heads[ll].dx, defNote, curNote, false);\n abs.children.push(tabNoteRelative);\n }\n if (defNote.notes.length > 0) {\n defNote.abselem = abs;\n tabVoice.push(defNote);\n dest.children.push(abs);\n }\n break;\n }\n }\n};\n\nmodule.exports = TabAbsoluteElements;\n","/**\n *\n * Common Class/Method available for all instruments\n *\n */\n\nfunction TabCommon(abcTune, tuneNumber, params) {\n this.tune = abcTune;\n this.params = params;\n this.tuneNumber = tuneNumber;\n this.inError = false;\n}\n\n\nTabCommon.prototype.setError = function (error) {\n var tune = this.tune;\n if (error) {\n this.error = error;\n this.inError = true;\n if (tune.warnings) {\n tune.warnings.push(error);\n } else {\n tune.warnings = [error];\n }\n }\n};\n\n\nmodule.exports = TabCommon;\n","/* eslint-disable no-debugger */\nvar VoiceElement = require('../write/creation/elements/voice-element');\nvar TabAbsoluteElements = require('./tab-absolute-elements');\nvar spacing = require('../write/helpers/spacing');\n\nfunction initSpecialY() {\n return {\n tempoHeightAbove: 0,\n partHeightAbove: 0,\n volumeHeightAbove: 0,\n dynamicHeightAbove: 0,\n endingHeightAbove: 0,\n chordHeightAbove: 0,\n lyricHeightAbove: 0,\n lyricHeightBelow: 0,\n chordHeightBelow: 0,\n volumeHeightBelow: 0,\n dynamicHeightBelow: 0\n };\n}\n\nfunction getLyricHeight(voice) {\n var maxLyricHeight = 0;\n for (var ii = 0; ii < voice.children.length; ii++) {\n var curAbs = voice.children[ii];\n if (curAbs.specialY) {\n if (curAbs.specialY.lyricHeightBelow > maxLyricHeight) {\n maxLyricHeight = curAbs.specialY.lyricHeightBelow;\n }\n }\n }\n return maxLyricHeight; // add spacing\n}\n\nfunction buildTabName(self, dest) {\n var stringSemantics = self.plugin.semantics.strings;\n var controller = self.renderer.controller;\n var textSize = controller.getTextSize;\n var tabName = stringSemantics.tabInfos(self.plugin);\n var suppress = stringSemantics.suppress(self.plugin);\n var doDraw = true;\n\n if (suppress){\n doDraw = false\n }\n\n \n if (doDraw){\n var size = textSize.calc(tabName, 'tablabelfont', 'text instrumentname'); \n dest.tabNameInfos = {\n textSize: {height:size.height,width:size.width},\n name: tabName\n };\n return size.height;\n }\n return 0\n\n}\n\n/**\n * Laying out tabs\n * @param {*} renderer\n * @param {*} line\n * @param {*} staffIndex\n * @param {*} tablatureLayout\n */\nfunction TabRenderer(plugin, renderer, line, staffIndex) {\n this.renderer = renderer;\n this.plugin = plugin;\n this.line = line;\n this.absolutes = new TabAbsoluteElements();\n this.staffIndex = staffIndex ;\n this.tabStaff = {\n clef: {\n type: 'TAB'\n }\n };\n this.tabSize = (plugin.linePitch * plugin.nbLines);\n}\n\nfunction islastTabInStaff(index, staffGroup) {\n if (staffGroup[index].isTabStaff) {\n if (index === staffGroup.length - 1) return true;\n if (staffGroup[index + 1].isTabStaff) {\n return false; \n } else {\n return true;\n }\n }\n return false;\n}\n\nfunction getStaffNumbers(staffs) {\n var nbStaffs = 0; \n for (var ii = 0; ii < staffs.length; ii++) {\n if (!staffs[ii].isTabStaff) {\n nbStaffs++;\n }\n }\n return nbStaffs;\n}\n\nfunction getParentStaffIndex(staffs, index) {\n for (var ii = index; ii >= 0; ii--) {\n if (!staffs[ii].isTabStaff) {\n return ii;\n }\n }\n return -1;\n}\n\n\nfunction linkStaffAndTabs(staffs) {\n for (var ii = 0; ii < staffs.length; ii++) {\n if (staffs[ii].isTabStaff) {\n // link to parent staff\n var parentIndex = getParentStaffIndex(staffs, ii);\n staffs[ii].hasStaff = staffs[parentIndex];\n if (!staffs[parentIndex].hasTab) staffs[parentIndex].hasTab = [];\n staffs[parentIndex].hasTab.push(staffs[ii]);\n }\n }\n}\n\nfunction isMultiVoiceSingleStaff(staffs , parent) {\n if ( getStaffNumbers(staffs) === 1) {\n if (parent.voices.length > 1) return true;\n }\n return false;\n}\n\n\nfunction getNextTabPos(self,staffGroup) {\n var tabIndex = self.staffIndex;\n var startIndex = 0;\n var handledVoices = 0;\n var inProgress = true;\n var nbVoices = 0;\n while (inProgress) {\n //for (var ii = 0; ii < staffGroup.length; ii++) {\n if (!staffGroup[startIndex])\n return -1;\n if (!staffGroup[startIndex].isTabStaff) {\n nbVoices = staffGroup[startIndex].voices.length; // get number of staff voices\n }\n if (staffGroup[startIndex].isTabStaff) {\n handledVoices++;\n if (islastTabInStaff(startIndex, staffGroup)) {\n if (handledVoices < nbVoices) return startIndex + 1;\n }\n } else {\n handledVoices = 0;\n if (startIndex >= tabIndex) {\n if (startIndex+1 == staffGroup.length) return startIndex +1;\n if (!staffGroup[startIndex + 1].isTabStaff) return startIndex + 1;\n }\n }\n startIndex++;\n // out of space case\n if (startIndex > staffGroup.length) return -1;\n }\n}\n\nfunction getLastStaff(staffs, lastTab) {\n for (var ii = lastTab; ii >= 0 ; ii-- ) {\n if (!staffs[ii].isTabStaff) {\n return staffs[ii];\n }\n }\n return null; \n}\n\nfunction checkVoiceKeySig(voices, ii) {\n var curVoice = voices[ii];\n // on multivoice multistaff only the first voice has key signature\n // folling consecutive do not have one => we should provide the first voice key sig back then\n var elem0 = curVoice.children[0].abcelem;\n if (elem0.el_type === 'clef') return null;\n if (ii == 0) {\n // not found => clef=none case\n return 'none';\n }\n return voices[ii-1].children[0];\n}\n\nTabRenderer.prototype.doLayout = function () {\n var staffs = this.line.staff;\n if (staffs) {\n // give up on staffline=0 in key \n var firstStaff = staffs[0];\n if (firstStaff) {\n if (firstStaff.clef) {\n if (firstStaff.clef.stafflines == 0) {\n this.plugin._super.setError(\"No tablatures when stafflines=0\");\n return; \n }\n }\n }\n staffs.splice(\n staffs.length, 0,\n this.tabStaff\n );\n }\n var staffGroup = this.line.staffGroup;\n\n var voices = staffGroup.voices;\n var firstVoice = voices[0];\n // take lyrics into account if any\n var lyricsHeight = getLyricHeight(firstVoice);\n var padd = 3;\n var prevIndex = this.staffIndex;\n var previousStaff = staffGroup.staffs[prevIndex];\n var tabTop = this.tabSize + padd - previousStaff.bottom - lyricsHeight;\n if (previousStaff.isTabStaff) {\n tabTop = previousStaff.top;\n }\n var staffGroupInfos = {\n bottom: -1,\n isTabStaff: true,\n specialY: initSpecialY(),\n lines: this.plugin.nbLines,\n linePitch: this.plugin.linePitch,\n dy: 0.15,\n top: tabTop,\n };\n var nextTabPos = getNextTabPos(this,staffGroup.staffs);\n if (nextTabPos === -1)\n return;\n staffGroupInfos.parentIndex = nextTabPos - 1;\n staffGroup.staffs.splice(nextTabPos, 0, staffGroupInfos);\n // staffGroup.staffs.push(staffGroupInfos);\n staffGroup.height += this.tabSize + padd;\n var parentStaff = getLastStaff(staffGroup.staffs, nextTabPos); \n var nbVoices = 1;\n if (isMultiVoiceSingleStaff(staffGroup.staffs,parentStaff)) {\n nbVoices = parentStaff.voices.length;\n } \n // build from staff\n this.tabStaff.voices = [];\n for (var ii = 0; ii < nbVoices; ii++) {\n var tabVoice = new VoiceElement(0, 0);\n if (ii > 0) tabVoice.duplicate = true;\n var nameHeight = buildTabName(this, tabVoice) / spacing.STEP;\n nameHeight = Math.max(nameHeight, 1) // If there is no label for the tab line, then there needs to be a little padding\n // This was pushing down the top staff by the tab label height\n //staffGroup.staffs[this.staffIndex].top += nameHeight;\n staffGroup.staffs[this.staffIndex].top += 1;\n staffGroup.height += nameHeight;\n tabVoice.staff = staffGroupInfos;\n var tabVoiceIndex = voices.length\n voices.splice(voices.length, 0, tabVoice);\n var keySig = checkVoiceKeySig(voices, ii + this.staffIndex);\n this.tabStaff.voices[ii] = [];\n this.absolutes.build(this.plugin, voices, this.tabStaff.voices[ii], ii , this.staffIndex ,keySig, tabVoiceIndex);\n }\n linkStaffAndTabs(staffGroup.staffs); // crossreference tabs and staff\n};\n\nmodule.exports = TabRenderer;\n","// abc_abstract_engraver.js: Creates a data structure suitable for printing a line of abc\n\nvar AbsoluteElement = require('./elements/absolute-element');\nvar BeamElem = require('./elements/beam-element');\nvar BraceElem = require('./elements/brace-element');\nvar createClef = require('./create-clef');\nvar createKeySignature = require('./create-key-signature');\nvar createNoteHead = require('./create-note-head');\nvar createTimeSignature = require('./create-time-signature');\nvar Decoration = require('./decoration');\nvar EndingElem = require('./elements/ending-element');\nvar glyphs = require('./glyphs');\nvar RelativeElement = require('./elements/relative-element');\nvar spacing = require('../helpers/spacing');\nvar StaffGroupElement = require('./elements/staff-group-element');\nvar TempoElement = require('./elements/tempo-element');\nvar TieElem = require('./elements/tie-element');\nvar TripletElem = require('./elements/triplet-element');\nvar VoiceElement = require('./elements/voice-element');\nvar addChord = require('./add-chord');\nvar pitchesToPerc = require('../../synth/pitches-to-perc')\n\nvar parseCommon = require('../../parse/abc_common');\n\nvar getDuration = function (elem) {\n\tvar d = 0;\n\tif (elem.duration) {\n\t\td = elem.duration;\n\t}\n\treturn d;\n};\n\nvar hint = false;\n\nvar chartable = {\n\trest: { 0: \"rests.whole\", 1: \"rests.half\", 2: \"rests.quarter\", 3: \"rests.8th\", 4: \"rests.16th\", 5: \"rests.32nd\", 6: \"rests.64th\", 7: \"rests.128th\", \"multi\": \"rests.multimeasure\" },\n\tnote: { \"-1\": \"noteheads.dbl\", 0: \"noteheads.whole\", 1: \"noteheads.half\", 2: \"noteheads.quarter\", 3: \"noteheads.quarter\", 4: \"noteheads.quarter\", 5: \"noteheads.quarter\", 6: \"noteheads.quarter\", 7: \"noteheads.quarter\", 'nostem': \"noteheads.quarter\" },\n\trhythm: { \"-1\": \"noteheads.slash.whole\", 0: \"noteheads.slash.whole\", 1: \"noteheads.slash.whole\", 2: \"noteheads.slash.quarter\", 3: \"noteheads.slash.quarter\", 4: \"noteheads.slash.quarter\", 5: \"noteheads.slash.quarter\", 6: \"noteheads.slash.quarter\", 7: \"noteheads.slash.quarter\", nostem: \"noteheads.slash.nostem\" },\n\tx: { \"-1\": \"noteheads.indeterminate\", 0: \"noteheads.indeterminate\", 1: \"noteheads.indeterminate\", 2: \"noteheads.indeterminate\", 3: \"noteheads.indeterminate\", 4: \"noteheads.indeterminate\", 5: \"noteheads.indeterminate\", 6: \"noteheads.indeterminate\", 7: \"noteheads.indeterminate\", nostem: \"noteheads.indeterminate\" },\n\tharmonic: { \"-1\": \"noteheads.harmonic.quarter\", 0: \"noteheads.harmonic.quarter\", 1: \"noteheads.harmonic.quarter\", 2: \"noteheads.harmonic.quarter\", 3: \"noteheads.harmonic.quarter\", 4: \"noteheads.harmonic.quarter\", 5: \"noteheads.harmonic.quarter\", 6: \"noteheads.harmonic.quarter\", 7: \"noteheads.harmonic.quarter\", nostem: \"noteheads.harmonic.quarter\" },\n\ttriangle: { \"-1\": \"noteheads.triangle.quarter\", 0: \"noteheads.triangle.quarter\", 1: \"noteheads.triangle.quarter\", 2: \"noteheads.triangle.quarter\", 3: \"noteheads.triangle.quarter\", 4: \"noteheads.triangle.quarter\", 5: \"noteheads.triangle.quarter\", 6: \"noteheads.triangle.quarter\", 7: \"noteheads.triangle.quarter\", nostem: \"noteheads.triangle.quarter\" },\n\tuflags: { 3: \"flags.u8th\", 4: \"flags.u16th\", 5: \"flags.u32nd\", 6: \"flags.u64th\" },\n\tdflags: { 3: \"flags.d8th\", 4: \"flags.d16th\", 5: \"flags.d32nd\", 6: \"flags.d64th\" }\n};\n\nvar AbstractEngraver = function (getTextSize, tuneNumber, options) {\n\tthis.decoration = new Decoration();\n\tthis.getTextSize = getTextSize;\n\tthis.tuneNumber = tuneNumber;\n\tthis.isBagpipes = options.bagpipes;\n\tthis.flatBeams = options.flatbeams;\n\tthis.graceSlurs = options.graceSlurs;\n\tthis.percmap = options.percmap;\n\tthis.initialClef = options.initialClef\n\tthis.jazzchords = !!options.jazzchords\n\tthis.accentAbove = !!options.accentAbove\n\tthis.germanAlphabet = !!options.germanAlphabet\n\tthis.reset();\n};\n\nAbstractEngraver.prototype.reset = function () {\n\tthis.slurs = {};\n\tthis.ties = [];\n\tthis.voiceScale = 1;\n\tthis.voiceColor = undefined;\n\tthis.slursbyvoice = {};\n\tthis.tiesbyvoice = {};\n\tthis.endingsbyvoice = {};\n\tthis.scaleByVoice = {};\n\tthis.colorByVoice = {};\n\tthis.tripletmultiplier = 1;\n\n\tthis.abcline = undefined;\n\tthis.accidentalSlot = undefined;\n\tthis.accidentalshiftx = undefined;\n\tthis.dotshiftx = undefined;\n\tthis.hasVocals = false;\n\tthis.minY = undefined;\n\tthis.partstartelem = undefined;\n\tthis.startlimitelem = undefined;\n\tthis.stemdir = undefined;\n};\n\nAbstractEngraver.prototype.setStemHeight = function (heightInPixels) {\n\tthis.stemHeight = Math.round(heightInPixels * 10 / spacing.STEP) / 10;\n};\n\nAbstractEngraver.prototype.getCurrentVoiceId = function (s, v) {\n\treturn \"s\" + s + \"v\" + v;\n};\n\nAbstractEngraver.prototype.pushCrossLineElems = function (s, v) {\n\tthis.slursbyvoice[this.getCurrentVoiceId(s, v)] = this.slurs;\n\tthis.tiesbyvoice[this.getCurrentVoiceId(s, v)] = this.ties;\n\tthis.endingsbyvoice[this.getCurrentVoiceId(s, v)] = this.partstartelem;\n\tthis.scaleByVoice[this.getCurrentVoiceId(s, v)] = this.voiceScale;\n\tif (this.voiceColor)\n\t\tthis.colorByVoice[this.getCurrentVoiceId(s, v)] = this.voiceColor;\n};\n\nAbstractEngraver.prototype.popCrossLineElems = function (s, v) {\n\tthis.slurs = this.slursbyvoice[this.getCurrentVoiceId(s, v)] || {};\n\tthis.ties = this.tiesbyvoice[this.getCurrentVoiceId(s, v)] || [];\n\tthis.partstartelem = this.endingsbyvoice[this.getCurrentVoiceId(s, v)];\n\tthis.voiceScale = this.scaleByVoice[this.getCurrentVoiceId(s, v)];\n\tif (this.voiceScale === undefined) this.voiceScale = 1;\n\tthis.voiceColor = this.colorByVoice[this.getCurrentVoiceId(s, v)];\n};\n\nAbstractEngraver.prototype.containsLyrics = function (staves) {\n\tfor (var i = 0; i < staves.length; i++) {\n\t\tfor (var j = 0; j < staves[i].voices.length; j++) {\n\t\t\tfor (var k = 0; k < staves[i].voices[j].length; k++) {\n\t\t\t\tvar el = staves[i].voices[j][k];\n\t\t\t\tif (el.lyric) {\n\t\t\t\t\t// We just want to see if there are vocals below the music to know where to put the dynamics.\n\t\t\t\t\tif (!el.positioning || el.positioning.vocalPosition === 'below')\n\t\t\t\t\t\tthis.hasVocals = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nAbstractEngraver.prototype.createABCLine = function (staffs, tempo, l) {\n\tthis.minY = 2; // PER: This will be the lowest that any note reaches. It will be used to set the dynamics row.\n\t// See if there are any lyrics on this line.\n\tthis.containsLyrics(staffs);\n\tvar staffgroup = new StaffGroupElement(this.getTextSize);\n\tthis.tempoSet = false;\n\tfor (var s = 0; s < staffs.length; s++) {\n\t\tif (hint)\n\t\t\tthis.restoreState();\n\t\thint = false;\n\t\tthis.createABCStaff(staffgroup, staffs[s], tempo, s, l);\n\t}\n\treturn staffgroup;\n};\n\nAbstractEngraver.prototype.createABCStaff = function (staffgroup, abcstaff, tempo, s, l) {\n\t// If the tempo is passed in, then the first element should get the tempo attached to it.\n\tstaffgroup.getTextSize.updateFonts(abcstaff);\n\tfor (var v = 0; v < abcstaff.voices.length; v++) {\n\t\tvar voice = new VoiceElement(v, abcstaff.voices.length);\n\t\tif (v === 0) {\n\t\t\tvoice.barfrom = (abcstaff.connectBarLines === \"start\" || abcstaff.connectBarLines === \"continue\");\n\t\t\tvoice.barto = (abcstaff.connectBarLines === \"continue\" || abcstaff.connectBarLines === \"end\");\n\t\t} else {\n\t\t\tvoice.duplicate = true; // bar lines and other duplicate info need not be created\n\t\t}\n\t\tif (abcstaff.title && abcstaff.title[v]) {\n\t\t\tvoice.header = abcstaff.title[v].replace(/\\\\n/g, \"\\n\");\n\t\t\tvoice.headerPosition = 6 + staffgroup.getTextSize.baselineToCenter(voice.header, \"voicefont\", 'staff-extra voice-name', v, abcstaff.voices.length) / spacing.STEP;\n\t\t}\n\t\tif (abcstaff.clef && abcstaff.clef.type === \"perc\")\n\t\t\tvoice.isPercussion = true;\n\t\tvar clef = (!this.initialClef || l === 0) && createClef(abcstaff.clef, this.tuneNumber);\n\t\tif (clef) {\n\t\t\tif (v === 0 && abcstaff.barNumber) {\n\t\t\t\tthis.addMeasureNumber(abcstaff.barNumber, clef);\n\t\t\t}\n\t\t\tvoice.addChild(clef);\n\t\t\tthis.startlimitelem = clef; // limit ties here\n\t\t}\n\t\tvar keySig = createKeySignature(abcstaff.key, this.tuneNumber);\n\t\tif (keySig) {\n\t\t\tvoice.addChild(keySig);\n\t\t\tthis.startlimitelem = keySig; // limit ties here\n\t\t}\n\t\tif (abcstaff.meter) {\n\t\t\tif (abcstaff.meter.type === 'specified') {\n\t\t\t\tthis.measureLength = abcstaff.meter.value[0].num / abcstaff.meter.value[0].den;\n\t\t\t} else\n\t\t\t\tthis.measureLength = 1;\n\t\t\tvar ts = createTimeSignature(abcstaff.meter, this.tuneNumber);\n\t\t\tvoice.addChild(ts);\n\t\t\tthis.startlimitelem = ts; // limit ties here\n\t\t}\n\t\tif (voice.duplicate)\n\t\t\tvoice.children = []; // we shouldn't reprint the above if we're reusing the same staff. We just created them to get the right spacing.\n\t\tvar staffLines = abcstaff.clef.stafflines || abcstaff.clef.stafflines === 0 ? abcstaff.clef.stafflines : 5;\n\t\tstaffgroup.addVoice(voice, s, staffLines);\n\t\tvar isSingleLineStaff = staffLines === 1;\n\t\tthis.createABCVoice(abcstaff.voices[v], tempo, s, v, isSingleLineStaff, voice);\n\t\tstaffgroup.setStaffLimits(voice);\n\t\tif (v === 0) {\n\t\t\t// only do brace and bracket processing on the first voice, otherwise it would be done twice.\n\t\t\tif (abcstaff.brace === \"start\" || (!staffgroup.brace && abcstaff.brace)) {\n\t\t\t\tif (!staffgroup.brace)\n\t\t\t\t\tstaffgroup.brace = [];\n\t\t\t\tstaffgroup.brace.push(new BraceElem(voice, \"brace\"));\n\t\t\t} else if (abcstaff.brace === \"end\" && staffgroup.brace) {\n\t\t\t\tstaffgroup.brace[staffgroup.brace.length - 1].setBottomStaff(voice);\n\t\t\t} else if (abcstaff.brace === \"continue\" && staffgroup.brace) {\n\t\t\t\tstaffgroup.brace[staffgroup.brace.length - 1].continuing(voice);\n\t\t\t}\n\t\t\tif (abcstaff.bracket === \"start\" || (!staffgroup.bracket && abcstaff.bracket)) {\n\t\t\t\tif (!staffgroup.bracket)\n\t\t\t\t\tstaffgroup.bracket = [];\n\t\t\t\tstaffgroup.bracket.push(new BraceElem(voice, \"bracket\"));\n\t\t\t} else if (abcstaff.bracket === \"end\" && staffgroup.bracket) {\n\t\t\t\tstaffgroup.bracket[staffgroup.bracket.length - 1].setBottomStaff(voice);\n\t\t\t} else if (abcstaff.bracket === \"continue\" && staffgroup.bracket) {\n\t\t\t\tstaffgroup.bracket[staffgroup.bracket.length - 1].continuing(voice);\n\t\t\t}\n\t\t}\n\t}\n};\n\nfunction getBeamGroup(abcline, pos) {\n\t// If there are notes beamed together, they are handled as a group, so find all of them here.\n\tvar elem = abcline[pos];\n\tif (elem.el_type !== 'note' || !elem.startBeam || elem.endBeam)\n\t\treturn { count: 1, elem: elem };\n\n\tvar group = [];\n\twhile (pos < abcline.length && abcline[pos].el_type === 'note') {\n\t\tgroup.push(abcline[pos]);\n\t\tif (abcline[pos].endBeam)\n\t\t\tbreak;\n\t\tpos++;\n\t}\n\treturn { count: group.length, elem: group };\n}\n\nAbstractEngraver.prototype.createABCVoice = function (abcline, tempo, s, v, isSingleLineStaff, voice) {\n\tthis.popCrossLineElems(s, v);\n\tthis.stemdir = (this.isBagpipes) ? \"down\" : null;\n\tthis.abcline = abcline;\n\tif (this.partstartelem) {\n\t\tthis.partstartelem = new EndingElem(\"\", null, null);\n\t\tvoice.addOther(this.partstartelem);\n\t}\n\tvar voiceNumber = voice.voicetotal < 2 ? -1 : voice.voicenumber;\n\tfor (var slur in this.slurs) {\n\t\tif (this.slurs.hasOwnProperty(slur)) {\n\t\t\t// this is already a slur element, but it was created for the last line, so recreate it.\n\t\t\tthis.slurs[slur] = new TieElem({ force: this.slurs[slur].force, voiceNumber: voiceNumber, stemDir: this.slurs[slur].stemDir, style: this.slurs[slur].dotted });\n\t\t\tif (hint) this.slurs[slur].setHint();\n\t\t\tvoice.addOther(this.slurs[slur]);\n\t\t}\n\t}\n\tfor (var i = 0; i < this.ties.length; i++) {\n\t\t// this is already a tie element, but it was created for the last line, so recreate it.\n\t\tthis.ties[i] = new TieElem({ force: this.ties[i].force, stemDir: this.ties[i].stemDir, voiceNumber: voiceNumber, style: this.ties[i].dotted });\n\t\tif (hint) this.ties[i].setHint();\n\t\tvoice.addOther(this.ties[i]);\n\t}\n\n\tfor (var j = 0; j < this.abcline.length; j++) {\n\t\tsetAveragePitch(this.abcline[j]);\n\t\tthis.minY = Math.min(this.abcline[j].minpitch, this.minY);\n\t}\n\n\tvar isFirstStaff = (s === 0);\n\tvar pos = 0;\n\twhile (pos < this.abcline.length) {\n\t\tvar ret = getBeamGroup(this.abcline, pos);\n\t\tvar abselems = this.createABCElement(isFirstStaff, isSingleLineStaff, voice, ret.elem);\n\t\tif (abselems) {\n\t\t\tfor (i = 0; i < abselems.length; i++) {\n\t\t\t\tif (!this.tempoSet && tempo && !tempo.suppress) {\n\t\t\t\t\tthis.tempoSet = true;\n\t\t\t\t\tvar tempoElement = new AbsoluteElement(tempo, 0, 0, \"tempo\", this.tuneNumber, {});\n\t\t\t\t\ttempoElement.addFixedX(new TempoElement(tempo, this.tuneNumber, createNoteHead));\n\t\t\t\t\tvoice.addChild(tempoElement);\n\t\t\t\t}\n\t\t\t\tvoice.addChild(abselems[i]);\n\t\t\t}\n\t\t}\n\t\tpos += ret.count;\n\t}\n\tthis.pushCrossLineElems(s, v);\n};\n\nAbstractEngraver.prototype.saveState = function () {\n\tthis.tiesSave = parseCommon.cloneArray(this.ties);\n\tthis.slursSave = parseCommon.cloneHashOfHash(this.slurs);\n\tthis.slursbyvoiceSave = parseCommon.cloneHashOfHash(this.slursbyvoice);\n\tthis.tiesbyvoiceSave = parseCommon.cloneHashOfArrayOfHash(this.tiesbyvoice);\n};\n\nAbstractEngraver.prototype.restoreState = function () {\n\tthis.ties = parseCommon.cloneArray(this.tiesSave);\n\tthis.slurs = parseCommon.cloneHashOfHash(this.slursSave);\n\tthis.slursbyvoice = parseCommon.cloneHashOfHash(this.slursbyvoiceSave);\n\tthis.tiesbyvoice = parseCommon.cloneHashOfArrayOfHash(this.tiesbyvoiceSave);\n};\n\n// function writeMeasureWidth(voice) {\n// \tvar width = 0;\n// \tfor (var i = voice.children.length-1; i >= 0; i--) {\n// \t\tvar elem = voice.children[i];\n// \t\tif (elem.abcelem.el_type === 'bar')\n// \t\t\tbreak;\n// \t\twidth += elem.w;\n// \t}\n// \treturn new RelativeElement(width.toFixed(2), -70, 0, undefined, {type:\"debug\"});\n// }\n\n// return an array of AbsoluteElement\nAbstractEngraver.prototype.createABCElement = function (isFirstStaff, isSingleLineStaff, voice, elem) {\n\tvar elemset = [];\n\tswitch (elem.el_type) {\n\t\tcase undefined:\n\t\t\t// it is undefined if we were passed an array in - an array means a set of notes that should be beamed together.\n\t\t\telemset = this.createBeam(isSingleLineStaff, voice, elem);\n\t\t\tbreak;\n\t\tcase \"note\":\n\t\t\telemset[0] = this.createNote(elem, false, isSingleLineStaff, voice);\n\t\t\tif (this.triplet && this.triplet.isClosed()) {\n\t\t\t\tvoice.addOther(this.triplet);\n\t\t\t\tthis.triplet = null;\n\t\t\t\tthis.tripletmultiplier = 1;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"bar\":\n\t\t\telemset[0] = this.createBarLine(voice, elem, isFirstStaff);\n\t\t\tif (voice.duplicate && elemset.length > 0) elemset[0].invisible = true;\n\t\t\t//\t elemset[0].addChild(writeMeasureWidth(voice));\n\t\t\tbreak;\n\t\tcase \"meter\":\n\t\t\telemset[0] = createTimeSignature(elem, this.tuneNumber);\n\t\t\tthis.startlimitelem = elemset[0]; // limit ties here\n\t\t\tif (voice.duplicate && elemset.length > 0) elemset[0].invisible = true;\n\t\t\tbreak;\n\t\tcase \"clef\":\n\t\t\telemset[0] = createClef(elem, this.tuneNumber);\n\t\t\tif (!elemset[0]) return null;\n\t\t\tif (voice.duplicate && elemset.length > 0) elemset[0].invisible = true;\n\t\t\tbreak;\n\t\tcase \"key\":\n\t\t\tvar absKey = createKeySignature(elem, this.tuneNumber);\n\t\t\tif (absKey) {\n\t\t\t\telemset[0] = absKey;\n\t\t\t\tthis.startlimitelem = elemset[0]; // limit ties here\n\t\t\t}\n\t\t\tif (voice.duplicate && elemset.length > 0) elemset[0].invisible = true;\n\t\t\tbreak;\n\t\tcase \"stem\":\n\t\t\tthis.stemdir = elem.direction === \"auto\" ? undefined : elem.direction;\n\t\t\tbreak;\n\t\tcase \"part\":\n\t\t\tvar abselem = new AbsoluteElement(elem, 0, 0, 'part', this.tuneNumber);\n\t\t\tvar dim = this.getTextSize.calc(elem.title, 'partsfont', \"part\");\n\t\t\tabselem.addFixedX(new RelativeElement(elem.title, 0, 0, undefined, { type: \"part\", height: dim.height / spacing.STEP }));\n\t\t\telemset[0] = abselem;\n\t\t\tbreak;\n\t\tcase \"tempo\":\n\t\t\tvar abselem3 = new AbsoluteElement(elem, 0, 0, 'tempo', this.tuneNumber);\n\t\t\tabselem3.addFixedX(new TempoElement(elem, this.tuneNumber, createNoteHead));\n\t\t\telemset[0] = abselem3;\n\t\t\tbreak;\n\t\tcase \"style\":\n\t\t\tif (elem.head === \"normal\")\n\t\t\t\tdelete this.style;\n\t\t\telse\n\t\t\t\tthis.style = elem.head;\n\t\t\tbreak;\n\t\tcase \"hint\":\n\t\t\thint = true;\n\t\t\tthis.saveState();\n\t\t\tbreak;\n\t\tcase \"midi\":\n\t\t\t// This has no effect on the visible music, so just skip it.\n\t\t\tbreak;\n\t\tcase \"scale\":\n\t\t\tthis.voiceScale = elem.size;\n\t\t\tbreak;\n\t\tcase \"color\":\n\t\t\tthis.voiceColor = elem.color;\n\t\t\tvoice.color = this.voiceColor;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tvar abselem2 = new AbsoluteElement(elem, 0, 0, 'unsupported', this.tuneNumber);\n\t\t\tabselem2.addFixed(new RelativeElement(\"element type \" + elem.el_type, 0, 0, undefined, { type: \"debug\" }));\n\t\t\telemset[0] = abselem2;\n\t}\n\n\treturn elemset;\n};\n\nfunction setAveragePitch(elem) {\n\tif (elem.pitches) {\n\t\tsortPitch(elem);\n\t\tvar sum = 0;\n\t\tfor (var p = 0; p < elem.pitches.length; p++) {\n\t\t\tsum += elem.pitches[p].verticalPos;\n\t\t}\n\t\telem.averagepitch = sum / elem.pitches.length;\n\t\telem.minpitch = elem.pitches[0].verticalPos;\n\t\telem.maxpitch = elem.pitches[elem.pitches.length - 1].verticalPos;\n\t}\n}\n\nAbstractEngraver.prototype.createBeam = function (isSingleLineStaff, voice, elems) {\n\tvar abselemset = [];\n\n\tvar beamelem = new BeamElem(this.stemHeight * this.voiceScale, this.stemdir, this.flatBeams, elems[0]);\n\tif (hint) beamelem.setHint();\n\tfor (var i = 0; i < elems.length; i++) {\n\t\t// Do a first pass to figure out the stem direction before creating the notes, so that staccatos and other decorations can be placed correctly.\n\t\tbeamelem.runningDirection(elems[i])\n\t}\n\tbeamelem.setStemDirection()\n\tvar tempStemDir = this.stemdir\n\tthis.stemdir = beamelem.stemsUp ? 'up' : 'down'\n\tfor (i = 0; i < elems.length; i++) {\n\t\tvar elem = elems[i];\n\t\tvar abselem = this.createNote(elem, true, isSingleLineStaff, voice);\n\t\tabselemset.push(abselem);\n\t\tbeamelem.add(abselem);\n\t\tif (this.triplet && this.triplet.isClosed()) {\n\t\t\tvoice.addOther(this.triplet);\n\t\t\tthis.triplet = null;\n\t\t\tthis.tripletmultiplier = 1;\n\t\t}\n\t}\n\tbeamelem.calcDir();\n\tvoice.addBeam(beamelem);\n\tthis.stemdir = tempStemDir\n\treturn abselemset;\n};\n\nvar sortPitch = function (elem) {\n\tvar sorted;\n\tdo {\n\t\tsorted = true;\n\t\tfor (var p = 0; p < elem.pitches.length - 1; p++) {\n\t\t\tif (elem.pitches[p].pitch > elem.pitches[p + 1].pitch) {\n\t\t\t\tsorted = false;\n\t\t\t\tvar tmp = elem.pitches[p];\n\t\t\t\telem.pitches[p] = elem.pitches[p + 1];\n\t\t\t\telem.pitches[p + 1] = tmp;\n\t\t\t}\n\t\t}\n\t} while (!sorted);\n};\n\nvar ledgerLines = function (abselem, minPitch, maxPitch, isRest, symbolWidth, additionalLedgers, dir, dx, scale) {\n\tfor (var i = maxPitch; i > 11; i--) {\n\t\tif (i % 2 === 0 && !isRest) {\n\t\t\tabselem.addFixed(new RelativeElement(null, dx, (symbolWidth + 4) * scale, i, { type: \"ledger\" }));\n\t\t}\n\t}\n\n\tfor (i = minPitch; i < 1; i++) {\n\t\tif (i % 2 === 0 && !isRest) {\n\t\t\tabselem.addFixed(new RelativeElement(null, dx, (symbolWidth + 4) * scale, i, { type: \"ledger\" }));\n\t\t}\n\t}\n\n\tfor (i = 0; i < additionalLedgers.length; i++) { // PER: draw additional ledgers\n\t\tvar ofs = symbolWidth;\n\t\tif (dir === 'down') ofs = -ofs;\n\t\tabselem.addFixed(new RelativeElement(null, ofs + dx, (symbolWidth + 4) * scale, additionalLedgers[i], { type: \"ledger\" }));\n\t}\n};\n\nAbstractEngraver.prototype.addGraceNotes = function (elem, voice, abselem, notehead, stemHeight, isBagpipes, roomtaken) {\n\tvar gracescale = 3 / 5;\n\tvar graceScaleStem = 3.5 / 5; // TODO-PER: empirically found constant.\n\tstemHeight = Math.round(stemHeight * graceScaleStem);\n\tvar gracebeam = null;\n\tvar flag;\n\n\tif (elem.gracenotes.length > 1) {\n\t\tgracebeam = new BeamElem(stemHeight, \"grace\", isBagpipes);\n\t\tif (hint) gracebeam.setHint();\n\t\tgracebeam.mainNote = abselem;\t// this gives us a reference back to the note this is attached to so that the stems can be attached somewhere.\n\t}\n\n\tvar i;\n\tvar graceoffsets = [];\n\tfor (i = elem.gracenotes.length - 1; i >= 0; i--) { // figure out where to place each gracenote\n\t\troomtaken += 10;\n\t\tgraceoffsets[i] = roomtaken;\n\t\tif (elem.gracenotes[i].accidental) {\n\t\t\troomtaken += 7;\n\t\t}\n\t}\n\n\tfor (i = 0; i < elem.gracenotes.length; i++) {\n\t\tvar gracepitch = elem.gracenotes[i].verticalPos;\n\n\t\tflag = (gracebeam) ? null : chartable.uflags[(isBagpipes) ? 5 : 3];\n\t\tvar accidentalSlot = [];\n\t\tvar ret = createNoteHead(abselem, \"noteheads.quarter\", elem.gracenotes[i],\n\t\t\t{ dir: \"up\", headx: -graceoffsets[i], extrax: -graceoffsets[i], flag: flag, scale: gracescale * this.voiceScale, accidentalSlot: accidentalSlot });\n\t\tret.notehead.highestVert = ret.notehead.pitch + stemHeight;\n\t\tvar grace = ret.notehead;\n\t\tthis.addSlursAndTies(abselem, elem.gracenotes[i], grace, voice, \"up\", true);\n\n\t\tabselem.addExtra(grace);\n\t\t// PER: added acciaccatura slash\n\t\tif (elem.gracenotes[i].acciaccatura) {\n\t\t\tvar pos = elem.gracenotes[i].verticalPos + 7 * gracescale; // the same formula that determines the flag position.\n\t\t\tvar dAcciaccatura = gracebeam ? 5 : 6; // just an offset to make it line up correctly.\n\t\t\tabselem.addRight(new RelativeElement(\"flags.ugrace\", -graceoffsets[i] + dAcciaccatura, 0, pos, { scalex: gracescale, scaley: gracescale }));\n\t\t}\n\t\tif (gracebeam) { // give the beam the necessary info\n\t\t\tvar graceDuration = elem.gracenotes[i].duration / 2;\n\t\t\tif (isBagpipes) graceDuration /= 2;\n\t\t\tvar pseudoabselem = {\n\t\t\t\theads: [grace],\n\t\t\t\tabcelem: { averagepitch: gracepitch, minpitch: gracepitch, maxpitch: gracepitch, duration: graceDuration }\n\t\t\t};\n\t\t\tgracebeam.add(pseudoabselem);\n\t\t} else { // draw the stem\n\t\t\tvar p1 = gracepitch + 1 / 3 * gracescale;\n\t\t\tvar p2 = gracepitch + 7 * gracescale;\n\t\t\tvar dx = grace.dx + grace.w;\n\t\t\tvar width = -0.6;\n\t\t\tabselem.addExtra(new RelativeElement(null, dx, 0, p1, { \"type\": \"stem\", \"pitch2\": p2, linewidth: width }));\n\t\t}\n\t\tledgerLines(abselem, gracepitch, gracepitch, false, glyphs.getSymbolWidth(\"noteheads.quarter\"), [], true, grace.dx - 1, 0.6);\n\n\t\t// if this is the first grace note, we might want to start a slur.\n\t\t// there is a slur if graceSlurs is specifically set.\n\t\t// there is no slur if it is bagpipes.\n\t\t// there is not a slur if the element is a spacer or invisible rest.\n\t\tvar isInvisibleRest = elem.rest && (elem.rest.type === \"spacer\" || elem.rest.type === \"invisible\");\n\t\tif (i === 0 && !isBagpipes && this.graceSlurs && !isInvisibleRest) {\n\t\t\t// This is the overall slur that is under the grace notes.\n\t\t\tvoice.addOther(new TieElem({ anchor1: grace, anchor2: notehead, isGrace: true }));\n\t\t}\n\t}\n\n\tif (gracebeam) {\n\t\tgracebeam.calcDir();\n\t\tvoice.addBeam(gracebeam);\n\t}\n\treturn roomtaken;\n};\n\nfunction addRestToAbsElement(abselem, elem, duration, dot, isMultiVoice, stemdir, isSingleLineStaff, durlog, voiceScale) {\n\tvar c;\n\tvar restpitch = 7;\n\tvar noteHead;\n\tvar roomTaken;\n\tvar roomTakenRight;\n\n\tif (isMultiVoice) {\n\t\tif (stemdir === \"down\") restpitch = 3;\n\t\tif (stemdir === \"up\") restpitch = 11;\n\t}\n\t// There is special placement for the percussion staff. If there is one staff line, then move the rest position.\n\tif (isSingleLineStaff) {\n\t\t// The half and whole rests are attached to different lines normally, so we need to tweak their position to get them to both be attached to the same one.\n\t\tif (duration < 0.5)\n\t\t\trestpitch = 7;\n\t\telse if (duration < 1)\n\t\t\trestpitch = 7;\t// half rest\n\t\telse\n\t\t\trestpitch = 5; // whole rest\n\t}\n\tswitch (elem.rest.type) {\n\t\tcase \"whole\":\n\t\t\tc = chartable.rest[0];\n\t\t\telem.averagepitch = restpitch;\n\t\t\telem.minpitch = restpitch;\n\t\t\telem.maxpitch = restpitch;\n\t\t\tdot = 0;\n\t\t\tbreak;\n\t\tcase \"rest\":\n\t\t\tif (elem.style === \"rhythm\") // special case for rhythm: rests are a handy way to express the rhythm.\n\t\t\t\tc = chartable.rhythm[-durlog];\n\t\t\telse\n\t\t\t\tc = chartable.rest[-durlog];\n\t\t\telem.averagepitch = restpitch;\n\t\t\telem.minpitch = restpitch;\n\t\t\telem.maxpitch = restpitch;\n\t\t\tbreak;\n\t\tcase \"invisible\":\n\t\tcase \"invisible-multimeasure\":\n\t\tcase \"spacer\":\n\t\t\tc = \"\";\n\t\t\telem.averagepitch = restpitch;\n\t\t\telem.minpitch = restpitch;\n\t\t\telem.maxpitch = restpitch;\n\t\t\tbreak;\n\t\tcase \"multimeasure\":\n\t\t\tc = chartable.rest['multi'];\n\t\t\telem.averagepitch = restpitch;\n\t\t\telem.minpitch = restpitch;\n\t\t\telem.maxpitch = restpitch;\n\t\t\tdot = 0;\n\t\t\tvar mmWidth = glyphs.getSymbolWidth(c);\n\t\t\tabselem.addHead(new RelativeElement(c, mmWidth, mmWidth * 2, 7));\n\t\t\tvar numMeasures = new RelativeElement(\"\" + elem.rest.text, mmWidth, mmWidth, 16, { type: \"multimeasure-text\" });\n\t\t\tabselem.addExtra(numMeasures);\n\t}\n\tif (elem.rest.type.indexOf(\"multimeasure\") < 0 && elem.rest.type !== \"invisible\") {\n\t\tvar ret = createNoteHead(abselem, c, { verticalPos: restpitch },\n\t\t\t{ dot: dot, scale: voiceScale });\n\t\tnoteHead = ret.notehead;\n\t\tif (noteHead) {\n\t\t\tabselem.addHead(noteHead);\n\t\t\troomTaken = ret.accidentalshiftx;\n\t\t\troomTakenRight = ret.dotshiftx;\n\t\t}\n\t}\n\treturn { noteHead: noteHead, roomTaken: roomTaken, roomTakenRight: roomTakenRight };\n}\n\nfunction addIfNotExist(arr, item) {\n\tfor (var i = 0; i < arr.length; i++) {\n\t\tif (JSON.stringify(arr[i]) === JSON.stringify(item))\n\t\t\treturn;\n\t}\n\tarr.push(item);\n}\n\nAbstractEngraver.prototype.addNoteToAbcElement = function (abselem, elem, dot, stemdir, style, zeroDuration, durlog, nostem, voice) {\n\tvar dotshiftx = 0; // room taken by chords with displaced noteheads which cause dots to shift\n\tvar noteHead;\n\tvar roomTaken = 0;\n\tvar roomTakenRight = 0;\n\tvar min;\n\tvar i;\n\tvar additionalLedgers = [];\n\t// The accidentalSlot will hold a list of all the accidentals on this chord. Each element is a vertical place,\n\t// and contains a pitch, which is the last pitch that contains an accidental in that slot. The slots are numbered\n\t// from closest to the note to farther left. We only need to know the last accidental we placed because\n\t// we know that the pitches are sorted by now.\n\tvar accidentalSlot = [];\n\tvar symbolWidth = 0;\n\n\tvar dir = (elem.averagepitch >= 6) ? \"down\" : \"up\";\n\tif (stemdir) dir = stemdir;\n\n\tstyle = elem.style ? elem.style : style; // get the style of note head.\n\tif (!style || style === \"normal\") style = \"note\";\n\tvar noteSymbol;\n\tif (zeroDuration)\n\t\tnoteSymbol = chartable[style].nostem;\n\telse\n\t\tnoteSymbol = chartable[style][-durlog];\n\tif (!noteSymbol)\n\t\tconsole.log(\"noteSymbol:\", style, durlog, zeroDuration);\n\n\t// determine elements of chords which should be shifted\n\tvar p;\n\tfor (p = (dir === \"down\") ? elem.pitches.length - 2 : 1; (dir === \"down\") ? p >= 0 : p < elem.pitches.length; p = (dir === \"down\") ? p - 1 : p + 1) {\n\t\tvar prev = elem.pitches[(dir === \"down\") ? p + 1 : p - 1];\n\t\tvar curr = elem.pitches[p];\n\t\tvar delta = (dir === \"down\") ? prev.pitch - curr.pitch : curr.pitch - prev.pitch;\n\t\tif (delta <= 1 && !prev.printer_shift) {\n\t\t\tcurr.printer_shift = (delta) ? \"different\" : \"same\";\n\t\t\tif (curr.verticalPos > 11 || curr.verticalPos < 1) { // PER: add extra ledger line\n\t\t\t\tadditionalLedgers.push(curr.verticalPos - (curr.verticalPos % 2));\n\t\t\t}\n\t\t\tif (dir === \"down\") {\n\t\t\t\troomTaken = glyphs.getSymbolWidth(noteSymbol) + 2;\n\t\t\t} else {\n\t\t\t\tdotshiftx = glyphs.getSymbolWidth(noteSymbol) + 2;\n\t\t\t}\n\t\t}\n\t}\n\n\tvar pp = elem.pitches.length;\n\tfor (p = 0; p < elem.pitches.length; p++) {\n\n\t\tif (!nostem) {\n\t\t\tvar flag;\n\t\t\tif ((dir === \"down\" && p !== 0) || (dir === \"up\" && p !== pp - 1)) { // not the stemmed elem of the chord\n\t\t\t\tflag = null;\n\t\t\t} else {\n\t\t\t\tflag = chartable[(dir === \"down\") ? \"dflags\" : \"uflags\"][-durlog];\n\t\t\t}\n\t\t}\n\t\tvar c;\n\t\tif (elem.pitches[p].style) { // There is a style for the whole group of pitches, but there could also be an override for a particular pitch.\n\t\t\tc = chartable[elem.pitches[p].style][-durlog];\n\t\t} else if (voice.isPercussion && this.percmap) {\n\t\t\tc = noteSymbol;\n\t\t\tvar percHead = this.percmap[pitchesToPerc(elem.pitches[p])];\n\t\t\tif (percHead && percHead.noteHead) {\n\t\t\t\tif (chartable[percHead.noteHead])\n\t\t\t\t\tc = chartable[percHead.noteHead][-durlog];\n\t\t\t}\n\t\t} else\n\t\t\tc = noteSymbol;\n\t\t// The highest position for the sake of placing slurs is itself if the slur is internal. It is the highest position possible if the slur is for the whole chord.\n\t\t// If the note is the only one in the chord, then any slur it has counts as if it were on the whole chord.\n\t\telem.pitches[p].highestVert = elem.pitches[p].verticalPos;\n\t\tvar isTopWhenStemIsDown = (stemdir === \"up\" || dir === \"up\") && p === 0;\n\t\tvar isBottomWhenStemIsUp = (stemdir === \"down\" || dir === \"down\") && p === pp - 1;\n\t\tif (isTopWhenStemIsDown || isBottomWhenStemIsUp) { // place to put slurs if not already on pitches\n\n\t\t\tif (elem.startSlur || pp === 1) {\n\t\t\t\telem.pitches[p].highestVert = elem.pitches[pp - 1].verticalPos;\n\t\t\t\tif (getDuration(elem) < 1 && (stemdir === \"up\" || dir === \"up\"))\n\t\t\t\t\telem.pitches[p].highestVert += 6; // If the stem is up, then compensate for the length of the stem\n\t\t\t}\n\t\t\tif (elem.startSlur) {\n\t\t\t\tif (!elem.pitches[p].startSlur) elem.pitches[p].startSlur = []; //TODO possibly redundant, provided array is not optional\n\t\t\t\tfor (i = 0; i < elem.startSlur.length; i++) {\n\t\t\t\t\taddIfNotExist(elem.pitches[p].startSlur, elem.startSlur[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (elem.endSlur) {\n\t\t\t\telem.pitches[p].highestVert = elem.pitches[pp - 1].verticalPos;\n\t\t\t\tif (getDuration(elem) < 1 && (stemdir === \"up\" || dir === \"up\"))\n\t\t\t\t\telem.pitches[p].highestVert += 6; // If the stem is up, then compensate for the length of the stem\n\t\t\t\tif (!elem.pitches[p].endSlur) elem.pitches[p].endSlur = []; //TODO possibly redundant, provided array is not optional\n\t\t\t\tfor (i = 0; i < elem.endSlur.length; i++) {\n\t\t\t\t\taddIfNotExist(elem.pitches[p].endSlur, elem.endSlur[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar hasStem = !nostem && durlog <= -1;\n\t\tvar ret = createNoteHead(abselem, c, elem.pitches[p],\n\t\t\t{ dir: dir, extrax: -roomTaken, flag: flag, dot: dot, dotshiftx: dotshiftx, scale: this.voiceScale, accidentalSlot: accidentalSlot, shouldExtendStem: !stemdir, printAccidentals: !voice.isPercussion });\n\t\tsymbolWidth = Math.max(glyphs.getSymbolWidth(c), symbolWidth);\n\t\tabselem.extraw -= ret.extraLeft;\n\t\tnoteHead = ret.notehead;\n\t\tif (noteHead) {\n\t\t\tthis.addSlursAndTies(abselem, elem.pitches[p], noteHead, voice, hasStem ? dir : null, false);\n\n\t\t\tif (elem.gracenotes && elem.gracenotes.length > 0)\n\t\t\t\tnoteHead.bottom = noteHead.bottom - 1;\t // If there is a tie to the grace notes, leave a little more room for the note to avoid collisions.\n\t\t\tabselem.addHead(noteHead);\n\t\t}\n\t\troomTaken += ret.accidentalshiftx;\n\t\troomTakenRight = Math.max(roomTakenRight, ret.dotshiftx);\n\t}\n\n\t// draw stem from the furthest note to a pitch above/below the stemmed note\n\tif (hasStem) {\n\t\tvar stemHeight = Math.round(70 * this.voiceScale) / 10;\n\t\tvar p1 = (dir === \"down\") ? elem.minpitch - stemHeight : elem.minpitch + 1 / 3;\n\t\t// PER added stemdir test to make the line meet the note.\n\t\tif (p1 > 6 && !stemdir) p1 = 6;\n\t\tvar p2 = (dir === \"down\") ? elem.maxpitch - 1 / 3 : elem.maxpitch + stemHeight;\n\t\t// PER added stemdir test to make the line meet the note.\n\t\tif (p2 < 6 && !stemdir) p2 = 6;\n\t\tvar dx = (dir === \"down\" || abselem.heads.length === 0) ? 0 : abselem.heads[0].w;\n\t\tvar width = (dir === \"down\") ? 1 : -1;\n\t\t// TODO-PER-HACK: One type of note head has a different placement of the stem. This should be more generically calculated:\n\t\tif (noteHead && noteHead.c === 'noteheads.slash.quarter') {\n\t\t\tif (dir === 'down')\n\t\t\t\tp2 -= 1;\n\t\t\telse\n\t\t\t\tp1 += 1;\n\t\t}\n\t\tif (noteHead && noteHead.c === 'noteheads.triangle.quarter') {\n\t\t\tif (dir === 'down')\n\t\t\t\tp2 -= 0.7;\n\t\t\telse\n\t\t\t\tp1 -= 1.2;\n\t\t}\n\t\tabselem.addRight(new RelativeElement(null, dx, 0, p1, { \"type\": \"stem\", \"pitch2\": p2, linewidth: width, bottom: p1 - 1 }));\n\t\t//var RelativeElement = function RelativeElement(c, dx, w, pitch, opt) {\n\t\tmin = Math.min(p1, p2);\n\t}\n\treturn { noteHead: noteHead, roomTaken: roomTaken, roomTakenRight: roomTakenRight, min: min, additionalLedgers: additionalLedgers, dir: dir, symbolWidth: symbolWidth };\n};\n\nAbstractEngraver.prototype.addLyric = function (abselem, elem) {\n\tvar lyricStr = \"\";\n\telem.lyric.forEach(function (ly) {\n\t\tvar div = ly.divider === ' ' ? \"\" : ly.divider;\n\t\tlyricStr += ly.syllable + div + \"\\n\";\n\t});\n\tvar lyricDim = this.getTextSize.calc(lyricStr, 'vocalfont', \"lyric\");\n\tvar position = elem.positioning ? elem.positioning.vocalPosition : 'below';\n\tabselem.addCentered(new RelativeElement(lyricStr, 0, lyricDim.width, undefined, { type: \"lyric\", position: position, height: lyricDim.height / spacing.STEP, dim: this.getTextSize.attr('vocalfont', \"lyric\") }));\n};\n\nAbstractEngraver.prototype.createNote = function (elem, nostem, isSingleLineStaff, voice) { //stem presence: true for drawing stemless notehead\n\tvar notehead = null;\n\tvar roomtaken = 0; // room needed to the left of the note\n\tvar roomtakenright = 0; // room needed to the right of the note\n\tvar symbolWidth = 0;\n\tvar additionalLedgers = []; // PER: handle the case of [bc'], where the b doesn't have a ledger line\n\n\tvar dir;\n\n\tvar duration = getDuration(elem);\n\tvar zeroDuration = false;\n\tif (duration === 0) { zeroDuration = true; duration = 0.25; nostem = true; } //PER: zero duration will draw a quarter note head.\n\tvar durlog = Math.floor(Math.log(duration) / Math.log(2)); //TODO use getDurlog\n\tvar dot = 0;\n\n\tfor (var tot = Math.pow(2, durlog), inc = tot / 2; tot < duration; dot++, tot += inc, inc /= 2);\n\n\n\tif (elem.startTriplet) {\n\t\tthis.tripletmultiplier = elem.tripletMultiplier;\n\t}\n\n\tvar durationForSpacing = duration * this.tripletmultiplier;\n\tif (elem.rest && elem.rest.type === 'multimeasure')\n\t\tdurationForSpacing = 1;\n\tif (elem.rest && elem.rest.type === 'invisible-multimeasure')\n\t\tdurationForSpacing = this.measureLength * elem.rest.text;\n\tvar absType = elem.rest ? \"rest\" : \"note\";\n\tvar abselem = new AbsoluteElement(elem, durationForSpacing, 1, absType, this.tuneNumber, { durationClassOveride: elem.duration * this.tripletmultiplier });\n\tif (hint) abselem.setHint();\n\n\tif (elem.rest) {\n\t\tif (this.measureLength === duration && elem.rest.type !== 'invisible' && elem.rest.type !== 'spacer' && elem.rest.type.indexOf('multimeasure') < 0)\n\t\t\telem.rest.type = 'whole'; // If the rest is exactly a measure, always use a whole rest\n\t\tvar ret1 = addRestToAbsElement(abselem, elem, duration, dot, voice.voicetotal > 1, this.stemdir, isSingleLineStaff, durlog, this.voiceScale);\n\t\tnotehead = ret1.noteHead;\n\t\troomtaken = ret1.roomTaken;\n\t\troomtakenright = ret1.roomTakenRight;\n\t} else {\n\t\tvar ret2 = this.addNoteToAbcElement(abselem, elem, dot, this.stemdir, this.style, zeroDuration, durlog, nostem, voice);\n\t\tif (ret2.min !== undefined)\n\t\t\tthis.minY = Math.min(ret2.min, this.minY);\n\t\tnotehead = ret2.noteHead;\n\t\troomtaken = ret2.roomTaken;\n\t\troomtakenright = ret2.roomTakenRight;\n\t\tadditionalLedgers = ret2.additionalLedgers;\n\t\tdir = ret2.dir;\n\t\tsymbolWidth = ret2.symbolWidth;\n\t}\n\n\tif (elem.lyric !== undefined) {\n\t\tthis.addLyric(abselem, elem);\n\t}\n\n\tif (elem.gracenotes !== undefined) {\n\t\troomtaken += this.addGraceNotes(elem, voice, abselem, notehead, this.stemHeight * this.voiceScale, this.isBagpipes, roomtaken);\n\t}\n\n\tif (elem.decoration) {\n\t\t// TODO-PER: nostem is true if this is beamed. In that case we don't know where to place the decoration yet so just make a guess. This should be refactored to not place decorations until after the beams are determined.\n\t\t// This should probably be combined with moveDecorations()\n\t\tvar bottom = nostem ? Math.min(-3, abselem.bottom - 6) : abselem.bottom\n\t\tthis.decoration.createDecoration(voice, elem.decoration, abselem.top, (notehead) ? notehead.w : 0, abselem, roomtaken, dir, bottom, elem.positioning, this.hasVocals, this.accentAbove);\n\t}\n\n\tif (elem.barNumber) {\n\t\tabselem.addFixed(new RelativeElement(elem.barNumber, -10, 0, 0, { type: \"barNumber\" }));\n\t}\n\n\t// ledger lines\n\tledgerLines(abselem, elem.minpitch, elem.maxpitch, elem.rest, symbolWidth, additionalLedgers, dir, -2, 1);\n\n\tif (elem.chord !== undefined) {\n\t\tvar ret3 = addChord(this.getTextSize, abselem, elem, roomtaken, roomtakenright, symbolWidth, this.jazzchords, this.germanAlphabet);\n\t\troomtaken = ret3.roomTaken;\n\t\troomtakenright = ret3.roomTakenRight;\n\t}\n\n\tif (elem.startTriplet) {\n\t\tthis.triplet = new TripletElem(elem.startTriplet, notehead, { flatBeams: this.flatBeams }); // above is opposite from case of slurs\n\t}\n\n\tif (elem.endTriplet && this.triplet) {\n\t\tthis.triplet.setCloseAnchor(notehead);\n\t}\n\n\tif (this.triplet && !elem.startTriplet && !elem.endTriplet && !(elem.rest && elem.rest.type === \"spacer\")) {\n\t\tthis.triplet.middleNote(notehead);\n\t}\n\n\treturn abselem;\n};\n\nAbstractEngraver.prototype.addSlursAndTies = function (abselem, pitchelem, notehead, voice, dir, isGrace) {\n\tif (pitchelem.endTie) {\n\t\tif (this.ties.length > 0) {\n\t\t\t// If there are multiple open ties, find the one that applies by matching the pitch, if possible.\n\t\t\tvar found = false;\n\t\t\tfor (var j = 0; j < this.ties.length; j++) {\n\t\t\t\tif (this.ties[j].anchor1 && this.ties[j].anchor1.pitch === notehead.pitch) {\n\t\t\t\t\tthis.ties[j].setEndAnchor(notehead);\n\t\t\t\t\tvoice.setRange(this.ties[j])\n\t\t\t\t\tthis.ties.splice(j, 1);\n\t\t\t\t\tfound = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!found) {\n\t\t\t\tthis.ties[0].setEndAnchor(notehead);\n\t\t\t\tvoice.setRange(this.ties[0])\n\t\t\t\tthis.ties.splice(0, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\tvar voiceNumber = voice.voicetotal < 2 ? -1 : voice.voicenumber;\n\tif (pitchelem.startTie) {\n\t\tvar tie = new TieElem({ anchor1: notehead, force: (this.stemdir === \"down\" || this.stemdir === \"up\"), stemDir: this.stemdir, isGrace: isGrace, voiceNumber: voiceNumber, style: pitchelem.startTie.style });\n\t\tif (hint) tie.setHint();\n\n\t\tthis.ties[this.ties.length] = tie;\n\t\tvoice.addOther(tie);\n\t\t// HACK-PER: For the animation, we need to know if a note is tied to the next one, so here's a flag.\n\t\t// Unfortunately, only some of the notes in the current event might be tied, but this will consider it\n\t\t// tied if any one of them is. That will work for most cases.\n\t\tabselem.startTie = true;\n\t}\n\n\tvar slur;\n\tvar slurid;\n\tif (pitchelem.endSlur) {\n\t\tfor (var i = 0; i < pitchelem.endSlur.length; i++) {\n\t\t\tslurid = pitchelem.endSlur[i];\n\t\t\tif (this.slurs[slurid]) {\n\t\t\t\tslur = this.slurs[slurid];\n\t\t\t\tslur.setEndAnchor(notehead);\n\t\t\t\tvoice.setRange(slur)\n\t\t\t\tdelete this.slurs[slurid];\n\t\t\t} else {\n\t\t\t\tslur = new TieElem({ anchor2: notehead, stemDir: this.stemdir, voiceNumber: voiceNumber });\n\t\t\t\tif (hint) slur.setHint();\n\t\t\t\tvoice.addOther(slur);\n\t\t\t}\n\t\t\tif (this.startlimitelem) {\n\t\t\t\tslur.setStartX(this.startlimitelem);\n\t\t\t}\n\t\t}\n\t} else if (!isGrace) {\n\t\tfor (var s in this.slurs) {\n\t\t\tif (this.slurs.hasOwnProperty(s)) {\n\t\t\t\tthis.slurs[s].addInternalNote(notehead);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (pitchelem.startSlur) {\n\t\tfor (i = 0; i < pitchelem.startSlur.length; i++) {\n\t\t\tslurid = pitchelem.startSlur[i].label;\n\t\t\tslur = new TieElem({ anchor1: notehead, stemDir: this.stemdir, voiceNumber: voiceNumber, style: pitchelem.startSlur[i].style });\n\t\t\tif (hint) slur.setHint();\n\t\t\tthis.slurs[slurid] = slur;\n\t\t\tvoice.addOther(slur);\n\t\t}\n\t}\n};\n\nAbstractEngraver.prototype.addMeasureNumber = function (number, abselem) {\n\tvar measureNumDim = this.getTextSize.calc(number, \"measurefont\", 'bar-number');\n\tvar dx = 0;\n\tif (abselem.isClef) // If this is a clef rather than bar line, then the number shouldn't be centered because it could overlap the left side. This is an easy way to let it be centered but move it over, too.\n\t\tdx += measureNumDim.width / 2\n\tvar vert = measureNumDim.width > 10 && abselem.abcelem.type === \"treble\" ? 13 : 11\n\tabselem.addFixed(new RelativeElement(number, dx, measureNumDim.width, vert + measureNumDim.height / spacing.STEP, { type: \"barNumber\", dim: this.getTextSize.attr(\"measurefont\", 'bar-number') }));\n};\n\nAbstractEngraver.prototype.createBarLine = function (voice, elem, isFirstStaff) {\n\t// bar_thin, bar_thin_thick, bar_thin_thin, bar_thick_thin, bar_right_repeat, bar_left_repeat, bar_double_repeat\n\n\tvar abselem = new AbsoluteElement(elem, 0, 10, 'bar', this.tuneNumber);\n\tvar anchor = null; // place to attach part lines\n\tvar dx = 0;\n\n\tif (elem.barNumber) {\n\t\tthis.addMeasureNumber(elem.barNumber, abselem);\n\t}\n\n\n\tvar firstdots = (elem.type === \"bar_right_repeat\" || elem.type === \"bar_dbl_repeat\");\n\tvar firstthin = (elem.type !== \"bar_left_repeat\" && elem.type !== \"bar_thick_thin\" && elem.type !== \"bar_invisible\");\n\tvar thick = (elem.type === \"bar_right_repeat\" || elem.type === \"bar_dbl_repeat\" || elem.type === \"bar_left_repeat\" ||\n\t\telem.type === \"bar_thin_thick\" || elem.type === \"bar_thick_thin\");\n\tvar secondthin = (elem.type === \"bar_left_repeat\" || elem.type === \"bar_thick_thin\" || elem.type === \"bar_thin_thin\" || elem.type === \"bar_dbl_repeat\");\n\tvar seconddots = (elem.type === \"bar_left_repeat\" || elem.type === \"bar_dbl_repeat\");\n\n\t// limit positioning of slurs\n\tif (firstdots || seconddots) {\n\t\tfor (var slur in this.slurs) {\n\t\t\tif (this.slurs.hasOwnProperty(slur)) {\n\t\t\t\tthis.slurs[slur].setEndX(abselem);\n\t\t\t}\n\t\t}\n\t\tthis.startlimitelem = abselem;\n\t}\n\n\tif (firstdots) {\n\t\tabselem.addRight(new RelativeElement(\"dots.dot\", dx, 1, 7));\n\t\tabselem.addRight(new RelativeElement(\"dots.dot\", dx, 1, 5));\n\t\tdx += 6; //2 hardcoded, twice;\n\t}\n\n\tif (firstthin) {\n\t\tanchor = new RelativeElement(null, dx, 1, 2, { \"type\": \"bar\", \"pitch2\": 10, linewidth: 0.6 });\n\t\tabselem.addRight(anchor);\n\t}\n\n\tif (elem.type === \"bar_invisible\") {\n\t\tanchor = new RelativeElement(null, dx, 1, 2, { \"type\": \"none\", \"pitch2\": 10, linewidth: 0.6 });\n\t\tabselem.addRight(anchor);\n\t}\n\n\tif (elem.decoration) {\n\t\tthis.decoration.createDecoration(voice, elem.decoration, 12, (thick) ? 3 : 1, abselem, 0, \"down\", 2, elem.positioning, this.hasVocals, this.accentAbove);\n\t}\n\n\tif (thick) {\n\t\tdx += 4; //3 hardcoded;\n\t\tanchor = new RelativeElement(null, dx, 4, 2, { \"type\": \"bar\", \"pitch2\": 10, linewidth: 4 });\n\t\tabselem.addRight(anchor);\n\t\tdx += 5;\n\t}\n\n\t// if (this.partstartelem && (thick || (firstthin && secondthin))) { // means end of nth part\n\t// this.partstartelem.anchor2=anchor;\n\t// this.partstartelem = null;\n\t// }\n\n\tif (this.partstartelem && elem.endEnding) {\n\t\tthis.partstartelem.anchor2 = anchor;\n\t\tthis.partstartelem = null;\n\t}\n\n\tif (secondthin) {\n\t\tdx += 3; //3 hardcoded;\n\t\tanchor = new RelativeElement(null, dx, 1, 2, { \"type\": \"bar\", \"pitch2\": 10, linewidth: 0.6 });\n\t\tabselem.addRight(anchor); // 3 is hardcoded\n\t}\n\n\tif (seconddots) {\n\t\tdx += 3; //3 hardcoded;\n\t\tabselem.addRight(new RelativeElement(\"dots.dot\", dx, 1, 7));\n\t\tabselem.addRight(new RelativeElement(\"dots.dot\", dx, 1, 5));\n\t} // 2 is hardcoded\n\n\tif (elem.startEnding && isFirstStaff) { // only put the first & second ending marks on the first staff\n\t\tvar textWidth = this.getTextSize.calc(elem.startEnding, \"repeatfont\", '').width;\n\t\tabselem.minspacing += textWidth + 10; // Give plenty of room for the ending number.\n\t\tthis.partstartelem = new EndingElem(elem.startEnding, anchor, null);\n\t\tvoice.addOther(this.partstartelem);\n\t}\n\n\t// Add a little space to the left of the bar line so that nothing can crowd it.\n\tabselem.extraw -= 5;\n\n\tif (elem.chord !== undefined) {\n\t\tvar ret3 = addChord(this.getTextSize, abselem, elem, 0, 0, 0, false, this.germanAlphabet);\n\t}\n\n\treturn abselem;\n\n};\n\nmodule.exports = AbstractEngraver;\n","var RelativeElement = require('./elements/relative-element');\nvar spacing = require('../helpers/spacing');\nconst translateChord = require(\"./translate-chord\");\n\nvar addChord = function (getTextSize, abselem, elem, roomTaken, roomTakenRight, noteheadWidth, jazzchords, germanAlphabet) {\n\tfor (var i = 0; i < elem.chord.length; i++) {\n\t\tvar pos = elem.chord[i].position;\n\t\tvar rel_position = elem.chord[i].rel_position;\n\t\tvar isAnnotation = pos === \"left\" || pos === \"right\" || pos === \"below\" || pos === \"above\" || !!rel_position\n\t\tvar font;\n\t\tvar klass;\n\t\tif (isAnnotation) {\n\t\t\tfont = 'annotationfont';\n\t\t\tklass = \"abcjs-annotation\";\n\t\t} else {\n\t\t\tfont = 'gchordfont';\n\t\t\tklass = \"abcjs-chord\";\n\t\t}\n\t\tvar attr = getTextSize.attr(font, klass);\n\n\t\tvar name = elem.chord[i].name\n\t\tvar ret;\n\t\t//console.log(\"chord\",name)\n\t\tif (typeof name === \"string\") {\n\t\t\tret = chordString(name, pos, rel_position, isAnnotation, font, klass, attr, getTextSize, abselem, elem, roomTaken, roomTakenRight, noteheadWidth, jazzchords, germanAlphabet)\n\t\t\troomTaken = ret.roomTaken\n\t\t\troomTakenRight = ret.roomTakenRight\n\t\t} else {\n\t\t\tfor (var j = 0; j < name.length; j++) {\n\t\t\t\tret = chordString(name[j].text, pos, rel_position, isAnnotation, font, klass, attr, getTextSize, abselem, elem, roomTaken, roomTakenRight, noteheadWidth, jazzchords, germanAlphabet)\n\t\t\t\troomTaken = ret.roomTaken\n\t\t\t\troomTakenRight = ret.roomTakenRight\n\t\t\t}\n\t\t}\n\t}\n\treturn { roomTaken: roomTaken, roomTakenRight: roomTakenRight };\n};\n\nfunction chordString(chordString, pos, rel_position, isAnnotation, font, klass, attr, getTextSize, abselem, elem, roomTaken, roomTakenRight, noteheadWidth, jazzchords, germanAlphabet) {\n\tvar chords = chordString.split(\"\\n\");\n\tfor (var j = chords.length - 1; j >= 0; j--) { // parse these in opposite order because we place them from bottom to top.\n\t\tvar chord = chords[j];\n\t\tvar x = 0;\n\t\tvar y;\n\t\tif (!isAnnotation)\n\t\t\tchord = translateChord(chord, jazzchords, germanAlphabet);\n\t\tvar dim = getTextSize.calc(chord, font, klass);\n\t\tvar chordWidth = dim.width;\n\t\tvar chordHeight = dim.height / spacing.STEP;\n\t\tswitch (pos) {\n\t\t\tcase \"left\":\n\t\t\t\troomTaken += chordWidth + 7;\n\t\t\t\tx = -roomTaken; // TODO-PER: This is just a guess from trial and error\n\t\t\t\ty = elem.averagepitch;\n\t\t\t\tabselem.addExtra(new RelativeElement(chord, x, chordWidth + 4, y, {\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\theight: chordHeight,\n\t\t\t\t\tdim: attr,\n\t\t\t\t\tposition: \"left\"\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t\tcase \"right\":\n\t\t\t\troomTakenRight += 4;\n\t\t\t\tx = roomTakenRight;// TODO-PER: This is just a guess from trial and error\n\t\t\t\ty = elem.averagepitch;\n\t\t\t\tabselem.addRight(new RelativeElement(chord, x, chordWidth + 4, y, {\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\theight: chordHeight,\n\t\t\t\t\tdim: attr,\n\t\t\t\t\tposition: \"right\"\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t\tcase \"below\":\n\t\t\t\t// setting the y-coordinate to undefined for now: it will be overwritten later on, after we figure out what the highest element on the line is.\n\t\t\t\tabselem.addRight(new RelativeElement(chord, 0, 0, undefined, {\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\tposition: \"below\",\n\t\t\t\t\theight: chordHeight,\n\t\t\t\t\tdim: attr,\n\t\t\t\t\trealWidth: chordWidth\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t\tcase \"above\":\n\t\t\t\t// setting the y-coordinate to undefined for now: it will be overwritten later on, after we figure out what the highest element on the line is.\n\t\t\t\tabselem.addRight(new RelativeElement(chord, 0, 0, undefined, {\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\tposition: \"above\",\n\t\t\t\t\theight: chordHeight,\n\t\t\t\t\tdim: attr,\n\t\t\t\t\trealWidth: chordWidth\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tif (rel_position) {\n\t\t\t\t\tvar relPositionY = rel_position.y + 3 * spacing.STEP; // TODO-PER: this is a fudge factor to make it line up with abcm2ps\n\t\t\t\t\tabselem.addRight(new RelativeElement(chord, x + rel_position.x, 0, elem.minpitch + relPositionY / spacing.STEP, {\n\t\t\t\t\t\tposition: \"relative\",\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\theight: chordHeight,\n\t\t\t\t\t\tdim: attr\n\t\t\t\t\t}));\n\t\t\t\t} else {\n\t\t\t\t\t// setting the y-coordinate to undefined for now: it will be overwritten later on, after we figure out what the highest element on the line is.\n\t\t\t\t\tvar pos2 = 'above';\n\t\t\t\t\tif (elem.positioning && elem.positioning.chordPosition)\n\t\t\t\t\t\tpos2 = elem.positioning.chordPosition;\n\n\t\t\t\t\tif (pos2 !== 'hidden') {\n\t\t\t\t\t\tabselem.addCentered(new RelativeElement(chord, noteheadWidth / 2, chordWidth, undefined, {\n\t\t\t\t\t\t\ttype: \"chord\",\n\t\t\t\t\t\t\tposition: pos2,\n\t\t\t\t\t\t\theight: chordHeight,\n\t\t\t\t\t\t\tdim: attr,\n\t\t\t\t\t\t\trealWidth: chordWidth\n\t\t\t\t\t\t}));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t}\n\t}\n\treturn { roomTaken: roomTaken, roomTakenRight: roomTakenRight };\n}\nmodule.exports = addChord;\n","function addTextIf(rows, params, getTextSize) {\n\tif (!params.text)\n\t\treturn;\n\tif (!params.marginLeft) params.marginLeft = 0;\n\tif (!params.klass) params.klass = '';\n\tif (!params.anchor) params.anchor = 'start';\n\tif (!params.info) params.info = { startChar: -2, endChar: -2 }\n\n\tif (params.marginTop)\n\t\trows.push({ move: params.marginTop });\n\tvar attr = { left: params.marginLeft, text: params.text, font: params.font, anchor: params.anchor, startChar: params.info.startChar, endChar: params.info.endChar, 'dominant-baseline': params['dominant-baseline'] };\n\tif (params.absElemType)\n\t\tattr.absElemType = params.absElemType;\n\tif (!params.inGroup && params.klass)\n\t\tattr.klass = params.klass;\n\tif (params.name)\n\t\tattr.name = params.name;\n\n\trows.push(attr);\n\t// If there are blank lines they won't be counted by getTextSize, so just get the height of one line and multiply\n\tvar size = getTextSize.calc(\"A\", params.font, params.klass);\n\tvar numLines = params.text.split(\"\\n\").length;\n\tif (params.text[params.text.length - 1] === '\\n')\n\t\tnumLines--; // If there is a new line at the end of the string, then an extra line will be counted.\n\tif (!params.noMove) {\n\t\tvar h = (size.height * 1.1) * numLines;\n\t\trows.push({ move: Math.round(h) });\n\t\tif (params.marginBottom)\n\t\t\trows.push({ move: params.marginBottom });\n\t}\n}\n\nmodule.exports = addTextIf;\n","var calcHeight = function (staffGroup) {\n\t// the height is calculated here in a parallel way to the drawing below in hopes that both of these functions will be modified together.\n\t// TODO-PER: also add the space between staves. (That's systemStaffSeparation, which is the minimum distance between the staff LINES.)\n\tvar height = 0;\n\tfor (var i = 0; i < staffGroup.voices.length; i++) {\n\t\tvar staff = staffGroup.voices[i].staff;\n\t\tif (!staffGroup.voices[i].duplicate) {\n\t\t\theight += staff.top;\n\t\t\t//if (staff.bottom < 0)\n\t\t\theight += -staff.bottom;\n\t\t}\n\t}\n\treturn height;\n};\n\nmodule.exports = calcHeight;\n\n","// abc_create_clef.js\n\nvar AbsoluteElement = require('./elements/absolute-element');\nvar glyphs = require('./glyphs');\nvar RelativeElement = require('./elements/relative-element');\n\nvar createClef = function (elem, tuneNumber) {\n\tvar clef;\n\tvar octave = 0;\n\telem.el_type = \"clef\";\n\tvar abselem = new AbsoluteElement(elem, 0, 10, 'staff-extra clef', tuneNumber);\n\tabselem.isClef = true;\n\tswitch (elem.type) {\n\t\tcase \"treble\": clef = \"clefs.G\"; break;\n\t\tcase \"tenor\": clef = \"clefs.C\"; break;\n\t\tcase \"alto\": clef = \"clefs.C\"; break;\n\t\tcase \"bass\": clef = \"clefs.F\"; break;\n\t\tcase 'treble+8': clef = \"clefs.G\"; octave = 1; break;\n\t\tcase 'tenor+8': clef = \"clefs.C\"; octave = 1; break;\n\t\tcase 'bass+8': clef = \"clefs.F\"; octave = 1; break;\n\t\tcase 'alto+8': clef = \"clefs.C\"; octave = 1; break;\n\t\tcase 'treble-8': clef = \"clefs.G\"; octave = -1; break;\n\t\tcase 'tenor-8': clef = \"clefs.C\"; octave = -1; break;\n\t\tcase 'bass-8': clef = \"clefs.F\"; octave = -1; break;\n\t\tcase 'alto-8': clef = \"clefs.C\"; octave = -1; break;\n\t\tcase 'none': return null;\n\t\tcase 'perc': clef = \"clefs.perc\"; break;\n\t\tdefault: abselem.addFixed(new RelativeElement(\"clef=\" + elem.type, 0, 0, undefined, { type: \"debug\" }));\n\t}\n\t// if (elem.verticalPos) {\n\t// pitch = elem.verticalPos;\n\t// }\n\tvar dx = 5;\n\tif (clef) {\n\t\tvar height = glyphs.symbolHeightInPitches(clef);\n\t\tvar ofs = clefOffsets(clef);\n\t\tabselem.addRight(new RelativeElement(clef, dx, glyphs.getSymbolWidth(clef), elem.clefPos, { top: height + elem.clefPos + ofs, bottom: elem.clefPos + ofs }));\n\n\t\tif (octave !== 0) {\n\t\t\tvar scale = 2 / 3;\n\t\t\tvar adjustspacing = (glyphs.getSymbolWidth(clef) - glyphs.getSymbolWidth(\"8\") * scale) / 2;\n\t\t\tvar pitch = (octave > 0) ? abselem.top + 3 : abselem.bottom - 1;\n\t\t\tvar top = (octave > 0) ? abselem.top + 3 : abselem.bottom - 3;\n\t\t\tvar bottom = top - 2;\n\t\t\tif (elem.type === \"bass-8\") {\n\t\t\t\t// The placement for bass octave is a little different. It should hug the clef.\n\t\t\t\tpitch = 3;\n\t\t\t\tadjustspacing = 0;\n\t\t\t}\n\t\t\tabselem.addRight(new RelativeElement(\"8\", dx + adjustspacing, glyphs.getSymbolWidth(\"8\") * scale, pitch, {\n\t\t\t\tscalex: scale,\n\t\t\t\tscaley: scale,\n\t\t\t\ttop: top,\n\t\t\t\tbottom: bottom\n\t\t\t}));\n\t\t\t//abselem.top += 2;\n\t\t}\n\t}\n\treturn abselem;\n};\n\nfunction clefOffsets(clef) {\n\tswitch (clef) {\n\t\tcase \"clefs.G\": return -5;\n\t\tcase \"clefs.C\": return -4;\n\t\tcase \"clefs.F\": return -4;\n\t\tcase \"clefs.perc\": return -2;\n\t\tdefault: return 0;\n\t}\n}\n\nmodule.exports = createClef;\n","// abc_create_key_signature.js\n\nvar AbsoluteElement = require('./elements/absolute-element');\nvar glyphs = require('./glyphs');\nvar RelativeElement = require('./elements/relative-element');\n\nvar createKeySignature = function (elem, tuneNumber) {\n\telem.el_type = \"keySignature\";\n\tif (!elem.accidentals || elem.accidentals.length === 0)\n\t\treturn null;\n\tvar abselem = new AbsoluteElement(elem, 0, 10, 'staff-extra key-signature', tuneNumber);\n\tabselem.isKeySig = true;\n\tvar dx = 0;\n\telem.accidentals.forEach(function (acc) {\n\t\tvar symbol;\n\t\tvar fudge = 0;\n\t\tswitch (acc.acc) {\n\t\t\tcase \"sharp\": symbol = \"accidentals.sharp\"; fudge = -3; break;\n\t\t\tcase \"natural\": symbol = \"accidentals.nat\"; break;\n\t\t\tcase \"flat\": symbol = \"accidentals.flat\"; fudge = -1.2; break;\n\t\t\tcase \"quartersharp\": symbol = \"accidentals.halfsharp\"; fudge = -2.5; break;\n\t\t\tcase \"quarterflat\": symbol = \"accidentals.halfflat\"; fudge = -1.2; break;\n\t\t\tdefault: symbol = \"accidentals.flat\";\n\t\t}\n\t\tabselem.addRight(new RelativeElement(symbol, dx, glyphs.getSymbolWidth(symbol), acc.verticalPos, { thickness: glyphs.symbolHeightInPitches(symbol), top: acc.verticalPos + glyphs.symbolHeightInPitches(symbol) + fudge, bottom: acc.verticalPos + fudge }));\n\t\tdx += glyphs.getSymbolWidth(symbol) + 2;\n\t}, this);\n\treturn abselem;\n};\n\nmodule.exports = createKeySignature;\n","var glyphs = require('./glyphs');\nvar RelativeElement = require('./elements/relative-element');\n\nvar createNoteHead = function (abselem, c, pitchelem, options) {\n\tif (!options) options = {};\n\tvar dir = (options.dir !== undefined) ? options.dir : null;\n\tvar headx = (options.headx !== undefined) ? options.headx : 0;\n\tvar extrax = (options.extrax !== undefined) ? options.extrax : 0;\n\tvar flag = (options.flag !== undefined) ? options.flag : null;\n\tvar dot = (options.dot !== undefined) ? options.dot : 0;\n\tvar dotshiftx = (options.dotshiftx !== undefined) ? options.dotshiftx : 0;\n\tvar scale = (options.scale !== undefined) ? options.scale : 1;\n\tvar accidentalSlot = (options.accidentalSlot !== undefined) ? options.accidentalSlot : [];\n\tvar shouldExtendStem = (options.shouldExtendStem !== undefined) ? options.shouldExtendStem : false;\n\tvar printAccidentals = (options.printAccidentals !== undefined) ? options.printAccidentals : true;\n\n\t// TODO scale the dot as well\n\tvar pitch = pitchelem.verticalPos;\n\tvar notehead;\n\tvar accidentalshiftx = 0;\n\tvar newDotShiftX = 0;\n\tvar extraLeft = 0;\n\tif (c === undefined)\n\t\tabselem.addFixed(new RelativeElement(\"pitch is undefined\", 0, 0, 0, { type: \"debug\" }));\n\telse if (c === \"\") {\n\t\tnotehead = new RelativeElement(null, 0, 0, pitch);\n\t} else {\n\t\tvar shiftheadx = headx;\n\t\tif (pitchelem.printer_shift) {\n\t\t\tvar adjust = (pitchelem.printer_shift === \"same\") ? 1 : 0;\n\t\t\tshiftheadx = (dir === \"down\") ? -glyphs.getSymbolWidth(c) * scale + adjust : glyphs.getSymbolWidth(c) * scale - adjust;\n\t\t}\n\t\tvar opts = { scalex: scale, scaley: scale, thickness: glyphs.symbolHeightInPitches(c) * scale, name: pitchelem.name };\n\t\tnotehead = new RelativeElement(c, shiftheadx, glyphs.getSymbolWidth(c) * scale, pitch, opts);\n\t\tnotehead.stemDir = dir;\n\t\tif (flag) {\n\t\t\tvar pos = pitch + ((dir === \"down\") ? -7 : 7) * scale;\n\t\t\t// if this is a regular note, (not grace or tempo indicator) then the stem will have been stretched to the middle line if it is far from the center.\n\t\t\tif (shouldExtendStem) {\n\t\t\t\tif (dir === \"down\" && pos > 6)\n\t\t\t\t\tpos = 6;\n\t\t\t\tif (dir === \"up\" && pos < 6)\n\t\t\t\t\tpos = 6;\n\t\t\t}\n\t\t\t//if (scale===1 && (dir===\"down\")?(pos>6):(pos<6)) pos=6;\n\t\t\tvar xdelta = (dir === \"down\") ? headx : headx + notehead.w - 0.6;\n\t\t\tabselem.addRight(new RelativeElement(flag, xdelta, glyphs.getSymbolWidth(flag) * scale, pos, { scalex: scale, scaley: scale }));\n\t\t}\n\t\tnewDotShiftX = notehead.w + dotshiftx - 2 + 5 * dot;\n\t\tfor (; dot > 0; dot--) {\n\t\t\tvar dotadjusty = (1 - Math.abs(pitch) % 2); //PER: take abs value of the pitch. And the shift still happens on ledger lines.\n\t\t\tabselem.addRight(new RelativeElement(\"dots.dot\", notehead.w + dotshiftx - 2 + 5 * dot, glyphs.getSymbolWidth(\"dots.dot\"), pitch + dotadjusty));\n\t\t}\n\t}\n\tif (notehead)\n\t\tnotehead.highestVert = pitchelem.highestVert;\n\n\tif (printAccidentals && pitchelem.accidental) {\n\t\tvar symb;\n\t\tswitch (pitchelem.accidental) {\n\t\t\tcase \"quartersharp\":\n\t\t\t\tsymb = \"accidentals.halfsharp\";\n\t\t\t\tbreak;\n\t\t\tcase \"dblsharp\":\n\t\t\t\tsymb = \"accidentals.dblsharp\";\n\t\t\t\tbreak;\n\t\t\tcase \"sharp\":\n\t\t\t\tsymb = \"accidentals.sharp\";\n\t\t\t\tbreak;\n\t\t\tcase \"quarterflat\":\n\t\t\t\tsymb = \"accidentals.halfflat\";\n\t\t\t\tbreak;\n\t\t\tcase \"flat\":\n\t\t\t\tsymb = \"accidentals.flat\";\n\t\t\t\tbreak;\n\t\t\tcase \"dblflat\":\n\t\t\t\tsymb = \"accidentals.dblflat\";\n\t\t\t\tbreak;\n\t\t\tcase \"natural\":\n\t\t\t\tsymb = \"accidentals.nat\";\n\t\t}\n\t\t// if a note is at least a sixth away, it can share a slot with another accidental\n\t\tvar accSlotFound = false;\n\t\tvar accPlace = extrax;\n\t\tfor (var j = 0; j < accidentalSlot.length; j++) {\n\t\t\tif (pitch - accidentalSlot[j][0] >= 6) {\n\t\t\t\taccidentalSlot[j][0] = pitch;\n\t\t\t\taccPlace = accidentalSlot[j][1];\n\t\t\t\taccSlotFound = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (accSlotFound === false) {\n\t\t\taccPlace -= (glyphs.getSymbolWidth(symb) * scale + 2);\n\t\t\taccidentalSlot.push([pitch, accPlace]);\n\t\t\taccidentalshiftx = (glyphs.getSymbolWidth(symb) * scale + 2);\n\t\t}\n\t\tvar h = glyphs.symbolHeightInPitches(symb);\n\t\tabselem.addExtra(new RelativeElement(symb, accPlace, glyphs.getSymbolWidth(symb), pitch, { scalex: scale, scaley: scale, top: pitch + h / 2, bottom: pitch - h / 2 }));\n\t\textraLeft = glyphs.getSymbolWidth(symb) / 2; // TODO-PER: We need a little extra width if there is an accidental, but I'm not sure why it isn't the full width of the accidental.\n\t}\n\n\treturn { notehead: notehead, accidentalshiftx: accidentalshiftx, dotshiftx: newDotShiftX, extraLeft: extraLeft };\n\n};\n\nmodule.exports = createNoteHead;\n","// abc_create_time_signature.js\n\nvar AbsoluteElement = require('./elements/absolute-element');\nvar glyphs = require('./glyphs');\nvar RelativeElement = require('./elements/relative-element');\n\nvar createTimeSignature = function (elem, tuneNumber) {\n\telem.el_type = \"timeSignature\";\n\tvar abselem = new AbsoluteElement(elem, 0, 10, 'staff-extra time-signature', tuneNumber);\n\tif (elem.type === \"specified\") {\n\t\tvar x = 0;\n\t\tfor (var i = 0; i < elem.value.length; i++) {\n\t\t\tif (i !== 0) {\n\t\t\t\tabselem.addRight(new RelativeElement('+', x + 1, glyphs.getSymbolWidth(\"+\"), 6, { thickness: glyphs.symbolHeightInPitches(\"+\") }));\n\t\t\t\tx += glyphs.getSymbolWidth(\"+\") + 2;\n\t\t\t}\n\t\t\tif (elem.value[i].den) {\n\t\t\t\tvar numWidth = 0;\n\t\t\t\tfor (var i2 = 0; i2 < elem.value[i].num.length; i2++)\n\t\t\t\t\tnumWidth += glyphs.getSymbolWidth(elem.value[i].num[i2]);\n\t\t\t\tvar denWidth = 0;\n\t\t\t\tfor (i2 = 0; i2 < elem.value[i].num.length; i2++)\n\t\t\t\t\tdenWidth += glyphs.getSymbolWidth(elem.value[i].den[i2]);\n\t\t\t\tvar maxWidth = Math.max(numWidth, denWidth);\n\t\t\t\tabselem.addRight(new RelativeElement(elem.value[i].num, x + (maxWidth - numWidth) / 2, numWidth, 8, { thickness: glyphs.symbolHeightInPitches(elem.value[i].num[0]) }));\n\t\t\t\tabselem.addRight(new RelativeElement(elem.value[i].den, x + (maxWidth - denWidth) / 2, denWidth, 4, { thickness: glyphs.symbolHeightInPitches(elem.value[i].den[0]) }));\n\t\t\t\tx += maxWidth\n\t\t\t} else {\n\t\t\t\tvar thisWidth = 0;\n\t\t\t\tfor (var i3 = 0; i3 < elem.value[i].num.length; i3++)\n\t\t\t\t\tthisWidth += glyphs.getSymbolWidth(elem.value[i].num[i3]);\n\t\t\t\tabselem.addRight(new RelativeElement(elem.value[i].num, x, thisWidth, 6, { thickness: glyphs.symbolHeightInPitches(elem.value[i].num[0]) }));\n\t\t\t\tx += thisWidth;\n\t\t\t}\n\t\t}\n\t} else if (elem.type === \"common_time\") {\n\t\tabselem.addRight(new RelativeElement(\"timesig.common\", 0, glyphs.getSymbolWidth(\"timesig.common\"), 6, { thickness: glyphs.symbolHeightInPitches(\"timesig.common\") }));\n\n\t} else if (elem.type === \"cut_time\") {\n\t\tabselem.addRight(new RelativeElement(\"timesig.cut\", 0, glyphs.getSymbolWidth(\"timesig.cut\"), 6, { thickness: glyphs.symbolHeightInPitches(\"timesig.cut\") }));\n\t} else if (elem.type === \"tempus_imperfectum\") {\n\t\tabselem.addRight(new RelativeElement(\"timesig.imperfectum\", 0, glyphs.getSymbolWidth(\"timesig.imperfectum\"), 6, { thickness: glyphs.symbolHeightInPitches(\"timesig.imperfectum\") }));\n\t} else if (elem.type === \"tempus_imperfectum_prolatio\") {\n\t\tabselem.addRight(new RelativeElement(\"timesig.imperfectum2\", 0, glyphs.getSymbolWidth(\"timesig.imperfectum2\"), 6, { thickness: glyphs.symbolHeightInPitches(\"timesig.imperfectum2\") }));\n\t} else if (elem.type === \"tempus_perfectum\") {\n\t\tabselem.addRight(new RelativeElement(\"timesig.perfectum\", 0, glyphs.getSymbolWidth(\"timesig.perfectum\"), 6, { thickness: glyphs.symbolHeightInPitches(\"timesig.perfectum\") }));\n\t} else if (elem.type === \"tempus_perfectum_prolatio\") {\n\t\tabselem.addRight(new RelativeElement(\"timesig.perfectum2\", 0, glyphs.getSymbolWidth(\"timesig.perfectum2\"), 6, { thickness: glyphs.symbolHeightInPitches(\"timesig.perfectum2\") }));\n\t} else {\n\t\tconsole.log(\"time signature:\", elem);\n\t}\n\treturn abselem;\n};\n\nmodule.exports = createTimeSignature;\n","// abc_decoration.js: Creates a data structure suitable for printing a line of abc\n\nvar DynamicDecoration = require('./elements/dynamic-decoration');\nvar CrescendoElem = require('./elements/crescendo-element');\nvar GlissandoElem = require('./elements/glissando-element');\nvar glyphs = require('./glyphs');\nvar RelativeElement = require('./elements/relative-element');\nvar TieElem = require('./elements/tie-element');\n\nvar Decoration = function Decoration() {\n\tthis.startDiminuendoX = undefined;\n\tthis.startCrescendoX = undefined;\n\tthis.minTop = 12;\t// TODO-PER: this is assuming a 5-line staff. Pass that info in.\n\tthis.minBottom = 0;\n};\n\nvar closeDecoration = function (voice, decoration, pitch, width, abselem, roomtaken, dir, minPitch, accentAbove) {\n\tvar yPos;\n\tfor (var i = 0; i < decoration.length; i++) {\n\t\tif (decoration[i] === \"staccato\" || decoration[i] === \"tenuto\" || (decoration[i] === \"accent\" && !accentAbove)) {\n\t\t\tvar symbol = \"scripts.\" + decoration[i];\n\t\t\tif (decoration[i] === \"accent\") symbol = \"scripts.sforzato\";\n\t\t\tif (yPos === undefined)\n\t\t\t\tyPos = (dir === \"down\") ? pitch + 2 : minPitch - 2;\n\t\t\telse\n\t\t\t\tyPos = (dir === \"down\") ? yPos + 2 : yPos - 2;\n\t\t\tif (decoration[i] === \"accent\") {\n\t\t\t\t// Always place the accent three pitches away, no matter whether that is a line or space.\n\t\t\t\tif (dir === \"up\") yPos--;\n\t\t\t\telse yPos++;\n\t\t\t} else {\n\t\t\t\t// don't place on a stave line. The stave lines are 2,4,6,8,10\n\t\t\t\tswitch (yPos) {\n\t\t\t\t\tcase 2:\n\t\t\t\t\tcase 4:\n\t\t\t\t\tcase 6:\n\t\t\t\t\tcase 8:\n\t\t\t\t\tcase 10:\n\t\t\t\t\t\tif (dir === \"up\") yPos--;\n\t\t\t\t\t\telse yPos++;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (pitch > 9) yPos++; // take up some room of those that are above\n\t\t\tvar deltaX = width / 2;\n\t\t\tif (glyphs.getSymbolAlign(symbol) !== \"center\") {\n\t\t\t\tdeltaX -= (glyphs.getSymbolWidth(symbol) / 2);\n\t\t\t}\n\t\t\tabselem.addFixedX(new RelativeElement(symbol, deltaX, glyphs.getSymbolWidth(symbol), yPos));\n\t\t}\n\t\tif (decoration[i] === \"slide\" && abselem.heads[0]) {\n\t\t\tvar yPos2 = abselem.heads[0].pitch;\n\t\t\tyPos2 -= 2; // TODO-PER: not sure what this fudge factor is.\n\t\t\tvar blank1 = new RelativeElement(\"\", -roomtaken - 15, 0, yPos2 - 1);\n\t\t\tvar blank2 = new RelativeElement(\"\", -roomtaken - 5, 0, yPos2 + 1);\n\t\t\tabselem.addFixedX(blank1);\n\t\t\tabselem.addFixedX(blank2);\n\t\t\tvoice.addOther(new TieElem({ anchor1: blank1, anchor2: blank2, fixedY: true }));\n\t\t}\n\t}\n\tif (yPos === undefined)\n\t\tyPos = pitch;\n\n\treturn { above: yPos, below: abselem.bottom };\n};\n\nvar volumeDecoration = function (voice, decoration, abselem, positioning) {\n\tfor (var i = 0; i < decoration.length; i++) {\n\t\tswitch (decoration[i]) {\n\t\t\tcase \"p\":\n\t\t\tcase \"mp\":\n\t\t\tcase \"pp\":\n\t\t\tcase \"ppp\":\n\t\t\tcase \"pppp\":\n\t\t\tcase \"f\":\n\t\t\tcase \"ff\":\n\t\t\tcase \"fff\":\n\t\t\tcase \"ffff\":\n\t\t\tcase \"sfz\":\n\t\t\tcase \"mf\":\n\t\t\t\tvar elem = new DynamicDecoration(abselem, decoration[i], positioning);\n\t\t\t\tvoice.addOther(elem);\n\t\t}\n\t}\n};\n\nvar compoundDecoration = function (decoration, pitch, width, abselem, dir) {\n\tfunction highestPitch() {\n\t\tif (abselem.heads.length === 0)\n\t\t\treturn 10;\t// TODO-PER: I don't know if this can happen, but we'll return the top of the staff if so.\n\t\tvar pitch = abselem.heads[0].pitch;\n\t\tfor (var i = 1; i < abselem.heads.length; i++)\n\t\t\tpitch = Math.max(pitch, abselem.heads[i].pitch);\n\t\treturn pitch;\n\t}\n\tfunction lowestPitch() {\n\t\tif (abselem.heads.length === 0)\n\t\t\treturn 2;\t// TODO-PER: I don't know if this can happen, but we'll return the bottom of the staff if so.\n\t\tvar pitch = abselem.heads[0].pitch;\n\t\tfor (var i = 1; i < abselem.heads.length; i++)\n\t\t\tpitch = Math.min(pitch, abselem.heads[i].pitch);\n\t\treturn pitch;\n\t}\n\tfunction compoundDecoration(symbol, count) {\n\t\tvar placement = (dir === 'down') ? lowestPitch() + 1 : highestPitch() + 9;\n\t\tif (dir !== 'down' && count === 1)\n\t\t\tplacement--;\n\t\tvar deltaX = width / 2;\n\t\tdeltaX += (dir === 'down') ? -5 : 3;\n\t\tfor (var i = 0; i < count; i++) {\n\t\t\tplacement -= 1;\n\t\t\tabselem.addFixedX(new RelativeElement(symbol, deltaX, glyphs.getSymbolWidth(symbol), placement));\n\t\t}\n\t}\n\n\tfor (var i = 0; i < decoration.length; i++) {\n\t\tswitch (decoration[i]) {\n\t\t\tcase \"/\": compoundDecoration(\"flags.ugrace\", 1); break;\n\t\t\tcase \"//\": compoundDecoration(\"flags.ugrace\", 2); break;\n\t\t\tcase \"///\": compoundDecoration(\"flags.ugrace\", 3); break;\n\t\t\tcase \"////\": compoundDecoration(\"flags.ugrace\", 4); break;\n\t\t}\n\t}\n};\n\nvar stackedDecoration = function (decoration, width, abselem, yPos, positioning, minTop, minBottom, accentAbove) {\n\tfunction incrementPlacement(placement, height) {\n\t\tif (placement === 'above')\n\t\t\tyPos.above += height;\n\t\telse\n\t\t\tyPos.below -= height;\n\t}\n\tfunction getPlacement(placement) {\n\t\tvar y;\n\t\tif (placement === 'above') {\n\t\t\ty = yPos.above;\n\t\t\tif (y < minTop)\n\t\t\t\ty = minTop;\n\t\t} else {\n\t\t\ty = yPos.below;\n\t\t\tif (y > minBottom)\n\t\t\t\ty = minBottom;\n\t\t}\n\t\treturn y;\n\t}\n\tfunction textDecoration(text, placement, anchor) {\n\t\tvar y = getPlacement(placement);\n\t\tvar textFudge = 2;\n\t\tvar textHeight = 5;\n\t\t// TODO-PER: Get the height of the current font and use that for the thickness.\n\t\tabselem.addFixedX(new RelativeElement(text, width / 2, 0, y + textFudge, { type: \"decoration\", klass: 'ornament', thickness: 3, anchor: anchor }));\n\n\t\tincrementPlacement(placement, textHeight);\n\t}\n\tfunction symbolDecoration(symbol, placement) {\n\t\tvar deltaX = width / 2;\n\t\tif (glyphs.getSymbolAlign(symbol) !== \"center\") {\n\t\t\tdeltaX -= (glyphs.getSymbolWidth(symbol) / 2);\n\t\t}\n\t\tvar height = glyphs.symbolHeightInPitches(symbol) + 1; // adding a little padding so nothing touches.\n\t\tvar y = getPlacement(placement);\n\t\ty = (placement === 'above') ? y + height / 2 : y - height / 2;// Center the element vertically.\n\t\tabselem.addFixedX(new RelativeElement(symbol, deltaX, glyphs.getSymbolWidth(symbol), y, { klass: 'ornament', thickness: glyphs.symbolHeightInPitches(symbol), position: placement }));\n\n\t\tincrementPlacement(placement, height);\n\t}\n\n\tvar symbolList = {\n\t\t\"+\": \"scripts.stopped\",\n\t\t\"open\": \"scripts.open\",\n\t\t\"snap\": \"scripts.snap\",\n\t\t\"wedge\": \"scripts.wedge\",\n\t\t\"thumb\": \"scripts.thumb\",\n\t\t\"shortphrase\": \"scripts.shortphrase\",\n\t\t\"mediumphrase\": \"scripts.mediumphrase\",\n\t\t\"longphrase\": \"scripts.longphrase\",\n\t\t\"trill\": \"scripts.trill\",\n\t\t\"roll\": \"scripts.roll\",\n\t\t\"irishroll\": \"scripts.roll\",\n\t\t\"marcato\": \"scripts.umarcato\",\n\t\t\"dmarcato\": \"scripts.dmarcato\",\n\t\t\"umarcato\": \"scripts.umarcato\",\n\t\t\"turn\": \"scripts.turn\",\n\t\t\"uppermordent\": \"scripts.prall\",\n\t\t\"pralltriller\": \"scripts.prall\",\n\t\t\"mordent\": \"scripts.mordent\",\n\t\t\"lowermordent\": \"scripts.mordent\",\n\t\t\"downbow\": \"scripts.downbow\",\n\t\t\"upbow\": \"scripts.upbow\",\n\t\t\"fermata\": \"scripts.ufermata\",\n\t\t\"invertedfermata\": \"scripts.dfermata\",\n\t\t\"breath\": \",\",\n\t\t\"coda\": \"scripts.coda\",\n\t\t\"segno\": \"scripts.segno\"\n\t};\n\n\tvar hasOne = false;\n\tfor (var i = 0; i < decoration.length; i++) {\n\t\tswitch (decoration[i]) {\n\t\t\tcase \"0\":\n\t\t\tcase \"1\":\n\t\t\tcase \"2\":\n\t\t\tcase \"3\":\n\t\t\tcase \"4\":\n\t\t\tcase \"5\":\n\t\t\tcase \"D.C.\":\n\t\t\tcase \"D.S.\":\n\t\t\t\ttextDecoration(decoration[i], positioning, 'middle');\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"D.C.alcoda\":\n\t\t\t\ttextDecoration(\"D.C. al coda\", positioning, 'end');\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"D.C.alfine\":\n\t\t\t\ttextDecoration(\"D.C. al fine\", positioning, 'end');\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"D.S.alcoda\":\n\t\t\t\ttextDecoration(\"D.S. al coda\", positioning, 'end');\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"D.S.alfine\":\n\t\t\t\ttextDecoration(\"D.S. al fine\", positioning, 'end');\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"fine\":\n\t\t\t\ttextDecoration(\"FINE\", positioning, 'middle');\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"+\":\n\t\t\tcase \"open\":\n\t\t\tcase \"snap\":\n\t\t\tcase \"wedge\":\n\t\t\tcase \"thumb\":\n\t\t\tcase \"shortphrase\":\n\t\t\tcase \"mediumphrase\":\n\t\t\tcase \"longphrase\":\n\t\t\tcase \"trill\":\n\t\t\tcase \"roll\":\n\t\t\tcase \"irishroll\":\n\t\t\tcase \"marcato\":\n\t\t\tcase \"dmarcato\":\n\t\t\tcase \"turn\":\n\t\t\tcase \"uppermordent\":\n\t\t\tcase \"pralltriller\":\n\t\t\tcase \"mordent\":\n\t\t\tcase \"lowermordent\":\n\t\t\tcase \"downbow\":\n\t\t\tcase \"upbow\":\n\t\t\tcase \"fermata\":\n\t\t\tcase \"breath\":\n\t\t\tcase \"umarcato\":\n\t\t\tcase \"coda\":\n\t\t\tcase \"segno\":\n\t\t\t\tsymbolDecoration(symbolList[decoration[i]], positioning);\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"invertedfermata\":\n\t\t\t\tsymbolDecoration(symbolList[decoration[i]], 'below');\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"mark\":\n\t\t\t\tabselem.klass = \"mark\";\n\t\t\t\tbreak;\n\t\t\tcase \"accent\":\n\t\t\t\tif (accentAbove) {\n\t\t\t\t\tsymbolDecoration(\"scripts.sforzato\", positioning);\n\t\t\t\t\thasOne = true;\n\t\t\t\t}\n\t\t\t\tbreak;\t\n\t\t}\n\t}\n\treturn hasOne;\n};\n\nfunction leftDecoration(decoration, abselem, roomtaken) {\n\tfor (var i = 0; i < decoration.length; i++) {\n\t\tswitch (decoration[i]) {\n\t\t\tcase \"arpeggio\":\n\t\t\t\t// The arpeggio symbol is the height of a note (that is, two Y units). This stacks as many as we need to go from the\n\t\t\t\t// top note to the bottom note. The arpeggio should also be a little taller than the stacked notes, so there is an extra\n\t\t\t\t// one drawn and it is offset by half of a note height (that is, one Y unit).\n\t\t\t\tfor (var j = abselem.abcelem.minpitch - 1; j <= abselem.abcelem.maxpitch; j += 2) {\n\t\t\t\t\tabselem.addExtra(\n\t\t\t\t\t\tnew RelativeElement(\n\t\t\t\t\t\t\t\"scripts.arpeggio\",\n\t\t\t\t\t\t\t-glyphs.getSymbolWidth(\"scripts.arpeggio\") * 2 - roomtaken,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\tj + 2,\n\t\t\t\t\t\t\t{ klass: 'ornament', thickness: glyphs.symbolHeightInPitches(\"scripts.arpeggio\") }\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\nDecoration.prototype.dynamicDecoration = function (voice, decoration, abselem, positioning) {\n\tvar diminuendo;\n\tvar crescendo;\n\tvar glissando;\n\tfor (var i = 0; i < decoration.length; i++) {\n\t\tswitch (decoration[i]) {\n\t\t\tcase \"diminuendo(\":\n\t\t\t\tthis.startDiminuendoX = abselem;\n\t\t\t\tdiminuendo = undefined;\n\t\t\t\tbreak;\n\t\t\tcase \"diminuendo)\":\n\t\t\t\tdiminuendo = { start: this.startDiminuendoX, stop: abselem };\n\t\t\t\tthis.startDiminuendoX = undefined;\n\t\t\t\tbreak;\n\t\t\tcase \"crescendo(\":\n\t\t\t\tthis.startCrescendoX = abselem;\n\t\t\t\tcrescendo = undefined;\n\t\t\t\tbreak;\n\t\t\tcase \"crescendo)\":\n\t\t\t\tcrescendo = { start: this.startCrescendoX, stop: abselem };\n\t\t\t\tthis.startCrescendoX = undefined;\n\t\t\t\tbreak;\n\t\t\tcase '~(':\n\t\t\tcase \"glissando(\":\n\t\t\t\tthis.startGlissandoX = abselem;\n\t\t\t\tglissando = undefined;\n\t\t\t\tbreak;\n\t\t\tcase '~)':\n\t\t\tcase \"glissando)\":\n\t\t\t\tglissando = { start: this.startGlissandoX, stop: abselem };\n\t\t\t\tthis.startGlissandoX = undefined;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tif (diminuendo) {\n\t\tvoice.addOther(new CrescendoElem(diminuendo.start, diminuendo.stop, \">\", positioning));\n\t}\n\tif (crescendo) {\n\t\tvoice.addOther(new CrescendoElem(crescendo.start, crescendo.stop, \"<\", positioning));\n\t}\n\tif (glissando) {\n\t\tvoice.addOther(new GlissandoElem(glissando.start, glissando.stop));\n\t}\n};\n\nDecoration.prototype.createDecoration = function (voice, decoration, pitch, width, abselem, roomtaken, dir, minPitch, positioning, hasVocals, accentAbove) {\n\tif (!positioning)\n\t\tpositioning = { ornamentPosition: 'above', volumePosition: hasVocals ? 'above' : 'below', dynamicPosition: hasVocals ? 'above' : 'below' };\n\t// These decorations don't affect the placement of other decorations\n\tvolumeDecoration(voice, decoration, abselem, positioning.volumePosition);\n\tthis.dynamicDecoration(voice, decoration, abselem, positioning.dynamicPosition);\n\tcompoundDecoration(decoration, pitch, width, abselem, dir);\n\n\t// treat staccato, accent, and tenuto first (may need to shift other markers)\n\tvar yPos = closeDecoration(voice, decoration, pitch, width, abselem, roomtaken, dir, minPitch, accentAbove);\n\t// yPos is an object containing 'above' and 'below'. That is the placement of the next symbol on either side.\n\n\tyPos.above = Math.max(yPos.above, this.minTop);\n\tyPos.below = Math.min(yPos.below, minPitch);\n\tvar hasOne = stackedDecoration(decoration, width, abselem, yPos, positioning.ornamentPosition, this.minTop, minPitch, accentAbove);\n\t//if (hasOne) {\n\t\t//\t\t\tabselem.top = Math.max(yPos.above + 3, abselem.top); // TODO-PER: Not sure why we need this fudge factor.\n\t//}\n\tleftDecoration(decoration, abselem, roomtaken);\n};\n\nmodule.exports = Decoration;\n","// abc_absolute_element.js: Definition of the AbsoluteElement class.\n\nvar highlight = require(\"../../interactive/highlight\");\nvar unhighlight = require(\"../../interactive/unhighlight\");\n\n// Everything that is placed in the SVG is first created as an absolute element. This is one unit of graphic information.\n// That is, it embodies a concept: a clef, a time signature, a bar line,etc. or most complexly:\n// a note with its accidental, grace note, chord symbol, trill, stem, eighth flags, etc.\n// In the largest sense, these are placed on the page at a particular place that is determined during the layout phase.\n// This object doesn't contain any of the drawing information, though. That information is contained in an array of\n// RelativeElements as the \"children\" of this class.\n// During the layout phase, the width of all the children is calculated and the X coordinate of the absolute element is set.\n//\n// So, after the AbsoluteElement is placed, then its children can be placed relative to that. There are different types of\n// relative elements that are placed with different rules:\n// 1) Fixed - these elements don't move relative to the absolute element's coordinates. These are things like the notehead,\n// any ledger lines, accidentals, etc.\n// 2) Slotted - these elements can move vertically and don't get Y coordinates until after the absolute element is placed.\n// These are things like the chord symbol, many decorations, the lyrics, etc.\n//\n// Relative elements are also classified by how they are related. This could be:\n// 1) Increases the absolute element's width to the left. This doesn't change the center point of\n// the absolute element, so adding a sharp to the note won't move it to the right. However, if the elements\n// are close together then this enforces a minimum distance.\n// 2) Has no effect on the width. Annotations and the tempo act like this. No matter how long they are the width doesn't change.\n// 3) Increases the absolute element's width to the right. This doesn't change the center point,\n// but it will increase the minimum distance.\n// 4) Sets the width on both sides. This is the note heads. They are centered on both sides of the absolute element's X coordinate.\n\n// duration - actual musical duration - different from notehead duration in triplets. refer to abcelem to get the notehead duration\n// minspacing - spacing which must be taken on top of the width defined by the duration\n// type is a meta-type for the element. It is not necessary for drawing, but it is useful to make semantic sense of the element. For instance, it can be used in the element's class name.\nvar AbsoluteElement = function AbsoluteElement(abcelem, duration, minspacing, type, tuneNumber, options) {\n\t//\tconsole.log(\"Absolute:\",abcelem, duration, minspacing, type, tuneNumber, options);\n\tif (!options)\n\t\toptions = {};\n\tthis.tuneNumber = tuneNumber;\n\tthis.abcelem = abcelem;\n\tthis.duration = duration;\n\tthis.durationClass = options.durationClassOveride ? options.durationClassOveride : this.duration;\n\tthis.minspacing = minspacing || 0;\n\tthis.x = 0;\n\tthis.children = [];\n\tthis.heads = [];\n\tthis.extra = [];\n\tthis.extraw = 0;\n\tthis.w = 0;\n\tthis.right = [];\n\tthis.invisible = false;\n\tthis.bottom = undefined;\n\tthis.top = undefined;\n\tthis.type = type;\n\n\t// The following are the dimensions of the fixed part of the element.\n\t// That is, the chord text will be a different height depending on lot of factors, but the 8th flag will always be in the same place.\n\tthis.fixed = { w: 0, t: undefined, b: undefined }; // there is no x-coord here, because that is set later.\n\n\t// these are the heights of all of the vertical elements that can't be placed until the end of the line.\n\t// the vertical order of elements that are above is: tempo, part, volume/dynamic, ending/chord, lyric\n\t// the vertical order of elements that are below is: lyric, chord, volume/dynamic\n\tthis.specialY = {\n\t\ttempoHeightAbove: 0,\n\t\tpartHeightAbove: 0,\n\t\tvolumeHeightAbove: 0,\n\t\tdynamicHeightAbove: 0,\n\t\tendingHeightAbove: 0,\n\t\tchordHeightAbove: 0,\n\t\tlyricHeightAbove: 0,\n\n\t\tlyricHeightBelow: 0,\n\t\tchordHeightBelow: 0,\n\t\tvolumeHeightBelow: 0,\n\t\tdynamicHeightBelow: 0\n\t};\n};\n\nAbsoluteElement.prototype.getFixedCoords = function () {\n\treturn { x: this.x, w: this.fixed.w, t: this.fixed.t, b: this.fixed.b };\n};\n\nAbsoluteElement.prototype.addExtra = function (extra) {\n\t// used for accidentals, multi-measure rest text,\n\t// left-side decorations, gracenote heads,\n\t// left annotations, gracenote stems.\n\t// if (!(extra.c && extra.c.indexOf(\"accidentals\") >= 0) &&\n\t// \t!(extra.c && extra.c.indexOf(\"arpeggio\") >= 0) &&\n\t// \textra.type !== \"multimeasure-text\" &&\n\t// \t!(extra.c === \"noteheads.quarter\" && (extra.scalex === 0.6 || extra.scalex === 0.36)) &&\n\t// \t!(extra.type === \"stem\" && extra.linewidth === -0.6) &&\n\t// \textra.position !== \"left\"\n\t// )\n\t// \tconsole.log(\"extra\", extra);\n\n\tthis.fixed.w = Math.max(this.fixed.w, extra.dx + extra.w);\n\tif (this.fixed.t === undefined) this.fixed.t = extra.top; else this.fixed.t = Math.max(this.fixed.t, extra.top);\n\tif (this.fixed.b === undefined) this.fixed.b = extra.bottom; else this.fixed.b = Math.min(this.fixed.b, extra.bottom);\n\tif (extra.dx < this.extraw) this.extraw = extra.dx;\n\tthis.extra[this.extra.length] = extra;\n\tthis._addChild(extra);\n};\n\nAbsoluteElement.prototype.addHead = function (head) {\n\tif (head.dx < this.extraw) this.extraw = head.dx;\n\tthis.heads[this.heads.length] = head;\n\tthis.addRight(head);\n};\n\nAbsoluteElement.prototype.addRight = function (right) {\n\t// // used for clefs, note heads, bar lines, stems, key-signature accidentals, non-beamed flags, dots\n\t// if (!(right.c && right.c.indexOf(\"clefs\") >= 0) &&\n\t// \t!(right.c && right.c.indexOf(\"noteheads\") >= 0) &&\n\t// \t!(right.c && right.c.indexOf(\"flags\") >= 0) &&\n\t// \t!(right.c && right.c.indexOf(\"rests\") >= 0) &&\n\t// \t!(right.c && right.c.indexOf(\"dots.dot\") >= 0) &&\n\t// \tright.type !== \"stem\" &&\n\t// \tright.type !== \"bar\" &&\n\t// \tright.type !== \"none\" && // used when an invisible anchor is needed.\n\t// \t!(this.type.indexOf(\"clef\") >= -1 && right.c === \"8\") &&\n\t// \tthis.type.indexOf(\"key-signature\") === -1 &&\n\t// \tthis.type.indexOf(\"time-signature\") === -1 &&\n\t// \t!(this.abcelem && this.abcelem.rest && this.abcelem.rest.type === \"spacer\") &&\n\t// \t!(this.abcelem && this.abcelem.rest && this.abcelem.rest.type === \"invisible\") &&\n\t// \t!(right.type === \"text\" && right.position === \"relative\") &&\n\t// \t!(right.type === \"text\" && right.position === \"right\") &&\n\t// \t!(right.type === \"text\" && right.position === \"above\") &&\n\t// \t!(right.type === \"text\" && right.position === \"below\")\n\t// )\n\t// \tconsole.log(\"right\", right);\n\t// These are the elements that are the fixed part.\n\tthis.fixed.w = Math.max(this.fixed.w, right.dx + right.w);\n\tif (right.top !== undefined) {\n\t\tif (this.fixed.t === undefined) this.fixed.t = right.top; else this.fixed.t = Math.max(this.fixed.t, right.top);\n\t}\n\tif (right.bottom !== undefined) {\n\t\tif (this.fixed.b === undefined) this.fixed.b = right.bottom; else this.fixed.b = Math.min(this.fixed.b, right.bottom);\n\t}\n\t// if (isNaN(this.fixed.t) || isNaN(this.fixed.b))\n\t// \tdebugger;\n\tif (right.dx + right.w > this.w) this.w = right.dx + right.w;\n\tthis.right[this.right.length] = right;\n\tthis._addChild(right);\n};\n\nAbsoluteElement.prototype.addFixed = function (elem) {\n\t// used for elements that can't move relative to other elements after they have been placed.\n\t// used for ledger lines, bar numbers, debug msgs, clef, key sigs, time sigs\n\tthis._addChild(elem);\n};\n\nAbsoluteElement.prototype.addFixedX = function (elem) {\n\t// used for elements that can't move horizontally relative to other elements after they have been placed.\n\t// used for parts, tempo, decorations\n\tthis._addChild(elem);\n};\n\nAbsoluteElement.prototype.addCentered = function (elem) {\n\t// // used for chord labels, lyrics\n\t// if (!(elem.type === \"chord\" && elem.position === \"above\") &&\n\t// \t!(elem.type === \"chord\" && elem.position === \"below\") &&\n\t// \telem.type !== 'lyric'\n\t// )\n\t// \tconsole.log(\"centered\", elem);\n\tvar half = elem.w / 2;\n\tif (-half < this.extraw) this.extraw = -half;\n\tthis.extra[this.extra.length] = elem;\n\tif (elem.dx + half > this.w) this.w = elem.dx + half;\n\tthis.right[this.right.length] = elem;\n\tthis._addChild(elem);\n};\n\nAbsoluteElement.prototype.setLimit = function (member, child) {\n\tif (!child[member]) return;\n\tif (!this.specialY[member])\n\t\tthis.specialY[member] = child[member];\n\telse\n\t\tthis.specialY[member] = Math.max(this.specialY[member], child[member]);\n};\n\nAbsoluteElement.prototype._addChild = function (child) {\n\t//\tconsole.log(\"Relative:\",child);\n\tchild.parent = this;\n\tthis.children[this.children.length] = child;\n\tthis.pushTop(child.top);\n\tthis.pushBottom(child.bottom);\n\tthis.setLimit('tempoHeightAbove', child);\n\tthis.setLimit('partHeightAbove', child);\n\tthis.setLimit('volumeHeightAbove', child);\n\tthis.setLimit('dynamicHeightAbove', child);\n\tthis.setLimit('endingHeightAbove', child);\n\tthis.setLimit('chordHeightAbove', child);\n\tthis.setLimit('lyricHeightAbove', child);\n\tthis.setLimit('lyricHeightBelow', child);\n\tthis.setLimit('chordHeightBelow', child);\n\tthis.setLimit('volumeHeightBelow', child);\n\tthis.setLimit('dynamicHeightBelow', child);\n};\n\nAbsoluteElement.prototype.pushTop = function (top) {\n\tif (top !== undefined) {\n\t\tif (this.top === undefined)\n\t\t\tthis.top = top;\n\t\telse\n\t\t\tthis.top = Math.max(top, this.top);\n\t}\n};\n\nAbsoluteElement.prototype.pushBottom = function (bottom) {\n\tif (bottom !== undefined) {\n\t\tif (this.bottom === undefined)\n\t\t\tthis.bottom = bottom;\n\t\telse\n\t\t\tthis.bottom = Math.min(bottom, this.bottom);\n\t}\n};\n\nAbsoluteElement.prototype.setX = function (x) {\n\tthis.x = x;\n\tfor (var i = 0; i < this.children.length; i++)\n\t\tthis.children[i].setX(x);\n};\n\nAbsoluteElement.prototype.center = function (before, after) {\n\t// Used to center whole rests\n\tvar midpoint = (after.x - before.x) / 2 + before.x;\n\tthis.x = midpoint - this.w / 2;\n\tfor (var k = 0; k < this.children.length; k++)\n\t\tthis.children[k].setX(this.x);\n};\n\nAbsoluteElement.prototype.setHint = function () {\n\tthis.hint = true;\n};\n\nAbsoluteElement.prototype.highlight = function (klass, color) {\n\thighlight.bind(this)(klass, color);\n};\n\nAbsoluteElement.prototype.unhighlight = function (klass, color) {\n\tunhighlight.bind(this)(klass, color);\n};\n\nmodule.exports = AbsoluteElement;\n","// abc_beam_element.js: Definition of the BeamElem class.\n\n// Most elements on the page are related to a particular absolute element -- notes, rests, bars, etc. Beams, however, span multiple elements.\n// This means that beams can't be laid out until the absolute elements are placed. There is the further complication that the stems for beamed\n// notes can't be laid out until the beams are because we don't know how long they will be until we know the slope of the beam and the horizontal\n// spacing of the absolute elements.\n//\n// So, when a beam is detected, a BeamElem is created, then all notes belonging to that beam are added to it. These notes are not given stems at that time.\n// Then, after the horizontal layout is complete, all of the BeamElem are iterated to set the beam position, then all of the notes that are beamed are given\n// stems. After that, we are ready for the drawing step.\n\n// There are three phases: the setup phase, when new elements are being discovered, the layout phase, when everything is calculated, and the drawing phase,\n// when the object is not changed, but is used to put the elements on the page.\n\n//\n// Setup phase\n//\nvar BeamElem = function BeamElem(stemHeight, type, flat, firstElement) {\n\t// type is \"grace\", \"up\", \"down\", or undefined. flat is used to force flat beams, as it commonly found in the grace notes of bagpipe music.\n\tthis.type = \"BeamElem\";\n\tthis.isflat = !!flat;\n\tthis.isgrace = !!(type && type === \"grace\");\n\tthis.forceup = !!(this.isgrace || (type && type === \"up\"));\n\tthis.forcedown = !!(type && type === \"down\");\n\tthis.elems = []; // all the AbsoluteElements that this beam touches. It may include embedded rests.\n\tthis.total = 0;\n\tthis.average = 6; // use middle line as start for average.\n\tthis.allrests = true;\n\tthis.stemHeight = stemHeight;\n\tthis.beams = []; // During the layout phase, this will become a list of the beams that need to be drawn.\n\tif (firstElement && firstElement.duration) {\n\t\tthis.duration = firstElement.duration;\n\t\tif (firstElement.startTriplet) {\n\t\t\tthis.duration *= firstElement.tripletMultiplier;\n\t\t}\n\t\tthis.duration = Math.round(this.duration * 1000) / 1000;\n\t} else\n\t\tthis.duration = 0;\n};\n\nBeamElem.prototype.setHint = function () {\n\tthis.hint = true;\n};\n\nBeamElem.prototype.runningDirection = function (abcelem) {\n\tvar pitch = abcelem.averagepitch;\n\tif (pitch === undefined) return; // don't include elements like spacers in beams\n\tthis.total = Math.round(this.total + pitch);\n\tif (!this.count)\n\t\tthis.count = 0;\n\tthis.count++\n};\n\nBeamElem.prototype.add = function (abselem) {\n\tvar pitch = abselem.abcelem.averagepitch;\n\tif (pitch === undefined) return; // don't include elements like spacers in beams\n\tif (!abselem.abcelem.rest)\n\t\tthis.allrests = false;\n\tabselem.beam = this;\n\tthis.elems.push(abselem);\n\tthis.total = Math.round(this.total + pitch);\n\tif (this.min === undefined || abselem.abcelem.minpitch < this.min) {\n\t\tthis.min = abselem.abcelem.minpitch;\n\t}\n\tif (this.max === undefined || abselem.abcelem.maxpitch > this.max) {\n\t\tthis.max = abselem.abcelem.maxpitch;\n\t}\n};\n\nBeamElem.prototype.addBeam = function (beam) {\n\tthis.beams.push(beam);\n};\n\nBeamElem.prototype.setStemDirection = function () {\n\t// Have to figure this out before the notes are placed because placing the notes also places the decorations.\n\tthis.average = calcAverage(this.total, this.count);\n\tif (this.forceup) {\n\t\tthis.stemsUp = true;\n\t} else if (this.forcedown) {\n\t\tthis.stemsUp = false;\n\t} else {\n\t\tvar middleLine = 6;\t// hardcoded 6 is B\n\t\tthis.stemsUp = this.average < middleLine; // true is up, false is down;\n\t}\n\tdelete this.count;\n\tthis.total = 0;\n};\n\nBeamElem.prototype.calcDir = function () {\n\tthis.average = calcAverage(this.total, this.elems.length);\n\tif (this.forceup) {\n\t\tthis.stemsUp = true;\n\t} else if (this.forcedown) {\n\t\tthis.stemsUp = false;\n\t} else {\n\t\tvar middleLine = 6;\t// hardcoded 6 is B\n\t\tthis.stemsUp = this.average < middleLine; // true is up, false is down;\n\t}\n\tvar dir = this.stemsUp ? 'up' : 'down';\n\tfor (var i = 0; i < this.elems.length; i++) {\n\t\tfor (var j = 0; j < this.elems[i].heads.length; j++) {\n\t\t\tthis.elems[i].heads[j].stemDir = dir;\n\t\t}\n\t}\n};\n\nfunction calcAverage(total, numElements) {\n\tif (!numElements)\n\t\treturn 0;\n\treturn total / numElements;\n}\n\nmodule.exports = BeamElem;\n","const addTextIf = require(\"../add-text-if\");\nconst richText = require(\"./rich-text\");\n\nfunction BottomText(metaText, width, isPrint, paddingLeft, spacing, shouldAddClasses, getTextSize) {\n\tthis.rows = [];\n\tif (metaText.unalignedWords && metaText.unalignedWords.length > 0)\n\t\tthis.unalignedWords(metaText.unalignedWords, paddingLeft, spacing, shouldAddClasses, getTextSize);\n\tthis.extraText(metaText, paddingLeft, spacing, shouldAddClasses, getTextSize);\n\tif (metaText.footer && isPrint)\n\t\tthis.footer(metaText.footer, width, paddingLeft, getTextSize);\n}\n\nBottomText.prototype.unalignedWords = function (unalignedWords, marginLeft, spacing, shouldAddClasses, getTextSize) {\n\tvar klass = shouldAddClasses ? 'abcjs-unaligned-words' : ''\n\tvar defFont = 'wordsfont';\n\tvar space = getTextSize.calc(\"i\", defFont, klass);\n\t\n\tthis.rows.push({ move: spacing.words });\n\t\n\taddMultiLine(this.rows, '', unalignedWords, marginLeft, defFont, \"unalignedWords\", \"unalignedWords\", klass, \"unalignedWords\", spacing, shouldAddClasses, getTextSize)\n\tthis.rows.push({ move: space.height });\n}\n\nfunction addSingleLine(rows, preface, text, marginLeft, klass, shouldAddClasses, getTextSize) {\n\tif (text) {\n\t\tif (preface) {\n\t\t\tif (typeof text === 'string')\n\t\t\t\ttext = preface + text\n\t\t\telse\n\t\t\t\ttext = [{text: preface}].concat(text)\n\t\t}\n\t\tklass = shouldAddClasses ? 'abcjs-extra-text '+klass : ''\n\t\trichText(rows, text, 'historyfont', klass, \"description\", marginLeft, {absElemType: \"extraText\", anchor: 'start'}, getTextSize)\n\t}\n\n}\n\nfunction addMultiLine(rows, preface, content, marginLeft, defFont, absElemType, groupName, klass, name, spacing, shouldAddClasses, getTextSize) {\n\tif (content) {\n\t\tklass = shouldAddClasses ? 'abcjs-extra-text '+klass : ''\n\t\tvar size = getTextSize.calc(\"A\", defFont, klass);\n\t\tif (typeof content === 'string') {\n\t\t\tif (preface)\n\t\t\t\tcontent = preface + \"\\n\" + content\n\t\t\taddTextIf(rows, { marginLeft: marginLeft, text: content, font: defFont, absElemType: \"extraText\", name: name, 'dominant-baseline': 'middle', klass: klass }, getTextSize);\n\t\t\t//rows.push({move: size.height*3/4})\n\t\t} else {\n\t\t\trows.push({ startGroup: groupName, klass: klass, name: name });\n\t\t\trows.push({move: spacing.info})\n\t\t\tif (preface) {\n\t\t\t\taddTextIf(rows, { marginLeft: marginLeft, text: preface, font: defFont, absElemType: \"extraText\", name: name, 'dominant-baseline': 'middle' }, getTextSize);\n\t\t\t\trows.push({move: size.height*3/4})\n\t\t\t}\n\n\t\t\tfor (var j = 0; j < content.length; j++) {\n\t\t\t\trichText(rows, content[j], defFont, '', name, marginLeft, {anchor: 'start'}, getTextSize)\n\t\t\t\t// TODO-PER: Hack! the string and rich lines should have used up the same amount of space without this.\n\t\t\t\tif (j < content.length-1 && typeof content[j] === 'string' && typeof content[j+1] !== 'string')\n\t\t\t\t\trows.push({move: size.height*3/4})\n\t\t\t}\n\t\t\trows.push({ endGroup: groupName, absElemType: absElemType, startChar: -1, endChar: -1, name: name });\n\t\t\trows.push({move: size.height})\n\t\t}\n\t}\n}\nBottomText.prototype.extraText = function (metaText, marginLeft, spacing, shouldAddClasses, getTextSize) {\n\taddSingleLine(this.rows, \"Book: \", metaText.book, marginLeft, 'abcjs-book', shouldAddClasses, getTextSize)\n\taddSingleLine(this.rows, \"Source: \", metaText.source, marginLeft, 'abcjs-source', shouldAddClasses, getTextSize)\n\taddSingleLine(this.rows, \"Discography: \", metaText.discography, marginLeft, 'abcjs-discography', shouldAddClasses, getTextSize)\n\n\taddMultiLine(this.rows, 'Notes:', metaText.notes, marginLeft, 'historyfont', \"extraText\", \"notes\", 'abcjs-notes', \"description\", spacing, shouldAddClasses, getTextSize)\n\n\taddSingleLine(this.rows, \"Transcription: \", metaText.transcription, marginLeft, 'abcjs-transcription', shouldAddClasses, getTextSize)\n\n\taddMultiLine(this.rows, \"History:\", metaText.history, marginLeft, 'historyfont', \"extraText\", \"history\", 'abcjs-history', \"description\", spacing, shouldAddClasses, getTextSize)\n\n\taddSingleLine(this.rows, \"Copyright: \", metaText['abc-copyright'], marginLeft, 'abcjs-copyright', shouldAddClasses, getTextSize)\n\taddSingleLine(this.rows, \"Creator: \", metaText['abc-creator'], marginLeft, 'abcjs-creator', shouldAddClasses, getTextSize)\n\taddSingleLine(this.rows, \"Edited By: \", metaText['abc-edited-by'], marginLeft, 'abcjs-edited-by', shouldAddClasses, getTextSize)\n\n}\n\nBottomText.prototype.footer = function (footer, width, paddingLeft, getTextSize) {\n\tvar klass = 'header meta-bottom';\n\tvar font = \"footerfont\";\n\tthis.rows.push({ startGroup: \"footer\", klass: klass });\n\t// Note: whether there is a footer or not doesn't change any other positioning, so this doesn't change the Y-coordinate.\n\taddTextIf(this.rows, { marginLeft: paddingLeft, text: footer.left, font: font, klass: klass, name: \"footer\" }, getTextSize);\n\taddTextIf(this.rows, { marginLeft: paddingLeft + width / 2, text: footer.center, font: font, klass: klass, anchor: 'middle', name: \"footer\" }, getTextSize);\n\taddTextIf(this.rows, { marginLeft: paddingLeft + width, text: footer.right, font: font, klass: klass, anchor: 'end', name: \"footer\" }, getTextSize);\n}\n\nmodule.exports = BottomText;\n","// abc_brace_element.js: Definition of the BraceElement class.\n\nvar BraceElem = function BraceElem(voice, type) {\n\tthis.startVoice = voice;\n\tthis.type = type;\n};\n\nBraceElem.prototype.setBottomStaff = function (voice) {\n\tthis.endVoice = voice;\n\t// If only the start brace has a name then the name belongs to the brace instead of the staff.\n\tif (this.startVoice.header && !this.endVoice.header) {\n\t\tthis.header = this.startVoice.header;\n\t\tdelete this.startVoice.header;\n\t}\n};\n\nBraceElem.prototype.continuing = function (voice) {\n\t// If the final staff isn't present, then use the last one we saw.\n\tthis.lastContinuedVoice = voice;\n};\n\nBraceElem.prototype.getWidth = function () {\n\treturn 10; // TODO-PER: right now the drawing function doesn't vary the width at all. If it does in the future then this will change.\n};\n\nBraceElem.prototype.isStartVoice = function (voice) {\n\tif (this.startVoice && this.startVoice.staff && this.startVoice.staff.voices.length > 0 && this.startVoice.staff.voices[0] === voice)\n\t\treturn true;\n\treturn false;\n};\n\nmodule.exports = BraceElem;\n","// abc_crescendo_element.js: Definition of the CrescendoElem class.\n\nvar CrescendoElem = function CrescendoElem(anchor1, anchor2, dir, positioning) {\n\tthis.type = \"CrescendoElem\";\n\tthis.anchor1 = anchor1; // must have a .x and a .parent property or be null (means starts at the \"beginning\" of the line - after keysig)\n\tthis.anchor2 = anchor2; // must have a .x property or be null (means ends at the end of the line)\n\tthis.dir = dir; // either \"<\" or \">\"\n\tif (positioning === 'above')\n\t\tthis.dynamicHeightAbove = 6;\n\telse\n\t\tthis.dynamicHeightBelow = 6;\n\tthis.pitch = undefined; // This will be set later\n};\n\nmodule.exports = CrescendoElem;\n","// abc_dynamic_decoration.js: Definition of the DynamicDecoration class.\n\nvar DynamicDecoration = function DynamicDecoration(anchor, dec, position) {\n\tthis.type = \"DynamicDecoration\";\n\tthis.anchor = anchor;\n\tthis.dec = dec;\n\tif (position === 'below')\n\t\tthis.volumeHeightBelow = 6;\n\telse\n\t\tthis.volumeHeightAbove = 6;\n\tthis.pitch = undefined; // This will be set later\n};\n\nmodule.exports = DynamicDecoration;\n","// abc_ending_element.js: Definition of the EndingElement class.\n\nvar EndingElem = function EndingElem(text, anchor1, anchor2) {\n\tthis.type = \"EndingElem\";\n\tthis.text = text; // text to be displayed top left\n\tthis.anchor1 = anchor1; // must have a .x property or be null (means starts at the \"beginning\" of the line - after keysig)\n\tthis.anchor2 = anchor2; // must have a .x property or be null (means ends at the end of the line)\n\tthis.endingHeightAbove = 5;\n\tthis.pitch = undefined; // This will be set later\n};\n\nmodule.exports = EndingElem;\n","function FreeText(info, vskip, getFontAndAttr, paddingLeft, width, getTextSize) {\n\tvar text = info.text;\n\tthis.rows = [];\n\tvar size;\n\tif (vskip)\n\t\tthis.rows.push({ move: vskip });\n\tvar hash = getFontAndAttr.calc('textfont', 'defined-text');\n\tif (text === \"\") {\t// we do want to print out blank lines if they have been specified.\n\t\tthis.rows.push({ move: hash.attr['font-size'] * 2 }); // move the distance of the line, plus the distance of the margin, which is also one line.\n\t} else if (typeof text === 'string') {\n\t\tthis.rows.push({ move: hash.attr['font-size'] / 2 }); // TODO-PER: move down some - the y location should be the top of the text, but we output text specifying the center line.\n\t\tthis.rows.push({ left: paddingLeft, text: text, font: 'textfont', klass: 'defined-text', anchor: \"start\", startChar: info.startChar, endChar: info.endChar, absElemType: \"freeText\", name: \"free-text\" });\n\t\tsize = getTextSize.calc(text, 'textfont', 'defined-text');\n\t\tthis.rows.push({ move: size.height });\n\t} else if (text) {\n\t\tvar maxHeight = 0;\n\t\tvar leftSide = paddingLeft;\n\t\tvar currentFont = 'textfont';\n\t\tfor (var i = 0; i < text.length; i++) {\n\t\t\tif (text[i].font) {\n\t\t\t\tcurrentFont = text[i].font;\n\t\t\t} else\n\t\t\t\tcurrentFont = 'textfont';\n\t\t\tthis.rows.push({ left: leftSide, text: text[i].text, font: currentFont, klass: 'defined-text', anchor: 'start', startChar: info.startChar, endChar: info.endChar, absElemType: \"freeText\", name: \"free-text\" });\n\t\t\tsize = getTextSize.calc(text[i].text, getFontAndAttr.calc(currentFont, 'defined-text').font, 'defined-text');\n\t\t\tleftSide += size.width + size.height / 2; // add a little padding to the right side. The height of the font is probably a close enough approximation.\n\t\t\tmaxHeight = Math.max(maxHeight, size.height)\n\t\t}\n\t\tthis.rows.push({ move: maxHeight });\n\t} else {\n\t\t// The structure is wrong here: it requires an array to do centering, but it shouldn't have.\n\t\tif (info.length === 1) {\n\t\t\tvar x = width / 2;\n\t\t\tthis.rows.push({ left: x, text: info[0].text, font: 'textfont', klass: 'defined-text', anchor: 'middle', startChar: info.startChar, endChar: info.endChar, absElemType: \"freeText\", name: \"free-text\" });\n\t\t\tsize = getTextSize.calc(info[0].text, 'textfont', 'defined-text');\n\t\t\tthis.rows.push({ move: size.height });\n\t\t}\n\t}\n}\n\nmodule.exports = FreeText;\n","var GlissandoElem = function GlissandoElem(anchor1, anchor2) {\n\tthis.type = \"GlissandoElem\";\n\tthis.anchor1 = anchor1; // must have a .x and a .parent property or be null (means starts at the \"beginning\" of the line - after keysig)\n\tthis.anchor2 = anchor2; // must have a .x property or be null (means ends at the end of the line)\n};\n\nmodule.exports = GlissandoElem;\n","// abc_relative_element.js: Definition of the RelativeElement class.\n\nvar RelativeElement = function RelativeElement(c, dx, w, pitch, opt) {\n\topt = opt || {};\n\tthis.x = 0;\n\tthis.c = c; // character or path or string\n\tthis.dx = dx; // relative x position\n\tthis.w = w; // minimum width taken up by this element (can include gratuitous space)\n\tthis.pitch = pitch; // relative y position by pitch\n\tthis.scalex = opt.scalex || 1; // should the character/path be scaled?\n\tthis.scaley = opt.scaley || 1; // should the character/path be scaled?\n\tthis.type = opt.type || \"symbol\"; // cheap types.\n\tthis.pitch2 = opt.pitch2;\n\tthis.linewidth = opt.linewidth;\n\tthis.klass = opt.klass;\n\tthis.anchor = opt.anchor ? opt.anchor : 'middle'\n\tthis.top = pitch;\n\tif (this.pitch2 !== undefined && this.pitch2 > this.top) this.top = this.pitch2;\n\tthis.bottom = pitch;\n\tif (this.pitch2 !== undefined && this.pitch2 < this.bottom) this.bottom = this.pitch2;\n\tif (opt.thickness) {\n\t\tthis.top += opt.thickness / 2;\n\t\tthis.bottom -= opt.thickness / 2;\n\t}\n\tif (opt.stemHeight) {\n\t\tif (opt.stemHeight > 0)\n\t\t\tthis.top += opt.stemHeight;\n\t\telse\n\t\t\tthis.bottom += opt.stemHeight;\n\t}\n\tif (opt.dim)\n\t\tthis.dim = opt.dim;\n\tif (opt.position)\n\t\tthis.position = opt.position;\n\tthis.height = opt.height ? opt.height : 4; // The +1 is to give a little bit of padding.\n\tif (opt.top)\n\t\tthis.top = opt.top;\n\tif (opt.bottom)\n\t\tthis.bottom = opt.bottom;\n\tif (opt.name)\n\t\tthis.name = opt.name;\n\telse if (this.c)\n\t\tthis.name = this.c;\n\telse\n\t\tthis.name = this.type;\n\tif (opt.realWidth)\n\t\tthis.realWidth = opt.realWidth;\n\telse\n\t\tthis.realWidth = this.w;\n\tthis.centerVertically = false;\n\tswitch (this.type) {\n\t\tcase \"debug\":\n\t\t\tthis.chordHeightAbove = this.height;\n\t\t\tbreak;\n\t\tcase \"lyric\":\n\t\t\tif (opt.position && opt.position === 'below')\n\t\t\t\tthis.lyricHeightBelow = this.height;\n\t\t\telse\n\t\t\t\tthis.lyricHeightAbove = this.height;\n\t\t\tbreak;\n\t\tcase \"chord\":\n\t\t\tif (opt.position && opt.position === 'below')\n\t\t\t\tthis.chordHeightBelow = this.height;\n\t\t\telse\n\t\t\t\tthis.chordHeightAbove = this.height;\n\t\t\tbreak;\n\t\tcase \"text\":\n\t\t\tif (this.pitch === undefined) {\n\t\t\t\tif (opt.position && opt.position === 'below')\n\t\t\t\t\tthis.chordHeightBelow = this.height;\n\t\t\t\telse\n\t\t\t\t\tthis.chordHeightAbove = this.height;\n\t\t\t} else\n\t\t\t\tthis.centerVertically = true;\n\t\t\tbreak;\n\t\tcase \"part\": this.partHeightAbove = this.height; break;\n\t}\n};\n\nRelativeElement.prototype.getChordDim = function () {\n\tif (this.type === \"debug\")\n\t\treturn null;\n\tif (!this.chordHeightAbove && !this.chordHeightBelow)\n\t\treturn null;\n\t// Chords are centered, annotations are left justified.\n\t// NOTE: the font reports extra space to the left and right anyway, so there is a built in margin.\n\t// We add a little margin so that items can't touch - we use half the font size as the margin, so that is 1/4 on each side.\n\t// if there is only one character that we're printing, use half of that margin.\n\t// var margin = this.dim.font.size/4;\n\t// if (this.c.length === 1)\n\t// \tmargin = margin / 2;\n\tvar margin = 0;\n\n\tvar offset = this.type === \"chord\" ? this.realWidth / 2 : 0;\n\tvar left = this.x - offset - margin;\n\tvar right = left + this.realWidth + margin;\n\treturn { left: left, right: right };\n};\n\nRelativeElement.prototype.invertLane = function (total) {\n\tif (this.lane === undefined)\n\t\tthis.lane = 0;\n\tthis.lane = total - this.lane - 1;\n};\n\nRelativeElement.prototype.putChordInLane = function (i) {\n\tthis.lane = i;\n\t// Add some extra space to account for the character's descenders.\n\tif (this.chordHeightAbove)\n\t\tthis.chordHeightAbove = (this.height * 1.25) * this.lane;\n\telse\n\t\tthis.chordHeightBelow = (this.height * 1.25) * this.lane;\n};\n\nRelativeElement.prototype.getLane = function () {\n\tif (this.lane === undefined)\n\t\treturn 0;\n\treturn this.lane;\n};\n\nRelativeElement.prototype.setX = function (x) {\n\tthis.x = x + this.dx;\n};\n\nmodule.exports = RelativeElement;\n","const addTextIf = require(\"../add-text-if\");\n\nfunction richText(rows, str, defFont, klass, name, paddingLeft, attr, getTextSize) {\n\tvar space = getTextSize.calc(\"i\", defFont, klass);\n\tif (str === '') {\n\t\trows.push({ move: space.height });\n\t} else {\n\t\tif (typeof str === 'string') {\n\t\t\taddTextIf(rows, { marginLeft: paddingLeft, text: str, font: defFont, klass: klass, marginTop: attr.marginTop, anchor: attr.anchor, absElemType: attr.absElemType, info: attr.info, name: name }, getTextSize);\n\t\t\treturn\n\t\t}\n\t\tif (attr.marginTop)\n\t\t\trows.push({move: attr.marginTop})\n\n\t\tvar largestY = 0;\n\t\tvar gap = 0;\n\t\tvar row = {\n\t\t\tleft: paddingLeft,\n\t\t\tanchor: attr.anchor,\n\t\t\tphrases: []\n\t\t}\n\t\tif (klass)\n\t\t\trow.klass = klass\n\t\trows.push(row)\n\t\tfor (var k = 0; k < str.length; k++) {\n\t\t\tvar thisWord = str[k];\n\t\t\tvar font = (thisWord.font) ? thisWord.font : getTextSize.attr(defFont, klass).font;\n\t\t\tvar phrase = {\n\t\t\t\tcontent: thisWord.text,\n\t\t\t}\n\t\t\tif (font)\n\t\t\t\tphrase.attrs = {\n\t\t\t\t\t\"font-family\": getTextSize.getFamily(font.face),\n\t\t\t\t\t\"font-size\": font.size,\n\t\t\t\t\t\"font-weight\": font.weight,\n\t\t\t\t\t\"font-style\": font.style,\n\t\t\t\t\t\"font-decoration\": font.decoration,\n\t\t\t}\n\t\t\t//if (thisWord.text) {\n\t\t\t\trow.phrases.push(phrase);\n\t\t\t\tvar size = getTextSize.calc(thisWord.text, font, klass);\n\t\t\t\tlargestY = Math.max(largestY, size.height);\n\t\t\t\tif (thisWord.text[thisWord.text.length - 1] === ' ') {\n\t\t\t\t\tgap = space.width\n\t\t\t\t}\n\t\t}\n\t\trows.push({ move: largestY });\n\t}\n}\n\nmodule.exports = richText;\n","function Separator(spaceAbove, lineLength, spaceBelow) {\n\tthis.rows = [];\n\tif (spaceAbove)\n\t\tthis.rows.push({ move: spaceAbove });\n\tthis.rows.push({ separator: lineLength, absElemType: \"separator\" });\n\tif (spaceBelow)\n\t\tthis.rows.push({ move: spaceBelow });\n}\n\nmodule.exports = Separator;\n","// abc_staff_group_element.js: Definition of the StaffGroupElement class.\n\n// StaffGroupElement contains all the elements that go together to make one line of music.\n// That might be multiple staves that are tied together, and it might be multiple voices on one staff.\n//\n// Methods:\n// constructor: some basic initialization\n// addVoice(): Called once for each voice. May add a new staff if needed.\n// finished(): Called only internally by layout()\n// layout(): This does all the layout. It sets the following: spacingunits, startx, minspace, w, and the x-coordinate of each element in each voice.\n// draw(): Calls the underlying methods on the voice objects to do the drawing. Sets y and height.\n//\n// Members:\n// staffs: an array of all the staves in this group. Each staff contains the following elements:\n// { top, bottom, highest, lowest, y }\n// voices: array of VoiceElement objects. This is mostly passed in, but the VoiceElement objects are modified here.\n//\n// spacingunits: number of relative x-units in the line. Used by the calling function to pass back in as the \"spacing\" input parameter.\n// TODO-PER: This should actually be passed back as a return value.\n// minspace: smallest space between two notes. Used by the calling function to pass back in as the \"spacing\" input parameter.\n// TODO-PER: This should actually be passed back as a return value.\n// startx: The left edge, taking the margin and the optional voice name. Used by the draw() method.\n// w: The width of the line. Used by calling function to pass back in as the \"spacing\" input parameter, and the draw() method.\n// TODO-PER: This should actually be passed back as a return value. (TODO-PER: in pixels or spacing units?)\n// y: The top of the staff group, in pixels. This is set in the draw method.\n// TODO-PER: Where is that used? It looks like it might not be needed.\n// height: Set in the draw() method to the height actually used. Used by the calling function to know where to start the next staff group.\n// TODO-PER: This should actually be set in the layout method and passed back as a return value.\nvar calcHeight = require('../calc-height');\n\nvar StaffGroupElement = function (getTextSize) {\n\tthis.getTextSize = getTextSize;\n\tthis.voices = [];\n\tthis.staffs = [];\n\tthis.brace = undefined; //tony\n\tthis.bracket = undefined;\n};\n\nStaffGroupElement.prototype.setLimit = function (member, voice) {\n\tif (!voice.specialY[member]) return;\n\tif (!voice.staff.specialY[member])\n\t\tvoice.staff.specialY[member] = voice.specialY[member];\n\telse\n\t\tvoice.staff.specialY[member] = Math.max(voice.staff.specialY[member], voice.specialY[member]);\n};\n\nStaffGroupElement.prototype.addVoice = function (voice, staffnumber, stafflines) {\n\tvar voiceNum = this.voices.length;\n\tthis.voices[voiceNum] = voice;\n\tif (this.staffs[staffnumber])\n\t\tthis.staffs[staffnumber].voices.push(voiceNum);\n\telse {\n\t\t// TODO-PER: how does the min/max change when stafflines is not 5?\n\t\tthis.staffs[this.staffs.length] = {\n\t\t\ttop: 10,\n\t\t\tbottom: 2,\n\t\t\tlines: stafflines,\n\t\t\tvoices: [voiceNum],\n\t\t\tspecialY: {\n\t\t\t\ttempoHeightAbove: 0,\n\t\t\t\tpartHeightAbove: 0,\n\t\t\t\tvolumeHeightAbove: 0,\n\t\t\t\tdynamicHeightAbove: 0,\n\t\t\t\tendingHeightAbove: 0,\n\t\t\t\tchordHeightAbove: 0,\n\t\t\t\tlyricHeightAbove: 0,\n\n\t\t\t\tlyricHeightBelow: 0,\n\t\t\t\tchordHeightBelow: 0,\n\t\t\t\tvolumeHeightBelow: 0,\n\t\t\t\tdynamicHeightBelow: 0\n\t\t\t}\n\t\t};\n\t}\n\tvoice.staff = this.staffs[staffnumber];\n};\n\nStaffGroupElement.prototype.setHeight = function () {\n\tthis.height = calcHeight(this);\n};\n\nStaffGroupElement.prototype.setWidth = function (width) {\n\tthis.w = width;\n\tfor (var i = 0; i < this.voices.length; i++) {\n\t\tthis.voices[i].setWidth(width);\n\t}\n};\n\nStaffGroupElement.prototype.setStaffLimits = function (voice) {\n\tvoice.staff.top = Math.max(voice.staff.top, voice.top);\n\tvoice.staff.bottom = Math.min(voice.staff.bottom, voice.bottom);\n\tthis.setLimit('tempoHeightAbove', voice);\n\tthis.setLimit('partHeightAbove', voice);\n\tthis.setLimit('volumeHeightAbove', voice);\n\tthis.setLimit('dynamicHeightAbove', voice);\n\tthis.setLimit('endingHeightAbove', voice);\n\tthis.setLimit('chordHeightAbove', voice);\n\tthis.setLimit('lyricHeightAbove', voice);\n\tthis.setLimit('lyricHeightBelow', voice);\n\tthis.setLimit('chordHeightBelow', voice);\n\tthis.setLimit('volumeHeightBelow', voice);\n\tthis.setLimit('dynamicHeightBelow', voice);\n};\n\nmodule.exports = StaffGroupElement;\n","function Subtitle(spaceAbove, formatting, info, center, paddingLeft, getTextSize) {\n\tthis.rows = [];\n\tif (spaceAbove)\n\t\tthis.rows.push({ move: spaceAbove });\n\tvar tAnchor = formatting.titleleft ? 'start' : 'middle';\n\tvar tLeft = formatting.titleleft ? paddingLeft : center;\n\tthis.rows.push({ left: tLeft, text: info.text, font: 'subtitlefont', klass: 'text subtitle', anchor: tAnchor, startChar: info.startChar, endChar: info.endChar, absElemType: \"subtitle\", name: \"subtitle\" });\n\tvar size = getTextSize.calc(info.text, 'subtitlefont', 'text subtitle');\n\tthis.rows.push({ move: size.height });\n}\n\nmodule.exports = Subtitle;\n","// abc_tempo_element.js: Definition of the TempoElement class.\n\nvar AbsoluteElement = require('./absolute-element');\nvar RelativeElement = require('./relative-element');\n\nvar TempoElement = function TempoElement(tempo, tuneNumber, createNoteHead) {\n\tthis.type = \"TempoElement\";\n\tthis.tempo = tempo;\n\tthis.tempo.type = \"tempo\"; /// TODO-PER: this should be set earlier, in the parser, probably.\n\tthis.tuneNumber = tuneNumber;\n\t// TODO: can these two properties be merged?\n\tthis.totalHeightInPitches = 6;\n\tthis.tempoHeightAbove = this.totalHeightInPitches;\n\tthis.pitch = undefined; // This will be set later\n\tif (this.tempo.duration && !this.tempo.suppressBpm) {\n\t\tthis.note = this.createNote(createNoteHead, tempo, tuneNumber);\n\t}\n};\n\nTempoElement.prototype.setX = function (x) {\n\tthis.x = x;\n};\n\nTempoElement.prototype.createNote = function (createNoteHead, tempo, tuneNumber) {\n\tvar temposcale = 0.75;\n\tvar duration = tempo.duration[0]; // TODO when multiple durations\n\tvar absElem = new AbsoluteElement(tempo, duration, 1, 'tempo', tuneNumber);\n\t// There aren't an infinite number of note values, but we are passed a float, so just in case something is off upstream,\n\t// merge all of the in between points.\n\tvar dot;\n\tvar flag;\n\tvar note;\n\tif (duration <= 1 / 32) { note = \"noteheads.quarter\"; flag = \"flags.u32nd\"; dot = 0; }\n\telse if (duration <= 1 / 16) { note = \"noteheads.quarter\"; flag = \"flags.u16th\"; dot = 0; }\n\telse if (duration <= 3 / 32) { note = \"noteheads.quarter\"; flag = \"flags.u16nd\"; dot = 1; }\n\telse if (duration <= 1 / 8) { note = \"noteheads.quarter\"; flag = \"flags.u8th\"; dot = 0; }\n\telse if (duration <= 3 / 16) { note = \"noteheads.quarter\"; flag = \"flags.u8th\"; dot = 1; }\n\telse if (duration <= 1 / 4) { note = \"noteheads.quarter\"; dot = 0; }\n\telse if (duration <= 3 / 8) { note = \"noteheads.quarter\"; dot = 1; }\n\telse if (duration <= 1 / 2) { note = \"noteheads.half\"; dot = 0; }\n\telse if (duration <= 3 / 4) { note = \"noteheads.half\"; dot = 1; }\n\telse if (duration <= 1) { note = \"noteheads.whole\"; dot = 0; }\n\telse if (duration <= 1.5) { note = \"noteheads.whole\"; dot = 1; }\n\telse if (duration <= 2) { note = \"noteheads.dbl\"; dot = 0; }\n\telse { note = \"noteheads.dbl\"; dot = 1; }\n\n\tvar ret = createNoteHead(absElem, note, { verticalPos: 0 }, // This is just temporary: we'll offset the vertical positioning when we get the actual vertical spot.\n\t\t{ dir: \"up\", flag: flag, dot: dot, scale: temposcale });\n\tvar tempoNote = ret.notehead;\n\tabsElem.addHead(tempoNote);\n\tvar stem;\n\tif (note !== \"noteheads.whole\" && note !== \"noteheads.dbl\") {\n\t\tvar p1 = 1 / 3 * temposcale;\n\t\tvar p2 = 5 * temposcale;\n\t\tvar dx = tempoNote.dx + tempoNote.w;\n\t\tvar width = -0.6;\n\t\tstem = new RelativeElement(null, dx, 0, p1, { \"type\": \"stem\", \"pitch2\": p2, linewidth: width });\n\t\tabsElem.addRight(stem);\n\t}\n\treturn absElem;\n};\n\nmodule.exports = TempoElement;\n","// abc_tie_element.js: Definition of the TieElement class.\n\nvar TieElem = function TieElem(options) {\n\tthis.type = \"TieElem\";\n\t//\tconsole.log(\"constructor\", options.anchor1 ? options.anchor1.pitch : \"N/A\", options.anchor2 ? options.anchor2.pitch : \"N/A\", options.isTie, options.isGrace);\n\tthis.anchor1 = options.anchor1; // must have a .x and a .pitch, and a .parent property or be null (means starts at the \"beginning\" of the line - after keysig)\n\tthis.anchor2 = options.anchor2; // must have a .x and a .pitch property or be null (means ends at the end of the line)\n\tif (options.isGrace)\n\t\tthis.isGrace = true;\n\tif (options.fixedY)\n\t\tthis.fixedY = true;\n\tif (options.stemDir)\n\t\tthis.stemDir = options.stemDir;\n\tif (options.voiceNumber !== undefined)\n\t\tthis.voiceNumber = options.voiceNumber;\n\tif (options.style !== undefined)\n\t\tthis.dotted = true;\n\tthis.internalNotes = [];\n};\n\nTieElem.prototype.addInternalNote = function (note) {\n\tthis.internalNotes.push(note);\n};\n\nTieElem.prototype.setEndAnchor = function (anchor2) {\n\t//\tconsole.log(\"end\", this.anchor1 ? this.anchor1.pitch : \"N/A\", anchor2 ? anchor2.pitch : \"N/A\", this.isTie, this.isGrace);\n\tthis.anchor2 = anchor2; // must have a .x and a .pitch property or be null (means ends at the end of the line)\n\n\t// we don't really have enough info to know what the vertical extent is yet and we won't until drawing. This will just give it enough\n\t// room on either side (we don't even know if the slur will be above yet). We need to set this so that we can make sure the voice has\n\t// at least enough room that the line doesn't get cut off if the tie or slur is the lowest thing.\n\tif (this.anchor1) {\n\t\tthis.top = Math.max(this.anchor1.pitch, this.anchor2.pitch) + 4\n\t\tthis.bottom = Math.min(this.anchor1.pitch, this.anchor2.pitch) - 4\n\t} else {\n\t\tthis.top = this.anchor2.pitch + 4\n\t\tthis.bottom = this.anchor2.pitch - 4\n\t}\n};\n\n// If we encounter a repeat sign, then we don't want to extend either a tie or a slur past it, so these are called to be a limit.\nTieElem.prototype.setStartX = function (startLimitElem) {\n\tthis.startLimitX = startLimitElem;\n};\n\nTieElem.prototype.setEndX = function (endLimitElem) {\n\tthis.endLimitX = endLimitElem;\n};\n\nTieElem.prototype.setHint = function () {\n\tthis.hint = true;\n};\n\nTieElem.prototype.calcTieDirection = function () {\n\t// The rules:\n\t// 1) If it is in a grace note group, then the direction is always BELOW.\n\t// 2) If it is in a single voice, then the direction is always OPPOSITE of the stem (or where the stem would have been in the case of whole notes.)\n\t// 3) If the stem direction is forced (probably because there are two voices on the same line), then the direction is the SAME as the stem direction.\n\n\tif (this.isGrace)\n\t\tthis.above = false;\n\telse if (this.voiceNumber === 0)\n\t\tthis.above = true;\n\telse if (this.voiceNumber > 0)\n\t\tthis.above = false;\n\telse {\n\t\tvar referencePitch;\n\t\tif (this.anchor1)\n\t\t\treferencePitch = this.anchor1.pitch;\n\t\telse if (this.anchor2)\n\t\t\treferencePitch = this.anchor2.pitch;\n\t\telse\n\t\t\treferencePitch = 14; // TODO-PER: this can't really happen normally. This would imply that a tie crossed over three lines, something like \"C-\\nz\\nC\"\n\t\t// Put the arc in the opposite direction of the stem. That isn't always the pitch if one or both of the notes are beamed with something that affects its stem.\n\t\tif ((this.anchor1 && this.anchor1.stemDir === 'down') && (this.anchor2 && this.anchor2.stemDir === \"down\"))\n\t\t\tthis.above = true;\n\t\telse if ((this.anchor1 && this.anchor1.stemDir === 'up') && (this.anchor2 && this.anchor2.stemDir === \"up\"))\n\t\t\tthis.above = false;\n\t\telse if (this.anchor1 && this.anchor2)\n\t\t\tthis.above = referencePitch >= 6;\n\t\telse if (this.anchor1)\n\t\t\tthis.above = this.anchor1.stemDir === \"down\";\n\t\telse if (this.anchor2)\n\t\t\tthis.above = this.anchor2.stemDir === \"down\";\n\t\telse\n\t\t\tthis.above = referencePitch >= 6;\n\t}\n};\n\n// From \"standard music notation practice\" by Music Publishers’ Association:\n// 1) Slurs are placed under the note heads if all stems go up.\n// 2) Slurs are placed over the note heads if all stems go down.\n// 3) If there are both up stems and down stems, prefer placing the slur over.\n// 4) When the staff has opposite stemmed voices, all slurs should be on the stemmed side.\n\nTieElem.prototype.calcSlurDirection = function () {\n\tif (this.isGrace)\n\t\tthis.above = false;\n\telse if (this.voiceNumber === 0)\n\t\tthis.above = true;\n\telse if (this.voiceNumber > 0)\n\t\tthis.above = false;\n\telse {\n\t\tvar hasDownStem = false;\n\t\tif (this.anchor1 && this.anchor1.stemDir === \"down\")\n\t\t\thasDownStem = true;\n\t\tif (this.anchor2 && this.anchor2.stemDir === \"down\")\n\t\t\thasDownStem = true;\n\t\tfor (var i = 0; i < this.internalNotes.length; i++) {\n\t\t\tvar n = this.internalNotes[i];\n\t\t\tif (n.stemDir === \"down\")\n\t\t\t\thasDownStem = true;\n\t\t}\n\t\tthis.above = hasDownStem;\n\t}\n};\n\nTieElem.prototype.calcX = function (lineStartX, lineEndX) {\n\tif (this.anchor1) {\n\t\tthis.startX = this.anchor1.x; // The normal case where there is a starting element to attach to.\n\t\tif (this.anchor1.scalex < 1) // this is a grace note - don't offset the tie as much.\n\t\t\tthis.startX -= 3;\n\t} else if (this.startLimitX)\n\t\tthis.startX = this.startLimitX.x + this.startLimitX.w; // if there is no start element, but there is a repeat mark before the start of the line.\n\telse {\n\t\tif (this.anchor2)\n\t\t\tthis.startX = this.anchor2.x - 20; // There is no element and no repeat mark: make a small arc\n\t\telse\n\t\t\tthis.startX = lineStartX; // Don't have any guidance, so extend to beginning of line\n\t}\n\tif (!this.anchor1 && this.dotted)\n\t\tthis.startX -= 3; // The arc needs to be long enough to tell that it is dotted.\n\n\tif (this.anchor2)\n\t\tthis.endX = this.anchor2.x; // The normal case where there is a starting element to attach to.\n\telse if (this.endLimitX)\n\t\tthis.endX = this.endLimitX.x; // if there is no start element, but there is a repeat mark before the start of the line.\n\telse\n\t\tthis.endX = lineEndX; // There is no element and no repeat mark: extend to the beginning of the line.\n};\n\nTieElem.prototype.calcTieY = function () {\n\t// If the tie comes from another line, then one or both anchors will be missing.\n\tif (this.anchor1)\n\t\tthis.startY = this.anchor1.pitch;\n\telse if (this.anchor2)\n\t\tthis.startY = this.anchor2.pitch;\n\telse\n\t\tthis.startY = this.above ? 14 : 0;\n\n\tif (this.anchor2)\n\t\tthis.endY = this.anchor2.pitch;\n\telse if (this.anchor1)\n\t\tthis.endY = this.anchor1.pitch;\n\telse\n\t\tthis.endY = this.above ? 14 : 0;\n};\n\n// From \"standard music notation practice\" by Music Publishers’ Association:\n// 1) If the anchor note is down stem, the slur points to the note head.\n// 2) If the anchor note is up stem, and the slur is over, then point to middle of stem.\n\nTieElem.prototype.calcSlurY = function () {\n\tif (this.anchor1 && this.anchor2) {\n\t\tif (this.above && this.anchor1.stemDir === \"up\" && !this.fixedY) {\n\t\t\tthis.startY = (this.anchor1.highestVert + this.anchor1.pitch) / 2;\n\t\t\tthis.startX += this.anchor1.w / 2; // When going to the middle of the stem, bump the line to the right a little bit to make it look right.\n\t\t} else\n\t\t\tthis.startY = this.anchor1.pitch;\n\n\t\t// If the closing note has an up stem, and it is beamed, and it isn't the first note in the beam, then the beam will get in the way.\n\t\tvar beamInterferes = this.anchor2.parent.beam && this.anchor2.parent.beam.stemsUp && this.anchor2.parent.beam.elems[0] !== this.anchor2.parent;\n\t\tvar midPoint = (this.anchor2.highestVert + this.anchor2.pitch) / 2;\n\t\tif (this.above && this.anchor2.stemDir === \"up\" && !this.fixedY && !beamInterferes && (midPoint < this.startY)) {\n\t\t\tthis.endY = midPoint;\n\t\t\tthis.endX += Math.round(this.anchor2.w / 2); // When going to the middle of the stem, bump the line to the right a little bit to make it look right.\n\t\t} else\n\t\t\tthis.endY = this.above && beamInterferes ? this.anchor2.highestVert : this.anchor2.pitch;\n\n\t\tif (this.anchor1.scalex === 1) { // Need a way to tell if this is a grace note - if so then keep the slur as close as possible. TODO-PER-HACK: this should be more declaratively determined.\n\t\t\tvar hasBeam1 = !!this.anchor1.parent.beam\n\t\t\tvar hasBeam2 = !!this.anchor2.parent.beam\n\t\t\tif (hasBeam1) {\n\t\t\t\tvar isLastInBeam = this.anchor1.parent === this.anchor1.parent.beam.elems[this.anchor1.parent.beam.elems.length-1]\n\t\t\t\tif (!isLastInBeam) {\n\t\t\t\t\t\tif (this.above)\n\t\t\t\t\t\tthis.startY = this.anchor1.parent.fixed.t\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.startY = this.anchor1.parent.fixed.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (hasBeam2) {\n\t\t\t\tvar isFirstInBeam = this.anchor2.parent === this.anchor2.parent.beam.elems[0]\n\t\t\t\tif (!isFirstInBeam) {\n\t\t\t\t\tif (this.above)\n\t\t\t\t\t\tthis.endY = this.anchor2.parent.fixed.t\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.endY = this.anchor2.parent.fixed.b\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else if (this.anchor1) {\n\t\tthis.startY = this.endY = this.anchor1.pitch;\n\t} else if (this.anchor2) {\n\t\tthis.startY = this.endY = this.anchor2.pitch;\n\t} else {\n\t\t// This is the case where the slur covers the entire line.\n\t\t// TODO-PER: figure out where the real top and bottom of the line are.\n\t\tthis.startY = this.above ? 14 : 0;\n\t\tthis.endY = this.above ? 14 : 0;\n\t}\n};\n\nTieElem.prototype.avoidCollisionAbove = function () {\n\t// Double check that an interior note in the slur isn't so high that it interferes.\n\tif (this.above) {\n\t\tvar maxInnerHeight = -50;\n\t\tfor (var i = 0; i < this.internalNotes.length; i++) {\n\t\t\tif (this.internalNotes[i].highestVert > maxInnerHeight)\n\t\t\t\tmaxInnerHeight = this.internalNotes[i].highestVert;\n\t\t}\n\t\tif (maxInnerHeight > this.startY && maxInnerHeight > this.endY)\n\t\t\tthis.startY = this.endY = maxInnerHeight - 1;\n\t}\n};\n\nmodule.exports = TieElem;\n","const addTextIf = require(\"../add-text-if\");\nconst richText = require(\"./rich-text\");\n\nfunction TopText(metaText, metaTextInfo, formatting, lines, width, isPrint, paddingLeft, spacing, shouldAddClasses, getTextSize) {\n\tthis.rows = [];\n\n\tif (metaText.header && isPrint) {\n\t\t// Note: whether there is a header or not doesn't change any other positioning, so this doesn't change the Y-coordinate.\n\t\t// This text goes above the margin, so we'll temporarily move up.\n\t\tvar headerTextHeight = getTextSize.calc(\"X\", \"headerfont\", 'abcjs-header abcjs-meta-top').height;\n\t\taddTextIf(this.rows, { marginLeft: paddingLeft, text: metaText.header.left, font: 'headerfont', klass: 'header meta-top', marginTop: -headerTextHeight, info: metaTextInfo.header, name: \"header\" }, getTextSize);\n\t\taddTextIf(this.rows, { marginLeft: paddingLeft + width / 2, text: metaText.header.center, font: 'headerfont', klass: 'header meta-top', marginTop: -headerTextHeight, anchor: 'middle', info: metaTextInfo.header, name: \"header\" }, getTextSize);\n\t\taddTextIf(this.rows, { marginLeft: paddingLeft + width, text: metaText.header.right, font: 'headerfont', klass: 'header meta-top', marginTop: -headerTextHeight, anchor: 'end', info: metaTextInfo.header, name: \"header\" }, getTextSize);\n\n\t\t//\t\tTopText.prototype.addTextIf = function (marginLeft, text, font, klass, marginTop, marginBottom, anchor, getTextSize, absElemType, noMove) {\n\t}\n\tif (isPrint)\n\t\tthis.rows.push({ move: spacing.top });\n\tvar tAnchor = formatting.titleleft ? 'start' : 'middle';\n\tvar tLeft = formatting.titleleft ? paddingLeft : paddingLeft + width / 2;\n\tif (metaText.title) {\n\t\tvar klass = shouldAddClasses ? 'abcjs-title' : ''\n\t\trichText(this.rows, metaText.title, \"titlefont\", klass, 'title', tLeft, {marginTop: spacing.title, anchor: tAnchor, absElemType: \"title\", info: metaTextInfo.title}, getTextSize)\n\t}\n\tif (lines.length) {\n\t\tvar index = 0;\n\t\twhile (index < lines.length && lines[index].subtitle) {\n\t\t\tvar klass = shouldAddClasses ? 'abcjs-text abcjs-subtitle' : ''\n\t\t\trichText(this.rows, lines[index].subtitle.text, \"subtitlefont\", klass, 'subtitle', tLeft, {marginTop: spacing.subtitle, anchor: tAnchor, absElemType: \"subtitle\", info: lines[index].subtitle}, getTextSize)\n\t\t\tindex++;\n\t\t}\n\t}\n\n\tif (metaText.rhythm || metaText.origin || metaText.composer) {\n\t\tthis.rows.push({ move: spacing.composer });\n\t\tif (metaText.rhythm && metaText.rhythm.length > 0) {\n\t\t\tvar noMove = !!(metaText.composer || metaText.origin);\n\t\t\tvar klass = shouldAddClasses ? 'abcjs-rhythm' : ''\n\t\t\taddTextIf(this.rows, { marginLeft: paddingLeft, text: metaText.rhythm, font: 'infofont', klass: klass, absElemType: \"rhythm\", noMove: noMove, info: metaTextInfo.rhythm, name: \"rhythm\" }, getTextSize);\n\t\t}\n\t\tvar hasSimpleComposerLine = true\n\t\tif (metaText.composer && typeof metaText.composer !== 'string')\n\t\t\thasSimpleComposerLine = false\n\t\tif (metaText.origin && typeof metaText.origin !== 'string')\n\t\t\thasSimpleComposerLine = false\n\t\t\t\n\t\tvar composerLine = metaText.composer ? metaText.composer : '';\n\t\tif (metaText.origin) {\n\t\t\tif (typeof composerLine === 'string' && typeof metaText.origin === 'string')\n\t\t\t\tcomposerLine += ' (' + metaText.origin + ')';\n\t\t\telse if (typeof composerLine === 'string' && typeof metaText.origin !== 'string') {\n\t\t\t\tcomposerLine = [{text:composerLine}]\n\t\t\t\tcomposerLine.push({text:\" (\"})\n\t\t\t\tcomposerLine = composerLine.concat(metaText.origin)\n\t\t\t\tcomposerLine.push({text:\")\"})\n\t\t\t} else {\n\t\t\t\tcomposerLine.push({text:\" (\"})\n\t\t\t\tcomposerLine = composerLine.concat(metaText.origin)\n\t\t\t\tcomposerLine.push({text:\")\"})\n\t\t\t}\n\t\t}\n\t\tif (composerLine) {\n\t\t\tvar klass = shouldAddClasses ? 'abcjs-composer' : ''\n\t\t\trichText(this.rows, composerLine, 'composerfont', klass, \"composer\", paddingLeft+width, {anchor: \"end\", absElemType: \"composer\", info: metaTextInfo.composer, ingroup: true}, getTextSize)\n\t\t}\n\t}\n\n\tif (metaText.author && metaText.author.length > 0) {\n\t\tvar klass = shouldAddClasses ? 'abcjs-author' : ''\n\t\trichText(this.rows, metaText.author, 'composerfont', klass, \"author\", paddingLeft+width, {anchor: \"end\", absElemType: \"author\", info: metaTextInfo.author}, getTextSize)\n\t}\n\n\tif (metaText.partOrder && metaText.partOrder.length > 0) {\n\t\tvar klass = shouldAddClasses ? 'abcjs-part-order' : ''\n\t\trichText(this.rows, metaText.partOrder, 'partsfont', klass, \"part-order\", paddingLeft, {absElemType: \"partOrder\", info: metaTextInfo.partOrder, anchor: 'start'}, getTextSize)\n\n\t}\n}\n\nmodule.exports = TopText;\n","// abc_triplet_element.js: Definition of the TripletElem class.\n\nvar TripletElem = function TripletElem(number, anchor1, options) {\n\tthis.type = \"TripletElem\";\n\tthis.anchor1 = anchor1; // must have a .x and a .parent property or be null (means starts at the \"beginning\" of the line - after key signature)\n\tthis.number = number;\n\tthis.durationClass = ('d' + (Math.round(anchor1.parent.durationClass * 1000) / 1000)).replace(/\\./, '-');\n\tthis.middleElems = []; // This is to calculate the highest interior pitch. It is used to make sure that the drawn bracket never crosses a really high middle note.\n\tthis.flatBeams = options.flatBeams;\n};\n\nTripletElem.prototype.isClosed = function () {\n\treturn !!this.anchor2;\n};\n\nTripletElem.prototype.middleNote = function (elem) {\n\tthis.middleElems.push(elem);\n};\n\nTripletElem.prototype.setCloseAnchor = function (anchor2) {\n\tthis.anchor2 = anchor2;\n\t// TODO-PER: This used to be just for beamed triplets but it looks like bracketed triplets need extra room, too. The only one that doesn't is stem down and beamed\n\t//if (this.anchor1.parent.beam)\n\tif (!this.anchor1.parent.beam || this.anchor1.stemDir === 'up')\n\t\tthis.endingHeightAbove = 4;\n};\n\nmodule.exports = TripletElem;\n","// abc_voice_element.js: Definition of the VoiceElement class.\n\nvar VoiceElement = function VoiceElement(voicenumber, voicetotal) {\n\tthis.children = [];\n\tthis.beams = [];\n\tthis.otherchildren = []; // ties, slurs, triplets\n\tthis.w = 0;\n\tthis.duplicate = false;\n\tthis.voicenumber = voicenumber; //number of the voice on a given stave (not staffgroup)\n\tthis.voicetotal = voicetotal;\n\tthis.bottom = 7;\n\tthis.top = 7;\n\tthis.specialY = {\n\t\ttempoHeightAbove: 0,\n\t\tpartHeightAbove: 0,\n\t\tvolumeHeightAbove: 0,\n\t\tdynamicHeightAbove: 0,\n\t\tendingHeightAbove: 0,\n\t\tchordHeightAbove: 0,\n\t\tlyricHeightAbove: 0,\n\n\t\tlyricHeightBelow: 0,\n\t\tchordHeightBelow: 0,\n\t\tvolumeHeightBelow: 0,\n\t\tdynamicHeightBelow: 0\n\t};\n};\n\nVoiceElement.prototype.addChild = function (absElem) {\n\t// This is always passed an AbsoluteElement\n\tif (absElem.type === 'bar') {\n\t\tvar firstItem = true;\n\t\tfor (var i = 0; firstItem && i < this.children.length; i++) {\n\t\t\tif (this.children[i].type.indexOf(\"staff-extra\") < 0 && this.children[i].type !== \"tempo\")\n\t\t\t\tfirstItem = false;\n\t\t}\n\t\tif (!firstItem) {\n\t\t\tthis.beams.push(\"bar\");\n\t\t\tthis.otherchildren.push(\"bar\");\n\t\t}\n\t}\n\tthis.children[this.children.length] = absElem;\n\tthis.setRange(absElem);\n};\n\nVoiceElement.prototype.setLimit = function (member, child) {\n\t// Sometimes we get an absolute element in here and sometimes we get some type of relative element.\n\t// If there is a \"specialY\" element, then assume it is an absolute element. If that doesn't exist, look for the\n\t// same members at the top level, because that's where they are in relative elements.\n\tvar specialY = child.specialY;\n\tif (!specialY) specialY = child;\n\tif (!specialY[member]) return;\n\tif (!this.specialY[member])\n\t\tthis.specialY[member] = specialY[member];\n\telse\n\t\tthis.specialY[member] = Math.max(this.specialY[member], specialY[member]);\n};\n\nVoiceElement.prototype.adjustRange = function (child) {\n\tif (child.bottom !== undefined)\n\t\tthis.bottom = Math.min(this.bottom, child.bottom);\n\tif (child.top !== undefined)\n\t\tthis.top = Math.max(this.top, child.top);\n};\n\nVoiceElement.prototype.setRange = function (child) {\n\tthis.adjustRange(child);\n\tthis.setLimit('tempoHeightAbove', child);\n\tthis.setLimit('partHeightAbove', child);\n\tthis.setLimit('volumeHeightAbove', child);\n\tthis.setLimit('dynamicHeightAbove', child);\n\tthis.setLimit('endingHeightAbove', child);\n\tthis.setLimit('chordHeightAbove', child);\n\tthis.setLimit('lyricHeightAbove', child);\n\tthis.setLimit('lyricHeightBelow', child);\n\tthis.setLimit('chordHeightBelow', child);\n\tthis.setLimit('volumeHeightBelow', child);\n\tthis.setLimit('dynamicHeightBelow', child);\n};\n\nVoiceElement.prototype.addOther = function (child) {\n\tthis.otherchildren.push(child);\n\tthis.setRange(child);\n};\n\nVoiceElement.prototype.addBeam = function (child) {\n\tthis.beams.push(child);\n};\n\nVoiceElement.prototype.setWidth = function (width) {\n\tthis.w = width;\n};\n\nmodule.exports = VoiceElement;\n","var spacing = require('../helpers/spacing');\n\n/**\n * Glyphs and some methods to adjust for their x and y baseline\n */\nvar glyphs =\n{\n\t'0': { d: [['M', 4.83, -14.97], ['c', 0.33, -0.03, 1.11, 0.00, 1.47, 0.06], ['c', 1.68, 0.36, 2.97, 1.59, 3.78, 3.60], ['c', 1.20, 2.97, 0.81, 6.96, -0.90, 9.27], ['c', -0.78, 1.08, -1.71, 1.71, -2.91, 1.95], ['c', -0.45, 0.09, -1.32, 0.09, -1.77, 0.00], ['c', -0.81, -0.18, -1.47, -0.51, -2.07, -1.02], ['c', -2.34, -2.07, -3.15, -6.72, -1.74, -10.20], ['c', 0.87, -2.16, 2.28, -3.42, 4.14, -3.66], ['z'], ['m', 1.11, 0.87], ['c', -0.21, -0.06, -0.69, -0.09, -0.87, -0.06], ['c', -0.54, 0.12, -0.87, 0.42, -1.17, 0.99], ['c', -0.36, 0.66, -0.51, 1.56, -0.60, 3.00], ['c', -0.03, 0.75, -0.03, 4.59, 0.00, 5.31], ['c', 0.09, 1.50, 0.27, 2.40, 0.60, 3.06], ['c', 0.24, 0.48, 0.57, 0.78, 0.96, 0.90], ['c', 0.27, 0.09, 0.78, 0.09, 1.05, 0.00], ['c', 0.39, -0.12, 0.72, -0.42, 0.96, -0.90], ['c', 0.33, -0.66, 0.51, -1.56, 0.60, -3.06], ['c', 0.03, -0.72, 0.03, -4.56, 0.00, -5.31], ['c', -0.09, -1.47, -0.27, -2.37, -0.60, -3.03], ['c', -0.24, -0.48, -0.54, -0.78, -0.93, -0.90], ['z']], w: 10.78, h: 14.959 },\n\t'1': { d: [['M', 3.30, -15.06], ['c', 0.06, -0.06, 0.21, -0.03, 0.66, 0.15], ['c', 0.81, 0.39, 1.08, 0.39, 1.83, 0.03], ['c', 0.21, -0.09, 0.39, -0.15, 0.42, -0.15], ['c', 0.12, 0.00, 0.21, 0.09, 0.27, 0.21], ['c', 0.06, 0.12, 0.06, 0.33, 0.06, 5.94], ['c', 0.00, 3.93, 0.00, 5.85, 0.03, 6.03], ['c', 0.06, 0.36, 0.15, 0.69, 0.27, 0.96], ['c', 0.36, 0.75, 0.93, 1.17, 1.68, 1.26], ['c', 0.30, 0.03, 0.39, 0.09, 0.39, 0.30], ['c', 0.00, 0.15, -0.03, 0.18, -0.09, 0.24], ['c', -0.06, 0.06, -0.09, 0.06, -0.48, 0.06], ['c', -0.42, 0.00, -0.69, -0.03, -2.10, -0.24], ['c', -0.90, -0.15, -1.77, -0.15, -2.67, 0.00], ['c', -1.41, 0.21, -1.68, 0.24, -2.10, 0.24], ['c', -0.39, 0.00, -0.42, 0.00, -0.48, -0.06], ['c', -0.06, -0.06, -0.06, -0.09, -0.06, -0.24], ['c', 0.00, -0.21, 0.06, -0.27, 0.36, -0.30], ['c', 0.75, -0.09, 1.32, -0.51, 1.68, -1.26], ['c', 0.12, -0.27, 0.21, -0.60, 0.27, -0.96], ['c', 0.03, -0.18, 0.03, -1.59, 0.03, -4.29], ['c', 0.00, -3.87, 0.00, -4.05, -0.06, -4.14], ['c', -0.09, -0.15, -0.18, -0.24, -0.39, -0.24], ['c', -0.12, 0.00, -0.15, 0.03, -0.21, 0.06], ['c', -0.03, 0.06, -0.45, 0.99, -0.96, 2.13], ['c', -0.48, 1.14, -0.90, 2.10, -0.93, 2.16], ['c', -0.06, 0.15, -0.21, 0.24, -0.33, 0.24], ['c', -0.24, 0.00, -0.42, -0.18, -0.42, -0.39], ['c', 0.00, -0.06, 3.27, -7.62, 3.33, -7.74], ['z']], w: 8.94, h: 15.058 },\n\t'2': { d: [['M', 4.23, -14.97], ['c', 0.57, -0.06, 1.68, 0.00, 2.34, 0.18], ['c', 0.69, 0.18, 1.50, 0.54, 2.01, 0.90], ['c', 1.35, 0.96, 1.95, 2.25, 1.77, 3.81], ['c', -0.15, 1.35, -0.66, 2.34, -1.68, 3.15], ['c', -0.60, 0.48, -1.44, 0.93, -3.12, 1.65], ['c', -1.32, 0.57, -1.80, 0.81, -2.37, 1.14], ['c', -0.57, 0.33, -0.57, 0.33, -0.24, 0.27], ['c', 0.39, -0.09, 1.26, -0.09, 1.68, 0.00], ['c', 0.72, 0.15, 1.41, 0.45, 2.10, 0.90], ['c', 0.99, 0.63, 1.86, 0.87, 2.55, 0.75], ['c', 0.24, -0.06, 0.42, -0.15, 0.57, -0.30], ['c', 0.12, -0.09, 0.30, -0.42, 0.30, -0.51], ['c', 0.00, -0.09, 0.12, -0.21, 0.24, -0.24], ['c', 0.18, -0.03, 0.39, 0.12, 0.39, 0.30], ['c', 0.00, 0.12, -0.15, 0.57, -0.30, 0.87], ['c', -0.54, 1.02, -1.56, 1.74, -2.79, 2.01], ['c', -0.42, 0.09, -1.23, 0.09, -1.62, 0.03], ['c', -0.81, -0.18, -1.32, -0.45, -2.01, -1.11], ['c', -0.45, -0.45, -0.63, -0.57, -0.96, -0.69], ['c', -0.84, -0.27, -1.89, 0.12, -2.25, 0.90], ['c', -0.12, 0.21, -0.21, 0.54, -0.21, 0.72], ['c', 0.00, 0.12, -0.12, 0.21, -0.27, 0.24], ['c', -0.15, 0.00, -0.27, -0.03, -0.33, -0.15], ['c', -0.09, -0.21, 0.09, -1.08, 0.33, -1.71], ['c', 0.24, -0.66, 0.66, -1.26, 1.29, -1.89], ['c', 0.45, -0.45, 0.90, -0.81, 1.92, -1.56], ['c', 1.29, -0.93, 1.89, -1.44, 2.34, -1.98], ['c', 0.87, -1.05, 1.26, -2.19, 1.20, -3.63], ['c', -0.06, -1.29, -0.39, -2.31, -0.96, -2.91], ['c', -0.36, -0.33, -0.72, -0.51, -1.17, -0.54], ['c', -0.84, -0.03, -1.53, 0.42, -1.59, 1.05], ['c', -0.03, 0.33, 0.12, 0.60, 0.57, 1.14], ['c', 0.45, 0.54, 0.54, 0.87, 0.42, 1.41], ['c', -0.15, 0.63, -0.54, 1.11, -1.08, 1.38], ['c', -0.63, 0.33, -1.20, 0.33, -1.83, 0.00], ['c', -0.24, -0.12, -0.33, -0.18, -0.54, -0.39], ['c', -0.18, -0.18, -0.27, -0.30, -0.36, -0.51], ['c', -0.24, -0.45, -0.27, -0.84, -0.21, -1.38], ['c', 0.12, -0.75, 0.45, -1.41, 1.02, -1.98], ['c', 0.72, -0.72, 1.74, -1.17, 2.85, -1.32], ['z']], w: 10.764, h: 14.97 },\n\t'3': { d: [['M', 3.78, -14.97], ['c', 0.30, -0.03, 1.41, 0.00, 1.83, 0.06], ['c', 2.22, 0.30, 3.51, 1.32, 3.72, 2.91], ['c', 0.03, 0.33, 0.03, 1.26, -0.03, 1.65], ['c', -0.12, 0.84, -0.48, 1.47, -1.05, 1.77], ['c', -0.27, 0.15, -0.36, 0.24, -0.45, 0.39], ['c', -0.09, 0.21, -0.09, 0.36, 0.00, 0.57], ['c', 0.09, 0.15, 0.18, 0.24, 0.51, 0.39], ['c', 0.75, 0.42, 1.23, 1.14, 1.41, 2.13], ['c', 0.06, 0.42, 0.06, 1.35, 0.00, 1.71], ['c', -0.18, 0.81, -0.48, 1.38, -1.02, 1.95], ['c', -0.75, 0.72, -1.80, 1.20, -3.18, 1.38], ['c', -0.42, 0.06, -1.56, 0.06, -1.95, 0.00], ['c', -1.89, -0.33, -3.18, -1.29, -3.51, -2.64], ['c', -0.03, -0.12, -0.03, -0.33, -0.03, -0.60], ['c', 0.00, -0.36, 0.00, -0.42, 0.06, -0.63], ['c', 0.12, -0.30, 0.27, -0.51, 0.51, -0.75], ['c', 0.24, -0.24, 0.45, -0.39, 0.75, -0.51], ['c', 0.21, -0.06, 0.27, -0.06, 0.60, -0.06], ['c', 0.33, 0.00, 0.39, 0.00, 0.60, 0.06], ['c', 0.30, 0.12, 0.51, 0.27, 0.75, 0.51], ['c', 0.36, 0.33, 0.57, 0.75, 0.60, 1.20], ['c', 0.00, 0.21, 0.00, 0.27, -0.06, 0.42], ['c', -0.09, 0.18, -0.12, 0.24, -0.54, 0.54], ['c', -0.51, 0.36, -0.63, 0.54, -0.60, 0.87], ['c', 0.06, 0.54, 0.54, 0.90, 1.38, 0.99], ['c', 0.36, 0.06, 0.72, 0.03, 0.96, -0.06], ['c', 0.81, -0.27, 1.29, -1.23, 1.44, -2.79], ['c', 0.03, -0.45, 0.03, -1.95, -0.03, -2.37], ['c', -0.09, -0.75, -0.33, -1.23, -0.75, -1.44], ['c', -0.33, -0.18, -0.45, -0.18, -1.98, -0.18], ['c', -1.35, 0.00, -1.41, 0.00, -1.50, -0.06], ['c', -0.18, -0.12, -0.24, -0.39, -0.12, -0.60], ['c', 0.12, -0.15, 0.15, -0.15, 1.68, -0.15], ['c', 1.50, 0.00, 1.62, 0.00, 1.89, -0.15], ['c', 0.18, -0.09, 0.42, -0.36, 0.54, -0.57], ['c', 0.18, -0.42, 0.27, -0.90, 0.30, -1.95], ['c', 0.03, -1.20, -0.06, -1.80, -0.36, -2.37], ['c', -0.24, -0.48, -0.63, -0.81, -1.14, -0.96], ['c', -0.30, -0.06, -1.08, -0.06, -1.38, 0.03], ['c', -0.60, 0.15, -0.90, 0.42, -0.96, 0.84], ['c', -0.03, 0.30, 0.06, 0.45, 0.63, 0.84], ['c', 0.33, 0.24, 0.42, 0.39, 0.45, 0.63], ['c', 0.03, 0.72, -0.57, 1.50, -1.32, 1.65], ['c', -1.05, 0.27, -2.10, -0.57, -2.10, -1.65], ['c', 0.00, -0.45, 0.15, -0.96, 0.39, -1.38], ['c', 0.12, -0.21, 0.54, -0.63, 0.81, -0.81], ['c', 0.57, -0.42, 1.38, -0.69, 2.25, -0.81], ['z']], w: 9.735, h: 14.967 },\n\t'4': { d: [['M', 8.64, -14.94], ['c', 0.27, -0.09, 0.42, -0.12, 0.54, -0.03], ['c', 0.09, 0.06, 0.15, 0.21, 0.15, 0.30], ['c', -0.03, 0.06, -1.92, 2.31, -4.23, 5.04], ['c', -2.31, 2.73, -4.23, 4.98, -4.26, 5.01], ['c', -0.03, 0.06, 0.12, 0.06, 2.55, 0.06], ['l', 2.61, 0.00], ['l', 0.00, -2.37], ['c', 0.00, -2.19, 0.03, -2.37, 0.06, -2.46], ['c', 0.03, -0.06, 0.21, -0.18, 0.57, -0.42], ['c', 1.08, -0.72, 1.38, -1.08, 1.86, -2.16], ['c', 0.12, -0.30, 0.24, -0.54, 0.27, -0.57], ['c', 0.12, -0.12, 0.39, -0.06, 0.45, 0.12], ['c', 0.06, 0.09, 0.06, 0.57, 0.06, 3.96], ['l', 0.00, 3.90], ['l', 1.08, 0.00], ['c', 1.05, 0.00, 1.11, 0.00, 1.20, 0.06], ['c', 0.24, 0.15, 0.24, 0.54, 0.00, 0.69], ['c', -0.09, 0.06, -0.15, 0.06, -1.20, 0.06], ['l', -1.08, 0.00], ['l', 0.00, 0.33], ['c', 0.00, 0.57, 0.09, 1.11, 0.30, 1.53], ['c', 0.36, 0.75, 0.93, 1.17, 1.68, 1.26], ['c', 0.30, 0.03, 0.39, 0.09, 0.39, 0.30], ['c', 0.00, 0.15, -0.03, 0.18, -0.09, 0.24], ['c', -0.06, 0.06, -0.09, 0.06, -0.48, 0.06], ['c', -0.42, 0.00, -0.69, -0.03, -2.10, -0.24], ['c', -0.90, -0.15, -1.77, -0.15, -2.67, 0.00], ['c', -1.41, 0.21, -1.68, 0.24, -2.10, 0.24], ['c', -0.39, 0.00, -0.42, 0.00, -0.48, -0.06], ['c', -0.06, -0.06, -0.06, -0.09, -0.06, -0.24], ['c', 0.00, -0.21, 0.06, -0.27, 0.36, -0.30], ['c', 0.75, -0.09, 1.32, -0.51, 1.68, -1.26], ['c', 0.21, -0.42, 0.30, -0.96, 0.30, -1.53], ['l', 0.00, -0.33], ['l', -2.70, 0.00], ['c', -2.91, 0.00, -2.85, 0.00, -3.09, -0.15], ['c', -0.18, -0.12, -0.30, -0.39, -0.27, -0.54], ['c', 0.03, -0.06, 0.18, -0.24, 0.33, -0.45], ['c', 0.75, -0.90, 1.59, -2.07, 2.13, -3.03], ['c', 0.33, -0.54, 0.84, -1.62, 1.05, -2.16], ['c', 0.57, -1.41, 0.84, -2.64, 0.90, -4.05], ['c', 0.03, -0.63, 0.06, -0.72, 0.24, -0.81], ['l', 0.12, -0.06], ['l', 0.45, 0.12], ['c', 0.66, 0.18, 1.02, 0.24, 1.47, 0.27], ['c', 0.60, 0.03, 1.23, -0.09, 2.01, -0.33], ['z']], w: 11.795, h: 14.994 },\n\t'5': { d: [['M', 1.02, -14.94], ['c', 0.12, -0.09, 0.03, -0.09, 1.08, 0.06], ['c', 2.49, 0.36, 4.35, 0.36, 6.96, -0.06], ['c', 0.57, -0.09, 0.66, -0.06, 0.81, 0.06], ['c', 0.15, 0.18, 0.12, 0.24, -0.15, 0.51], ['c', -1.29, 1.26, -3.24, 2.04, -5.58, 2.31], ['c', -0.60, 0.09, -1.20, 0.12, -1.71, 0.12], ['c', -0.39, 0.00, -0.45, 0.00, -0.57, 0.06], ['c', -0.09, 0.06, -0.15, 0.12, -0.21, 0.21], ['l', -0.06, 0.12], ['l', 0.00, 1.65], ['l', 0.00, 1.65], ['l', 0.21, -0.21], ['c', 0.66, -0.57, 1.41, -0.96, 2.19, -1.14], ['c', 0.33, -0.06, 1.41, -0.06, 1.95, 0.00], ['c', 2.61, 0.36, 4.02, 1.74, 4.26, 4.14], ['c', 0.03, 0.45, 0.03, 1.08, -0.03, 1.44], ['c', -0.18, 1.02, -0.78, 2.01, -1.59, 2.70], ['c', -0.72, 0.57, -1.62, 1.02, -2.49, 1.20], ['c', -1.38, 0.27, -3.03, 0.06, -4.20, -0.54], ['c', -1.08, -0.54, -1.71, -1.32, -1.86, -2.28], ['c', -0.09, -0.69, 0.09, -1.29, 0.57, -1.74], ['c', 0.24, -0.24, 0.45, -0.39, 0.75, -0.51], ['c', 0.21, -0.06, 0.27, -0.06, 0.60, -0.06], ['c', 0.33, 0.00, 0.39, 0.00, 0.60, 0.06], ['c', 0.30, 0.12, 0.51, 0.27, 0.75, 0.51], ['c', 0.36, 0.33, 0.57, 0.75, 0.60, 1.20], ['c', 0.00, 0.21, 0.00, 0.27, -0.06, 0.42], ['c', -0.09, 0.18, -0.12, 0.24, -0.54, 0.54], ['c', -0.18, 0.12, -0.36, 0.30, -0.42, 0.33], ['c', -0.36, 0.42, -0.18, 0.99, 0.36, 1.26], ['c', 0.51, 0.27, 1.47, 0.36, 2.01, 0.27], ['c', 0.93, -0.21, 1.47, -1.17, 1.65, -2.91], ['c', 0.06, -0.45, 0.06, -1.89, 0.00, -2.31], ['c', -0.15, -1.20, -0.51, -2.10, -1.05, -2.55], ['c', -0.21, -0.18, -0.54, -0.36, -0.81, -0.39], ['c', -0.30, -0.06, -0.84, -0.03, -1.26, 0.06], ['c', -0.93, 0.18, -1.65, 0.60, -2.16, 1.20], ['c', -0.15, 0.21, -0.27, 0.30, -0.39, 0.30], ['c', -0.15, 0.00, -0.30, -0.09, -0.36, -0.18], ['c', -0.06, -0.09, -0.06, -0.15, -0.06, -3.66], ['c', 0.00, -3.39, 0.00, -3.57, 0.06, -3.66], ['c', 0.03, -0.06, 0.09, -0.15, 0.15, -0.18], ['z']], w: 10.212, h: 14.997 },\n\t'6': { d: [['M', 4.98, -14.97], ['c', 0.36, -0.03, 1.20, 0.00, 1.59, 0.06], ['c', 0.90, 0.15, 1.68, 0.51, 2.25, 1.05], ['c', 0.57, 0.51, 0.87, 1.23, 0.84, 1.98], ['c', -0.03, 0.51, -0.21, 0.90, -0.60, 1.26], ['c', -0.24, 0.24, -0.45, 0.39, -0.75, 0.51], ['c', -0.21, 0.06, -0.27, 0.06, -0.60, 0.06], ['c', -0.33, 0.00, -0.39, 0.00, -0.60, -0.06], ['c', -0.30, -0.12, -0.51, -0.27, -0.75, -0.51], ['c', -0.39, -0.36, -0.57, -0.78, -0.57, -1.26], ['c', 0.00, -0.27, 0.00, -0.30, 0.09, -0.42], ['c', 0.03, -0.09, 0.18, -0.21, 0.30, -0.30], ['c', 0.12, -0.09, 0.30, -0.21, 0.39, -0.27], ['c', 0.09, -0.06, 0.21, -0.18, 0.27, -0.24], ['c', 0.06, -0.12, 0.09, -0.15, 0.09, -0.33], ['c', 0.00, -0.18, -0.03, -0.24, -0.09, -0.36], ['c', -0.24, -0.39, -0.75, -0.60, -1.38, -0.57], ['c', -0.54, 0.03, -0.90, 0.18, -1.23, 0.48], ['c', -0.81, 0.72, -1.08, 2.16, -0.96, 5.37], ['l', 0.00, 0.63], ['l', 0.30, -0.12], ['c', 0.78, -0.27, 1.29, -0.33, 2.10, -0.27], ['c', 1.47, 0.12, 2.49, 0.54, 3.27, 1.29], ['c', 0.48, 0.51, 0.81, 1.11, 0.96, 1.89], ['c', 0.06, 0.27, 0.06, 0.42, 0.06, 0.93], ['c', 0.00, 0.54, 0.00, 0.69, -0.06, 0.96], ['c', -0.15, 0.78, -0.48, 1.38, -0.96, 1.89], ['c', -0.54, 0.51, -1.17, 0.87, -1.98, 1.08], ['c', -1.14, 0.30, -2.40, 0.33, -3.24, 0.03], ['c', -1.50, -0.48, -2.64, -1.89, -3.27, -4.02], ['c', -0.36, -1.23, -0.51, -2.82, -0.42, -4.08], ['c', 0.30, -3.66, 2.28, -6.30, 4.95, -6.66], ['z'], ['m', 0.66, 7.41], ['c', -0.27, -0.09, -0.81, -0.12, -1.08, -0.06], ['c', -0.72, 0.18, -1.08, 0.69, -1.23, 1.71], ['c', -0.06, 0.54, -0.06, 3.00, 0.00, 3.54], ['c', 0.18, 1.26, 0.72, 1.77, 1.80, 1.74], ['c', 0.39, -0.03, 0.63, -0.09, 0.90, -0.27], ['c', 0.66, -0.42, 0.90, -1.32, 0.90, -3.24], ['c', 0.00, -2.22, -0.36, -3.12, -1.29, -3.42], ['z']], w: 9.956, h: 14.982 },\n\t'7': { d: [['M', 0.21, -14.97], ['c', 0.21, -0.06, 0.45, 0.00, 0.54, 0.15], ['c', 0.06, 0.09, 0.06, 0.15, 0.06, 0.39], ['c', 0.00, 0.24, 0.00, 0.33, 0.06, 0.42], ['c', 0.06, 0.12, 0.21, 0.24, 0.27, 0.24], ['c', 0.03, 0.00, 0.12, -0.12, 0.24, -0.21], ['c', 0.96, -1.20, 2.58, -1.35, 3.99, -0.42], ['c', 0.15, 0.12, 0.42, 0.30, 0.54, 0.45], ['c', 0.48, 0.39, 0.81, 0.57, 1.29, 0.60], ['c', 0.69, 0.03, 1.50, -0.30, 2.13, -0.87], ['c', 0.09, -0.09, 0.27, -0.30, 0.39, -0.45], ['c', 0.12, -0.15, 0.24, -0.27, 0.30, -0.30], ['c', 0.18, -0.06, 0.39, 0.03, 0.51, 0.21], ['c', 0.06, 0.18, 0.06, 0.24, -0.27, 0.72], ['c', -0.18, 0.24, -0.54, 0.78, -0.78, 1.17], ['c', -2.37, 3.54, -3.54, 6.27, -3.87, 9.00], ['c', -0.03, 0.33, -0.03, 0.66, -0.03, 1.26], ['c', 0.00, 0.90, 0.00, 1.08, 0.15, 1.89], ['c', 0.06, 0.45, 0.06, 0.48, 0.03, 0.60], ['c', -0.06, 0.09, -0.21, 0.21, -0.30, 0.21], ['c', -0.03, 0.00, -0.27, -0.06, -0.54, -0.15], ['c', -0.84, -0.27, -1.11, -0.30, -1.65, -0.30], ['c', -0.57, 0.00, -0.84, 0.03, -1.56, 0.27], ['c', -0.60, 0.18, -0.69, 0.21, -0.81, 0.15], ['c', -0.12, -0.06, -0.21, -0.18, -0.21, -0.30], ['c', 0.00, -0.15, 0.60, -1.44, 1.20, -2.61], ['c', 1.14, -2.22, 2.73, -4.68, 5.10, -8.01], ['c', 0.21, -0.27, 0.36, -0.48, 0.33, -0.48], ['c', 0.00, 0.00, -0.12, 0.06, -0.27, 0.12], ['c', -0.54, 0.30, -0.99, 0.39, -1.56, 0.39], ['c', -0.75, 0.03, -1.20, -0.18, -1.83, -0.75], ['c', -0.99, -0.90, -1.83, -1.17, -2.31, -0.72], ['c', -0.18, 0.15, -0.36, 0.51, -0.45, 0.84], ['c', -0.06, 0.24, -0.06, 0.33, -0.09, 1.98], ['c', 0.00, 1.62, -0.03, 1.74, -0.06, 1.80], ['c', -0.15, 0.24, -0.54, 0.24, -0.69, 0.00], ['c', -0.06, -0.09, -0.06, -0.15, -0.06, -3.57], ['c', 0.00, -3.42, 0.00, -3.48, 0.06, -3.57], ['c', 0.03, -0.06, 0.09, -0.12, 0.15, -0.15], ['z']], w: 10.561, h: 15.093 },\n\t'8': { d: [['M', 4.98, -14.97], ['c', 0.33, -0.03, 1.02, -0.03, 1.32, 0.00], ['c', 1.32, 0.12, 2.49, 0.60, 3.21, 1.32], ['c', 0.39, 0.39, 0.66, 0.81, 0.78, 1.29], ['c', 0.09, 0.36, 0.09, 1.08, 0.00, 1.44], ['c', -0.21, 0.84, -0.66, 1.59, -1.59, 2.55], ['l', -0.30, 0.30], ['l', 0.27, 0.18], ['c', 1.47, 0.93, 2.31, 2.31, 2.25, 3.75], ['c', -0.03, 0.75, -0.24, 1.35, -0.63, 1.95], ['c', -0.45, 0.66, -1.02, 1.14, -1.83, 1.53], ['c', -1.80, 0.87, -4.20, 0.87, -6.00, 0.03], ['c', -1.62, -0.78, -2.52, -2.16, -2.46, -3.66], ['c', 0.06, -0.99, 0.54, -1.77, 1.80, -2.97], ['c', 0.54, -0.51, 0.54, -0.54, 0.48, -0.57], ['c', -0.39, -0.27, -0.96, -0.78, -1.20, -1.14], ['c', -0.75, -1.11, -0.87, -2.40, -0.30, -3.60], ['c', 0.69, -1.35, 2.25, -2.25, 4.20, -2.40], ['z'], ['m', 1.53, 0.69], ['c', -0.42, -0.09, -1.11, -0.12, -1.38, -0.06], ['c', -0.30, 0.06, -0.60, 0.18, -0.81, 0.30], ['c', -0.21, 0.12, -0.60, 0.51, -0.72, 0.72], ['c', -0.51, 0.87, -0.42, 1.89, 0.21, 2.52], ['c', 0.21, 0.21, 0.36, 0.30, 1.95, 1.23], ['c', 0.96, 0.54, 1.74, 0.99, 1.77, 1.02], ['c', 0.09, 0.00, 0.63, -0.60, 0.99, -1.11], ['c', 0.21, -0.36, 0.48, -0.87, 0.57, -1.23], ['c', 0.06, -0.24, 0.06, -0.36, 0.06, -0.72], ['c', 0.00, -0.45, -0.03, -0.66, -0.15, -0.99], ['c', -0.39, -0.81, -1.29, -1.44, -2.49, -1.68], ['z'], ['m', -1.44, 8.07], ['l', -1.89, -1.08], ['c', -0.03, 0.00, -0.18, 0.15, -0.39, 0.33], ['c', -1.20, 1.08, -1.65, 1.95, -1.59, 3.00], ['c', 0.09, 1.59, 1.35, 2.85, 3.21, 3.24], ['c', 0.33, 0.06, 0.45, 0.06, 0.93, 0.06], ['c', 0.63, 0.00, 0.81, -0.03, 1.29, -0.27], ['c', 0.90, -0.42, 1.47, -1.41, 1.41, -2.40], ['c', -0.06, -0.66, -0.39, -1.29, -0.90, -1.65], ['c', -0.12, -0.09, -1.05, -0.63, -2.07, -1.23], ['z']], w: 10.926, h: 14.989 },\n\t'9': { d: [['M', 4.23, -14.97], ['c', 0.42, -0.03, 1.29, 0.00, 1.62, 0.06], ['c', 0.51, 0.12, 0.93, 0.30, 1.38, 0.57], ['c', 1.53, 1.02, 2.52, 3.24, 2.73, 5.94], ['c', 0.18, 2.55, -0.48, 4.98, -1.83, 6.57], ['c', -1.05, 1.26, -2.40, 1.89, -3.93, 1.83], ['c', -1.23, -0.06, -2.31, -0.45, -3.03, -1.14], ['c', -0.57, -0.51, -0.87, -1.23, -0.84, -1.98], ['c', 0.03, -0.51, 0.21, -0.90, 0.60, -1.26], ['c', 0.24, -0.24, 0.45, -0.39, 0.75, -0.51], ['c', 0.21, -0.06, 0.27, -0.06, 0.60, -0.06], ['c', 0.33, 0.00, 0.39, 0.00, 0.60, 0.06], ['c', 0.30, 0.12, 0.51, 0.27, 0.75, 0.51], ['c', 0.39, 0.36, 0.57, 0.78, 0.57, 1.26], ['c', 0.00, 0.27, 0.00, 0.30, -0.09, 0.42], ['c', -0.03, 0.09, -0.18, 0.21, -0.30, 0.30], ['c', -0.12, 0.09, -0.30, 0.21, -0.39, 0.27], ['c', -0.09, 0.06, -0.21, 0.18, -0.27, 0.24], ['c', -0.06, 0.12, -0.06, 0.15, -0.06, 0.33], ['c', 0.00, 0.18, 0.00, 0.24, 0.06, 0.36], ['c', 0.24, 0.39, 0.75, 0.60, 1.38, 0.57], ['c', 0.54, -0.03, 0.90, -0.18, 1.23, -0.48], ['c', 0.81, -0.72, 1.08, -2.16, 0.96, -5.37], ['l', 0.00, -0.63], ['l', -0.30, 0.12], ['c', -0.78, 0.27, -1.29, 0.33, -2.10, 0.27], ['c', -1.47, -0.12, -2.49, -0.54, -3.27, -1.29], ['c', -0.48, -0.51, -0.81, -1.11, -0.96, -1.89], ['c', -0.06, -0.27, -0.06, -0.42, -0.06, -0.96], ['c', 0.00, -0.51, 0.00, -0.66, 0.06, -0.93], ['c', 0.15, -0.78, 0.48, -1.38, 0.96, -1.89], ['c', 0.15, -0.12, 0.33, -0.27, 0.42, -0.36], ['c', 0.69, -0.51, 1.62, -0.81, 2.76, -0.93], ['z'], ['m', 1.17, 0.66], ['c', -0.21, -0.06, -0.57, -0.06, -0.81, -0.03], ['c', -0.78, 0.12, -1.26, 0.69, -1.41, 1.74], ['c', -0.12, 0.63, -0.15, 1.95, -0.09, 2.79], ['c', 0.12, 1.71, 0.63, 2.40, 1.77, 2.46], ['c', 1.08, 0.03, 1.62, -0.48, 1.80, -1.74], ['c', 0.06, -0.54, 0.06, -3.00, 0.00, -3.54], ['c', -0.15, -1.05, -0.51, -1.53, -1.26, -1.68], ['z']], w: 9.959, h: 14.986 },\n\t'rests.multimeasure': { d: [['M', 0, -4], ['l', 0, 16], ['l', 1, 0], ['l', 0, -5], ['l', 40, 0], ['l', 0, 5], ['l', 1, 0], ['l', 0, -16], ['l', -1, 0], ['l', 0, 5], ['l', -40, 0], ['l', 0, -5], ['z']], w: 42, h: 18 },\n\t'rests.whole': { d: [['M', 0.06, 0.03], ['l', 0.09, -0.06], ['l', 5.46, 0.00], ['l', 5.49, 0.00], ['l', 0.09, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 2.19], ['l', 0.00, 2.19], ['l', -0.06, 0.09], ['l', -0.09, 0.06], ['l', -5.49, 0.00], ['l', -5.46, 0.00], ['l', -0.09, -0.06], ['l', -0.06, -0.09], ['l', 0.00, -2.19], ['l', 0.00, -2.19], ['z']], w: 11.25, h: 4.68 },\n\t'rests.half': { d: [['M', 0.06, -4.62], ['l', 0.09, -0.06], ['l', 5.46, 0.00], ['l', 5.49, 0.00], ['l', 0.09, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 2.19], ['l', 0.00, 2.19], ['l', -0.06, 0.09], ['l', -0.09, 0.06], ['l', -5.49, 0.00], ['l', -5.46, 0.00], ['l', -0.09, -0.06], ['l', -0.06, -0.09], ['l', 0.00, -2.19], ['l', 0.00, -2.19], ['z']], w: 11.25, h: 4.68 },\n\t'rests.quarter': { d: [['M', 1.89, -11.82], ['c', 0.12, -0.06, 0.24, -0.06, 0.36, -0.03], ['c', 0.09, 0.06, 4.74, 5.58, 4.86, 5.82], ['c', 0.21, 0.39, 0.15, 0.78, -0.15, 1.26], ['c', -0.24, 0.33, -0.72, 0.81, -1.62, 1.56], ['c', -0.45, 0.36, -0.87, 0.75, -0.96, 0.84], ['c', -0.93, 0.99, -1.14, 2.49, -0.60, 3.63], ['c', 0.18, 0.39, 0.27, 0.48, 1.32, 1.68], ['c', 1.92, 2.25, 1.83, 2.16, 1.83, 2.34], ['c', 0.00, 0.18, -0.18, 0.36, -0.36, 0.39], ['c', -0.15, 0.00, -0.27, -0.06, -0.48, -0.27], ['c', -0.75, -0.75, -2.46, -1.29, -3.39, -1.08], ['c', -0.45, 0.09, -0.69, 0.27, -0.90, 0.69], ['c', -0.12, 0.30, -0.21, 0.66, -0.24, 1.14], ['c', -0.03, 0.66, 0.09, 1.35, 0.30, 2.01], ['c', 0.15, 0.42, 0.24, 0.66, 0.45, 0.96], ['c', 0.18, 0.24, 0.18, 0.33, 0.03, 0.42], ['c', -0.12, 0.06, -0.18, 0.03, -0.45, -0.30], ['c', -1.08, -1.38, -2.07, -3.36, -2.40, -4.83], ['c', -0.27, -1.05, -0.15, -1.77, 0.27, -2.07], ['c', 0.21, -0.12, 0.42, -0.15, 0.87, -0.15], ['c', 0.87, 0.06, 2.10, 0.39, 3.30, 0.90], ['l', 0.39, 0.18], ['l', -1.65, -1.95], ['c', -2.52, -2.97, -2.61, -3.09, -2.70, -3.27], ['c', -0.09, -0.24, -0.12, -0.48, -0.03, -0.75], ['c', 0.15, -0.48, 0.57, -0.96, 1.83, -2.01], ['c', 0.45, -0.36, 0.84, -0.72, 0.93, -0.78], ['c', 0.69, -0.75, 1.02, -1.80, 0.90, -2.79], ['c', -0.06, -0.33, -0.21, -0.84, -0.39, -1.11], ['c', -0.09, -0.15, -0.45, -0.60, -0.81, -1.05], ['c', -0.36, -0.42, -0.69, -0.81, -0.72, -0.87], ['c', -0.09, -0.18, 0.00, -0.42, 0.21, -0.51], ['z']], w: 7.888, h: 21.435 },\n\t'rests.8th': { d: [['M', 1.68, -6.12], ['c', 0.66, -0.09, 1.23, 0.09, 1.68, 0.51], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.09, 0.33, 0.18, 0.66, 0.21, 0.72], ['c', 0.12, 0.27, 0.33, 0.45, 0.60, 0.48], ['c', 0.12, 0.00, 0.18, 0.00, 0.33, -0.09], ['c', 0.39, -0.18, 1.32, -1.29, 1.68, -1.98], ['c', 0.09, -0.21, 0.24, -0.30, 0.39, -0.30], ['c', 0.12, 0.00, 0.27, 0.09, 0.33, 0.18], ['c', 0.03, 0.06, -0.27, 1.11, -1.86, 6.42], ['c', -1.02, 3.48, -1.89, 6.39, -1.92, 6.42], ['c', 0.00, 0.03, -0.12, 0.12, -0.24, 0.15], ['c', -0.18, 0.09, -0.21, 0.09, -0.45, 0.09], ['c', -0.24, 0.00, -0.30, 0.00, -0.48, -0.06], ['c', -0.09, -0.06, -0.21, -0.12, -0.21, -0.15], ['c', -0.06, -0.03, 0.15, -0.57, 1.68, -4.92], ['c', 0.96, -2.67, 1.74, -4.89, 1.71, -4.89], ['l', -0.51, 0.15], ['c', -1.08, 0.36, -1.74, 0.48, -2.55, 0.48], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.33, -0.45, 0.84, -0.81, 1.38, -0.90], ['z']], w: 7.534, h: 13.883 },\n\t'rests.16th': { d: [['M', 3.33, -6.12], ['c', 0.66, -0.09, 1.23, 0.09, 1.68, 0.51], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.09, 0.33, 0.18, 0.66, 0.21, 0.72], ['c', 0.15, 0.39, 0.57, 0.57, 0.87, 0.42], ['c', 0.39, -0.18, 1.20, -1.23, 1.62, -2.07], ['c', 0.06, -0.15, 0.24, -0.24, 0.36, -0.24], ['c', 0.12, 0.00, 0.27, 0.09, 0.33, 0.18], ['c', 0.03, 0.06, -0.45, 1.86, -2.67, 10.17], ['c', -1.50, 5.55, -2.73, 10.14, -2.76, 10.17], ['c', -0.03, 0.03, -0.12, 0.12, -0.24, 0.15], ['c', -0.18, 0.09, -0.21, 0.09, -0.45, 0.09], ['c', -0.24, 0.00, -0.30, 0.00, -0.48, -0.06], ['c', -0.09, -0.06, -0.21, -0.12, -0.21, -0.15], ['c', -0.06, -0.03, 0.12, -0.57, 1.44, -4.92], ['c', 0.81, -2.67, 1.47, -4.86, 1.47, -4.89], ['c', -0.03, 0.00, -0.27, 0.06, -0.54, 0.15], ['c', -1.08, 0.36, -1.77, 0.48, -2.58, 0.48], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.72, -1.05, 2.22, -1.23, 3.06, -0.42], ['c', 0.30, 0.33, 0.42, 0.60, 0.60, 1.38], ['c', 0.09, 0.45, 0.21, 0.78, 0.33, 0.90], ['c', 0.09, 0.09, 0.27, 0.18, 0.45, 0.21], ['c', 0.12, 0.00, 0.18, 0.00, 0.33, -0.09], ['c', 0.33, -0.15, 1.02, -0.93, 1.41, -1.59], ['c', 0.12, -0.21, 0.18, -0.39, 0.39, -1.08], ['c', 0.66, -2.10, 1.17, -3.84, 1.17, -3.87], ['c', 0.00, 0.00, -0.21, 0.06, -0.42, 0.15], ['c', -0.51, 0.15, -1.20, 0.33, -1.68, 0.42], ['c', -0.33, 0.06, -0.51, 0.06, -0.96, 0.06], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.33, -0.45, 0.84, -0.81, 1.38, -0.90], ['z']], w: 9.724, h: 21.383 },\n\t'rests.32nd': { d: [['M', 4.23, -13.62], ['c', 0.66, -0.09, 1.23, 0.09, 1.68, 0.51], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.09, 0.33, 0.18, 0.66, 0.21, 0.72], ['c', 0.12, 0.27, 0.33, 0.45, 0.60, 0.48], ['c', 0.12, 0.00, 0.18, 0.00, 0.27, -0.06], ['c', 0.33, -0.21, 0.99, -1.11, 1.44, -1.98], ['c', 0.09, -0.24, 0.21, -0.33, 0.39, -0.33], ['c', 0.12, 0.00, 0.27, 0.09, 0.33, 0.18], ['c', 0.03, 0.06, -0.57, 2.67, -3.21, 13.89], ['c', -1.80, 7.62, -3.30, 13.89, -3.30, 13.92], ['c', -0.03, 0.06, -0.12, 0.12, -0.24, 0.18], ['c', -0.21, 0.09, -0.24, 0.09, -0.48, 0.09], ['c', -0.24, 0.00, -0.30, 0.00, -0.48, -0.06], ['c', -0.09, -0.06, -0.21, -0.12, -0.21, -0.15], ['c', -0.06, -0.03, 0.09, -0.57, 1.23, -4.92], ['c', 0.69, -2.67, 1.26, -4.86, 1.29, -4.89], ['c', 0.00, -0.03, -0.12, -0.03, -0.48, 0.12], ['c', -1.17, 0.39, -2.22, 0.57, -3.00, 0.54], ['c', -0.42, -0.03, -0.75, -0.12, -1.11, -0.30], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.72, -1.05, 2.22, -1.23, 3.06, -0.42], ['c', 0.30, 0.33, 0.42, 0.60, 0.60, 1.38], ['c', 0.09, 0.45, 0.21, 0.78, 0.33, 0.90], ['c', 0.12, 0.09, 0.30, 0.18, 0.48, 0.21], ['c', 0.12, 0.00, 0.18, 0.00, 0.30, -0.09], ['c', 0.42, -0.21, 1.29, -1.29, 1.56, -1.89], ['c', 0.03, -0.12, 1.23, -4.59, 1.23, -4.65], ['c', 0.00, -0.03, -0.18, 0.03, -0.39, 0.12], ['c', -0.63, 0.18, -1.20, 0.36, -1.74, 0.45], ['c', -0.39, 0.06, -0.54, 0.06, -1.02, 0.06], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.72, -1.05, 2.22, -1.23, 3.06, -0.42], ['c', 0.30, 0.33, 0.42, 0.60, 0.60, 1.38], ['c', 0.09, 0.45, 0.21, 0.78, 0.33, 0.90], ['c', 0.18, 0.18, 0.51, 0.27, 0.72, 0.15], ['c', 0.30, -0.12, 0.69, -0.57, 1.08, -1.17], ['c', 0.42, -0.60, 0.39, -0.51, 1.05, -3.03], ['c', 0.33, -1.26, 0.60, -2.31, 0.60, -2.34], ['c', 0.00, 0.00, -0.21, 0.03, -0.45, 0.12], ['c', -0.57, 0.18, -1.14, 0.33, -1.62, 0.42], ['c', -0.33, 0.06, -0.51, 0.06, -0.96, 0.06], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.33, -0.45, 0.84, -0.81, 1.38, -0.90], ['z']], w: 11.373, h: 28.883 },\n\t'rests.64th': { d: [['M', 5.13, -13.62], ['c', 0.66, -0.09, 1.23, 0.09, 1.68, 0.51], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.15, 0.63, 0.21, 0.81, 0.33, 0.96], ['c', 0.18, 0.21, 0.54, 0.30, 0.75, 0.18], ['c', 0.24, -0.12, 0.63, -0.66, 1.08, -1.56], ['c', 0.33, -0.66, 0.39, -0.72, 0.60, -0.72], ['c', 0.12, 0.00, 0.27, 0.09, 0.33, 0.18], ['c', 0.03, 0.06, -0.69, 3.66, -3.54, 17.64], ['c', -1.95, 9.66, -3.57, 17.61, -3.57, 17.64], ['c', -0.03, 0.06, -0.12, 0.12, -0.24, 0.18], ['c', -0.21, 0.09, -0.24, 0.09, -0.48, 0.09], ['c', -0.24, 0.00, -0.30, 0.00, -0.48, -0.06], ['c', -0.09, -0.06, -0.21, -0.12, -0.21, -0.15], ['c', -0.06, -0.03, 0.06, -0.57, 1.05, -4.95], ['c', 0.60, -2.70, 1.08, -4.89, 1.08, -4.92], ['c', 0.00, 0.00, -0.24, 0.06, -0.51, 0.15], ['c', -0.66, 0.24, -1.20, 0.36, -1.77, 0.48], ['c', -0.42, 0.06, -0.57, 0.06, -1.05, 0.06], ['c', -0.69, 0.00, -0.87, -0.03, -1.35, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.72, -1.05, 2.22, -1.23, 3.06, -0.42], ['c', 0.30, 0.33, 0.42, 0.60, 0.60, 1.38], ['c', 0.09, 0.45, 0.21, 0.78, 0.33, 0.90], ['c', 0.09, 0.09, 0.27, 0.18, 0.45, 0.21], ['c', 0.21, 0.03, 0.39, -0.09, 0.72, -0.42], ['c', 0.45, -0.45, 1.02, -1.26, 1.17, -1.65], ['c', 0.03, -0.09, 0.27, -1.14, 0.54, -2.34], ['c', 0.27, -1.20, 0.48, -2.19, 0.51, -2.22], ['c', 0.00, -0.03, -0.09, -0.03, -0.48, 0.12], ['c', -1.17, 0.39, -2.22, 0.57, -3.00, 0.54], ['c', -0.42, -0.03, -0.75, -0.12, -1.11, -0.30], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.36, -0.54, 0.96, -0.87, 1.65, -0.93], ['c', 0.54, -0.03, 1.02, 0.15, 1.41, 0.54], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.09, 0.33, 0.18, 0.66, 0.21, 0.72], ['c', 0.15, 0.39, 0.57, 0.57, 0.90, 0.42], ['c', 0.36, -0.18, 1.20, -1.26, 1.47, -1.89], ['c', 0.03, -0.09, 0.30, -1.20, 0.57, -2.43], ['l', 0.51, -2.28], ['l', -0.54, 0.18], ['c', -1.11, 0.36, -1.80, 0.48, -2.61, 0.48], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.36, -0.54, 0.96, -0.87, 1.65, -0.93], ['c', 0.54, -0.03, 1.02, 0.15, 1.41, 0.54], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.15, 0.63, 0.21, 0.81, 0.33, 0.96], ['c', 0.21, 0.21, 0.54, 0.30, 0.75, 0.18], ['c', 0.36, -0.18, 0.93, -0.93, 1.29, -1.68], ['c', 0.12, -0.24, 0.18, -0.48, 0.63, -2.55], ['l', 0.51, -2.31], ['c', 0.00, -0.03, -0.18, 0.03, -0.39, 0.12], ['c', -1.14, 0.36, -2.10, 0.54, -2.82, 0.51], ['c', -0.42, -0.03, -0.75, -0.12, -1.11, -0.30], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.33, -0.45, 0.84, -0.81, 1.38, -0.90], ['z']], w: 12.453, h: 36.383 },\n\t'rests.128th': { d: [['M', 6.03, -21.12], ['c', 0.66, -0.09, 1.23, 0.09, 1.68, 0.51], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.09, 0.33, 0.18, 0.66, 0.21, 0.72], ['c', 0.12, 0.27, 0.33, 0.45, 0.60, 0.48], ['c', 0.21, 0.00, 0.33, -0.06, 0.54, -0.36], ['c', 0.15, -0.21, 0.54, -0.93, 0.78, -1.47], ['c', 0.15, -0.33, 0.18, -0.39, 0.30, -0.48], ['c', 0.18, -0.09, 0.45, 0.00, 0.51, 0.15], ['c', 0.03, 0.09, -7.11, 42.75, -7.17, 42.84], ['c', -0.03, 0.03, -0.15, 0.09, -0.24, 0.15], ['c', -0.18, 0.06, -0.24, 0.06, -0.45, 0.06], ['c', -0.24, 0.00, -0.30, 0.00, -0.48, -0.06], ['c', -0.09, -0.06, -0.21, -0.12, -0.21, -0.15], ['c', -0.06, -0.03, 0.03, -0.57, 0.84, -4.98], ['c', 0.51, -2.70, 0.93, -4.92, 0.90, -4.92], ['c', 0.00, 0.00, -0.15, 0.06, -0.36, 0.12], ['c', -0.78, 0.27, -1.62, 0.48, -2.31, 0.57], ['c', -0.15, 0.03, -0.54, 0.03, -0.81, 0.03], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.36, -0.54, 0.96, -0.87, 1.65, -0.93], ['c', 0.54, -0.03, 1.02, 0.15, 1.41, 0.54], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.09, 0.33, 0.18, 0.66, 0.21, 0.72], ['c', 0.12, 0.27, 0.33, 0.45, 0.63, 0.48], ['c', 0.12, 0.00, 0.18, 0.00, 0.30, -0.09], ['c', 0.42, -0.21, 1.14, -1.11, 1.50, -1.83], ['c', 0.12, -0.27, 0.12, -0.27, 0.54, -2.52], ['c', 0.24, -1.23, 0.42, -2.25, 0.39, -2.25], ['c', 0.00, 0.00, -0.24, 0.06, -0.51, 0.18], ['c', -1.26, 0.39, -2.25, 0.57, -3.06, 0.54], ['c', -0.42, -0.03, -0.75, -0.12, -1.11, -0.30], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.36, -0.54, 0.96, -0.87, 1.65, -0.93], ['c', 0.54, -0.03, 1.02, 0.15, 1.41, 0.54], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.15, 0.63, 0.21, 0.81, 0.33, 0.96], ['c', 0.18, 0.21, 0.51, 0.30, 0.75, 0.18], ['c', 0.36, -0.15, 1.05, -0.99, 1.41, -1.77], ['l', 0.15, -0.30], ['l', 0.42, -2.25], ['c', 0.21, -1.26, 0.42, -2.28, 0.39, -2.28], ['l', -0.51, 0.15], ['c', -1.11, 0.39, -1.89, 0.51, -2.70, 0.51], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.36, -0.54, 0.96, -0.87, 1.65, -0.93], ['c', 0.54, -0.03, 1.02, 0.15, 1.41, 0.54], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.15, 0.63, 0.21, 0.81, 0.33, 0.96], ['c', 0.18, 0.18, 0.48, 0.27, 0.72, 0.21], ['c', 0.33, -0.12, 1.14, -1.26, 1.41, -1.95], ['c', 0.00, -0.09, 0.21, -1.11, 0.45, -2.34], ['c', 0.21, -1.20, 0.39, -2.22, 0.39, -2.28], ['c', 0.03, -0.03, 0.00, -0.03, -0.45, 0.12], ['c', -0.57, 0.18, -1.20, 0.33, -1.71, 0.42], ['c', -0.30, 0.06, -0.51, 0.06, -0.93, 0.06], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.36, -0.54, 0.96, -0.87, 1.65, -0.93], ['c', 0.54, -0.03, 1.02, 0.15, 1.41, 0.54], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.09, 0.33, 0.18, 0.66, 0.21, 0.72], ['c', 0.12, 0.27, 0.33, 0.45, 0.60, 0.48], ['c', 0.18, 0.00, 0.36, -0.09, 0.57, -0.33], ['c', 0.33, -0.36, 0.78, -1.14, 0.93, -1.56], ['c', 0.03, -0.12, 0.24, -1.20, 0.45, -2.40], ['c', 0.24, -1.20, 0.42, -2.22, 0.42, -2.28], ['c', 0.03, -0.03, 0.00, -0.03, -0.39, 0.09], ['c', -1.05, 0.36, -1.80, 0.48, -2.58, 0.48], ['c', -0.63, 0.00, -0.84, -0.03, -1.29, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.33, -0.45, 0.84, -0.81, 1.38, -0.90], ['z']], w: 12.992, h: 43.883 },\n\t'accidentals.sharp': { d: [['M', 5.73, -11.19], ['c', 0.21, -0.12, 0.54, -0.03, 0.66, 0.24], ['c', 0.06, 0.12, 0.06, 0.21, 0.06, 2.31], ['c', 0.00, 1.23, 0.00, 2.22, 0.03, 2.22], ['c', 0.00, 0.00, 0.27, -0.12, 0.60, -0.24], ['c', 0.69, -0.27, 0.78, -0.30, 0.96, -0.15], ['c', 0.21, 0.15, 0.21, 0.18, 0.21, 1.38], ['c', 0.00, 1.02, 0.00, 1.11, -0.06, 1.20], ['c', -0.03, 0.06, -0.09, 0.12, -0.12, 0.15], ['c', -0.06, 0.03, -0.42, 0.21, -0.84, 0.36], ['l', -0.75, 0.33], ['l', -0.03, 2.43], ['c', 0.00, 1.32, 0.00, 2.43, 0.03, 2.43], ['c', 0.00, 0.00, 0.27, -0.12, 0.60, -0.24], ['c', 0.69, -0.27, 0.78, -0.30, 0.96, -0.15], ['c', 0.21, 0.15, 0.21, 0.18, 0.21, 1.38], ['c', 0.00, 1.02, 0.00, 1.11, -0.06, 1.20], ['c', -0.03, 0.06, -0.09, 0.12, -0.12, 0.15], ['c', -0.06, 0.03, -0.42, 0.21, -0.84, 0.36], ['l', -0.75, 0.33], ['l', -0.03, 2.52], ['c', 0.00, 2.28, -0.03, 2.55, -0.06, 2.64], ['c', -0.21, 0.36, -0.72, 0.36, -0.93, 0.00], ['c', -0.03, -0.09, -0.06, -0.33, -0.06, -2.43], ['l', 0.00, -2.31], ['l', -1.29, 0.51], ['l', -1.26, 0.51], ['l', 0.00, 2.43], ['c', 0.00, 2.58, 0.00, 2.52, -0.15, 2.67], ['c', -0.06, 0.09, -0.27, 0.18, -0.36, 0.18], ['c', -0.12, 0.00, -0.33, -0.09, -0.39, -0.18], ['c', -0.15, -0.15, -0.15, -0.09, -0.15, -2.43], ['c', 0.00, -1.23, 0.00, -2.22, -0.03, -2.22], ['c', 0.00, 0.00, -0.27, 0.12, -0.60, 0.24], ['c', -0.69, 0.27, -0.78, 0.30, -0.96, 0.15], ['c', -0.21, -0.15, -0.21, -0.18, -0.21, -1.38], ['c', 0.00, -1.02, 0.00, -1.11, 0.06, -1.20], ['c', 0.03, -0.06, 0.09, -0.12, 0.12, -0.15], ['c', 0.06, -0.03, 0.42, -0.21, 0.84, -0.36], ['l', 0.78, -0.33], ['l', 0.00, -2.43], ['c', 0.00, -1.32, 0.00, -2.43, -0.03, -2.43], ['c', 0.00, 0.00, -0.27, 0.12, -0.60, 0.24], ['c', -0.69, 0.27, -0.78, 0.30, -0.96, 0.15], ['c', -0.21, -0.15, -0.21, -0.18, -0.21, -1.38], ['c', 0.00, -1.02, 0.00, -1.11, 0.06, -1.20], ['c', 0.03, -0.06, 0.09, -0.12, 0.12, -0.15], ['c', 0.06, -0.03, 0.42, -0.21, 0.84, -0.36], ['l', 0.78, -0.33], ['l', 0.00, -2.52], ['c', 0.00, -2.28, 0.03, -2.55, 0.06, -2.64], ['c', 0.21, -0.36, 0.72, -0.36, 0.93, 0.00], ['c', 0.03, 0.09, 0.06, 0.33, 0.06, 2.43], ['l', 0.03, 2.31], ['l', 1.26, -0.51], ['l', 1.26, -0.51], ['l', 0.00, -2.43], ['c', 0.00, -2.28, 0.00, -2.43, 0.06, -2.55], ['c', 0.06, -0.12, 0.12, -0.18, 0.27, -0.24], ['z'], ['m', -0.33, 10.65], ['l', 0.00, -2.43], ['l', -1.29, 0.51], ['l', -1.26, 0.51], ['l', 0.00, 2.46], ['l', 0.00, 2.43], ['l', 0.09, -0.03], ['c', 0.06, -0.03, 0.63, -0.27, 1.29, -0.51], ['l', 1.17, -0.48], ['l', 0.00, -2.46], ['z']], w: 8.25, h: 22.462 },\n\t'accidentals.halfsharp': { d: [['M', 2.43, -10.05], ['c', 0.21, -0.12, 0.54, -0.03, 0.66, 0.24], ['c', 0.06, 0.12, 0.06, 0.21, 0.06, 2.01], ['c', 0.00, 1.05, 0.00, 1.89, 0.03, 1.89], ['l', 0.72, -0.48], ['c', 0.69, -0.48, 0.69, -0.51, 0.87, -0.51], ['c', 0.15, 0.00, 0.18, 0.03, 0.27, 0.09], ['c', 0.21, 0.15, 0.21, 0.18, 0.21, 1.41], ['c', 0.00, 1.11, -0.03, 1.14, -0.09, 1.23], ['c', -0.03, 0.03, -0.48, 0.39, -1.02, 0.75], ['l', -0.99, 0.66], ['l', 0.00, 2.37], ['c', 0.00, 1.32, 0.00, 2.37, 0.03, 2.37], ['l', 0.72, -0.48], ['c', 0.69, -0.48, 0.69, -0.51, 0.87, -0.51], ['c', 0.15, 0.00, 0.18, 0.03, 0.27, 0.09], ['c', 0.21, 0.15, 0.21, 0.18, 0.21, 1.41], ['c', 0.00, 1.11, -0.03, 1.14, -0.09, 1.23], ['c', -0.03, 0.03, -0.48, 0.39, -1.02, 0.75], ['l', -0.99, 0.66], ['l', 0.00, 2.25], ['c', 0.00, 1.95, 0.00, 2.28, -0.06, 2.37], ['c', -0.06, 0.12, -0.12, 0.21, -0.24, 0.27], ['c', -0.27, 0.12, -0.54, 0.03, -0.69, -0.24], ['c', -0.06, -0.12, -0.06, -0.21, -0.06, -2.01], ['c', 0.00, -1.05, 0.00, -1.89, -0.03, -1.89], ['l', -0.72, 0.48], ['c', -0.69, 0.48, -0.69, 0.48, -0.87, 0.48], ['c', -0.15, 0.00, -0.18, 0.00, -0.27, -0.06], ['c', -0.21, -0.15, -0.21, -0.18, -0.21, -1.41], ['c', 0.00, -1.11, 0.03, -1.14, 0.09, -1.23], ['c', 0.03, -0.03, 0.48, -0.39, 1.02, -0.75], ['l', 0.99, -0.66], ['l', 0.00, -2.37], ['c', 0.00, -1.32, 0.00, -2.37, -0.03, -2.37], ['l', -0.72, 0.48], ['c', -0.69, 0.48, -0.69, 0.48, -0.87, 0.48], ['c', -0.15, 0.00, -0.18, 0.00, -0.27, -0.06], ['c', -0.21, -0.15, -0.21, -0.18, -0.21, -1.41], ['c', 0.00, -1.11, 0.03, -1.14, 0.09, -1.23], ['c', 0.03, -0.03, 0.48, -0.39, 1.02, -0.75], ['l', 0.99, -0.66], ['l', 0.00, -2.25], ['c', 0.00, -2.13, 0.00, -2.28, 0.06, -2.40], ['c', 0.06, -0.12, 0.12, -0.18, 0.27, -0.24], ['z']], w: 5.25, h: 20.174 },\n\t'accidentals.nat': { d: [['M', 0.21, -11.40], ['c', 0.24, -0.06, 0.78, 0.00, 0.99, 0.15], ['c', 0.03, 0.03, 0.03, 0.48, 0.00, 2.61], ['c', -0.03, 1.44, -0.03, 2.61, -0.03, 2.61], ['c', 0.00, 0.03, 0.75, -0.09, 1.68, -0.24], ['c', 0.96, -0.18, 1.71, -0.27, 1.74, -0.27], ['c', 0.15, 0.03, 0.27, 0.15, 0.36, 0.30], ['l', 0.06, 0.12], ['l', 0.09, 8.67], ['c', 0.09, 6.96, 0.12, 8.67, 0.09, 8.67], ['c', -0.03, 0.03, -0.12, 0.06, -0.21, 0.09], ['c', -0.24, 0.09, -0.72, 0.09, -0.96, 0.00], ['c', -0.09, -0.03, -0.18, -0.06, -0.21, -0.09], ['c', -0.03, -0.03, -0.03, -0.48, 0.00, -2.61], ['c', 0.03, -1.44, 0.03, -2.61, 0.03, -2.61], ['c', 0.00, -0.03, -0.75, 0.09, -1.68, 0.24], ['c', -0.96, 0.18, -1.71, 0.27, -1.74, 0.27], ['c', -0.15, -0.03, -0.27, -0.15, -0.36, -0.30], ['l', -0.06, -0.15], ['l', -0.09, -7.53], ['c', -0.06, -4.14, -0.09, -8.04, -0.12, -8.67], ['l', 0.00, -1.11], ['l', 0.15, -0.06], ['c', 0.09, -0.03, 0.21, -0.06, 0.27, -0.09], ['z'], ['m', 3.75, 8.40], ['c', 0.00, -0.33, 0.00, -0.42, -0.03, -0.42], ['c', -0.12, 0.00, -2.79, 0.45, -2.79, 0.48], ['c', -0.03, 0.00, -0.09, 6.30, -0.09, 6.33], ['c', 0.03, 0.00, 2.79, -0.45, 2.82, -0.48], ['c', 0.00, 0.00, 0.09, -4.53, 0.09, -5.91], ['z']], w: 5.4, h: 22.8 },\n\t'accidentals.flat': { d: [['M', -0.36, -14.07], ['c', 0.33, -0.06, 0.87, 0.00, 1.08, 0.15], ['c', 0.06, 0.03, 0.06, 0.36, -0.03, 5.25], ['c', -0.06, 2.85, -0.09, 5.19, -0.09, 5.19], ['c', 0.00, 0.03, 0.12, -0.03, 0.24, -0.12], ['c', 0.63, -0.42, 1.41, -0.66, 2.19, -0.72], ['c', 0.81, -0.03, 1.47, 0.21, 2.04, 0.78], ['c', 0.57, 0.54, 0.87, 1.26, 0.93, 2.04], ['c', 0.03, 0.57, -0.09, 1.08, -0.36, 1.62], ['c', -0.42, 0.81, -1.02, 1.38, -2.82, 2.61], ['c', -1.14, 0.78, -1.44, 1.02, -1.80, 1.44], ['c', -0.18, 0.18, -0.39, 0.39, -0.45, 0.42], ['c', -0.27, 0.18, -0.57, 0.15, -0.81, -0.06], ['c', -0.06, -0.09, -0.12, -0.18, -0.15, -0.27], ['c', -0.03, -0.06, -0.09, -3.27, -0.18, -8.34], ['c', -0.09, -4.53, -0.15, -8.58, -0.18, -9.03], ['l', 0.00, -0.78], ['l', 0.12, -0.06], ['c', 0.06, -0.03, 0.18, -0.09, 0.27, -0.12], ['z'], ['m', 3.18, 11.01], ['c', -0.21, -0.12, -0.54, -0.15, -0.81, -0.06], ['c', -0.54, 0.15, -0.99, 0.63, -1.17, 1.26], ['c', -0.06, 0.30, -0.12, 2.88, -0.06, 3.87], ['c', 0.03, 0.42, 0.03, 0.81, 0.06, 0.90], ['l', 0.03, 0.12], ['l', 0.45, -0.39], ['c', 0.63, -0.54, 1.26, -1.17, 1.56, -1.59], ['c', 0.30, -0.42, 0.60, -0.99, 0.72, -1.41], ['c', 0.18, -0.69, 0.09, -1.47, -0.18, -2.07], ['c', -0.15, -0.30, -0.33, -0.51, -0.60, -0.63], ['z']], w: 6.75, h: 18.801 },\n\t'accidentals.halfflat': { d: [['M', 4.83, -14.07], ['c', 0.33, -0.06, 0.87, 0.00, 1.08, 0.15], ['c', 0.06, 0.03, 0.06, 0.60, -0.12, 9.06], ['c', -0.09, 5.55, -0.15, 9.06, -0.18, 9.12], ['c', -0.03, 0.09, -0.09, 0.18, -0.15, 0.27], ['c', -0.24, 0.21, -0.54, 0.24, -0.81, 0.06], ['c', -0.06, -0.03, -0.27, -0.24, -0.45, -0.42], ['c', -0.36, -0.42, -0.66, -0.66, -1.80, -1.44], ['c', -1.23, -0.84, -1.83, -1.32, -2.25, -1.77], ['c', -0.66, -0.78, -0.96, -1.56, -0.93, -2.46], ['c', 0.09, -1.41, 1.11, -2.58, 2.40, -2.79], ['c', 0.30, -0.06, 0.84, -0.03, 1.23, 0.06], ['c', 0.54, 0.12, 1.08, 0.33, 1.53, 0.63], ['c', 0.12, 0.09, 0.24, 0.15, 0.24, 0.12], ['c', 0.00, 0.00, -0.12, -8.37, -0.18, -9.75], ['l', 0.00, -0.66], ['l', 0.12, -0.06], ['c', 0.06, -0.03, 0.18, -0.09, 0.27, -0.12], ['z'], ['m', -1.65, 10.95], ['c', -0.60, -0.18, -1.08, 0.09, -1.38, 0.69], ['c', -0.27, 0.60, -0.36, 1.38, -0.18, 2.07], ['c', 0.12, 0.42, 0.42, 0.99, 0.72, 1.41], ['c', 0.30, 0.42, 0.93, 1.05, 1.56, 1.59], ['l', 0.48, 0.39], ['l', 0.00, -0.12], ['c', 0.03, -0.09, 0.03, -0.48, 0.06, -0.90], ['c', 0.03, -0.57, 0.03, -1.08, 0.00, -2.22], ['c', -0.03, -1.62, -0.03, -1.62, -0.24, -2.07], ['c', -0.21, -0.42, -0.60, -0.75, -1.02, -0.84], ['z']], w: 6.728, h: 18.801 },\n\t'accidentals.dblflat': { d: [['M', -0.36, -14.07], ['c', 0.33, -0.06, 0.87, 0.00, 1.08, 0.15], ['c', 0.06, 0.03, 0.06, 0.36, -0.03, 5.25], ['c', -0.06, 2.85, -0.09, 5.19, -0.09, 5.19], ['c', 0.00, 0.03, 0.12, -0.03, 0.24, -0.12], ['c', 0.63, -0.42, 1.41, -0.66, 2.19, -0.72], ['c', 0.81, -0.03, 1.47, 0.21, 2.04, 0.78], ['c', 0.57, 0.54, 0.87, 1.26, 0.93, 2.04], ['c', 0.03, 0.57, -0.09, 1.08, -0.36, 1.62], ['c', -0.42, 0.81, -1.02, 1.38, -2.82, 2.61], ['c', -1.14, 0.78, -1.44, 1.02, -1.80, 1.44], ['c', -0.18, 0.18, -0.39, 0.39, -0.45, 0.42], ['c', -0.27, 0.18, -0.57, 0.15, -0.81, -0.06], ['c', -0.06, -0.09, -0.12, -0.18, -0.15, -0.27], ['c', -0.03, -0.06, -0.09, -3.27, -0.18, -8.34], ['c', -0.09, -4.53, -0.15, -8.58, -0.18, -9.03], ['l', 0.00, -0.78], ['l', 0.12, -0.06], ['c', 0.06, -0.03, 0.18, -0.09, 0.27, -0.12], ['z'], ['m', 3.18, 11.01], ['c', -0.21, -0.12, -0.54, -0.15, -0.81, -0.06], ['c', -0.54, 0.15, -0.99, 0.63, -1.17, 1.26], ['c', -0.06, 0.30, -0.12, 2.88, -0.06, 3.87], ['c', 0.03, 0.42, 0.03, 0.81, 0.06, 0.90], ['l', 0.03, 0.12], ['l', 0.45, -0.39], ['c', 0.63, -0.54, 1.26, -1.17, 1.56, -1.59], ['c', 0.30, -0.42, 0.60, -0.99, 0.72, -1.41], ['c', 0.18, -0.69, 0.09, -1.47, -0.18, -2.07], ['c', -0.15, -0.30, -0.33, -0.51, -0.60, -0.63], ['z'], ['m', 3, -11], ['c', 0.33, -0.06, 0.87, 0.00, 1.08, 0.15], ['c', 0.06, 0.03, 0.06, 0.36, -0.03, 5.25], ['c', -0.06, 2.85, -0.09, 5.19, -0.09, 5.19], ['c', 0.00, 0.03, 0.12, -0.03, 0.24, -0.12], ['c', 0.63, -0.42, 1.41, -0.66, 2.19, -0.72], ['c', 0.81, -0.03, 1.47, 0.21, 2.04, 0.78], ['c', 0.57, 0.54, 0.87, 1.26, 0.93, 2.04], ['c', 0.03, 0.57, -0.09, 1.08, -0.36, 1.62], ['c', -0.42, 0.81, -1.02, 1.38, -2.82, 2.61], ['c', -1.14, 0.78, -1.44, 1.02, -1.80, 1.44], ['c', -0.18, 0.18, -0.39, 0.39, -0.45, 0.42], ['c', -0.27, 0.18, -0.57, 0.15, -0.81, -0.06], ['c', -0.06, -0.09, -0.12, -0.18, -0.15, -0.27], ['c', -0.03, -0.06, -0.09, -3.27, -0.18, -8.34], ['c', -0.09, -4.53, -0.15, -8.58, -0.18, -9.03], ['l', 0.00, -0.78], ['l', 0.12, -0.06], ['c', 0.06, -0.03, 0.18, -0.09, 0.27, -0.12], ['z'], ['m', 3.18, 11.01], ['c', -0.21, -0.12, -0.54, -0.15, -0.81, -0.06], ['c', -0.54, 0.15, -0.99, 0.63, -1.17, 1.26], ['c', -0.06, 0.30, -0.12, 2.88, -0.06, 3.87], ['c', 0.03, 0.42, 0.03, 0.81, 0.06, 0.90], ['l', 0.03, 0.12], ['l', 0.45, -0.39], ['c', 0.63, -0.54, 1.26, -1.17, 1.56, -1.59], ['c', 0.30, -0.42, 0.60, -0.99, 0.72, -1.41], ['c', 0.18, -0.69, 0.09, -1.47, -0.18, -2.07], ['c', -0.15, -0.30, -0.33, -0.51, -0.60, -0.63], ['z']], w: 12.1, h: 18.804 },\n\t'accidentals.dblsharp': { d: [['M', -0.18, -3.96], ['c', 0.06, -0.03, 0.12, -0.06, 0.15, -0.06], ['c', 0.09, 0.00, 2.76, 0.27, 2.79, 0.30], ['c', 0.12, 0.03, 0.15, 0.12, 0.15, 0.51], ['c', 0.06, 0.96, 0.24, 1.59, 0.57, 2.10], ['c', 0.06, 0.09, 0.15, 0.21, 0.18, 0.24], ['l', 0.09, 0.06], ['l', 0.09, -0.06], ['c', 0.03, -0.03, 0.12, -0.15, 0.18, -0.24], ['c', 0.33, -0.51, 0.51, -1.14, 0.57, -2.10], ['c', 0.00, -0.39, 0.03, -0.45, 0.12, -0.51], ['c', 0.03, 0.00, 0.66, -0.09, 1.44, -0.15], ['c', 1.47, -0.15, 1.50, -0.15, 1.56, -0.03], ['c', 0.03, 0.06, 0.00, 0.42, -0.09, 1.44], ['c', -0.09, 0.72, -0.15, 1.35, -0.15, 1.38], ['c', 0.00, 0.03, -0.03, 0.09, -0.06, 0.12], ['c', -0.06, 0.06, -0.12, 0.09, -0.51, 0.09], ['c', -1.08, 0.06, -1.80, 0.30, -2.28, 0.75], ['l', -0.12, 0.09], ['l', 0.09, 0.09], ['c', 0.12, 0.15, 0.39, 0.33, 0.63, 0.45], ['c', 0.42, 0.18, 0.96, 0.27, 1.68, 0.33], ['c', 0.39, 0.00, 0.45, 0.03, 0.51, 0.09], ['c', 0.03, 0.03, 0.06, 0.09, 0.06, 0.12], ['c', 0.00, 0.03, 0.06, 0.66, 0.15, 1.38], ['c', 0.09, 1.02, 0.12, 1.38, 0.09, 1.44], ['c', -0.06, 0.12, -0.09, 0.12, -1.56, -0.03], ['c', -0.78, -0.06, -1.41, -0.15, -1.44, -0.15], ['c', -0.09, -0.06, -0.12, -0.12, -0.12, -0.54], ['c', -0.06, -0.93, -0.24, -1.56, -0.57, -2.07], ['c', -0.06, -0.09, -0.15, -0.21, -0.18, -0.24], ['l', -0.09, -0.06], ['l', -0.09, 0.06], ['c', -0.03, 0.03, -0.12, 0.15, -0.18, 0.24], ['c', -0.33, 0.51, -0.51, 1.14, -0.57, 2.07], ['c', 0.00, 0.42, -0.03, 0.48, -0.12, 0.54], ['c', -0.03, 0.00, -0.66, 0.09, -1.44, 0.15], ['c', -1.47, 0.15, -1.50, 0.15, -1.56, 0.03], ['c', -0.03, -0.06, 0.00, -0.42, 0.09, -1.44], ['c', 0.09, -0.72, 0.15, -1.35, 0.15, -1.38], ['c', 0.00, -0.03, 0.03, -0.09, 0.06, -0.12], ['c', 0.06, -0.06, 0.12, -0.09, 0.51, -0.09], ['c', 0.72, -0.06, 1.26, -0.15, 1.68, -0.33], ['c', 0.24, -0.12, 0.51, -0.30, 0.63, -0.45], ['l', 0.09, -0.09], ['l', -0.12, -0.09], ['c', -0.48, -0.45, -1.20, -0.69, -2.28, -0.75], ['c', -0.39, 0.00, -0.45, -0.03, -0.51, -0.09], ['c', -0.03, -0.03, -0.06, -0.09, -0.06, -0.12], ['c', 0.00, -0.03, -0.06, -0.63, -0.12, -1.38], ['c', -0.09, -0.72, -0.15, -1.35, -0.15, -1.38], ['z']], w: 7.95, h: 7.977 },\n\t'dots.dot': { d: [['M', 1.32, -1.68], ['c', 0.09, -0.03, 0.27, -0.06, 0.39, -0.06], ['c', 0.96, 0.00, 1.74, 0.78, 1.74, 1.71], ['c', 0.00, 0.96, -0.78, 1.74, -1.71, 1.74], ['c', -0.96, 0.00, -1.74, -0.78, -1.74, -1.71], ['c', 0.00, -0.78, 0.54, -1.50, 1.32, -1.68], ['z']], w: 3.45, h: 3.45 },\n\t'noteheads.dbl': { d: [['M', -0.69, -4.02], ['c', 0.18, -0.09, 0.36, -0.09, 0.54, 0.00], ['c', 0.18, 0.09, 0.24, 0.15, 0.33, 0.30], ['c', 0.06, 0.15, 0.06, 0.18, 0.06, 1.41], ['l', 0.00, 1.23], ['l', 0.12, -0.18], ['c', 0.72, -1.26, 2.64, -2.31, 4.86, -2.64], ['c', 0.81, -0.15, 1.11, -0.15, 2.13, -0.15], ['c', 0.99, 0.00, 1.29, 0.00, 2.10, 0.15], ['c', 0.75, 0.12, 1.38, 0.27, 2.04, 0.54], ['c', 1.35, 0.51, 2.34, 1.26, 2.82, 2.10], ['l', 0.12, 0.18], ['l', 0.00, -1.23], ['c', 0.00, -1.20, 0.00, -1.26, 0.06, -1.38], ['c', 0.09, -0.18, 0.15, -0.24, 0.33, -0.33], ['c', 0.18, -0.09, 0.36, -0.09, 0.54, 0.00], ['c', 0.18, 0.09, 0.24, 0.15, 0.33, 0.30], ['l', 0.06, 0.15], ['l', 0.00, 3.54], ['l', 0.00, 3.54], ['l', -0.06, 0.15], ['c', -0.09, 0.18, -0.15, 0.24, -0.33, 0.33], ['c', -0.18, 0.09, -0.36, 0.09, -0.54, 0.00], ['c', -0.18, -0.09, -0.24, -0.15, -0.33, -0.33], ['c', -0.06, -0.12, -0.06, -0.18, -0.06, -1.38], ['l', 0.00, -1.23], ['l', -0.12, 0.18], ['c', -0.48, 0.84, -1.47, 1.59, -2.82, 2.10], ['c', -0.84, 0.33, -1.71, 0.54, -2.85, 0.66], ['c', -0.45, 0.06, -2.16, 0.06, -2.61, 0.00], ['c', -1.14, -0.12, -2.01, -0.33, -2.85, -0.66], ['c', -1.35, -0.51, -2.34, -1.26, -2.82, -2.10], ['l', -0.12, -0.18], ['l', 0.00, 1.23], ['c', 0.00, 1.23, 0.00, 1.26, -0.06, 1.38], ['c', -0.09, 0.18, -0.15, 0.24, -0.33, 0.33], ['c', -0.18, 0.09, -0.36, 0.09, -0.54, 0.00], ['c', -0.18, -0.09, -0.24, -0.15, -0.33, -0.33], ['l', -0.06, -0.15], ['l', 0.00, -3.54], ['c', 0.00, -3.48, 0.00, -3.54, 0.06, -3.66], ['c', 0.09, -0.18, 0.15, -0.24, 0.33, -0.33], ['z'], ['m', 7.71, 0.63], ['c', -0.36, -0.06, -0.90, -0.06, -1.14, 0.00], ['c', -0.30, 0.03, -0.66, 0.24, -0.87, 0.42], ['c', -0.60, 0.54, -0.90, 1.62, -0.75, 2.82], ['c', 0.12, 0.93, 0.51, 1.68, 1.11, 2.31], ['c', 0.75, 0.72, 1.83, 1.20, 2.85, 1.26], ['c', 1.05, 0.06, 1.83, -0.54, 2.10, -1.65], ['c', 0.21, -0.90, 0.12, -1.95, -0.24, -2.82], ['c', -0.36, -0.81, -1.08, -1.53, -1.95, -1.95], ['c', -0.30, -0.15, -0.78, -0.30, -1.11, -0.39], ['z']], w: 16.83, h: 8.145 },\n\t'noteheads.whole': { d: [['M', 6.51, -4.05], ['c', 0.51, -0.03, 2.01, 0.00, 2.52, 0.03], ['c', 1.41, 0.18, 2.64, 0.51, 3.72, 1.08], ['c', 1.20, 0.63, 1.95, 1.41, 2.19, 2.31], ['c', 0.09, 0.33, 0.09, 0.90, 0.00, 1.23], ['c', -0.24, 0.90, -0.99, 1.68, -2.19, 2.31], ['c', -1.08, 0.57, -2.28, 0.90, -3.75, 1.08], ['c', -0.66, 0.06, -2.31, 0.06, -2.97, 0.00], ['c', -1.47, -0.18, -2.67, -0.51, -3.75, -1.08], ['c', -1.20, -0.63, -1.95, -1.41, -2.19, -2.31], ['c', -0.09, -0.33, -0.09, -0.90, 0.00, -1.23], ['c', 0.24, -0.90, 0.99, -1.68, 2.19, -2.31], ['c', 1.20, -0.63, 2.61, -0.99, 4.23, -1.11], ['z'], ['m', 0.57, 0.66], ['c', -0.87, -0.15, -1.53, 0.00, -2.04, 0.51], ['c', -0.15, 0.15, -0.24, 0.27, -0.33, 0.48], ['c', -0.24, 0.51, -0.36, 1.08, -0.33, 1.77], ['c', 0.03, 0.69, 0.18, 1.26, 0.42, 1.77], ['c', 0.60, 1.17, 1.74, 1.98, 3.18, 2.22], ['c', 1.11, 0.21, 1.95, -0.15, 2.34, -0.99], ['c', 0.24, -0.51, 0.36, -1.08, 0.33, -1.80], ['c', -0.06, -1.11, -0.45, -2.04, -1.17, -2.76], ['c', -0.63, -0.63, -1.47, -1.05, -2.40, -1.20], ['z']], w: 14.985, h: 8.097 },\n\t'noteheads.half': { d: [['M', 7.44, -4.05], ['c', 0.06, -0.03, 0.27, -0.03, 0.48, -0.03], ['c', 1.05, 0.00, 1.71, 0.24, 2.10, 0.81], ['c', 0.42, 0.60, 0.45, 1.35, 0.18, 2.40], ['c', -0.42, 1.59, -1.14, 2.73, -2.16, 3.39], ['c', -1.41, 0.93, -3.18, 1.44, -5.40, 1.53], ['c', -1.17, 0.03, -1.89, -0.21, -2.28, -0.81], ['c', -0.42, -0.60, -0.45, -1.35, -0.18, -2.40], ['c', 0.42, -1.59, 1.14, -2.73, 2.16, -3.39], ['c', 0.63, -0.42, 1.23, -0.72, 1.98, -0.96], ['c', 0.90, -0.30, 1.65, -0.42, 3.12, -0.54], ['z'], ['m', 1.29, 0.87], ['c', -0.27, -0.09, -0.63, -0.12, -0.90, -0.03], ['c', -0.72, 0.24, -1.53, 0.69, -3.27, 1.80], ['c', -2.34, 1.50, -3.30, 2.25, -3.57, 2.79], ['c', -0.36, 0.72, -0.06, 1.50, 0.66, 1.77], ['c', 0.24, 0.12, 0.69, 0.09, 0.99, 0.00], ['c', 0.84, -0.30, 1.92, -0.93, 4.14, -2.37], ['c', 1.62, -1.08, 2.37, -1.71, 2.61, -2.19], ['c', 0.36, -0.72, 0.06, -1.50, -0.66, -1.77], ['z']], w: 10.37, h: 8.132 },\n\t'noteheads.quarter': { d: [['M', 6.09, -4.05], ['c', 0.36, -0.03, 1.20, 0.00, 1.53, 0.06], ['c', 1.17, 0.24, 1.89, 0.84, 2.16, 1.83], ['c', 0.06, 0.18, 0.06, 0.30, 0.06, 0.66], ['c', 0.00, 0.45, 0.00, 0.63, -0.15, 1.08], ['c', -0.66, 2.04, -3.06, 3.93, -5.52, 4.38], ['c', -0.54, 0.09, -1.44, 0.09, -1.83, 0.03], ['c', -1.23, -0.27, -1.98, -0.87, -2.25, -1.86], ['c', -0.06, -0.18, -0.06, -0.30, -0.06, -0.66], ['c', 0.00, -0.45, 0.00, -0.63, 0.15, -1.08], ['c', 0.24, -0.78, 0.75, -1.53, 1.44, -2.22], ['c', 1.20, -1.20, 2.85, -2.01, 4.47, -2.22], ['z']], w: 9.81, h: 8.094 },\n\t'noteheads.slash.nostem': { d: [['M', 9.30, -7.77], ['c', 0.06, -0.06, 0.18, -0.06, 1.71, -0.06], ['l', 1.65, 0.00], ['l', 0.09, 0.09], ['c', 0.06, 0.06, 0.06, 0.09, 0.06, 0.15], ['c', -0.03, 0.12, -9.21, 15.24, -9.30, 15.33], ['c', -0.06, 0.06, -0.18, 0.06, -1.71, 0.06], ['l', -1.65, 0.00], ['l', -0.09, -0.09], ['c', -0.06, -0.06, -0.06, -0.09, -0.06, -0.15], ['c', 0.03, -0.12, 9.21, -15.24, 9.30, -15.33], ['z']], w: 12.81, h: 15.63 },\n\t'noteheads.indeterminate': { d: [['M', 0.78, -4.05], ['c', 0.12, -0.03, 0.24, -0.03, 0.36, 0.03], ['c', 0.03, 0.03, 0.93, 0.72, 1.95, 1.56], ['l', 1.86, 1.50], ['l', 1.86, -1.50], ['c', 1.02, -0.84, 1.92, -1.53, 1.95, -1.56], ['c', 0.21, -0.12, 0.33, -0.09, 0.75, 0.24], ['c', 0.30, 0.27, 0.36, 0.36, 0.36, 0.54], ['c', 0.00, 0.03, -0.03, 0.12, -0.06, 0.18], ['c', -0.03, 0.06, -0.90, 0.75, -1.89, 1.56], ['l', -1.80, 1.47], ['c', 0.00, 0.03, 0.81, 0.69, 1.80, 1.50], ['c', 0.99, 0.81, 1.86, 1.50, 1.89, 1.56], ['c', 0.03, 0.06, 0.06, 0.15, 0.06, 0.18], ['c', 0.00, 0.18, -0.06, 0.27, -0.36, 0.54], ['c', -0.42, 0.33, -0.54, 0.36, -0.75, 0.24], ['c', -0.03, -0.03, -0.93, -0.72, -1.95, -1.56], ['l', -1.86, -1.50], ['l', -1.86, 1.50], ['c', -1.02, 0.84, -1.92, 1.53, -1.95, 1.56], ['c', -0.21, 0.12, -0.33, 0.09, -0.75, -0.24], ['c', -0.30, -0.27, -0.36, -0.36, -0.36, -0.54], ['c', 0.00, -0.03, 0.03, -0.12, 0.06, -0.18], ['c', 0.03, -0.06, 0.90, -0.75, 1.89, -1.56], ['l', 1.80, -1.47], ['c', 0.00, -0.03, -0.81, -0.69, -1.80, -1.50], ['c', -0.99, -0.81, -1.86, -1.50, -1.89, -1.56], ['c', -0.06, -0.12, -0.09, -0.21, -0.03, -0.36], ['c', 0.03, -0.09, 0.57, -0.57, 0.72, -0.63], ['z']], w: 9.843, h: 8.139 },\n\t'scripts.ufermata': { d: [['M', -0.75, -10.77], ['c', 0.12, 0.00, 0.45, -0.03, 0.69, -0.03], ['c', 2.91, -0.03, 5.55, 1.53, 7.41, 4.35], ['c', 1.17, 1.71, 1.95, 3.72, 2.43, 6.03], ['c', 0.12, 0.51, 0.12, 0.57, 0.03, 0.69], ['c', -0.12, 0.21, -0.48, 0.27, -0.69, 0.12], ['c', -0.12, -0.09, -0.18, -0.24, -0.27, -0.69], ['c', -0.78, -3.63, -3.42, -6.54, -6.78, -7.38], ['c', -0.78, -0.21, -1.20, -0.24, -2.07, -0.24], ['c', -0.63, 0.00, -0.84, 0.00, -1.20, 0.06], ['c', -1.83, 0.27, -3.42, 1.08, -4.80, 2.37], ['c', -1.41, 1.35, -2.40, 3.21, -2.85, 5.19], ['c', -0.09, 0.45, -0.15, 0.60, -0.27, 0.69], ['c', -0.21, 0.15, -0.57, 0.09, -0.69, -0.12], ['c', -0.09, -0.12, -0.09, -0.18, 0.03, -0.69], ['c', 0.33, -1.62, 0.78, -3.00, 1.47, -4.38], ['c', 1.77, -3.54, 4.44, -5.67, 7.56, -5.97], ['z'], ['m', 0.33, 7.47], ['c', 1.38, -0.30, 2.58, 0.90, 2.31, 2.25], ['c', -0.15, 0.72, -0.78, 1.35, -1.47, 1.50], ['c', -1.38, 0.27, -2.58, -0.93, -2.31, -2.31], ['c', 0.15, -0.69, 0.78, -1.29, 1.47, -1.44], ['z']], w: 19.748, h: 11.289 },\n\t'scripts.dfermata': { d: [['M', -9.63, -0.42], ['c', 0.15, -0.09, 0.36, -0.06, 0.51, 0.03], ['c', 0.12, 0.09, 0.18, 0.24, 0.27, 0.66], ['c', 0.78, 3.66, 3.42, 6.57, 6.78, 7.41], ['c', 0.78, 0.21, 1.20, 0.24, 2.07, 0.24], ['c', 0.63, 0.00, 0.84, 0.00, 1.20, -0.06], ['c', 1.83, -0.27, 3.42, -1.08, 4.80, -2.37], ['c', 1.41, -1.35, 2.40, -3.21, 2.85, -5.22], ['c', 0.09, -0.42, 0.15, -0.57, 0.27, -0.66], ['c', 0.21, -0.15, 0.57, -0.09, 0.69, 0.12], ['c', 0.09, 0.12, 0.09, 0.18, -0.03, 0.69], ['c', -0.33, 1.62, -0.78, 3.00, -1.47, 4.38], ['c', -1.92, 3.84, -4.89, 6.00, -8.31, 6.00], ['c', -3.42, 0.00, -6.39, -2.16, -8.31, -6.00], ['c', -0.48, -0.96, -0.84, -1.92, -1.14, -2.97], ['c', -0.18, -0.69, -0.42, -1.74, -0.42, -1.92], ['c', 0.00, -0.12, 0.09, -0.27, 0.24, -0.33], ['z'], ['m', 9.21, 0.00], ['c', 1.20, -0.27, 2.34, 0.63, 2.34, 1.86], ['c', 0.00, 0.90, -0.66, 1.68, -1.50, 1.89], ['c', -1.38, 0.27, -2.58, -0.93, -2.31, -2.31], ['c', 0.15, -0.69, 0.78, -1.29, 1.47, -1.44], ['z']], w: 19.744, h: 11.274 },\n\t'scripts.sforzato': { d: [['M', -6.45, -3.69], ['c', 0.06, -0.03, 0.15, -0.06, 0.18, -0.06], ['c', 0.06, 0.00, 2.85, 0.72, 6.24, 1.59], ['l', 6.33, 1.65], ['c', 0.33, 0.06, 0.45, 0.21, 0.45, 0.51], ['c', 0.00, 0.30, -0.12, 0.45, -0.45, 0.51], ['l', -6.33, 1.65], ['c', -3.39, 0.87, -6.18, 1.59, -6.21, 1.59], ['c', -0.21, 0.00, -0.48, -0.24, -0.51, -0.45], ['c', 0.00, -0.15, 0.06, -0.36, 0.18, -0.45], ['c', 0.09, -0.06, 0.87, -0.27, 3.84, -1.05], ['c', 2.04, -0.54, 3.84, -0.99, 4.02, -1.02], ['c', 0.15, -0.06, 1.14, -0.24, 2.22, -0.42], ['c', 1.05, -0.18, 1.92, -0.36, 1.92, -0.36], ['c', 0.00, 0.00, -0.87, -0.18, -1.92, -0.36], ['c', -1.08, -0.18, -2.07, -0.36, -2.22, -0.42], ['c', -0.18, -0.03, -1.98, -0.48, -4.02, -1.02], ['c', -2.97, -0.78, -3.75, -0.99, -3.84, -1.05], ['c', -0.12, -0.09, -0.18, -0.30, -0.18, -0.45], ['c', 0.03, -0.15, 0.15, -0.30, 0.30, -0.39], ['z']], w: 13.5, h: 7.5 },\n\t'scripts.staccato': { d: [['M', -0.36, -1.47], ['c', 0.93, -0.21, 1.86, 0.51, 1.86, 1.47], ['c', 0.00, 0.93, -0.87, 1.65, -1.80, 1.47], ['c', -0.54, -0.12, -1.02, -0.57, -1.14, -1.08], ['c', -0.21, -0.81, 0.27, -1.65, 1.08, -1.86], ['z']], w: 2.989, h: 3.004 },\n\t'scripts.tenuto': { d: [['M', -4.20, -0.48], ['l', 0.12, -0.06], ['l', 4.08, 0.00], ['l', 4.08, 0.00], ['l', 0.12, 0.06], ['c', 0.39, 0.21, 0.39, 0.75, 0.00, 0.96], ['l', -0.12, 0.06], ['l', -4.08, 0.00], ['l', -4.08, 0.00], ['l', -0.12, -0.06], ['c', -0.39, -0.21, -0.39, -0.75, 0.00, -0.96], ['z']], w: 8.985, h: 1.08 },\n\t'scripts.umarcato': { d: [['M', -0.15, -8.19], ['c', 0.15, -0.12, 0.36, -0.03, 0.45, 0.15], ['c', 0.21, 0.42, 3.45, 7.65, 3.45, 7.71], ['c', 0.00, 0.12, -0.12, 0.27, -0.21, 0.30], ['c', -0.03, 0.03, -0.51, 0.03, -1.14, 0.03], ['c', -1.05, 0.00, -1.08, 0.00, -1.17, -0.06], ['c', -0.09, -0.06, -0.24, -0.36, -1.17, -2.40], ['c', -0.57, -1.29, -1.05, -2.34, -1.08, -2.34], ['c', 0.00, -0.03, -0.51, 1.02, -1.08, 2.34], ['c', -0.93, 2.07, -1.08, 2.34, -1.14, 2.40], ['c', -0.06, 0.03, -0.15, 0.06, -0.18, 0.06], ['c', -0.15, 0.00, -0.33, -0.18, -0.33, -0.33], ['c', 0.00, -0.06, 3.24, -7.32, 3.45, -7.71], ['c', 0.03, -0.06, 0.09, -0.15, 0.15, -0.15], ['z']], w: 7.5, h: 8.245 },\n\t'scripts.dmarcato': { d: [['M', -3.57, 0.03], ['c', 0.03, 0.00, 0.57, -0.03, 1.17, -0.03], ['c', 1.05, 0.00, 1.08, 0.00, 1.17, 0.06], ['c', 0.09, 0.06, 0.24, 0.36, 1.17, 2.40], ['c', 0.57, 1.29, 1.05, 2.34, 1.08, 2.34], ['c', 0.00, 0.03, 0.51, -1.02, 1.08, -2.34], ['c', 0.93, -2.07, 1.08, -2.34, 1.14, -2.40], ['c', 0.06, -0.03, 0.15, -0.06, 0.18, -0.06], ['c', 0.15, 0.00, 0.33, 0.18, 0.33, 0.33], ['c', 0.00, 0.09, -3.45, 7.74, -3.54, 7.83], ['c', -0.12, 0.12, -0.30, 0.12, -0.42, 0.00], ['c', -0.09, -0.09, -3.54, -7.74, -3.54, -7.83], ['c', 0.00, -0.09, 0.12, -0.27, 0.18, -0.30], ['z']], w: 7.5, h: 8.25 },\n\t'scripts.stopped': { d: [['M', -0.27, -4.08], ['c', 0.18, -0.09, 0.36, -0.09, 0.54, 0.00], ['c', 0.18, 0.09, 0.24, 0.15, 0.33, 0.30], ['l', 0.06, 0.15], ['l', 0.00, 1.50], ['l', 0.00, 1.47], ['l', 1.47, 0.00], ['l', 1.50, 0.00], ['l', 0.15, 0.06], ['c', 0.15, 0.09, 0.21, 0.15, 0.30, 0.33], ['c', 0.09, 0.18, 0.09, 0.36, 0.00, 0.54], ['c', -0.09, 0.18, -0.15, 0.24, -0.33, 0.33], ['c', -0.12, 0.06, -0.18, 0.06, -1.62, 0.06], ['l', -1.47, 0.00], ['l', 0.00, 1.47], ['l', 0.00, 1.47], ['l', -0.06, 0.15], ['c', -0.09, 0.18, -0.15, 0.24, -0.33, 0.33], ['c', -0.18, 0.09, -0.36, 0.09, -0.54, 0.00], ['c', -0.18, -0.09, -0.24, -0.15, -0.33, -0.33], ['l', -0.06, -0.15], ['l', 0.00, -1.47], ['l', 0.00, -1.47], ['l', -1.47, 0.00], ['c', -1.44, 0.00, -1.50, 0.00, -1.62, -0.06], ['c', -0.18, -0.09, -0.24, -0.15, -0.33, -0.33], ['c', -0.09, -0.18, -0.09, -0.36, 0.00, -0.54], ['c', 0.09, -0.18, 0.15, -0.24, 0.33, -0.33], ['l', 0.15, -0.06], ['l', 1.47, 0.00], ['l', 1.47, 0.00], ['l', 0.00, -1.47], ['c', 0.00, -1.44, 0.00, -1.50, 0.06, -1.62], ['c', 0.09, -0.18, 0.15, -0.24, 0.33, -0.33], ['z']], w: 8.295, h: 8.295 },\n\t'scripts.upbow': { d: [['M', -4.65, -15.54], ['c', 0.12, -0.09, 0.36, -0.06, 0.48, 0.03], ['c', 0.03, 0.03, 0.09, 0.09, 0.12, 0.15], ['c', 0.03, 0.06, 0.66, 2.13, 1.41, 4.62], ['c', 1.35, 4.41, 1.38, 4.56, 2.01, 6.96], ['l', 0.63, 2.46], ['l', 0.63, -2.46], ['c', 0.63, -2.40, 0.66, -2.55, 2.01, -6.96], ['c', 0.75, -2.49, 1.38, -4.56, 1.41, -4.62], ['c', 0.06, -0.15, 0.18, -0.21, 0.36, -0.24], ['c', 0.15, 0.00, 0.30, 0.06, 0.39, 0.18], ['c', 0.15, 0.21, 0.24, -0.18, -2.10, 7.56], ['c', -1.20, 3.96, -2.22, 7.32, -2.25, 7.41], ['c', 0.00, 0.12, -0.06, 0.27, -0.09, 0.30], ['c', -0.12, 0.21, -0.60, 0.21, -0.72, 0.00], ['c', -0.03, -0.03, -0.09, -0.18, -0.09, -0.30], ['c', -0.03, -0.09, -1.05, -3.45, -2.25, -7.41], ['c', -2.34, -7.74, -2.25, -7.35, -2.10, -7.56], ['c', 0.03, -0.03, 0.09, -0.09, 0.15, -0.12], ['z']], w: 9.73, h: 15.608 },\n\t'scripts.downbow': { d: [['M', -5.55, -9.93], ['l', 0.09, -0.06], ['l', 5.46, 0.00], ['l', 5.46, 0.00], ['l', 0.09, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 4.77], ['c', 0.00, 5.28, 0.00, 4.89, -0.18, 5.01], ['c', -0.18, 0.12, -0.42, 0.06, -0.54, -0.12], ['c', -0.06, -0.09, -0.06, -0.18, -0.06, -2.97], ['l', 0.00, -2.85], ['l', -4.83, 0.00], ['l', -4.83, 0.00], ['l', 0.00, 2.85], ['c', 0.00, 2.79, 0.00, 2.88, -0.06, 2.97], ['c', -0.15, 0.24, -0.51, 0.24, -0.66, 0.00], ['c', -0.06, -0.09, -0.06, -0.21, -0.06, -4.89], ['l', 0.00, -4.77], ['z']], w: 11.22, h: 9.992 },\n\t'scripts.turn': { d: [['M', -4.77, -3.90], ['c', 0.36, -0.06, 1.05, -0.06, 1.44, 0.03], ['c', 0.78, 0.15, 1.50, 0.51, 2.34, 1.14], ['c', 0.60, 0.45, 1.05, 0.87, 2.22, 2.01], ['c', 1.11, 1.08, 1.62, 1.50, 2.22, 1.86], ['c', 0.60, 0.36, 1.32, 0.57, 1.92, 0.57], ['c', 0.90, 0.00, 1.71, -0.57, 1.89, -1.35], ['c', 0.24, -0.93, -0.39, -1.89, -1.35, -2.10], ['l', -0.15, -0.06], ['l', -0.09, 0.15], ['c', -0.03, 0.09, -0.15, 0.24, -0.24, 0.33], ['c', -0.72, 0.72, -2.04, 0.54, -2.49, -0.36], ['c', -0.48, -0.93, 0.03, -1.86, 1.17, -2.19], ['c', 0.30, -0.09, 1.02, -0.09, 1.35, 0.00], ['c', 0.99, 0.27, 1.74, 0.87, 2.25, 1.83], ['c', 0.69, 1.41, 0.63, 3.00, -0.21, 4.26], ['c', -0.21, 0.30, -0.69, 0.81, -0.99, 1.02], ['c', -0.30, 0.21, -0.84, 0.45, -1.17, 0.54], ['c', -1.23, 0.36, -2.49, 0.15, -3.72, -0.60], ['c', -0.75, -0.48, -1.41, -1.02, -2.85, -2.46], ['c', -1.11, -1.08, -1.62, -1.50, -2.22, -1.86], ['c', -0.60, -0.36, -1.32, -0.57, -1.92, -0.57], ['c', -0.90, 0.00, -1.71, 0.57, -1.89, 1.35], ['c', -0.24, 0.93, 0.39, 1.89, 1.35, 2.10], ['l', 0.15, 0.06], ['l', 0.09, -0.15], ['c', 0.03, -0.09, 0.15, -0.24, 0.24, -0.33], ['c', 0.72, -0.72, 2.04, -0.54, 2.49, 0.36], ['c', 0.48, 0.93, -0.03, 1.86, -1.17, 2.19], ['c', -0.30, 0.09, -1.02, 0.09, -1.35, 0.00], ['c', -0.99, -0.27, -1.74, -0.87, -2.25, -1.83], ['c', -0.69, -1.41, -0.63, -3.00, 0.21, -4.26], ['c', 0.21, -0.30, 0.69, -0.81, 0.99, -1.02], ['c', 0.48, -0.33, 1.11, -0.57, 1.74, -0.66], ['z']], w: 16.366, h: 7.893 },\n\t'scripts.trill': { d: [['M', -0.51, -16.02], ['c', 0.12, -0.09, 0.21, -0.18, 0.21, -0.18], ['l', -0.81, 4.02], ['l', -0.81, 4.02], ['c', 0.03, 0.00, 0.51, -0.27, 1.08, -0.60], ['c', 0.60, -0.30, 1.14, -0.63, 1.26, -0.66], ['c', 1.14, -0.54, 2.31, -0.60, 3.09, -0.18], ['c', 0.27, 0.15, 0.54, 0.36, 0.60, 0.51], ['l', 0.06, 0.12], ['l', 0.21, -0.21], ['c', 0.90, -0.81, 2.22, -0.99, 3.12, -0.42], ['c', 0.60, 0.42, 0.90, 1.14, 0.78, 2.07], ['c', -0.15, 1.29, -1.05, 2.31, -1.95, 2.25], ['c', -0.48, -0.03, -0.78, -0.30, -0.96, -0.81], ['c', -0.09, -0.27, -0.09, -0.90, -0.03, -1.20], ['c', 0.21, -0.75, 0.81, -1.23, 1.59, -1.32], ['l', 0.24, -0.03], ['l', -0.09, -0.12], ['c', -0.51, -0.66, -1.62, -0.63, -2.31, 0.03], ['c', -0.39, 0.42, -0.30, 0.09, -1.23, 4.77], ['l', -0.81, 4.14], ['c', -0.03, 0.00, -0.12, -0.03, -0.21, -0.09], ['c', -0.33, -0.15, -0.54, -0.18, -0.99, -0.18], ['c', -0.42, 0.00, -0.66, 0.03, -1.05, 0.18], ['c', -0.12, 0.06, -0.21, 0.09, -0.21, 0.09], ['c', 0.00, -0.03, 0.36, -1.86, 0.81, -4.11], ['c', 0.90, -4.47, 0.87, -4.26, 0.69, -4.53], ['c', -0.21, -0.36, -0.66, -0.51, -1.17, -0.36], ['c', -0.15, 0.06, -2.22, 1.14, -2.58, 1.38], ['c', -0.12, 0.09, -0.12, 0.09, -0.21, 0.60], ['l', -0.09, 0.51], ['l', 0.21, 0.24], ['c', 0.63, 0.75, 1.02, 1.47, 1.20, 2.19], ['c', 0.06, 0.27, 0.06, 0.36, 0.06, 0.81], ['c', 0.00, 0.42, 0.00, 0.54, -0.06, 0.78], ['c', -0.15, 0.54, -0.33, 0.93, -0.63, 1.35], ['c', -0.18, 0.24, -0.57, 0.63, -0.81, 0.78], ['c', -0.24, 0.15, -0.63, 0.36, -0.84, 0.42], ['c', -0.27, 0.06, -0.66, 0.06, -0.87, 0.03], ['c', -0.81, -0.18, -1.32, -1.05, -1.38, -2.46], ['c', -0.03, -0.60, 0.03, -0.99, 0.33, -2.46], ['c', 0.21, -1.08, 0.24, -1.32, 0.21, -1.29], ['c', -1.20, 0.48, -2.40, 0.75, -3.21, 0.72], ['c', -0.69, -0.06, -1.17, -0.30, -1.41, -0.72], ['c', -0.39, -0.75, -0.12, -1.80, 0.66, -2.46], ['c', 0.24, -0.18, 0.69, -0.42, 1.02, -0.51], ['c', 0.69, -0.18, 1.53, -0.15, 2.31, 0.09], ['c', 0.30, 0.09, 0.75, 0.30, 0.99, 0.45], ['c', 0.12, 0.09, 0.15, 0.09, 0.15, 0.03], ['c', 0.03, -0.03, 0.33, -1.59, 0.72, -3.45], ['c', 0.36, -1.86, 0.66, -3.42, 0.69, -3.45], ['c', 0.00, -0.03, 0.03, -0.03, 0.21, 0.03], ['c', 0.21, 0.06, 0.27, 0.06, 0.48, 0.06], ['c', 0.42, -0.03, 0.78, -0.18, 1.26, -0.48], ['c', 0.15, -0.12, 0.36, -0.27, 0.48, -0.39], ['z'], ['m', -5.73, 7.68], ['c', -0.27, -0.03, -0.96, -0.06, -1.20, -0.03], ['c', -0.81, 0.12, -1.35, 0.57, -1.50, 1.20], ['c', -0.18, 0.66, 0.12, 1.14, 0.75, 1.29], ['c', 0.66, 0.12, 1.92, -0.12, 3.18, -0.66], ['l', 0.33, -0.15], ['l', 0.09, -0.39], ['c', 0.06, -0.21, 0.09, -0.42, 0.09, -0.45], ['c', 0.00, -0.03, -0.45, -0.30, -0.75, -0.45], ['c', -0.27, -0.15, -0.66, -0.27, -0.99, -0.36], ['z'], ['m', 4.29, 3.63], ['c', -0.24, -0.39, -0.51, -0.75, -0.51, -0.69], ['c', -0.06, 0.12, -0.39, 1.92, -0.45, 2.28], ['c', -0.09, 0.54, -0.12, 1.14, -0.06, 1.38], ['c', 0.06, 0.42, 0.21, 0.60, 0.51, 0.57], ['c', 0.39, -0.06, 0.75, -0.48, 0.93, -1.14], ['c', 0.09, -0.33, 0.09, -1.05, 0.00, -1.38], ['c', -0.09, -0.39, -0.24, -0.69, -0.42, -1.02], ['z']], w: 17.963, h: 16.49 },\n\t'scripts.segno': { d: [['M', -3.72, -11.22], ['c', 0.78, -0.09, 1.59, 0.03, 2.31, 0.42], ['c', 1.20, 0.60, 2.01, 1.71, 2.31, 3.09], ['c', 0.09, 0.42, 0.09, 1.20, 0.03, 1.50], ['c', -0.15, 0.45, -0.39, 0.81, -0.66, 0.93], ['c', -0.33, 0.18, -0.84, 0.21, -1.23, 0.15], ['c', -0.81, -0.18, -1.32, -0.93, -1.26, -1.89], ['c', 0.03, -0.36, 0.09, -0.57, 0.24, -0.90], ['c', 0.15, -0.33, 0.45, -0.60, 0.72, -0.75], ['c', 0.12, -0.06, 0.18, -0.09, 0.18, -0.12], ['c', 0.00, -0.03, -0.03, -0.15, -0.09, -0.24], ['c', -0.18, -0.45, -0.54, -0.87, -0.96, -1.08], ['c', -1.11, -0.57, -2.34, -0.18, -2.88, 0.90], ['c', -0.24, 0.51, -0.33, 1.11, -0.24, 1.83], ['c', 0.27, 1.92, 1.50, 3.54, 3.93, 5.13], ['c', 0.48, 0.33, 1.26, 0.78, 1.29, 0.78], ['c', 0.03, 0.00, 1.35, -2.19, 2.94, -4.89], ['l', 2.88, -4.89], ['l', 0.84, 0.00], ['l', 0.87, 0.00], ['l', -0.03, 0.06], ['c', -0.15, 0.21, -6.15, 10.41, -6.15, 10.44], ['c', 0.00, 0.00, 0.21, 0.15, 0.48, 0.27], ['c', 2.61, 1.47, 4.35, 3.03, 5.13, 4.65], ['c', 1.14, 2.34, 0.51, 5.07, -1.44, 6.39], ['c', -0.66, 0.42, -1.32, 0.63, -2.13, 0.69], ['c', -2.01, 0.09, -3.81, -1.41, -4.26, -3.54], ['c', -0.09, -0.42, -0.09, -1.20, -0.03, -1.50], ['c', 0.15, -0.45, 0.39, -0.81, 0.66, -0.93], ['c', 0.33, -0.18, 0.84, -0.21, 1.23, -0.15], ['c', 0.81, 0.18, 1.32, 0.93, 1.26, 1.89], ['c', -0.03, 0.36, -0.09, 0.57, -0.24, 0.90], ['c', -0.15, 0.33, -0.45, 0.60, -0.72, 0.75], ['c', -0.12, 0.06, -0.18, 0.09, -0.18, 0.12], ['c', 0.00, 0.03, 0.03, 0.15, 0.09, 0.24], ['c', 0.18, 0.45, 0.54, 0.87, 0.96, 1.08], ['c', 1.11, 0.57, 2.34, 0.18, 2.88, -0.90], ['c', 0.24, -0.51, 0.33, -1.11, 0.24, -1.83], ['c', -0.27, -1.92, -1.50, -3.54, -3.93, -5.13], ['c', -0.48, -0.33, -1.26, -0.78, -1.29, -0.78], ['c', -0.03, 0.00, -1.35, 2.19, -2.91, 4.89], ['l', -2.88, 4.89], ['l', -0.87, 0.00], ['l', -0.87, 0.00], ['l', 0.03, -0.06], ['c', 0.15, -0.21, 6.15, -10.41, 6.15, -10.44], ['c', 0.00, 0.00, -0.21, -0.15, -0.48, -0.30], ['c', -2.61, -1.44, -4.35, -3.00, -5.13, -4.62], ['c', -0.90, -1.89, -0.72, -4.02, 0.48, -5.52], ['c', 0.69, -0.84, 1.68, -1.41, 2.73, -1.53], ['z'], ['m', 8.76, 9.09], ['c', 0.03, -0.03, 0.15, -0.03, 0.27, -0.03], ['c', 0.33, 0.03, 0.57, 0.18, 0.72, 0.48], ['c', 0.09, 0.18, 0.09, 0.57, 0.00, 0.75], ['c', -0.09, 0.18, -0.21, 0.30, -0.36, 0.39], ['c', -0.15, 0.06, -0.21, 0.06, -0.39, 0.06], ['c', -0.21, 0.00, -0.27, 0.00, -0.39, -0.06], ['c', -0.30, -0.15, -0.48, -0.45, -0.48, -0.75], ['c', 0.00, -0.39, 0.24, -0.72, 0.63, -0.84], ['z'], ['m', -10.53, 2.61], ['c', 0.03, -0.03, 0.15, -0.03, 0.27, -0.03], ['c', 0.33, 0.03, 0.57, 0.18, 0.72, 0.48], ['c', 0.09, 0.18, 0.09, 0.57, 0.00, 0.75], ['c', -0.09, 0.18, -0.21, 0.30, -0.36, 0.39], ['c', -0.15, 0.06, -0.21, 0.06, -0.39, 0.06], ['c', -0.21, 0.00, -0.27, 0.00, -0.39, -0.06], ['c', -0.30, -0.15, -0.48, -0.45, -0.48, -0.75], ['c', 0.00, -0.39, 0.24, -0.72, 0.63, -0.84], ['z']], w: 15, h: 22.504 },\n\t'scripts.coda': { d: [['M', -0.21, -10.47], ['c', 0.18, -0.12, 0.42, -0.06, 0.54, 0.12], ['c', 0.06, 0.09, 0.06, 0.18, 0.06, 1.50], ['l', 0.00, 1.38], ['l', 0.18, 0.00], ['c', 0.39, 0.06, 0.96, 0.24, 1.38, 0.48], ['c', 1.68, 0.93, 2.82, 3.24, 3.03, 6.12], ['c', 0.03, 0.24, 0.03, 0.45, 0.03, 0.45], ['c', 0.00, 0.03, 0.60, 0.03, 1.35, 0.03], ['c', 1.50, 0.00, 1.47, 0.00, 1.59, 0.18], ['c', 0.09, 0.12, 0.09, 0.30, 0.00, 0.42], ['c', -0.12, 0.18, -0.09, 0.18, -1.59, 0.18], ['c', -0.75, 0.00, -1.35, 0.00, -1.35, 0.03], ['c', 0.00, 0.00, 0.00, 0.21, -0.03, 0.42], ['c', -0.24, 3.15, -1.53, 5.58, -3.45, 6.36], ['c', -0.27, 0.12, -0.72, 0.24, -0.96, 0.27], ['l', -0.18, 0.00], ['l', 0.00, 1.38], ['c', 0.00, 1.32, 0.00, 1.41, -0.06, 1.50], ['c', -0.15, 0.24, -0.51, 0.24, -0.66, 0.00], ['c', -0.06, -0.09, -0.06, -0.18, -0.06, -1.50], ['l', 0.00, -1.38], ['l', -0.18, 0.00], ['c', -0.39, -0.06, -0.96, -0.24, -1.38, -0.48], ['c', -1.68, -0.93, -2.82, -3.24, -3.03, -6.15], ['c', -0.03, -0.21, -0.03, -0.42, -0.03, -0.42], ['c', 0.00, -0.03, -0.60, -0.03, -1.35, -0.03], ['c', -1.50, 0.00, -1.47, 0.00, -1.59, -0.18], ['c', -0.09, -0.12, -0.09, -0.30, 0.00, -0.42], ['c', 0.12, -0.18, 0.09, -0.18, 1.59, -0.18], ['c', 0.75, 0.00, 1.35, 0.00, 1.35, -0.03], ['c', 0.00, 0.00, 0.00, -0.21, 0.03, -0.45], ['c', 0.24, -3.12, 1.53, -5.55, 3.45, -6.33], ['c', 0.27, -0.12, 0.72, -0.24, 0.96, -0.27], ['l', 0.18, 0.00], ['l', 0.00, -1.38], ['c', 0.00, -1.53, 0.00, -1.50, 0.18, -1.62], ['z'], ['m', -0.18, 6.93], ['c', 0.00, -2.97, 0.00, -3.15, -0.06, -3.15], ['c', -0.09, 0.00, -0.51, 0.15, -0.66, 0.21], ['c', -0.87, 0.51, -1.38, 1.62, -1.56, 3.51], ['c', -0.06, 0.54, -0.12, 1.59, -0.12, 2.16], ['l', 0.00, 0.42], ['l', 1.20, 0.00], ['l', 1.20, 0.00], ['l', 0.00, -3.15], ['z'], ['m', 1.17, -3.06], ['c', -0.09, -0.03, -0.21, -0.06, -0.27, -0.09], ['l', -0.12, 0.00], ['l', 0.00, 3.15], ['l', 0.00, 3.15], ['l', 1.20, 0.00], ['l', 1.20, 0.00], ['l', 0.00, -0.81], ['c', -0.06, -2.40, -0.33, -3.69, -0.93, -4.59], ['c', -0.27, -0.39, -0.66, -0.69, -1.08, -0.81], ['z'], ['m', -1.17, 10.14], ['l', 0.00, -3.15], ['l', -1.20, 0.00], ['l', -1.20, 0.00], ['l', 0.00, 0.81], ['c', 0.03, 0.96, 0.06, 1.47, 0.15, 2.13], ['c', 0.24, 2.04, 0.96, 3.12, 2.13, 3.36], ['l', 0.12, 0.00], ['l', 0.00, -3.15], ['z'], ['m', 3.18, -2.34], ['l', 0.00, -0.81], ['l', -1.20, 0.00], ['l', -1.20, 0.00], ['l', 0.00, 3.15], ['l', 0.00, 3.15], ['l', 0.12, 0.00], ['c', 1.17, -0.24, 1.89, -1.32, 2.13, -3.36], ['c', 0.09, -0.66, 0.12, -1.17, 0.15, -2.13], ['z']], w: 16.035, h: 21.062 },\n\t'scripts.comma': { d: [['M', 1.14, -4.62], ['c', 0.30, -0.12, 0.69, -0.03, 0.93, 0.15], ['c', 0.12, 0.12, 0.36, 0.45, 0.51, 0.78], ['c', 0.90, 1.77, 0.54, 4.05, -1.08, 6.75], ['c', -0.36, 0.63, -0.87, 1.38, -0.96, 1.44], ['c', -0.18, 0.12, -0.42, 0.06, -0.54, -0.12], ['c', -0.09, -0.18, -0.09, -0.30, 0.12, -0.60], ['c', 0.96, -1.44, 1.44, -2.97, 1.38, -4.35], ['c', -0.06, -0.93, -0.30, -1.68, -0.78, -2.46], ['c', -0.27, -0.39, -0.33, -0.63, -0.24, -0.96], ['c', 0.09, -0.27, 0.36, -0.54, 0.66, -0.63], ['z']], w: 3.042, h: 9.237 },\n\t'scripts.roll': { d: [['M', 1.95, -6.00], ['c', 0.21, -0.09, 0.36, -0.09, 0.57, 0.00], ['c', 0.39, 0.15, 0.63, 0.39, 1.47, 1.35], ['c', 0.66, 0.75, 0.78, 0.87, 1.08, 1.05], ['c', 0.75, 0.45, 1.65, 0.42, 2.40, -0.06], ['c', 0.12, -0.09, 0.27, -0.27, 0.54, -0.60], ['c', 0.42, -0.54, 0.51, -0.63, 0.69, -0.63], ['c', 0.09, 0.00, 0.30, 0.12, 0.36, 0.21], ['c', 0.09, 0.12, 0.12, 0.30, 0.03, 0.42], ['c', -0.06, 0.12, -3.15, 3.90, -3.30, 4.08], ['c', -0.06, 0.06, -0.18, 0.12, -0.27, 0.18], ['c', -0.27, 0.12, -0.60, 0.06, -0.99, -0.27], ['c', -0.27, -0.21, -0.42, -0.39, -1.08, -1.14], ['c', -0.63, -0.72, -0.81, -0.90, -1.17, -1.08], ['c', -0.36, -0.18, -0.57, -0.21, -0.99, -0.21], ['c', -0.39, 0.00, -0.63, 0.03, -0.93, 0.18], ['c', -0.36, 0.15, -0.51, 0.27, -0.90, 0.81], ['c', -0.24, 0.27, -0.45, 0.51, -0.48, 0.54], ['c', -0.12, 0.09, -0.27, 0.06, -0.39, 0.00], ['c', -0.24, -0.15, -0.33, -0.39, -0.21, -0.60], ['c', 0.09, -0.12, 3.18, -3.87, 3.33, -4.02], ['c', 0.06, -0.06, 0.18, -0.15, 0.24, -0.21], ['z']], w: 10.817, h: 6.125 },\n\t'scripts.prall': { d: [['M', -4.38, -3.69], ['c', 0.06, -0.03, 0.18, -0.06, 0.24, -0.06], ['c', 0.30, 0.00, 0.27, -0.03, 1.89, 1.95], ['l', 1.53, 1.83], ['c', 0.03, 0.00, 0.57, -0.84, 1.23, -1.83], ['c', 1.14, -1.68, 1.23, -1.83, 1.35, -1.89], ['c', 0.06, -0.03, 0.18, -0.06, 0.24, -0.06], ['c', 0.30, 0.00, 0.27, -0.03, 1.89, 1.95], ['l', 1.53, 1.83], ['l', 0.48, -0.69], ['c', 0.51, -0.78, 0.54, -0.84, 0.69, -0.90], ['c', 0.42, -0.18, 0.87, 0.15, 0.81, 0.60], ['c', -0.03, 0.12, -0.30, 0.51, -1.50, 2.37], ['c', -1.38, 2.07, -1.50, 2.22, -1.62, 2.28], ['c', -0.06, 0.03, -0.18, 0.06, -0.24, 0.06], ['c', -0.30, 0.00, -0.27, 0.03, -1.89, -1.95], ['l', -1.53, -1.83], ['c', -0.03, 0.00, -0.57, 0.84, -1.23, 1.83], ['c', -1.14, 1.68, -1.23, 1.83, -1.35, 1.89], ['c', -0.06, 0.03, -0.18, 0.06, -0.24, 0.06], ['c', -0.30, 0.00, -0.27, 0.03, -1.89, -1.95], ['l', -1.53, -1.83], ['l', -0.48, 0.69], ['c', -0.51, 0.78, -0.54, 0.84, -0.69, 0.90], ['c', -0.42, 0.18, -0.87, -0.15, -0.81, -0.60], ['c', 0.03, -0.12, 0.30, -0.51, 1.50, -2.37], ['c', 1.38, -2.07, 1.50, -2.22, 1.62, -2.28], ['z']], w: 15.011, h: 7.5 },\n\t'scripts.arpeggio': { d: [['M', 1.5, 0], ['c', 1.5, 2, 1.5, 3, 1.5, 3], ['s', 0, 1, -2, 1.5], ['s', -0.5, 3, 1, 5.5], ['l', 1.5, 0], ['s', -1.75, -2, -1.9, -3.25], ['s', 2.15, -0.6, 2.95, -1.6], ['s', 0.45, -1, 0.5, -1.25], ['s', 0, -1, -2, -3.9], ['l', -1.5, 0], ['z']], w: 5, h: 10 },\n\t'scripts.mordent': { d: [['M', -0.21, -4.95], ['c', 0.27, -0.15, 0.63, 0.00, 0.75, 0.27], ['c', 0.06, 0.12, 0.06, 0.24, 0.06, 1.44], ['l', 0.00, 1.29], ['l', 0.57, -0.84], ['c', 0.51, -0.75, 0.57, -0.84, 0.69, -0.90], ['c', 0.06, -0.03, 0.18, -0.06, 0.24, -0.06], ['c', 0.30, 0.00, 0.27, -0.03, 1.89, 1.95], ['l', 1.53, 1.83], ['l', 0.48, -0.69], ['c', 0.51, -0.78, 0.54, -0.84, 0.69, -0.90], ['c', 0.42, -0.18, 0.87, 0.15, 0.81, 0.60], ['c', -0.03, 0.12, -0.30, 0.51, -1.50, 2.37], ['c', -1.38, 2.07, -1.50, 2.22, -1.62, 2.28], ['c', -0.06, 0.03, -0.18, 0.06, -0.24, 0.06], ['c', -0.30, 0.00, -0.27, 0.03, -1.83, -1.89], ['c', -0.81, -0.99, -1.50, -1.80, -1.53, -1.86], ['c', -0.06, -0.03, -0.06, -0.03, -0.12, 0.03], ['c', -0.06, 0.06, -0.06, 0.15, -0.06, 2.28], ['c', 0.00, 1.95, 0.00, 2.25, -0.06, 2.34], ['c', -0.18, 0.45, -0.81, 0.48, -1.05, 0.03], ['c', -0.03, -0.06, -0.06, -0.24, -0.06, -1.41], ['l', 0.00, -1.35], ['l', -0.57, 0.84], ['c', -0.54, 0.78, -0.60, 0.87, -0.72, 0.93], ['c', -0.06, 0.03, -0.18, 0.06, -0.24, 0.06], ['c', -0.30, 0.00, -0.27, 0.03, -1.89, -1.95], ['l', -1.53, -1.83], ['l', -0.48, 0.69], ['c', -0.51, 0.78, -0.54, 0.84, -0.69, 0.90], ['c', -0.42, 0.18, -0.87, -0.15, -0.81, -0.60], ['c', 0.03, -0.12, 0.30, -0.51, 1.50, -2.37], ['c', 1.38, -2.07, 1.50, -2.22, 1.62, -2.28], ['c', 0.06, -0.03, 0.18, -0.06, 0.24, -0.06], ['c', 0.30, 0.00, 0.27, -0.03, 1.89, 1.95], ['l', 1.53, 1.83], ['c', 0.03, 0.00, 0.06, -0.06, 0.09, -0.09], ['c', 0.06, -0.12, 0.06, -0.15, 0.06, -2.28], ['c', 0.00, -1.92, 0.00, -2.22, 0.06, -2.31], ['c', 0.06, -0.15, 0.15, -0.24, 0.30, -0.30], ['z']], w: 15.011, h: 10.012 },\n\t'flags.u8th': { d: [['M', -0.42, 3.75], ['l', 0.00, -3.75], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.00, 0.18], ['c', 0.00, 0.30, 0.06, 0.84, 0.12, 1.23], ['c', 0.24, 1.53, 0.90, 3.12, 2.13, 5.16], ['l', 0.99, 1.59], ['c', 0.87, 1.44, 1.38, 2.34, 1.77, 3.09], ['c', 0.81, 1.68, 1.20, 3.06, 1.26, 4.53], ['c', 0.03, 1.53, -0.21, 3.27, -0.75, 5.01], ['c', -0.21, 0.69, -0.51, 1.50, -0.60, 1.59], ['c', -0.09, 0.12, -0.27, 0.21, -0.42, 0.21], ['c', -0.15, 0.00, -0.42, -0.12, -0.51, -0.21], ['c', -0.15, -0.18, -0.18, -0.42, -0.09, -0.66], ['c', 0.15, -0.33, 0.45, -1.20, 0.57, -1.62], ['c', 0.42, -1.38, 0.60, -2.58, 0.60, -3.90], ['c', 0.00, -0.66, 0.00, -0.81, -0.06, -1.11], ['c', -0.39, -2.07, -1.80, -4.26, -4.59, -7.14], ['l', -0.42, -0.45], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -3.75], ['z']], w: 6.692, h: 22.59 },\n\t'flags.u16th': { d: [['M', -0.42, 7.50], ['l', 0.00, -7.50], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.00, 0.39], ['c', 0.06, 1.08, 0.39, 2.19, 0.99, 3.39], ['c', 0.45, 0.90, 0.87, 1.59, 1.95, 3.12], ['c', 1.29, 1.86, 1.77, 2.64, 2.22, 3.57], ['c', 0.45, 0.93, 0.72, 1.80, 0.87, 2.64], ['c', 0.06, 0.51, 0.06, 1.50, 0.00, 1.92], ['c', -0.12, 0.60, -0.30, 1.20, -0.54, 1.71], ['l', -0.09, 0.24], ['l', 0.18, 0.45], ['c', 0.51, 1.20, 0.72, 2.22, 0.69, 3.42], ['c', -0.06, 1.53, -0.39, 3.03, -0.99, 4.53], ['c', -0.30, 0.75, -0.36, 0.81, -0.57, 0.90], ['c', -0.15, 0.09, -0.33, 0.06, -0.48, 0.00], ['c', -0.18, -0.09, -0.27, -0.18, -0.33, -0.33], ['c', -0.09, -0.18, -0.06, -0.30, 0.12, -0.75], ['c', 0.66, -1.41, 1.02, -2.88, 1.08, -4.32], ['c', 0.00, -0.60, -0.03, -1.05, -0.18, -1.59], ['c', -0.30, -1.20, -0.99, -2.40, -2.25, -3.87], ['c', -0.42, -0.48, -1.53, -1.62, -2.19, -2.22], ['l', -0.45, -0.42], ['l', -0.03, 1.11], ['l', 0.00, 1.11], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -7.50], ['z'], ['m', 1.65, 0.09], ['c', -0.30, -0.30, -0.69, -0.72, -0.90, -0.87], ['l', -0.33, -0.33], ['l', 0.00, 0.15], ['c', 0.00, 0.30, 0.06, 0.81, 0.15, 1.26], ['c', 0.27, 1.29, 0.87, 2.61, 2.04, 4.29], ['c', 0.15, 0.24, 0.60, 0.87, 0.96, 1.38], ['l', 1.08, 1.53], ['l', 0.42, 0.63], ['c', 0.03, 0.00, 0.12, -0.36, 0.21, -0.72], ['c', 0.06, -0.33, 0.06, -1.20, 0.00, -1.62], ['c', -0.33, -1.71, -1.44, -3.48, -3.63, -5.70], ['z']], w: 6.693, h: 26.337 },\n\t'flags.u32nd': { d: [['M', -0.42, 11.25], ['l', 0.00, -11.25], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.00, 0.36], ['c', 0.09, 1.68, 0.69, 3.27, 2.07, 5.46], ['l', 0.87, 1.35], ['c', 1.02, 1.62, 1.47, 2.37, 1.86, 3.18], ['c', 0.48, 1.02, 0.78, 1.92, 0.93, 2.88], ['c', 0.06, 0.48, 0.06, 1.50, 0.00, 1.89], ['c', -0.09, 0.42, -0.21, 0.87, -0.36, 1.26], ['l', -0.12, 0.30], ['l', 0.15, 0.39], ['c', 0.69, 1.56, 0.84, 2.88, 0.54, 4.38], ['c', -0.09, 0.45, -0.27, 1.08, -0.45, 1.47], ['l', -0.12, 0.24], ['l', 0.18, 0.36], ['c', 0.33, 0.72, 0.57, 1.56, 0.69, 2.34], ['c', 0.12, 1.02, -0.06, 2.52, -0.42, 3.84], ['c', -0.27, 0.93, -0.75, 2.13, -0.93, 2.31], ['c', -0.18, 0.15, -0.45, 0.18, -0.66, 0.09], ['c', -0.18, -0.09, -0.27, -0.18, -0.33, -0.33], ['c', -0.09, -0.18, -0.06, -0.30, 0.06, -0.60], ['c', 0.21, -0.36, 0.42, -0.90, 0.57, -1.38], ['c', 0.51, -1.41, 0.69, -3.06, 0.48, -4.08], ['c', -0.15, -0.81, -0.57, -1.68, -1.20, -2.55], ['c', -0.72, -0.99, -1.83, -2.13, -3.30, -3.33], ['l', -0.48, -0.42], ['l', -0.03, 1.53], ['l', 0.00, 1.56], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -11.25], ['z'], ['m', 1.26, -3.96], ['c', -0.27, -0.30, -0.54, -0.60, -0.66, -0.72], ['l', -0.18, -0.21], ['l', 0.00, 0.42], ['c', 0.06, 0.87, 0.24, 1.74, 0.66, 2.67], ['c', 0.36, 0.87, 0.96, 1.86, 1.92, 3.18], ['c', 0.21, 0.33, 0.63, 0.87, 0.87, 1.23], ['c', 0.27, 0.39, 0.60, 0.84, 0.75, 1.08], ['l', 0.27, 0.39], ['l', 0.03, -0.12], ['c', 0.12, -0.45, 0.15, -1.05, 0.09, -1.59], ['c', -0.27, -1.86, -1.38, -3.78, -3.75, -6.33], ['z'], ['m', -0.27, 6.09], ['c', -0.27, -0.21, -0.48, -0.42, -0.51, -0.45], ['c', -0.06, -0.03, -0.06, -0.03, -0.06, 0.21], ['c', 0.00, 0.90, 0.30, 2.04, 0.81, 3.09], ['c', 0.48, 1.02, 0.96, 1.77, 2.37, 3.63], ['c', 0.60, 0.78, 1.05, 1.44, 1.29, 1.77], ['c', 0.06, 0.12, 0.15, 0.21, 0.15, 0.18], ['c', 0.03, -0.03, 0.18, -0.57, 0.24, -0.87], ['c', 0.06, -0.45, 0.06, -1.32, -0.03, -1.74], ['c', -0.09, -0.48, -0.24, -0.90, -0.51, -1.44], ['c', -0.66, -1.35, -1.83, -2.70, -3.75, -4.38], ['z']], w: 6.697, h: 32.145 },\n\t'flags.u64th': { d: [['M', -0.42, 15.00], ['l', 0.00, -15.00], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.00, 0.36], ['c', 0.06, 1.20, 0.39, 2.37, 1.02, 3.66], ['c', 0.39, 0.81, 0.84, 1.56, 1.80, 3.09], ['c', 0.81, 1.26, 1.05, 1.68, 1.35, 2.22], ['c', 0.87, 1.50, 1.35, 2.79, 1.56, 4.08], ['c', 0.06, 0.54, 0.06, 1.56, -0.03, 2.04], ['c', -0.09, 0.48, -0.21, 0.99, -0.36, 1.35], ['l', -0.12, 0.27], ['l', 0.12, 0.27], ['c', 0.09, 0.15, 0.21, 0.45, 0.27, 0.66], ['c', 0.69, 1.89, 0.63, 3.66, -0.18, 5.46], ['l', -0.18, 0.39], ['l', 0.15, 0.33], ['c', 0.30, 0.66, 0.51, 1.44, 0.63, 2.10], ['c', 0.06, 0.48, 0.06, 1.35, 0.00, 1.71], ['c', -0.15, 0.57, -0.42, 1.20, -0.78, 1.68], ['l', -0.21, 0.27], ['l', 0.18, 0.33], ['c', 0.57, 1.05, 0.93, 2.13, 1.02, 3.18], ['c', 0.06, 0.72, 0.00, 1.83, -0.21, 2.79], ['c', -0.18, 1.02, -0.63, 2.34, -1.02, 3.09], ['c', -0.15, 0.33, -0.48, 0.45, -0.78, 0.30], ['c', -0.18, -0.09, -0.27, -0.18, -0.33, -0.33], ['c', -0.09, -0.18, -0.06, -0.30, 0.03, -0.54], ['c', 0.75, -1.50, 1.23, -3.45, 1.17, -4.89], ['c', -0.06, -1.02, -0.42, -2.01, -1.17, -3.15], ['c', -0.48, -0.72, -1.02, -1.35, -1.89, -2.22], ['c', -0.57, -0.57, -1.56, -1.50, -1.92, -1.77], ['l', -0.12, -0.09], ['l', 0.00, 1.68], ['l', 0.00, 1.68], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -15.00], ['z'], ['m', 0.93, -8.07], ['c', -0.27, -0.30, -0.48, -0.54, -0.51, -0.54], ['c', 0.00, 0.00, 0.00, 0.69, 0.03, 1.02], ['c', 0.15, 1.47, 0.75, 2.94, 2.04, 4.83], ['l', 1.08, 1.53], ['c', 0.39, 0.57, 0.84, 1.20, 0.99, 1.44], ['c', 0.15, 0.24, 0.30, 0.45, 0.30, 0.45], ['c', 0.00, 0.00, 0.03, -0.09, 0.06, -0.21], ['c', 0.36, -1.59, -0.15, -3.33, -1.47, -5.40], ['c', -0.63, -0.93, -1.35, -1.83, -2.52, -3.12], ['z'], ['m', 0.06, 6.72], ['c', -0.24, -0.21, -0.48, -0.42, -0.51, -0.45], ['l', -0.06, -0.06], ['l', 0.00, 0.33], ['c', 0.00, 1.20, 0.30, 2.34, 0.93, 3.60], ['c', 0.45, 0.90, 0.96, 1.68, 2.25, 3.51], ['c', 0.39, 0.54, 0.84, 1.17, 1.02, 1.44], ['c', 0.21, 0.33, 0.33, 0.51, 0.33, 0.48], ['c', 0.06, -0.09, 0.21, -0.63, 0.30, -0.99], ['c', 0.06, -0.33, 0.06, -0.45, 0.06, -0.96], ['c', 0.00, -0.60, -0.03, -0.84, -0.18, -1.35], ['c', -0.30, -1.08, -1.02, -2.28, -2.13, -3.57], ['c', -0.39, -0.45, -1.44, -1.47, -2.01, -1.98], ['z'], ['m', 0.00, 6.72], ['c', -0.24, -0.21, -0.48, -0.39, -0.51, -0.42], ['l', -0.06, -0.06], ['l', 0.00, 0.33], ['c', 0.00, 1.41, 0.45, 2.82, 1.38, 4.35], ['c', 0.42, 0.72, 0.72, 1.14, 1.86, 2.73], ['c', 0.36, 0.45, 0.75, 0.99, 0.87, 1.20], ['c', 0.15, 0.21, 0.30, 0.36, 0.30, 0.36], ['c', 0.06, 0.00, 0.30, -0.48, 0.39, -0.75], ['c', 0.09, -0.36, 0.12, -0.63, 0.12, -1.05], ['c', -0.06, -1.05, -0.45, -2.04, -1.20, -3.18], ['c', -0.57, -0.87, -1.11, -1.53, -2.07, -2.49], ['c', -0.36, -0.33, -0.84, -0.78, -1.08, -1.02], ['z']], w: 6.682, h: 39.694 },\n\t'flags.d8th': { d: [['M', 5.67, -21.63], ['c', 0.24, -0.12, 0.54, -0.06, 0.69, 0.15], ['c', 0.06, 0.06, 0.21, 0.36, 0.39, 0.66], ['c', 0.84, 1.77, 1.26, 3.36, 1.32, 5.10], ['c', 0.03, 1.29, -0.21, 2.37, -0.81, 3.63], ['c', -0.60, 1.23, -1.26, 2.13, -3.21, 4.38], ['c', -1.35, 1.53, -1.86, 2.19, -2.40, 2.97], ['c', -0.63, 0.93, -1.11, 1.92, -1.38, 2.79], ['c', -0.15, 0.54, -0.27, 1.35, -0.27, 1.80], ['l', 0.00, 0.15], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -3.75], ['l', 0.00, -3.75], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.48, -0.30], ['c', 1.83, -1.11, 3.12, -2.10, 4.17, -3.12], ['c', 0.78, -0.81, 1.32, -1.53, 1.71, -2.31], ['c', 0.45, -0.93, 0.60, -1.74, 0.51, -2.88], ['c', -0.12, -1.56, -0.63, -3.18, -1.47, -4.68], ['c', -0.12, -0.21, -0.15, -0.33, -0.06, -0.51], ['c', 0.06, -0.15, 0.15, -0.24, 0.33, -0.33], ['z']], w: 8.492, h: 21.691 },\n\t'flags.ugrace': { d: [['M', 6.03, 6.93], ['c', 0.15, -0.09, 0.33, -0.06, 0.51, 0.00], ['c', 0.15, 0.09, 0.21, 0.15, 0.30, 0.33], ['c', 0.09, 0.18, 0.06, 0.39, -0.03, 0.54], ['c', -0.06, 0.15, -10.89, 8.88, -11.07, 8.97], ['c', -0.15, 0.09, -0.33, 0.06, -0.48, 0.00], ['c', -0.18, -0.09, -0.24, -0.15, -0.33, -0.33], ['c', -0.09, -0.18, -0.06, -0.39, 0.03, -0.54], ['c', 0.06, -0.15, 10.89, -8.88, 11.07, -8.97], ['z']], w: 12.019, h: 9.954 },\n\t'flags.dgrace': { d: [['M', -6.06, -15.93], ['c', 0.18, -0.09, 0.33, -0.12, 0.48, -0.06], ['c', 0.18, 0.09, 14.01, 8.04, 14.10, 8.10], ['c', 0.12, 0.12, 0.18, 0.33, 0.18, 0.51], ['c', -0.03, 0.21, -0.15, 0.39, -0.36, 0.48], ['c', -0.18, 0.09, -0.33, 0.12, -0.48, 0.06], ['c', -0.18, -0.09, -14.01, -8.04, -14.10, -8.10], ['c', -0.12, -0.12, -0.18, -0.33, -0.18, -0.51], ['c', 0.03, -0.21, 0.15, -0.39, 0.36, -0.48], ['z']], w: 15.12, h: 9.212 },\n\t'flags.d16th': { d: [['M', 6.84, -22.53], ['c', 0.27, -0.12, 0.57, -0.06, 0.72, 0.15], ['c', 0.15, 0.15, 0.33, 0.87, 0.45, 1.56], ['c', 0.06, 0.33, 0.06, 1.35, 0.00, 1.65], ['c', -0.06, 0.33, -0.15, 0.78, -0.27, 1.11], ['c', -0.12, 0.33, -0.45, 0.96, -0.66, 1.32], ['l', -0.18, 0.27], ['l', 0.09, 0.18], ['c', 0.48, 1.02, 0.72, 2.25, 0.69, 3.30], ['c', -0.06, 1.23, -0.42, 2.28, -1.26, 3.45], ['c', -0.57, 0.87, -0.99, 1.32, -3.00, 3.39], ['c', -1.56, 1.56, -2.22, 2.40, -2.76, 3.45], ['c', -0.42, 0.84, -0.66, 1.80, -0.66, 2.55], ['l', 0.00, 0.15], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -7.50], ['l', 0.00, -7.50], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.00, 1.14], ['l', 0.00, 1.11], ['l', 0.27, -0.15], ['c', 1.11, -0.57, 1.77, -0.99, 2.52, -1.47], ['c', 2.37, -1.56, 3.69, -3.15, 4.05, -4.83], ['c', 0.03, -0.18, 0.03, -0.39, 0.03, -0.78], ['c', 0.00, -0.60, -0.03, -0.93, -0.24, -1.50], ['c', -0.06, -0.18, -0.12, -0.39, -0.15, -0.45], ['c', -0.03, -0.24, 0.12, -0.48, 0.36, -0.60], ['z'], ['m', -0.63, 7.50], ['c', -0.06, -0.18, -0.15, -0.36, -0.15, -0.36], ['c', -0.03, 0.00, -0.03, 0.03, -0.06, 0.06], ['c', -0.06, 0.12, -0.96, 1.02, -1.95, 1.98], ['c', -0.63, 0.57, -1.26, 1.17, -1.44, 1.35], ['c', -1.53, 1.62, -2.28, 2.85, -2.55, 4.32], ['c', -0.03, 0.18, -0.03, 0.54, -0.06, 0.99], ['l', 0.00, 0.69], ['l', 0.18, -0.09], ['c', 0.93, -0.54, 2.10, -1.29, 2.82, -1.83], ['c', 0.69, -0.51, 1.02, -0.81, 1.53, -1.29], ['c', 1.86, -1.89, 2.37, -3.66, 1.68, -5.82], ['z']], w: 8.475, h: 22.591 },\n\t'flags.d32nd': { d: [['M', 6.84, -29.13], ['c', 0.27, -0.12, 0.57, -0.06, 0.72, 0.15], ['c', 0.12, 0.12, 0.27, 0.63, 0.36, 1.11], ['c', 0.33, 1.59, 0.06, 3.06, -0.81, 4.47], ['l', -0.18, 0.27], ['l', 0.09, 0.15], ['c', 0.12, 0.24, 0.33, 0.69, 0.45, 1.05], ['c', 0.63, 1.83, 0.45, 3.57, -0.57, 5.22], ['l', -0.18, 0.30], ['l', 0.15, 0.27], ['c', 0.42, 0.87, 0.60, 1.71, 0.57, 2.61], ['c', -0.06, 1.29, -0.48, 2.46, -1.35, 3.78], ['c', -0.54, 0.81, -0.93, 1.29, -2.46, 3.00], ['c', -0.51, 0.54, -1.05, 1.17, -1.26, 1.41], ['c', -1.56, 1.86, -2.25, 3.36, -2.37, 5.01], ['l', 0.00, 0.33], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -11.25], ['l', 0.00, -11.25], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.00, 1.35], ['l', 0.03, 1.35], ['l', 0.78, -0.39], ['c', 1.38, -0.69, 2.34, -1.26, 3.24, -1.92], ['c', 1.38, -1.02, 2.28, -2.13, 2.64, -3.21], ['c', 0.15, -0.48, 0.18, -0.72, 0.18, -1.29], ['c', 0.00, -0.57, -0.06, -0.90, -0.24, -1.47], ['c', -0.06, -0.18, -0.12, -0.39, -0.15, -0.45], ['c', -0.03, -0.24, 0.12, -0.48, 0.36, -0.60], ['z'], ['m', -0.63, 7.20], ['c', -0.09, -0.18, -0.12, -0.21, -0.12, -0.15], ['c', -0.03, 0.09, -1.02, 1.08, -2.04, 2.04], ['c', -1.17, 1.08, -1.65, 1.56, -2.07, 2.04], ['c', -0.84, 0.96, -1.38, 1.86, -1.68, 2.76], ['c', -0.21, 0.57, -0.27, 0.99, -0.30, 1.65], ['l', 0.00, 0.54], ['l', 0.66, -0.33], ['c', 3.57, -1.86, 5.49, -3.69, 5.94, -5.70], ['c', 0.06, -0.39, 0.06, -1.20, -0.03, -1.65], ['c', -0.06, -0.39, -0.24, -0.90, -0.36, -1.20], ['z'], ['m', -0.06, 7.20], ['c', -0.06, -0.15, -0.12, -0.33, -0.15, -0.45], ['l', -0.06, -0.18], ['l', -0.18, 0.21], ['l', -1.83, 1.83], ['c', -0.87, 0.90, -1.77, 1.80, -1.95, 2.01], ['c', -1.08, 1.29, -1.62, 2.31, -1.89, 3.51], ['c', -0.06, 0.30, -0.06, 0.51, -0.09, 0.93], ['l', 0.00, 0.57], ['l', 0.09, -0.06], ['c', 0.75, -0.45, 1.89, -1.26, 2.52, -1.74], ['c', 0.81, -0.66, 1.74, -1.53, 2.22, -2.16], ['c', 1.26, -1.53, 1.68, -3.06, 1.32, -4.47], ['z']], w: 8.385, h: 29.191 },\n\t'flags.d64th': { d: [['M', 7.08, -32.88], ['c', 0.30, -0.12, 0.66, -0.03, 0.78, 0.24], ['c', 0.18, 0.33, 0.27, 2.10, 0.15, 2.64], ['c', -0.09, 0.39, -0.21, 0.78, -0.39, 1.08], ['l', -0.15, 0.30], ['l', 0.09, 0.27], ['c', 0.03, 0.12, 0.09, 0.45, 0.12, 0.69], ['c', 0.27, 1.44, 0.18, 2.55, -0.30, 3.60], ['l', -0.12, 0.33], ['l', 0.06, 0.42], ['c', 0.27, 1.35, 0.33, 2.82, 0.21, 3.63], ['c', -0.12, 0.60, -0.30, 1.23, -0.57, 1.80], ['l', -0.15, 0.27], ['l', 0.03, 0.42], ['c', 0.06, 1.02, 0.06, 2.70, 0.03, 3.06], ['c', -0.15, 1.47, -0.66, 2.76, -1.74, 4.41], ['c', -0.45, 0.69, -0.75, 1.11, -1.74, 2.37], ['c', -1.05, 1.38, -1.50, 1.98, -1.95, 2.73], ['c', -0.93, 1.50, -1.38, 2.82, -1.44, 4.20], ['l', 0.00, 0.42], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -15.00], ['l', 0.00, -15.00], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.00, 1.86], ['l', 0.00, 1.89], ['c', 0.00, 0.00, 0.21, -0.03, 0.45, -0.09], ['c', 2.22, -0.39, 4.08, -1.11, 5.19, -2.01], ['c', 0.63, -0.54, 1.02, -1.14, 1.20, -1.80], ['c', 0.06, -0.30, 0.06, -1.14, -0.03, -1.65], ['c', -0.03, -0.18, -0.06, -0.39, -0.09, -0.48], ['c', -0.03, -0.24, 0.12, -0.48, 0.36, -0.60], ['z'], ['m', -0.45, 6.15], ['c', -0.03, -0.18, -0.06, -0.42, -0.06, -0.54], ['l', -0.03, -0.18], ['l', -0.33, 0.30], ['c', -0.42, 0.36, -0.87, 0.72, -1.68, 1.29], ['c', -1.98, 1.38, -2.25, 1.59, -2.85, 2.16], ['c', -0.75, 0.69, -1.23, 1.44, -1.47, 2.19], ['c', -0.15, 0.45, -0.18, 0.63, -0.21, 1.35], ['l', 0.00, 0.66], ['l', 0.39, -0.18], ['c', 1.83, -0.90, 3.45, -1.95, 4.47, -2.91], ['c', 0.93, -0.90, 1.53, -1.83, 1.74, -2.82], ['c', 0.06, -0.33, 0.06, -0.87, 0.03, -1.32], ['z'], ['m', -0.27, 4.86], ['c', -0.03, -0.21, -0.06, -0.36, -0.06, -0.36], ['c', 0.00, -0.03, -0.12, 0.09, -0.24, 0.24], ['c', -0.39, 0.48, -0.99, 1.08, -2.16, 2.19], ['c', -1.47, 1.38, -1.92, 1.83, -2.46, 2.49], ['c', -0.66, 0.87, -1.08, 1.74, -1.29, 2.58], ['c', -0.09, 0.42, -0.15, 0.87, -0.15, 1.44], ['l', 0.00, 0.54], ['l', 0.48, -0.33], ['c', 1.50, -1.02, 2.58, -1.89, 3.51, -2.82], ['c', 1.47, -1.47, 2.25, -2.85, 2.40, -4.26], ['c', 0.03, -0.39, 0.03, -1.17, -0.03, -1.71], ['z'], ['m', -0.66, 7.68], ['c', 0.03, -0.15, 0.03, -0.60, 0.03, -0.99], ['l', 0.00, -0.72], ['l', -0.27, 0.33], ['l', -1.74, 1.98], ['c', -1.77, 1.92, -2.43, 2.76, -2.97, 3.90], ['c', -0.51, 1.02, -0.72, 1.77, -0.75, 2.91], ['c', 0.00, 0.63, 0.00, 0.63, 0.06, 0.60], ['c', 0.03, -0.03, 0.30, -0.27, 0.63, -0.54], ['c', 0.66, -0.60, 1.86, -1.80, 2.31, -2.31], ['c', 1.65, -1.89, 2.52, -3.54, 2.70, -5.16], ['z']], w: 8.485, h: 32.932 },\n\t'clefs.C': { d: [['M', 0.06, -14.94], ['l', 0.09, -0.06], ['l', 1.92, 0.00], ['l', 1.92, 0.00], ['l', 0.09, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 14.85], ['l', 0.00, 14.82], ['l', -0.06, 0.09], ['l', -0.09, 0.06], ['l', -1.92, 0.00], ['l', -1.92, 0.00], ['l', -0.09, -0.06], ['l', -0.06, -0.09], ['l', 0.00, -14.82], ['l', 0.00, -14.85], ['z'], ['m', 5.37, 0.00], ['c', 0.09, -0.06, 0.09, -0.06, 0.57, -0.06], ['c', 0.45, 0.00, 0.45, 0.00, 0.54, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 7.14], ['l', 0.00, 7.11], ['l', 0.09, -0.06], ['c', 0.18, -0.18, 0.72, -0.84, 0.96, -1.20], ['c', 0.30, -0.45, 0.66, -1.17, 0.84, -1.65], ['c', 0.36, -0.90, 0.57, -1.83, 0.60, -2.79], ['c', 0.03, -0.48, 0.03, -0.54, 0.09, -0.63], ['c', 0.12, -0.18, 0.36, -0.21, 0.54, -0.12], ['c', 0.18, 0.09, 0.21, 0.15, 0.24, 0.66], ['c', 0.06, 0.87, 0.21, 1.56, 0.57, 2.22], ['c', 0.51, 1.02, 1.26, 1.68, 2.22, 1.92], ['c', 0.21, 0.06, 0.33, 0.06, 0.78, 0.06], ['c', 0.45, 0.00, 0.57, 0.00, 0.84, -0.06], ['c', 0.45, -0.12, 0.81, -0.33, 1.08, -0.60], ['c', 0.57, -0.57, 0.87, -1.41, 0.99, -2.88], ['c', 0.06, -0.54, 0.06, -3.00, 0.00, -3.57], ['c', -0.21, -2.58, -0.84, -3.87, -2.16, -4.50], ['c', -0.48, -0.21, -1.17, -0.36, -1.77, -0.36], ['c', -0.69, 0.00, -1.29, 0.27, -1.50, 0.72], ['c', -0.06, 0.15, -0.06, 0.21, -0.06, 0.42], ['c', 0.00, 0.24, 0.00, 0.30, 0.06, 0.45], ['c', 0.12, 0.24, 0.24, 0.39, 0.63, 0.66], ['c', 0.42, 0.30, 0.57, 0.48, 0.69, 0.72], ['c', 0.06, 0.15, 0.06, 0.21, 0.06, 0.48], ['c', 0.00, 0.39, -0.03, 0.63, -0.21, 0.96], ['c', -0.30, 0.60, -0.87, 1.08, -1.50, 1.26], ['c', -0.27, 0.06, -0.87, 0.06, -1.14, 0.00], ['c', -0.78, -0.24, -1.44, -0.87, -1.65, -1.68], ['c', -0.12, -0.42, -0.09, -1.17, 0.09, -1.71], ['c', 0.51, -1.65, 1.98, -2.82, 3.81, -3.09], ['c', 0.84, -0.09, 2.46, 0.03, 3.51, 0.27], ['c', 2.22, 0.57, 3.69, 1.80, 4.44, 3.75], ['c', 0.36, 0.93, 0.57, 2.13, 0.57, 3.36], ['c', 0.00, 1.44, -0.48, 2.73, -1.38, 3.81], ['c', -1.26, 1.50, -3.27, 2.43, -5.28, 2.43], ['c', -0.48, 0.00, -0.51, 0.00, -0.75, -0.09], ['c', -0.15, -0.03, -0.48, -0.21, -0.78, -0.36], ['c', -0.69, -0.36, -0.87, -0.42, -1.26, -0.42], ['c', -0.27, 0.00, -0.30, 0.00, -0.51, 0.09], ['c', -0.57, 0.30, -0.81, 0.90, -0.81, 2.10], ['c', 0.00, 1.23, 0.24, 1.83, 0.81, 2.13], ['c', 0.21, 0.09, 0.24, 0.09, 0.51, 0.09], ['c', 0.39, 0.00, 0.57, -0.06, 1.26, -0.42], ['c', 0.30, -0.15, 0.63, -0.33, 0.78, -0.36], ['c', 0.24, -0.09, 0.27, -0.09, 0.75, -0.09], ['c', 2.01, 0.00, 4.02, 0.93, 5.28, 2.40], ['c', 0.90, 1.11, 1.38, 2.40, 1.38, 3.84], ['c', 0.00, 1.50, -0.30, 2.88, -0.84, 3.96], ['c', -0.78, 1.59, -2.19, 2.64, -4.17, 3.15], ['c', -1.05, 0.24, -2.67, 0.36, -3.51, 0.27], ['c', -1.83, -0.27, -3.30, -1.44, -3.81, -3.09], ['c', -0.18, -0.54, -0.21, -1.29, -0.09, -1.74], ['c', 0.15, -0.60, 0.63, -1.20, 1.23, -1.47], ['c', 0.36, -0.18, 0.57, -0.21, 0.99, -0.21], ['c', 0.42, 0.00, 0.63, 0.03, 1.02, 0.21], ['c', 0.42, 0.21, 0.84, 0.63, 1.05, 1.05], ['c', 0.18, 0.36, 0.21, 0.60, 0.21, 0.96], ['c', 0.00, 0.30, 0.00, 0.36, -0.06, 0.51], ['c', -0.12, 0.24, -0.27, 0.42, -0.69, 0.72], ['c', -0.57, 0.42, -0.69, 0.63, -0.69, 1.08], ['c', 0.00, 0.24, 0.00, 0.30, 0.06, 0.45], ['c', 0.12, 0.21, 0.30, 0.39, 0.57, 0.54], ['c', 0.42, 0.18, 0.87, 0.21, 1.53, 0.15], ['c', 1.08, -0.15, 1.80, -0.57, 2.34, -1.32], ['c', 0.54, -0.75, 0.84, -1.83, 0.99, -3.51], ['c', 0.06, -0.57, 0.06, -3.03, 0.00, -3.57], ['c', -0.12, -1.47, -0.42, -2.31, -0.99, -2.88], ['c', -0.27, -0.27, -0.63, -0.48, -1.08, -0.60], ['c', -0.27, -0.06, -0.39, -0.06, -0.84, -0.06], ['c', -0.45, 0.00, -0.57, 0.00, -0.78, 0.06], ['c', -1.14, 0.27, -2.01, 1.17, -2.46, 2.49], ['c', -0.21, 0.57, -0.30, 0.99, -0.33, 1.65], ['c', -0.03, 0.51, -0.06, 0.57, -0.24, 0.66], ['c', -0.12, 0.06, -0.27, 0.06, -0.39, 0.00], ['c', -0.21, -0.09, -0.21, -0.15, -0.24, -0.75], ['c', -0.09, -1.92, -0.78, -3.72, -2.01, -5.19], ['c', -0.18, -0.21, -0.36, -0.42, -0.39, -0.45], ['l', -0.09, -0.06], ['l', 0.00, 7.11], ['l', 0.00, 7.14], ['l', -0.06, 0.09], ['c', -0.09, 0.06, -0.09, 0.06, -0.54, 0.06], ['c', -0.48, 0.00, -0.48, 0.00, -0.57, -0.06], ['l', -0.06, -0.09], ['l', 0.00, -14.82], ['l', 0.00, -14.85], ['z']], w: 20.31, h: 29.97 },\n\t'clefs.F': { d: [['M', 6.30, -7.80], ['c', 0.36, -0.03, 1.65, 0.00, 2.13, 0.03], ['c', 3.60, 0.42, 6.03, 2.10, 6.93, 4.86], ['c', 0.27, 0.84, 0.36, 1.50, 0.36, 2.58], ['c', 0.00, 0.90, -0.03, 1.35, -0.18, 2.16], ['c', -0.78, 3.78, -3.54, 7.08, -8.37, 9.96], ['c', -1.74, 1.05, -3.87, 2.13, -6.18, 3.12], ['c', -0.39, 0.18, -0.75, 0.33, -0.81, 0.36], ['c', -0.06, 0.03, -0.15, 0.06, -0.18, 0.06], ['c', -0.15, 0.00, -0.33, -0.18, -0.33, -0.33], ['c', 0.00, -0.15, 0.06, -0.21, 0.51, -0.48], ['c', 3.00, -1.77, 5.13, -3.21, 6.84, -4.74], ['c', 0.51, -0.45, 1.59, -1.50, 1.95, -1.95], ['c', 1.89, -2.19, 2.88, -4.32, 3.15, -6.78], ['c', 0.06, -0.42, 0.06, -1.77, 0.00, -2.19], ['c', -0.24, -2.01, -0.93, -3.63, -2.04, -4.71], ['c', -0.63, -0.63, -1.29, -1.02, -2.07, -1.20], ['c', -1.62, -0.39, -3.36, 0.15, -4.56, 1.44], ['c', -0.54, 0.60, -1.05, 1.47, -1.32, 2.22], ['l', -0.09, 0.21], ['l', 0.24, -0.12], ['c', 0.39, -0.21, 0.63, -0.24, 1.11, -0.24], ['c', 0.30, 0.00, 0.45, 0.00, 0.66, 0.06], ['c', 1.92, 0.48, 2.85, 2.55, 1.95, 4.38], ['c', -0.45, 0.99, -1.41, 1.62, -2.46, 1.71], ['c', -1.47, 0.09, -2.91, -0.87, -3.39, -2.25], ['c', -0.18, -0.57, -0.21, -1.32, -0.03, -2.28], ['c', 0.39, -2.25, 1.83, -4.20, 3.81, -5.19], ['c', 0.69, -0.36, 1.59, -0.60, 2.37, -0.69], ['z'], ['m', 11.58, 2.52], ['c', 0.84, -0.21, 1.71, 0.30, 1.89, 1.14], ['c', 0.30, 1.17, -0.72, 2.19, -1.89, 1.89], ['c', -0.99, -0.21, -1.50, -1.32, -1.02, -2.25], ['c', 0.18, -0.39, 0.60, -0.69, 1.02, -0.78], ['z'], ['m', 0.00, 7.50], ['c', 0.84, -0.21, 1.71, 0.30, 1.89, 1.14], ['c', 0.21, 0.87, -0.30, 1.71, -1.14, 1.89], ['c', -0.87, 0.21, -1.71, -0.30, -1.89, -1.14], ['c', -0.21, -0.84, 0.30, -1.71, 1.14, -1.89], ['z']], w: 20.153, h: 23.142 },\n\t'clefs.G': { d: [['M', 9.69, -37.41], ['c', 0.09, -0.09, 0.24, -0.06, 0.36, 0.00], ['c', 0.12, 0.09, 0.57, 0.60, 0.96, 1.11], ['c', 1.77, 2.34, 3.21, 5.85, 3.57, 8.73], ['c', 0.21, 1.56, 0.03, 3.27, -0.45, 4.86], ['c', -0.69, 2.31, -1.92, 4.47, -4.23, 7.44], ['c', -0.30, 0.39, -0.57, 0.72, -0.60, 0.75], ['c', -0.03, 0.06, 0.00, 0.15, 0.18, 0.78], ['c', 0.54, 1.68, 1.38, 4.44, 1.68, 5.49], ['l', 0.09, 0.42], ['l', 0.39, 0.00], ['c', 1.47, 0.09, 2.76, 0.51, 3.96, 1.29], ['c', 1.83, 1.23, 3.06, 3.21, 3.39, 5.52], ['c', 0.09, 0.45, 0.12, 1.29, 0.06, 1.74], ['c', -0.09, 1.02, -0.33, 1.83, -0.75, 2.73], ['c', -0.84, 1.71, -2.28, 3.06, -4.02, 3.72], ['l', -0.33, 0.12], ['l', 0.03, 1.26], ['c', 0.00, 1.74, -0.06, 3.63, -0.21, 4.62], ['c', -0.45, 3.06, -2.19, 5.49, -4.47, 6.21], ['c', -0.57, 0.18, -0.90, 0.21, -1.59, 0.21], ['c', -0.69, 0.00, -1.02, -0.03, -1.65, -0.21], ['c', -1.14, -0.27, -2.13, -0.84, -2.94, -1.65], ['c', -0.99, -0.99, -1.56, -2.16, -1.71, -3.54], ['c', -0.09, -0.81, 0.06, -1.53, 0.45, -2.13], ['c', 0.63, -0.99, 1.83, -1.56, 3.00, -1.53], ['c', 1.50, 0.09, 2.64, 1.32, 2.73, 2.94], ['c', 0.06, 1.47, -0.93, 2.70, -2.37, 2.97], ['c', -0.45, 0.06, -0.84, 0.03, -1.29, -0.09], ['l', -0.21, -0.09], ['l', 0.09, 0.12], ['c', 0.39, 0.54, 0.78, 0.93, 1.32, 1.26], ['c', 1.35, 0.87, 3.06, 1.02, 4.35, 0.36], ['c', 1.44, -0.72, 2.52, -2.28, 2.97, -4.35], ['c', 0.15, -0.66, 0.24, -1.50, 0.30, -3.03], ['c', 0.03, -0.84, 0.03, -2.94, 0.00, -3.00], ['c', -0.03, 0.00, -0.18, 0.00, -0.36, 0.03], ['c', -0.66, 0.12, -0.99, 0.12, -1.83, 0.12], ['c', -1.05, 0.00, -1.71, -0.06, -2.61, -0.30], ['c', -4.02, -0.99, -7.11, -4.35, -7.80, -8.46], ['c', -0.12, -0.66, -0.12, -0.99, -0.12, -1.83], ['c', 0.00, -0.84, 0.00, -1.14, 0.15, -1.92], ['c', 0.36, -2.28, 1.41, -4.62, 3.30, -7.29], ['l', 2.79, -3.60], ['c', 0.54, -0.66, 0.96, -1.20, 0.96, -1.23], ['c', 0.00, -0.03, -0.09, -0.33, -0.18, -0.69], ['c', -0.96, -3.21, -1.41, -5.28, -1.59, -7.68], ['c', -0.12, -1.38, -0.15, -3.09, -0.06, -3.96], ['c', 0.33, -2.67, 1.38, -5.07, 3.12, -7.08], ['c', 0.36, -0.42, 0.99, -1.05, 1.17, -1.14], ['z'], ['m', 2.01, 4.71], ['c', -0.15, -0.30, -0.30, -0.54, -0.30, -0.54], ['c', -0.03, 0.00, -0.18, 0.09, -0.30, 0.21], ['c', -2.40, 1.74, -3.87, 4.20, -4.26, 7.11], ['c', -0.06, 0.54, -0.06, 1.41, -0.03, 1.89], ['c', 0.09, 1.29, 0.48, 3.12, 1.08, 5.22], ['c', 0.15, 0.42, 0.24, 0.78, 0.24, 0.81], ['c', 0.00, 0.03, 0.84, -1.11, 1.23, -1.68], ['c', 1.89, -2.73, 2.88, -5.07, 3.15, -7.53], ['c', 0.09, -0.57, 0.12, -1.74, 0.06, -2.37], ['c', -0.09, -1.23, -0.27, -1.92, -0.87, -3.12], ['z'], ['m', -2.94, 20.70], ['c', -0.21, -0.72, -0.39, -1.32, -0.42, -1.32], ['c', 0.00, 0.00, -1.20, 1.47, -1.86, 2.37], ['c', -2.79, 3.63, -4.02, 6.30, -4.35, 9.30], ['c', -0.03, 0.21, -0.03, 0.69, -0.03, 1.08], ['c', 0.00, 0.69, 0.00, 0.75, 0.06, 1.11], ['c', 0.12, 0.54, 0.27, 0.99, 0.51, 1.47], ['c', 0.69, 1.38, 1.83, 2.55, 3.42, 3.42], ['c', 0.96, 0.54, 2.07, 0.90, 3.21, 1.08], ['c', 0.78, 0.12, 2.04, 0.12, 2.94, -0.03], ['c', 0.51, -0.06, 0.45, -0.03, 0.42, -0.30], ['c', -0.24, -3.33, -0.72, -6.33, -1.62, -10.08], ['c', -0.09, -0.39, -0.18, -0.75, -0.18, -0.78], ['c', -0.03, -0.03, -0.42, 0.00, -0.81, 0.09], ['c', -0.90, 0.18, -1.65, 0.57, -2.22, 1.14], ['c', -0.72, 0.72, -1.08, 1.65, -1.05, 2.64], ['c', 0.06, 0.96, 0.48, 1.83, 1.23, 2.58], ['c', 0.36, 0.36, 0.72, 0.63, 1.17, 0.90], ['c', 0.33, 0.18, 0.36, 0.21, 0.42, 0.33], ['c', 0.18, 0.42, -0.18, 0.90, -0.60, 0.87], ['c', -0.18, -0.03, -0.84, -0.36, -1.26, -0.63], ['c', -0.78, -0.51, -1.38, -1.11, -1.86, -1.83], ['c', -1.77, -2.70, -0.99, -6.42, 1.71, -8.19], ['c', 0.30, -0.21, 0.81, -0.48, 1.17, -0.63], ['c', 0.30, -0.09, 1.02, -0.30, 1.14, -0.30], ['c', 0.06, 0.00, 0.09, 0.00, 0.09, -0.03], ['c', 0.03, -0.03, -0.51, -1.92, -1.23, -4.26], ['z'], ['m', 3.78, 7.41], ['c', -0.18, -0.03, -0.36, -0.06, -0.39, -0.06], ['c', -0.03, 0.00, 0.00, 0.21, 0.18, 1.02], ['c', 0.75, 3.18, 1.26, 6.30, 1.50, 9.09], ['c', 0.06, 0.72, 0.00, 0.69, 0.51, 0.42], ['c', 0.78, -0.36, 1.44, -0.96, 1.98, -1.77], ['c', 1.08, -1.62, 1.20, -3.69, 0.30, -5.55], ['c', -0.81, -1.62, -2.31, -2.79, -4.08, -3.15], ['z']], w: 19.051, h: 57.057 },\n\t'clefs.perc': { d: [['M', 5.07, -7.44], ['l', 0.09, -0.06], ['l', 1.53, 0.00], ['l', 1.53, 0.00], ['l', 0.09, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 7.35], ['l', 0.00, 7.32], ['l', -0.06, 0.09], ['l', -0.09, 0.06], ['l', -1.53, 0.00], ['l', -1.53, 0.00], ['l', -0.09, -0.06], ['l', -0.06, -0.09], ['l', 0.00, -7.32], ['l', 0.00, -7.35], ['z'], ['m', 6.63, 0.00], ['l', 0.09, -0.06], ['l', 1.53, 0.00], ['l', 1.53, 0.00], ['l', 0.09, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 7.35], ['l', 0.00, 7.32], ['l', -0.06, 0.09], ['l', -0.09, 0.06], ['l', -1.53, 0.00], ['l', -1.53, 0.00], ['l', -0.09, -0.06], ['l', -0.06, -0.09], ['l', 0.00, -7.32], ['l', 0.00, -7.35], ['z']], w: 21, h: 14.97 },\n\t'tab.big': { d: [['M', 20.16, -21.66], ['c', 0.24, -0.09, 0.66, 0.09, 0.78, 0.36], ['c', 0.09, 0.21, 0.09, 0.24, -0.18, 0.54], ['c', -0.78, 0.81, -1.86, 1.44, -2.94, 1.71], ['c', -0.87, 0.24, -1.71, 0.24, -2.55, 0.03], ['l', -0.06, -0.03], ['l', -0.18, 0.99], ['c', -0.33, 1.98, -0.75, 4.26, -0.96, 5.04], ['c', -0.42, 1.65, -1.26, 3.18, -2.28, 4.14], ['c', -0.57, 0.57, -1.17, 0.90, -1.86, 1.08], ['c', -0.18, 0.06, -0.33, 0.06, -0.66, 0.06], ['c', -0.54, 0.00, -0.78, -0.03, -1.23, -0.27], ['c', -0.39, -0.18, -0.66, -0.39, -1.38, -0.99], ['c', -0.30, -0.24, -0.66, -0.51, -0.75, -0.57], ['c', -0.21, -0.15, -0.27, -0.24, -0.24, -0.45], ['c', 0.06, -0.27, 0.36, -0.60, 0.60, -0.66], ['c', 0.18, -0.03, 0.33, 0.06, 0.90, 0.57], ['c', 0.48, 0.42, 0.72, 0.57, 0.93, 0.69], ['c', 0.66, 0.33, 1.38, 0.21, 1.95, -0.36], ['c', 0.63, -0.60, 1.05, -1.62, 1.23, -3.00], ['c', 0.03, -0.18, 0.09, -0.66, 0.09, -1.11], ['c', 0.09, -1.56, 0.33, -3.81, 0.57, -5.49], ['c', 0.06, -0.33, 0.09, -0.63, 0.09, -0.63], ['c', -0.03, -0.03, -0.81, -0.12, -1.02, -0.12], ['c', -0.57, 0.00, -1.32, 0.12, -1.80, 0.33], ['c', -0.87, 0.30, -1.35, 0.78, -1.50, 1.41], ['c', -0.18, 0.63, 0.09, 1.26, 0.66, 1.65], ['c', 0.12, 0.06, 0.15, 0.12, 0.18, 0.24], ['c', 0.09, 0.27, 0.06, 0.57, -0.09, 0.75], ['c', -0.03, 0.06, -0.12, 0.09, -0.27, 0.15], ['c', -0.72, 0.21, -1.44, 0.15, -2.10, -0.18], ['c', -0.54, -0.27, -0.96, -0.66, -1.20, -1.14], ['c', -0.39, -0.75, -0.33, -1.74, 0.15, -2.52], ['c', 0.27, -0.42, 0.84, -0.93, 1.41, -1.23], ['c', 1.17, -0.57, 2.88, -0.90, 4.80, -0.90], ['c', 0.69, 0.00, 0.78, 0.00, 1.08, 0.06], ['c', 0.45, 0.09, 1.11, 0.30, 2.07, 0.60], ['c', 1.47, 0.48, 1.83, 0.57, 2.55, 0.54], ['c', 1.02, -0.06, 2.04, -0.45, 2.94, -1.11], ['c', 0.12, -0.09, 0.24, -0.18, 0.27, -0.18], ['z'], ['m', -5.88, 13.05], ['c', 0.21, -0.03, 0.81, 0.00, 1.08, 0.06], ['c', 0.48, 0.12, 0.90, 0.42, 0.99, 0.69], ['c', 0.03, 0.09, 0.03, 0.15, 0.00, 0.27], ['c', 0.00, 0.09, -0.03, 0.57, -0.06, 1.08], ['c', -0.09, 2.19, -0.24, 5.76, -0.39, 8.28], ['c', -0.06, 1.53, -0.06, 1.77, 0.03, 2.01], ['c', 0.09, 0.18, 0.15, 0.24, 0.30, 0.30], ['c', 0.24, 0.12, 0.54, 0.06, 1.23, -0.27], ['c', 0.57, -0.27, 0.66, -0.30, 0.75, -0.24], ['c', 0.09, 0.06, 0.18, 0.30, 0.18, 0.45], ['c', 0.00, 0.33, -0.15, 0.51, -0.45, 0.63], ['c', -0.12, 0.03, -0.39, 0.15, -0.60, 0.27], ['c', -1.17, 0.60, -1.38, 0.69, -1.80, 0.72], ['c', -0.45, 0.03, -0.78, -0.09, -1.08, -0.39], ['c', -0.39, -0.42, -0.66, -1.20, -1.02, -3.12], ['c', -0.24, -1.23, -0.36, -2.07, -0.54, -3.75], ['l', 0.00, -0.18], ['l', -0.36, 0.45], ['c', -0.60, 0.75, -1.32, 1.59, -1.95, 2.25], ['c', -0.15, 0.18, -0.27, 0.30, -0.27, 0.33], ['c', 0.00, 0.00, 0.06, 0.09, 0.15, 0.18], ['c', 0.24, 0.33, 0.60, 0.57, 1.05, 0.69], ['c', 0.18, 0.06, 0.30, 0.06, 0.69, 0.06], ['l', 0.48, 0.03], ['l', 0.06, 0.12], ['c', 0.15, 0.27, 0.03, 0.72, -0.21, 0.90], ['c', -0.18, 0.12, -0.93, 0.27, -1.41, 0.27], ['c', -0.84, 0.00, -1.59, -0.30, -1.98, -0.84], ['l', -0.12, -0.15], ['l', -0.45, 0.42], ['c', -0.99, 0.87, -1.53, 1.32, -2.16, 1.74], ['c', -0.78, 0.51, -1.50, 0.84, -2.10, 0.93], ['c', -0.69, 0.12, -1.20, 0.03, -1.95, -0.42], ['c', -0.21, -0.12, -0.51, -0.27, -0.66, -0.36], ['c', -0.24, -0.12, -0.30, -0.18, -0.33, -0.24], ['c', -0.12, -0.27, 0.15, -0.78, 0.45, -0.93], ['c', 0.24, -0.12, 0.33, -0.09, 0.90, 0.18], ['c', 0.60, 0.30, 0.84, 0.39, 1.20, 0.36], ['c', 0.87, -0.09, 1.77, -0.69, 3.24, -2.31], ['c', 2.67, -2.85, 4.59, -5.94, 5.70, -9.15], ['c', 0.15, -0.45, 0.24, -0.63, 0.42, -0.81], ['c', 0.21, -0.24, 0.60, -0.45, 0.99, -0.51], ['z'], ['m', -3.99, 16.05], ['c', 0.18, 0.00, 0.69, -0.03, 1.17, 0.00], ['c', 3.27, 0.03, 5.37, 0.75, 6.00, 2.07], ['c', 0.45, 0.99, 0.12, 2.40, -0.81, 3.42], ['c', -0.24, 0.27, -0.57, 0.57, -0.84, 0.75], ['c', -0.09, 0.06, -0.18, 0.09, -0.18, 0.12], ['c', 0.00, 0.00, 0.18, 0.03, 0.42, 0.09], ['c', 1.23, 0.30, 2.01, 0.81, 2.37, 1.59], ['c', 0.27, 0.54, 0.30, 1.32, 0.09, 2.10], ['c', -0.12, 0.36, -0.45, 1.05, -0.69, 1.35], ['c', -0.87, 1.17, -2.10, 1.92, -3.54, 2.25], ['c', -0.36, 0.06, -0.48, 0.06, -0.96, 0.06], ['c', -0.45, 0.00, -0.66, 0.00, -0.84, -0.03], ['c', -0.84, -0.18, -1.47, -0.51, -2.07, -1.11], ['c', -0.33, -0.33, -0.45, -0.51, -0.45, -0.63], ['c', 0.00, -0.06, 0.03, -0.15, 0.06, -0.24], ['c', 0.18, -0.33, 0.69, -0.60, 0.93, -0.48], ['c', 0.03, 0.03, 0.15, 0.12, 0.27, 0.24], ['c', 0.39, 0.42, 0.99, 0.57, 1.62, 0.45], ['c', 1.05, -0.21, 1.98, -1.02, 2.31, -2.01], ['c', 0.48, -1.53, -0.48, -2.55, -2.58, -2.67], ['c', -0.21, 0.00, -0.36, -0.03, -0.42, -0.06], ['c', -0.15, -0.09, -0.21, -0.51, -0.06, -0.78], ['c', 0.12, -0.27, 0.24, -0.33, 0.60, -0.36], ['c', 0.57, -0.06, 1.11, -0.42, 1.50, -0.99], ['c', 0.48, -0.72, 0.54, -1.59, 0.18, -2.31], ['c', -0.12, -0.21, -0.45, -0.54, -0.69, -0.69], ['c', -0.33, -0.21, -0.93, -0.45, -1.35, -0.51], ['l', -0.12, -0.03], ['l', -0.06, 0.48], ['c', -0.54, 2.94, -1.14, 6.24, -1.29, 6.75], ['c', -0.33, 1.35, -0.93, 2.61, -1.65, 3.60], ['c', -0.30, 0.36, -0.81, 0.90, -1.14, 1.14], ['c', -0.30, 0.24, -0.84, 0.48, -1.14, 0.57], ['c', -0.33, 0.09, -0.96, 0.09, -1.26, 0.03], ['c', -0.45, -0.12, -0.87, -0.39, -1.53, -0.96], ['c', -0.24, -0.15, -0.51, -0.39, -0.63, -0.48], ['c', -0.30, -0.21, -0.33, -0.33, -0.21, -0.63], ['c', 0.12, -0.18, 0.27, -0.36, 0.42, -0.45], ['c', 0.27, -0.12, 0.36, -0.09, 0.87, 0.33], ['c', 0.78, 0.60, 1.08, 0.75, 1.65, 0.72], ['c', 0.45, -0.03, 0.81, -0.21, 1.17, -0.54], ['c', 0.87, -0.90, 1.38, -2.85, 1.38, -5.37], ['c', 0.00, -0.60, 0.03, -1.11, 0.12, -2.04], ['c', 0.06, -0.69, 0.24, -2.01, 0.33, -2.58], ['c', 0.06, -0.24, 0.06, -0.42, 0.06, -0.42], ['c', 0.00, 0.00, -0.12, 0.03, -0.21, 0.09], ['c', -1.44, 0.57, -2.16, 1.65, -1.74, 2.55], ['c', 0.09, 0.15, 0.18, 0.24, 0.27, 0.33], ['c', 0.24, 0.21, 0.30, 0.27, 0.33, 0.39], ['c', 0.06, 0.24, 0.00, 0.63, -0.15, 0.78], ['c', -0.09, 0.12, -0.54, 0.21, -0.96, 0.24], ['c', -1.02, 0.03, -2.01, -0.48, -2.43, -1.32], ['c', -0.21, -0.45, -0.27, -0.90, -0.15, -1.44], ['c', 0.06, -0.27, 0.21, -0.66, 0.39, -0.93], ['c', 0.87, -1.29, 3.00, -2.22, 5.64, -2.43], ['z']], w: 19.643, h: 43.325 },\n\t'tab.tiny': { d: [['M', 16.02, -17.25], ['c', 0.12, -0.09, 0.15, -0.09, 0.27, -0.09], ['c', 0.21, 0.03, 0.51, 0.30, 0.51, 0.45], ['c', 0.00, 0.06, -0.12, 0.18, -0.30, 0.36], ['c', -1.11, 1.08, -2.55, 1.59, -3.84, 1.41], ['c', -0.15, -0.03, -0.33, -0.06, -0.39, -0.09], ['c', -0.06, -0.03, -0.09, -0.03, -0.12, -0.03], ['c', 0.00, 0.00, -0.06, 0.42, -0.15, 0.93], ['c', -0.33, 2.01, -0.66, 3.69, -0.84, 4.26], ['c', -0.42, 1.41, -1.23, 2.67, -2.16, 3.33], ['c', -0.27, 0.18, -0.75, 0.42, -0.99, 0.48], ['c', -0.30, 0.09, -0.72, 0.09, -1.02, 0.06], ['c', -0.45, -0.09, -0.84, -0.33, -1.53, -0.90], ['c', -0.21, -0.18, -0.51, -0.39, -0.63, -0.48], ['c', -0.27, -0.21, -0.30, -0.24, -0.30, -0.36], ['c', 0.00, -0.12, 0.09, -0.36, 0.18, -0.45], ['c', 0.09, -0.09, 0.27, -0.18, 0.36, -0.18], ['c', 0.12, 0.00, 0.30, 0.12, 0.66, 0.45], ['c', 0.57, 0.51, 0.87, 0.69, 1.23, 0.72], ['c', 0.93, 0.06, 1.68, -0.78, 1.98, -2.37], ['c', 0.09, -0.39, 0.15, -0.75, 0.18, -1.53], ['c', 0.06, -0.99, 0.24, -2.79, 0.42, -4.05], ['c', 0.03, -0.30, 0.06, -0.57, 0.06, -0.60], ['c', 0.00, -0.06, -0.03, -0.09, -0.15, -0.12], ['c', -0.90, -0.18, -2.13, 0.06, -2.76, 0.57], ['c', -0.36, 0.30, -0.51, 0.60, -0.51, 1.02], ['c', 0.00, 0.45, 0.15, 0.75, 0.48, 0.99], ['c', 0.06, 0.06, 0.15, 0.18, 0.18, 0.24], ['c', 0.12, 0.24, 0.03, 0.63, -0.15, 0.69], ['c', -0.24, 0.12, -0.60, 0.15, -0.90, 0.15], ['c', -0.36, -0.03, -0.57, -0.09, -0.87, -0.24], ['c', -0.78, -0.36, -1.23, -1.11, -1.20, -1.92], ['c', 0.12, -1.53, 1.74, -2.49, 4.62, -2.70], ['c', 1.20, -0.09, 1.47, -0.03, 3.33, 0.57], ['c', 0.90, 0.30, 1.14, 0.36, 1.56, 0.39], ['c', 0.45, 0.00, 0.93, -0.06, 1.38, -0.21], ['c', 0.51, -0.18, 0.81, -0.33, 1.41, -0.75], ['z'], ['m', -4.68, 10.38], ['c', 0.39, -0.06, 0.84, 0.00, 1.20, 0.15], ['c', 0.24, 0.12, 0.36, 0.21, 0.45, 0.36], ['l', 0.09, 0.09], ['l', -0.06, 1.41], ['c', -0.09, 2.19, -0.18, 3.96, -0.27, 5.49], ['c', -0.03, 0.78, -0.06, 1.59, -0.06, 1.86], ['c', 0.00, 0.42, 0.00, 0.48, 0.06, 0.57], ['c', 0.06, 0.18, 0.18, 0.24, 0.36, 0.27], ['c', 0.18, 0.00, 0.39, -0.06, 0.84, -0.27], ['c', 0.45, -0.21, 0.54, -0.24, 0.63, -0.18], ['c', 0.12, 0.12, 0.15, 0.54, 0.03, 0.69], ['c', -0.03, 0.03, -0.15, 0.12, -0.27, 0.18], ['c', -0.15, 0.03, -0.30, 0.12, -0.36, 0.15], ['c', -0.87, 0.45, -1.02, 0.51, -1.26, 0.57], ['c', -0.33, 0.09, -0.60, 0.06, -0.84, -0.06], ['c', -0.42, -0.18, -0.63, -0.60, -0.87, -1.44], ['c', -0.30, -1.23, -0.57, -2.97, -0.66, -4.08], ['c', 0.00, -0.18, -0.03, -0.30, -0.03, -0.33], ['l', -0.06, 0.06], ['c', -0.18, 0.27, -1.11, 1.38, -1.68, 2.01], ['l', -0.33, 0.33], ['l', 0.06, 0.09], ['c', 0.06, 0.15, 0.27, 0.33, 0.48, 0.42], ['c', 0.27, 0.18, 0.51, 0.24, 0.96, 0.27], ['l', 0.39, 0.00], ['l', 0.03, 0.12], ['c', 0.12, 0.21, 0.03, 0.57, -0.15, 0.69], ['c', -0.03, 0.03, -0.21, 0.09, -0.36, 0.15], ['c', -0.27, 0.06, -0.39, 0.06, -0.75, 0.06], ['c', -0.48, 0.00, -0.75, -0.03, -1.08, -0.21], ['c', -0.21, -0.12, -0.51, -0.36, -0.57, -0.48], ['l', -0.03, -0.09], ['l', -0.39, 0.36], ['c', -1.47, 1.35, -2.49, 1.98, -3.42, 2.13], ['c', -0.54, 0.09, -0.96, -0.03, -1.62, -0.39], ['c', -0.21, -0.15, -0.45, -0.27, -0.54, -0.30], ['c', -0.18, -0.09, -0.21, -0.21, -0.12, -0.45], ['c', 0.06, -0.27, 0.33, -0.48, 0.54, -0.48], ['c', 0.03, 0.00, 0.27, 0.09, 0.48, 0.21], ['c', 0.48, 0.24, 0.69, 0.27, 0.99, 0.27], ['c', 0.60, -0.06, 1.17, -0.42, 2.10, -1.35], ['c', 2.22, -2.22, 4.02, -4.98, 4.95, -7.59], ['c', 0.21, -0.57, 0.30, -0.78, 0.48, -0.93], ['c', 0.15, -0.15, 0.42, -0.27, 0.66, -0.33], ['z'], ['m', -3.06, 12.84], ['c', 0.27, -0.03, 1.68, 0.00, 2.01, 0.03], ['c', 1.92, 0.18, 3.15, 0.69, 3.63, 1.50], ['c', 0.18, 0.33, 0.24, 0.51, 0.21, 0.93], ['c', 0.00, 0.45, -0.06, 0.72, -0.24, 1.11], ['c', -0.24, 0.51, -0.69, 1.02, -1.17, 1.35], ['c', -0.21, 0.15, -0.21, 0.15, -0.12, 0.18], ['c', 0.72, 0.15, 1.11, 0.30, 1.50, 0.57], ['c', 0.39, 0.24, 0.63, 0.57, 0.75, 0.96], ['c', 0.09, 0.30, 0.09, 0.96, 0.00, 1.29], ['c', -0.15, 0.57, -0.39, 1.05, -0.78, 1.50], ['c', -0.66, 0.75, -1.62, 1.32, -2.61, 1.53], ['c', -0.27, 0.06, -0.42, 0.06, -0.84, 0.06], ['c', -0.48, 0.00, -0.57, 0.00, -0.81, -0.06], ['c', -0.60, -0.18, -1.05, -0.42, -1.47, -0.81], ['c', -0.36, -0.39, -0.42, -0.51, -0.30, -0.75], ['c', 0.12, -0.21, 0.39, -0.39, 0.60, -0.39], ['c', 0.09, 0.00, 0.15, 0.03, 0.33, 0.18], ['c', 0.12, 0.12, 0.27, 0.24, 0.36, 0.27], ['c', 0.96, 0.48, 2.46, -0.33, 2.82, -1.50], ['c', 0.24, -0.81, -0.03, -1.44, -0.69, -1.77], ['c', -0.39, -0.21, -1.02, -0.33, -1.53, -0.33], ['c', -0.18, 0.00, -0.21, 0.00, -0.27, -0.09], ['c', -0.06, -0.09, -0.06, -0.30, -0.03, -0.48], ['c', 0.06, -0.18, 0.18, -0.36, 0.33, -0.36], ['c', 0.39, -0.06, 0.51, -0.09, 0.72, -0.18], ['c', 0.69, -0.36, 1.11, -1.23, 0.99, -2.01], ['c', -0.09, -0.51, -0.42, -0.90, -0.93, -1.17], ['c', -0.24, -0.12, -0.60, -0.27, -0.87, -0.30], ['c', -0.09, -0.03, -0.09, -0.03, -0.12, 0.12], ['c', 0.00, 0.09, -0.21, 1.11, -0.42, 2.25], ['c', -0.66, 3.75, -0.72, 3.99, -1.26, 5.07], ['c', -0.90, 1.89, -2.25, 2.85, -3.48, 2.61], ['c', -0.39, -0.09, -0.69, -0.27, -1.38, -0.84], ['c', -0.63, -0.51, -0.63, -0.48, -0.63, -0.60], ['c', 0.00, -0.18, 0.18, -0.48, 0.39, -0.57], ['c', 0.21, -0.12, 0.30, -0.09, 0.81, 0.33], ['c', 0.15, 0.15, 0.39, 0.30, 0.54, 0.36], ['c', 0.18, 0.12, 0.27, 0.12, 0.48, 0.15], ['c', 0.99, 0.06, 1.71, -0.78, 2.04, -2.46], ['c', 0.12, -0.66, 0.18, -1.14, 0.21, -2.22], ['c', 0.03, -1.23, 0.12, -2.25, 0.36, -3.63], ['c', 0.03, -0.24, 0.06, -0.45, 0.06, -0.48], ['c', -0.06, -0.03, -0.66, 0.27, -0.90, 0.42], ['c', -0.06, 0.06, -0.21, 0.18, -0.33, 0.30], ['c', -0.57, 0.57, -0.60, 1.35, -0.06, 1.74], ['c', 0.18, 0.12, 0.24, 0.24, 0.21, 0.51], ['c', -0.03, 0.30, -0.15, 0.42, -0.57, 0.48], ['c', -1.11, 0.24, -2.22, -0.42, -2.43, -1.38], ['c', -0.09, -0.45, 0.03, -1.02, 0.30, -1.47], ['c', 0.18, -0.24, 0.60, -0.63, 0.90, -0.84], ['c', 0.90, -0.60, 2.28, -1.02, 3.69, -1.11], ['z']], w: 15.709, h: 34.656 },\n\t'timesig.common': { d: [['M', 6.66, -7.83], ['c', 0.72, -0.06, 1.41, -0.03, 1.98, 0.09], ['c', 1.20, 0.27, 2.34, 0.96, 3.09, 1.92], ['c', 0.63, 0.81, 1.08, 1.86, 1.14, 2.73], ['c', 0.06, 1.02, -0.51, 1.92, -1.44, 2.22], ['c', -0.24, 0.09, -0.30, 0.09, -0.63, 0.09], ['c', -0.33, 0.00, -0.42, 0.00, -0.63, -0.06], ['c', -0.66, -0.24, -1.14, -0.63, -1.41, -1.20], ['c', -0.15, -0.30, -0.21, -0.51, -0.24, -0.90], ['c', -0.06, -1.08, 0.57, -2.04, 1.56, -2.37], ['c', 0.18, -0.06, 0.27, -0.06, 0.63, -0.06], ['l', 0.45, 0.00], ['c', 0.06, 0.03, 0.09, 0.03, 0.09, 0.00], ['c', 0.00, 0.00, -0.09, -0.12, -0.24, -0.27], ['c', -1.02, -1.11, -2.55, -1.68, -4.08, -1.50], ['c', -1.29, 0.15, -2.04, 0.69, -2.40, 1.74], ['c', -0.36, 0.93, -0.42, 1.89, -0.42, 5.37], ['c', 0.00, 2.97, 0.06, 3.96, 0.24, 4.77], ['c', 0.24, 1.08, 0.63, 1.68, 1.41, 2.07], ['c', 0.81, 0.39, 2.16, 0.45, 3.18, 0.09], ['c', 1.29, -0.45, 2.37, -1.53, 3.03, -2.97], ['c', 0.15, -0.33, 0.33, -0.87, 0.39, -1.17], ['c', 0.09, -0.24, 0.15, -0.36, 0.30, -0.39], ['c', 0.21, -0.03, 0.42, 0.15, 0.39, 0.36], ['c', -0.06, 0.39, -0.42, 1.38, -0.69, 1.89], ['c', -0.96, 1.80, -2.49, 2.94, -4.23, 3.18], ['c', -0.99, 0.12, -2.58, -0.06, -3.63, -0.45], ['c', -0.96, -0.36, -1.71, -0.84, -2.40, -1.50], ['c', -1.11, -1.11, -1.80, -2.61, -2.04, -4.56], ['c', -0.06, -0.60, -0.06, -2.01, 0.00, -2.61], ['c', 0.24, -1.95, 0.90, -3.45, 2.01, -4.56], ['c', 0.69, -0.66, 1.44, -1.11, 2.37, -1.47], ['c', 0.63, -0.24, 1.47, -0.42, 2.22, -0.48], ['z']], w: 13.038, h: 15.689 },\n\t'timesig.cut': { d: [['M', 6.24, -10.44], ['c', 0.09, -0.06, 0.09, -0.06, 0.48, -0.06], ['c', 0.36, 0.00, 0.36, 0.00, 0.45, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 1.23], ['l', 0.00, 1.26], ['l', 0.27, 0.00], ['c', 1.26, 0.00, 2.49, 0.45, 3.48, 1.29], ['c', 1.05, 0.87, 1.80, 2.28, 1.89, 3.48], ['c', 0.06, 1.02, -0.51, 1.92, -1.44, 2.22], ['c', -0.24, 0.09, -0.30, 0.09, -0.63, 0.09], ['c', -0.33, 0.00, -0.42, 0.00, -0.63, -0.06], ['c', -0.66, -0.24, -1.14, -0.63, -1.41, -1.20], ['c', -0.15, -0.30, -0.21, -0.51, -0.24, -0.90], ['c', -0.06, -1.08, 0.57, -2.04, 1.56, -2.37], ['c', 0.18, -0.06, 0.27, -0.06, 0.63, -0.06], ['l', 0.45, 0.00], ['c', 0.06, 0.03, 0.09, 0.03, 0.09, 0.00], ['c', 0.00, -0.03, -0.45, -0.51, -0.66, -0.69], ['c', -0.87, -0.69, -1.83, -1.05, -2.94, -1.11], ['l', -0.42, 0.00], ['l', 0.00, 7.17], ['l', 0.00, 7.14], ['l', 0.42, 0.00], ['c', 0.69, -0.03, 1.23, -0.18, 1.86, -0.51], ['c', 1.05, -0.51, 1.89, -1.47, 2.46, -2.70], ['c', 0.15, -0.33, 0.33, -0.87, 0.39, -1.17], ['c', 0.09, -0.24, 0.15, -0.36, 0.30, -0.39], ['c', 0.21, -0.03, 0.42, 0.15, 0.39, 0.36], ['c', -0.03, 0.24, -0.21, 0.78, -0.39, 1.20], ['c', -0.96, 2.37, -2.94, 3.90, -5.13, 3.90], ['l', -0.30, 0.00], ['l', 0.00, 1.26], ['l', 0.00, 1.23], ['l', -0.06, 0.09], ['c', -0.09, 0.06, -0.09, 0.06, -0.45, 0.06], ['c', -0.39, 0.00, -0.39, 0.00, -0.48, -0.06], ['l', -0.06, -0.09], ['l', 0.00, -1.29], ['l', 0.00, -1.29], ['l', -0.21, -0.03], ['c', -1.23, -0.21, -2.31, -0.63, -3.21, -1.29], ['c', -0.15, -0.09, -0.45, -0.36, -0.66, -0.57], ['c', -1.11, -1.11, -1.80, -2.61, -2.04, -4.56], ['c', -0.06, -0.60, -0.06, -2.01, 0.00, -2.61], ['c', 0.24, -1.95, 0.93, -3.45, 2.04, -4.59], ['c', 0.42, -0.39, 0.78, -0.66, 1.26, -0.93], ['c', 0.75, -0.45, 1.65, -0.75, 2.61, -0.90], ['l', 0.21, -0.03], ['l', 0.00, -1.29], ['l', 0.00, -1.29], ['z'], ['m', -0.06, 10.44], ['c', 0.00, -5.58, 0.00, -6.99, -0.03, -6.99], ['c', -0.15, 0.00, -0.63, 0.27, -0.87, 0.45], ['c', -0.45, 0.36, -0.75, 0.93, -0.93, 1.77], ['c', -0.18, 0.81, -0.24, 1.80, -0.24, 4.74], ['c', 0.00, 2.97, 0.06, 3.96, 0.24, 4.77], ['c', 0.24, 1.08, 0.66, 1.68, 1.41, 2.07], ['c', 0.12, 0.06, 0.30, 0.12, 0.33, 0.15], ['l', 0.09, 0.00], ['l', 0.00, -6.96], ['z']], w: 13.038, h: 20.97 },\n\t'timesig.imperfectum': { d: [['M', 13, -5], ['a', 8, 8, 0, 1, 0, 0, 10]], w: 13.038, h: 20.97 },\n\t'timesig.imperfectum2': { d: [['M', 13, -5], ['a', 8, 8, 0, 1, 0, 0, 10]], w: 13.038, h: 20.97 },\n\t'timesig.perfectum': { d: [['M', 13, -5], ['a', 8, 8, 0, 1, 0, 0, 10]], w: 13.038, h: 20.97 },\n\t'timesig.perfectum2': { d: [['M', 13, -5], ['a', 8, 8, 0, 1, 0, 0, 10]], w: 13.038, h: 20.97 },\n\t'f': { d: [['M', 9.93, -14.28], ['c', 1.53, -0.18, 2.88, 0.45, 3.12, 1.50], ['c', 0.12, 0.51, 0.00, 1.32, -0.27, 1.86], ['c', -0.15, 0.30, -0.42, 0.57, -0.63, 0.69], ['c', -0.69, 0.36, -1.56, 0.03, -1.83, -0.69], ['c', -0.09, -0.24, -0.09, -0.69, 0.00, -0.87], ['c', 0.06, -0.12, 0.21, -0.24, 0.45, -0.42], ['c', 0.42, -0.24, 0.57, -0.45, 0.60, -0.72], ['c', 0.03, -0.33, -0.09, -0.39, -0.63, -0.42], ['c', -0.30, 0.00, -0.45, 0.00, -0.60, 0.03], ['c', -0.81, 0.21, -1.35, 0.93, -1.74, 2.46], ['c', -0.06, 0.27, -0.48, 2.25, -0.48, 2.31], ['c', 0.00, 0.03, 0.39, 0.03, 0.90, 0.03], ['c', 0.72, 0.00, 0.90, 0.00, 0.99, 0.06], ['c', 0.42, 0.15, 0.45, 0.72, 0.03, 0.90], ['c', -0.12, 0.06, -0.24, 0.06, -1.17, 0.06], ['l', -1.05, 0.00], ['l', -0.78, 2.55], ['c', -0.45, 1.41, -0.87, 2.79, -0.96, 3.06], ['c', -0.87, 2.37, -2.37, 4.74, -3.78, 5.91], ['c', -1.05, 0.90, -2.04, 1.23, -3.09, 1.08], ['c', -1.11, -0.18, -1.89, -0.78, -2.04, -1.59], ['c', -0.12, -0.66, 0.15, -1.71, 0.54, -2.19], ['c', 0.69, -0.75, 1.86, -0.54, 2.22, 0.39], ['c', 0.06, 0.15, 0.09, 0.27, 0.09, 0.48], ['c', 0.00, 0.24, -0.03, 0.27, -0.12, 0.42], ['c', -0.03, 0.09, -0.15, 0.18, -0.27, 0.27], ['c', -0.09, 0.06, -0.27, 0.21, -0.36, 0.27], ['c', -0.24, 0.18, -0.36, 0.36, -0.39, 0.60], ['c', -0.03, 0.33, 0.09, 0.39, 0.63, 0.42], ['c', 0.42, 0.00, 0.63, -0.03, 0.90, -0.15], ['c', 0.60, -0.30, 0.96, -0.96, 1.38, -2.64], ['c', 0.09, -0.42, 0.63, -2.55, 1.17, -4.77], ['l', 1.02, -4.08], ['c', 0.00, -0.03, -0.36, -0.03, -0.81, -0.03], ['c', -0.72, 0.00, -0.81, 0.00, -0.93, -0.06], ['c', -0.42, -0.18, -0.39, -0.75, 0.03, -0.90], ['c', 0.09, -0.06, 0.27, -0.06, 1.05, -0.06], ['l', 0.96, 0.00], ['l', 0.00, -0.09], ['c', 0.06, -0.18, 0.30, -0.72, 0.51, -1.17], ['c', 1.20, -2.46, 3.30, -4.23, 5.34, -4.50], ['z']], w: 16.155, h: 19.445 },\n\t'm': { d: [['M', 2.79, -8.91], ['c', 0.09, 0.00, 0.30, -0.03, 0.45, -0.03], ['c', 0.24, 0.03, 0.30, 0.03, 0.45, 0.12], ['c', 0.36, 0.15, 0.63, 0.54, 0.75, 1.02], ['l', 0.03, 0.21], ['l', 0.33, -0.30], ['c', 0.69, -0.69, 1.38, -1.02, 2.07, -1.02], ['c', 0.27, 0.00, 0.33, 0.00, 0.48, 0.06], ['c', 0.21, 0.09, 0.48, 0.36, 0.63, 0.60], ['c', 0.03, 0.09, 0.12, 0.27, 0.18, 0.42], ['c', 0.03, 0.15, 0.09, 0.27, 0.12, 0.27], ['c', 0.00, 0.00, 0.09, -0.09, 0.18, -0.21], ['c', 0.33, -0.39, 0.87, -0.81, 1.29, -0.99], ['c', 0.78, -0.33, 1.47, -0.21, 2.01, 0.33], ['c', 0.30, 0.33, 0.48, 0.69, 0.60, 1.14], ['c', 0.09, 0.42, 0.06, 0.54, -0.54, 3.06], ['c', -0.33, 1.29, -0.57, 2.40, -0.57, 2.43], ['c', 0.00, 0.12, 0.09, 0.21, 0.21, 0.21], ['c', 0.24, 0.00, 0.75, -0.30, 1.20, -0.72], ['c', 0.45, -0.39, 0.60, -0.45, 0.78, -0.27], ['c', 0.18, 0.18, 0.09, 0.36, -0.45, 0.87], ['c', -1.05, 0.96, -1.83, 1.47, -2.58, 1.71], ['c', -0.93, 0.33, -1.53, 0.21, -1.80, -0.33], ['c', -0.06, -0.15, -0.06, -0.21, -0.06, -0.45], ['c', 0.00, -0.24, 0.03, -0.48, 0.60, -2.82], ['c', 0.42, -1.71, 0.60, -2.64, 0.63, -2.79], ['c', 0.03, -0.57, -0.30, -0.75, -0.84, -0.48], ['c', -0.24, 0.12, -0.54, 0.39, -0.66, 0.63], ['c', -0.03, 0.09, -0.42, 1.38, -0.90, 3.00], ['c', -0.90, 3.15, -0.84, 3.00, -1.14, 3.15], ['l', -0.15, 0.09], ['l', -0.78, 0.00], ['c', -0.60, 0.00, -0.78, 0.00, -0.84, -0.06], ['c', -0.09, -0.03, -0.18, -0.18, -0.18, -0.27], ['c', 0.00, -0.03, 0.36, -1.38, 0.84, -2.97], ['c', 0.57, -2.04, 0.81, -2.97, 0.84, -3.12], ['c', 0.03, -0.54, -0.30, -0.72, -0.84, -0.45], ['c', -0.24, 0.12, -0.57, 0.42, -0.66, 0.63], ['c', -0.06, 0.09, -0.51, 1.44, -1.05, 2.97], ['c', -0.51, 1.56, -0.99, 2.85, -0.99, 2.91], ['c', -0.06, 0.12, -0.21, 0.24, -0.36, 0.30], ['c', -0.12, 0.06, -0.21, 0.06, -0.90, 0.06], ['c', -0.60, 0.00, -0.78, 0.00, -0.84, -0.06], ['c', -0.09, -0.03, -0.18, -0.18, -0.18, -0.27], ['c', 0.00, -0.03, 0.45, -1.38, 0.99, -2.97], ['c', 1.05, -3.18, 1.05, -3.18, 0.93, -3.45], ['c', -0.12, -0.27, -0.39, -0.30, -0.72, -0.15], ['c', -0.54, 0.27, -1.14, 1.17, -1.56, 2.40], ['c', -0.06, 0.15, -0.15, 0.30, -0.18, 0.36], ['c', -0.21, 0.21, -0.57, 0.27, -0.72, 0.09], ['c', -0.09, -0.09, -0.06, -0.21, 0.06, -0.63], ['c', 0.48, -1.26, 1.26, -2.46, 2.01, -3.21], ['c', 0.57, -0.54, 1.20, -0.87, 1.83, -1.02], ['z']], w: 14.687, h: 9.126 },\n\t'p': { d: [['M', 1.92, -8.70], ['c', 0.27, -0.09, 0.81, -0.06, 1.11, 0.03], ['c', 0.54, 0.18, 0.93, 0.51, 1.17, 0.99], ['c', 0.09, 0.15, 0.15, 0.33, 0.18, 0.36], ['l', 0.00, 0.12], ['l', 0.30, -0.27], ['c', 0.66, -0.60, 1.35, -1.02, 2.13, -1.20], ['c', 0.21, -0.06, 0.33, -0.06, 0.78, -0.06], ['c', 0.45, 0.00, 0.51, 0.00, 0.84, 0.09], ['c', 1.29, 0.33, 2.07, 1.32, 2.25, 2.79], ['c', 0.09, 0.81, -0.09, 2.01, -0.45, 2.79], ['c', -0.54, 1.26, -1.86, 2.55, -3.18, 3.03], ['c', -0.45, 0.18, -0.81, 0.24, -1.29, 0.24], ['c', -0.69, -0.03, -1.35, -0.18, -1.86, -0.45], ['c', -0.30, -0.15, -0.51, -0.18, -0.69, -0.09], ['c', -0.09, 0.03, -0.18, 0.09, -0.18, 0.12], ['c', -0.09, 0.12, -1.05, 2.94, -1.05, 3.06], ['c', 0.00, 0.24, 0.18, 0.48, 0.51, 0.63], ['c', 0.18, 0.06, 0.54, 0.15, 0.75, 0.15], ['c', 0.21, 0.00, 0.36, 0.06, 0.42, 0.18], ['c', 0.12, 0.18, 0.06, 0.42, -0.12, 0.54], ['c', -0.09, 0.03, -0.15, 0.03, -0.78, 0.00], ['c', -1.98, -0.15, -3.81, -0.15, -5.79, 0.00], ['c', -0.63, 0.03, -0.69, 0.03, -0.78, 0.00], ['c', -0.24, -0.15, -0.24, -0.57, 0.03, -0.66], ['c', 0.06, -0.03, 0.48, -0.09, 0.99, -0.12], ['c', 0.87, -0.06, 1.11, -0.09, 1.35, -0.21], ['c', 0.18, -0.06, 0.33, -0.18, 0.39, -0.30], ['c', 0.06, -0.12, 3.24, -9.42, 3.27, -9.60], ['c', 0.06, -0.33, 0.03, -0.57, -0.15, -0.69], ['c', -0.09, -0.06, -0.12, -0.06, -0.30, -0.06], ['c', -0.69, 0.06, -1.53, 1.02, -2.28, 2.61], ['c', -0.09, 0.21, -0.21, 0.45, -0.27, 0.51], ['c', -0.09, 0.12, -0.33, 0.24, -0.48, 0.24], ['c', -0.18, 0.00, -0.36, -0.15, -0.36, -0.30], ['c', 0.00, -0.24, 0.78, -1.83, 1.26, -2.55], ['c', 0.72, -1.11, 1.47, -1.74, 2.28, -1.92], ['z'], ['m', 5.37, 1.47], ['c', -0.27, -0.12, -0.75, -0.03, -1.14, 0.21], ['c', -0.75, 0.48, -1.47, 1.68, -1.89, 3.15], ['c', -0.45, 1.47, -0.42, 2.34, 0.00, 2.70], ['c', 0.45, 0.39, 1.26, 0.21, 1.83, -0.36], ['c', 0.51, -0.51, 0.99, -1.68, 1.38, -3.27], ['c', 0.30, -1.17, 0.33, -1.74, 0.15, -2.13], ['c', -0.09, -0.15, -0.15, -0.21, -0.33, -0.30], ['z']], w: 14.689, h: 13.127 },\n\t'r': { d: [['M', 6.33, -9.12], ['c', 0.27, -0.03, 0.93, 0.00, 1.20, 0.06], ['c', 0.84, 0.21, 1.23, 0.81, 1.02, 1.53], ['c', -0.24, 0.75, -0.90, 1.17, -1.56, 0.96], ['c', -0.33, -0.09, -0.51, -0.30, -0.66, -0.75], ['c', -0.03, -0.12, -0.09, -0.24, -0.12, -0.30], ['c', -0.09, -0.15, -0.30, -0.24, -0.48, -0.24], ['c', -0.57, 0.00, -1.38, 0.54, -1.65, 1.08], ['c', -0.06, 0.15, -0.33, 1.17, -0.90, 3.27], ['c', -0.57, 2.31, -0.81, 3.12, -0.87, 3.21], ['c', -0.03, 0.06, -0.12, 0.15, -0.18, 0.21], ['l', -0.12, 0.06], ['l', -0.81, 0.03], ['c', -0.69, 0.00, -0.81, 0.00, -0.90, -0.03], ['c', -0.09, -0.06, -0.18, -0.21, -0.18, -0.30], ['c', 0.00, -0.06, 0.39, -1.62, 0.90, -3.51], ['c', 0.84, -3.24, 0.87, -3.45, 0.87, -3.72], ['c', 0.00, -0.21, 0.00, -0.27, -0.03, -0.36], ['c', -0.12, -0.15, -0.21, -0.24, -0.42, -0.24], ['c', -0.24, 0.00, -0.45, 0.15, -0.78, 0.42], ['c', -0.33, 0.36, -0.45, 0.54, -0.72, 1.14], ['c', -0.03, 0.12, -0.21, 0.24, -0.36, 0.27], ['c', -0.12, 0.00, -0.15, 0.00, -0.24, -0.06], ['c', -0.18, -0.12, -0.18, -0.21, -0.06, -0.54], ['c', 0.21, -0.57, 0.42, -0.93, 0.78, -1.32], ['c', 0.54, -0.51, 1.20, -0.81, 1.95, -0.87], ['c', 0.81, -0.03, 1.53, 0.30, 1.92, 0.87], ['l', 0.12, 0.18], ['l', 0.09, -0.09], ['c', 0.57, -0.45, 1.41, -0.84, 2.19, -0.96], ['z']], w: 9.41, h: 9.132 },\n\t's': { d: [['M', 4.47, -8.73], ['c', 0.09, 0.00, 0.36, -0.03, 0.57, -0.03], ['c', 0.75, 0.03, 1.29, 0.24, 1.71, 0.63], ['c', 0.51, 0.54, 0.66, 1.26, 0.36, 1.83], ['c', -0.24, 0.42, -0.63, 0.57, -1.11, 0.42], ['c', -0.33, -0.09, -0.60, -0.36, -0.60, -0.57], ['c', 0.00, -0.03, 0.06, -0.21, 0.15, -0.39], ['c', 0.12, -0.21, 0.15, -0.33, 0.18, -0.48], ['c', 0.00, -0.24, -0.06, -0.48, -0.15, -0.60], ['c', -0.15, -0.21, -0.42, -0.24, -0.75, -0.15], ['c', -0.27, 0.06, -0.48, 0.18, -0.69, 0.36], ['c', -0.39, 0.39, -0.51, 0.96, -0.33, 1.38], ['c', 0.09, 0.21, 0.42, 0.51, 0.78, 0.72], ['c', 1.11, 0.69, 1.59, 1.11, 1.89, 1.68], ['c', 0.21, 0.39, 0.24, 0.78, 0.15, 1.29], ['c', -0.18, 1.20, -1.17, 2.16, -2.52, 2.52], ['c', -1.02, 0.24, -1.95, 0.12, -2.70, -0.42], ['c', -0.72, -0.51, -0.99, -1.47, -0.60, -2.19], ['c', 0.24, -0.48, 0.72, -0.63, 1.17, -0.42], ['c', 0.33, 0.18, 0.54, 0.45, 0.57, 0.81], ['c', 0.00, 0.21, -0.03, 0.30, -0.33, 0.51], ['c', -0.33, 0.24, -0.39, 0.42, -0.27, 0.69], ['c', 0.06, 0.15, 0.21, 0.27, 0.45, 0.33], ['c', 0.30, 0.09, 0.87, 0.09, 1.20, 0.00], ['c', 0.75, -0.21, 1.23, -0.72, 1.29, -1.35], ['c', 0.03, -0.42, -0.15, -0.81, -0.54, -1.20], ['c', -0.24, -0.24, -0.48, -0.42, -1.41, -1.02], ['c', -0.69, -0.42, -1.05, -0.93, -1.05, -1.47], ['c', 0.00, -0.39, 0.12, -0.87, 0.30, -1.23], ['c', 0.27, -0.57, 0.78, -1.05, 1.38, -1.35], ['c', 0.24, -0.12, 0.63, -0.27, 0.90, -0.30], ['z']], w: 6.632, h: 8.758 },\n\t'z': { d: [['M', 2.64, -7.95], ['c', 0.36, -0.09, 0.81, -0.03, 1.71, 0.27], ['c', 0.78, 0.21, 0.96, 0.27, 1.74, 0.30], ['c', 0.87, 0.06, 1.02, 0.03, 1.38, -0.21], ['c', 0.21, -0.15, 0.33, -0.15, 0.48, -0.06], ['c', 0.15, 0.09, 0.21, 0.30, 0.15, 0.45], ['c', -0.03, 0.06, -1.26, 1.26, -2.76, 2.67], ['l', -2.73, 2.55], ['l', 0.54, 0.03], ['c', 0.54, 0.03, 0.72, 0.03, 2.01, 0.15], ['c', 0.36, 0.03, 0.90, 0.06, 1.20, 0.09], ['c', 0.66, 0.00, 0.81, -0.03, 1.02, -0.24], ['c', 0.30, -0.30, 0.39, -0.72, 0.27, -1.23], ['c', -0.06, -0.27, -0.06, -0.27, -0.03, -0.39], ['c', 0.15, -0.30, 0.54, -0.27, 0.69, 0.03], ['c', 0.15, 0.33, 0.27, 1.02, 0.27, 1.50], ['c', 0.00, 1.47, -1.11, 2.70, -2.52, 2.79], ['c', -0.57, 0.03, -1.02, -0.09, -2.01, -0.51], ['c', -1.02, -0.42, -1.23, -0.48, -2.13, -0.54], ['c', -0.81, -0.06, -0.96, -0.03, -1.26, 0.18], ['c', -0.12, 0.06, -0.24, 0.12, -0.27, 0.12], ['c', -0.27, 0.00, -0.45, -0.30, -0.36, -0.51], ['c', 0.03, -0.06, 1.32, -1.32, 2.91, -2.79], ['l', 2.88, -2.73], ['c', -0.03, 0.00, -0.21, 0.03, -0.42, 0.06], ['c', -0.21, 0.03, -0.78, 0.09, -1.23, 0.12], ['c', -1.11, 0.12, -1.23, 0.15, -1.95, 0.27], ['c', -0.72, 0.15, -1.17, 0.18, -1.29, 0.09], ['c', -0.27, -0.18, -0.21, -0.75, 0.12, -1.26], ['c', 0.39, -0.60, 0.93, -1.02, 1.59, -1.20], ['z']], w: 8.573, h: 8.743 },\n\t'+': { d: [['M', 3.48, -9.3], ['c', 0.18, -0.09, 0.36, -0.09, 0.54, 0.00], ['c', 0.18, 0.09, 0.24, 0.15, 0.33, 0.30], ['l', 0.06, 0.15], ['l', 0.00, 1.29], ['l', 0.00, 1.29], ['l', 1.29, 0.00], ['c', 1.23, 0.00, 1.29, 0.00, 1.41, 0.06], ['c', 0.06, 0.03, 0.15, 0.09, 0.18, 0.12], ['c', 0.12, 0.09, 0.21, 0.33, 0.21, 0.48], ['c', 0.00, 0.15, -0.09, 0.39, -0.21, 0.48], ['c', -0.03, 0.03, -0.12, 0.09, -0.18, 0.12], ['c', -0.12, 0.06, -0.18, 0.06, -1.41, 0.06], ['l', -1.29, 0.00], ['l', 0.00, 1.29], ['c', 0.00, 1.23, 0.00, 1.29, -0.06, 1.41], ['c', -0.09, 0.18, -0.15, 0.24, -0.30, 0.33], ['c', -0.21, 0.09, -0.39, 0.09, -0.57, 0.00], ['c', -0.18, -0.09, -0.24, -0.15, -0.33, -0.33], ['c', -0.06, -0.12, -0.06, -0.18, -0.06, -1.41], ['l', 0.00, -1.29], ['l', -1.29, 0.00], ['c', -1.23, 0.00, -1.29, 0.00, -1.41, -0.06], ['c', -0.18, -0.09, -0.24, -0.15, -0.33, -0.33], ['c', -0.09, -0.18, -0.09, -0.36, 0.00, -0.54], ['c', 0.09, -0.18, 0.15, -0.24, 0.33, -0.33], ['l', 0.15, -0.06], ['l', 1.26, 0.00], ['l', 1.29, 0.00], ['l', 0.00, -1.29], ['c', 0.00, -1.23, 0.00, -1.29, 0.06, -1.41], ['c', 0.09, -0.18, 0.15, -0.24, 0.33, -0.33], ['z']], w: 7.507, h: 7.515 },\n\t',': { d: [['M', 1.85, -3.36], ['c', 0.57, -0.15, 1.17, 0.03, 1.59, 0.45], ['c', 0.45, 0.45, 0.60, 0.96, 0.51, 1.89], ['c', -0.09, 1.23, -0.42, 2.46, -0.99, 3.93], ['c', -0.30, 0.72, -0.72, 1.62, -0.78, 1.68], ['c', -0.18, 0.21, -0.51, 0.18, -0.66, -0.06], ['c', -0.03, -0.06, -0.06, -0.15, -0.06, -0.18], ['c', 0.00, -0.06, 0.12, -0.33, 0.24, -0.63], ['c', 0.84, -1.80, 1.02, -2.61, 0.69, -3.24], ['c', -0.12, -0.24, -0.27, -0.36, -0.75, -0.60], ['c', -0.36, -0.15, -0.42, -0.21, -0.60, -0.39], ['c', -0.69, -0.69, -0.69, -1.71, 0.00, -2.40], ['c', 0.21, -0.21, 0.51, -0.39, 0.81, -0.45], ['z']], w: 3.452, h: 8.143 },\n\t'-': { d: [['M', 0.18, -5.34], ['c', 0.09, -0.06, 0.15, -0.06, 2.31, -0.06], ['c', 2.46, 0.00, 2.37, 0.00, 2.46, 0.21], ['c', 0.12, 0.21, 0.03, 0.42, -0.15, 0.54], ['c', -0.09, 0.06, -0.15, 0.06, -2.28, 0.06], ['c', -2.16, 0.00, -2.22, 0.00, -2.31, -0.06], ['c', -0.27, -0.15, -0.27, -0.54, -0.03, -0.69], ['z']], w: 5.001, h: 0.81 },\n\t'.': { d: [['M', 1.32, -3.36], ['c', 1.05, -0.27, 2.10, 0.57, 2.10, 1.65], ['c', 0.00, 1.08, -1.05, 1.92, -2.10, 1.65], ['c', -0.90, -0.21, -1.50, -1.14, -1.26, -2.04], ['c', 0.12, -0.63, 0.63, -1.11, 1.26, -1.26], ['z']], w: 3.413, h: 3.402 },\n\t'scripts.wedge': { d: [['M', -3.66, -7.44], ['c', 0.06, -0.09, 0.00, -0.09, 0.81, 0.03], ['c', 1.86, 0.30, 3.84, 0.30, 5.73, 0.00], ['c', 0.78, -0.12, 0.72, -0.12, 0.78, -0.03], ['c', 0.15, 0.15, 0.12, 0.24, -0.24, 0.60], ['c', -0.93, 0.93, -1.98, 2.76, -2.67, 4.62], ['c', -0.30, 0.78, -0.51, 1.71, -0.51, 2.13], ['c', 0.00, 0.15, 0.00, 0.18, -0.06, 0.27], ['c', -0.12, 0.09, -0.24, 0.09, -0.36, 0.00], ['c', -0.06, -0.09, -0.06, -0.12, -0.06, -0.27], ['c', 0.00, -0.42, -0.21, -1.35, -0.51, -2.13], ['c', -0.69, -1.86, -1.74, -3.69, -2.67, -4.62], ['c', -0.36, -0.36, -0.39, -0.45, -0.24, -0.60], ['z']], w: 7.49, h: 7.752 },\n\t'scripts.thumb': { d: [['M', -0.54, -3.69], ['c', 0.15, -0.03, 0.36, -0.06, 0.51, -0.06], ['c', 1.44, 0.00, 2.58, 1.11, 2.94, 2.85], ['c', 0.09, 0.48, 0.09, 1.32, 0.00, 1.80], ['c', -0.27, 1.41, -1.08, 2.43, -2.16, 2.73], ['l', -0.18, 0.06], ['l', 0.00, 0.12], ['c', 0.03, 0.06, 0.06, 0.45, 0.09, 0.87], ['c', 0.03, 0.57, 0.03, 0.78, 0.00, 0.84], ['c', -0.09, 0.27, -0.39, 0.48, -0.66, 0.48], ['c', -0.27, 0.00, -0.57, -0.21, -0.66, -0.48], ['c', -0.03, -0.06, -0.03, -0.27, 0.00, -0.84], ['c', 0.03, -0.42, 0.06, -0.81, 0.09, -0.87], ['l', 0.00, -0.12], ['l', -0.18, -0.06], ['c', -1.08, -0.30, -1.89, -1.32, -2.16, -2.73], ['c', -0.09, -0.48, -0.09, -1.32, 0.00, -1.80], ['c', 0.15, -0.84, 0.51, -1.53, 1.02, -2.04], ['c', 0.39, -0.39, 0.84, -0.63, 1.35, -0.75], ['z'], ['m', 1.05, 0.90], ['c', -0.15, -0.09, -0.21, -0.09, -0.45, -0.12], ['c', -0.15, 0.00, -0.30, 0.03, -0.39, 0.03], ['c', -0.57, 0.18, -0.90, 0.72, -1.08, 1.74], ['c', -0.06, 0.48, -0.06, 1.80, 0.00, 2.28], ['c', 0.15, 0.90, 0.42, 1.44, 0.90, 1.65], ['c', 0.18, 0.09, 0.21, 0.09, 0.51, 0.09], ['c', 0.30, 0.00, 0.33, 0.00, 0.51, -0.09], ['c', 0.48, -0.21, 0.75, -0.75, 0.90, -1.65], ['c', 0.03, -0.27, 0.03, -0.54, 0.03, -1.14], ['c', 0.00, -0.60, 0.00, -0.87, -0.03, -1.14], ['c', -0.15, -0.90, -0.45, -1.44, -0.90, -1.65], ['z']], w: 5.955, h: 9.75 },\n\t'scripts.open': { d: [['M', -0.54, -3.69], ['c', 0.15, -0.03, 0.36, -0.06, 0.51, -0.06], ['c', 1.44, 0.00, 2.58, 1.11, 2.94, 2.85], ['c', 0.09, 0.48, 0.09, 1.32, 0.00, 1.80], ['c', -0.33, 1.74, -1.47, 2.85, -2.91, 2.85], ['c', -1.44, 0.00, -2.58, -1.11, -2.91, -2.85], ['c', -0.09, -0.48, -0.09, -1.32, 0.00, -1.80], ['c', 0.15, -0.84, 0.51, -1.53, 1.02, -2.04], ['c', 0.39, -0.39, 0.84, -0.63, 1.35, -0.75], ['z'], ['m', 1.11, 0.90], ['c', -0.21, -0.09, -0.27, -0.09, -0.51, -0.12], ['c', -0.30, 0.00, -0.42, 0.03, -0.66, 0.15], ['c', -0.24, 0.12, -0.51, 0.39, -0.66, 0.63], ['c', -0.54, 0.93, -0.63, 2.64, -0.21, 3.81], ['c', 0.21, 0.54, 0.51, 0.90, 0.93, 1.11], ['c', 0.21, 0.09, 0.24, 0.09, 0.54, 0.09], ['c', 0.30, 0.00, 0.33, 0.00, 0.54, -0.09], ['c', 0.42, -0.21, 0.72, -0.57, 0.93, -1.11], ['c', 0.36, -0.99, 0.36, -2.37, 0.00, -3.36], ['c', -0.21, -0.54, -0.51, -0.90, -0.90, -1.11], ['z']], w: 5.955, h: 7.5 },\n\t'scripts.longphrase': { d: [['M', 1.47, -15.09], ['c', 0.36, -0.09, 0.66, -0.18, 0.69, -0.18], ['c', 0.06, 0.00, 0.06, 0.54, 0.06, 11.25], ['l', 0.00, 11.25], ['l', -0.63, 0.15], ['c', -0.66, 0.18, -1.44, 0.39, -1.50, 0.39], ['c', -0.03, 0.00, -0.03, -3.39, -0.03, -11.25], ['l', 0.00, -11.25], ['l', 0.36, -0.09], ['c', 0.21, -0.06, 0.66, -0.18, 1.05, -0.27], ['z']], w: 2.16, h: 23.04 },\n\t'scripts.mediumphrase': { d: [['M', 1.47, -7.59], ['c', 0.36, -0.09, 0.66, -0.18, 0.69, -0.18], ['c', 0.06, 0.00, 0.06, 0.39, 0.06, 7.50], ['l', 0.00, 7.50], ['l', -0.63, 0.15], ['c', -0.66, 0.18, -1.44, 0.39, -1.50, 0.39], ['c', -0.03, 0.00, -0.03, -2.28, -0.03, -7.50], ['l', 0.00, -7.50], ['l', 0.36, -0.09], ['c', 0.21, -0.06, 0.66, -0.18, 1.05, -0.27], ['z']], w: 2.16, h: 15.54 },\n\t'scripts.shortphrase': { d: [['M', 1.47, -7.59], ['c', 0.36, -0.09, 0.66, -0.18, 0.69, -0.18], ['c', 0.06, 0.00, 0.06, 0.21, 0.06, 3.75], ['l', 0.00, 3.75], ['l', -0.42, 0.09], ['c', -0.57, 0.18, -1.65, 0.45, -1.71, 0.45], ['c', -0.03, 0.00, -0.03, -0.72, -0.03, -3.75], ['l', 0.00, -3.75], ['l', 0.36, -0.09], ['c', 0.21, -0.06, 0.66, -0.18, 1.05, -0.27], ['z']], w: 2.16, h: 8.04 },\n\t'scripts.snap': { d: [['M', 4.50, -3.39], ['c', 0.36, -0.03, 0.96, -0.03, 1.35, 0.00], ['c', 1.56, 0.15, 3.15, 0.90, 4.20, 2.01], ['c', 0.24, 0.27, 0.33, 0.42, 0.33, 0.60], ['c', 0.00, 0.27, 0.03, 0.24, -2.46, 2.22], ['c', -1.29, 1.02, -2.40, 1.86, -2.49, 1.92], ['c', -0.18, 0.09, -0.30, 0.09, -0.48, 0.00], ['c', -0.09, -0.06, -1.20, -0.90, -2.49, -1.92], ['c', -2.49, -1.98, -2.46, -1.95, -2.46, -2.22], ['c', 0.00, -0.18, 0.09, -0.33, 0.33, -0.60], ['c', 1.05, -1.08, 2.64, -1.86, 4.17, -2.01], ['z'], ['m', 1.29, 1.17], ['c', -1.47, -0.15, -2.97, 0.30, -4.14, 1.20], ['l', -0.18, 0.15], ['l', 0.06, 0.09], ['c', 0.15, 0.12, 3.63, 2.85, 3.66, 2.85], ['c', 0.03, 0.00, 3.51, -2.73, 3.66, -2.85], ['l', 0.06, -0.09], ['l', -0.18, -0.15], ['c', -0.84, -0.66, -1.89, -1.08, -2.94, -1.20], ['z']], w: 10.38, h: 6.84 }\n};\n\n// Custom characters that weren't generated from the font:\nglyphs['noteheads.slash.whole'] = { d: [['M', 5, -5], ['l', 1, 1], ['l', -5, 5], ['l', -1, -1], ['z'], ['m', 4, 6], ['l', -5, -5], ['l', 2, -2], ['l', 5, 5], ['z'], ['m', 0, -2], ['l', 1, 1], ['l', -5, 5], ['l', -1, -1], ['z'], ['m', -4, 6], ['l', -5, -5], ['l', 2, -2], ['l', 5, 5], ['z']], w: 10.81, h: 15.63 };\n\nglyphs['noteheads.slash.quarter'] = { d: [['M', 9, -6], ['l', 0, 4], ['l', -9, 9], ['l', 0, -4], ['z']], w: 9, h: 9 };\n\nglyphs['noteheads.harmonic.quarter'] = { d: [['M', 3.63, -4.02], ['c', 0.09, -0.06, 0.18, -0.09, 0.24, -0.03], ['c', 0.03, 0.03, 0.87, 0.93, 1.83, 2.01], ['c', 1.50, 1.65, 1.80, 1.98, 1.80, 2.04], ['c', 0.00, 0.06, -0.30, 0.39, -1.80, 2.04], ['c', -0.96, 1.08, -1.80, 1.98, -1.83, 2.01], ['c', -0.06, 0.06, -0.15, 0.03, -0.24, -0.03], ['c', -0.12, -0.09, -3.54, -3.84, -3.60, -3.93], ['c', -0.03, -0.03, -0.03, -0.09, -0.03, -0.15], ['c', 0.03, -0.06, 3.45, -3.84, 3.63, -3.96], ['z']], w: 7.5, h: 8.165 };\n\nglyphs['noteheads.triangle.quarter'] = { d: [['M', 0, 4], ['l', 9, 0], ['l', -4.5, -9], ['z']], w: 9, h: 9 };\n\nvar pathClone = function (pathArray) {\n\tvar res = [];\n\tfor (var i = 0, ii = pathArray.length; i < ii; i++) {\n\t\tres[i] = [];\n\t\tfor (var j = 0, jj = pathArray[i].length; j < jj; j++) {\n\t\t\tres[i][j] = pathArray[i][j];\n\t\t}\n\t}\n\treturn res;\n};\n\nvar pathScale = function (pathArray, kx, ky) {\n\tfor (var i = 0, ii = pathArray.length; i < ii; i++) {\n\t\tvar p = pathArray[i];\n\t\tvar j, jj;\n\t\tfor (j = 1, jj = p.length; j < jj; j++) {\n\t\t\tp[j] *= (j % 2) ? kx : ky;\n\t\t}\n\t}\n};\n\nvar Glyphs = {\n\tprintSymbol: function (x, y, symb, paper, attrs) {\n\t\tif (!glyphs[symb]) return null;\n\t\tvar pathArray = pathClone(glyphs[symb].d);\n\t\tpathArray[0][1] += x;\n\t\tpathArray[0][2] += y;\n\t\tvar path = \"\";\n\t\tfor (var i = 0; i < pathArray.length; i++)\n\t\t\tpath += pathArray[i].join(\" \");\n\t\tattrs.path = path;\n\t\treturn paper.path(attrs);\n\t},\n\n\tgetPathForSymbol: function (x, y, symb, scalex, scaley) {\n\t\tscalex = scalex || 1;\n\t\tscaley = scaley || 1;\n\t\tif (!glyphs[symb]) return null;\n\t\tvar pathArray = pathClone(glyphs[symb].d);\n\t\tif (scalex !== 1 || scaley !== 1) pathScale(pathArray, scalex, scaley);\n\t\tpathArray[0][1] += x;\n\t\tpathArray[0][2] += y;\n\n\t\treturn pathArray;\n\t},\n\n\tgetSymbolWidth: function (symbol) {\n\t\tif (glyphs[symbol]) return glyphs[symbol].w;\n\t\treturn 0;\n\t},\n\n\tsymbolHeightInPitches: function (symbol) {\n\t\tvar height = glyphs[symbol] ? glyphs[symbol].h : 0;\n\t\treturn height / spacing.STEP;\n\t},\n\n\tgetSymbolAlign: function (symbol) {\n\t\tif (symbol.substring(0, 7) === \"scripts\" &&\n\t\t\tsymbol !== \"scripts.roll\") {\n\t\t\treturn \"center\";\n\t\t}\n\t\treturn \"left\";\n\t},\n\n\tgetYCorr: function (symbol) {\n\t\tswitch (symbol) {\n\t\t\tcase \"0\":\n\t\t\tcase \"1\":\n\t\t\tcase \"2\":\n\t\t\tcase \"3\":\n\t\t\tcase \"4\":\n\t\t\tcase \"5\":\n\t\t\tcase \"6\":\n\t\t\tcase \"7\":\n\t\t\tcase \"8\":\n\t\t\tcase \"9\":\n\t\t\tcase \"+\": return -2;\n\t\t\tcase \"timesig.common\":\n\t\t\tcase \"timesig.cut\": return 0;\n\t\t\tcase \"flags.d32nd\": return -1;\n\t\t\tcase \"flags.d64th\": return -2;\n\t\t\tcase \"flags.u32nd\": return 1;\n\t\t\tcase \"flags.u64th\": return 3;\n\t\t\tcase \"rests.whole\": return 1;\n\t\t\tcase \"rests.half\": return -1;\n\t\t\tcase \"rests.8th\": return -1;\n\t\t\tcase \"rests.quarter\": return -1;\n\t\t\tcase \"rests.16th\": return -1;\n\t\t\tcase \"rests.32nd\": return -1;\n\t\t\tcase \"rests.64th\": return -1;\n\t\t\tcase \"f\":\n\t\t\tcase \"m\":\n\t\t\tcase \"p\":\n\t\t\tcase \"s\":\n\t\t\tcase \"z\":\n\t\t\t\treturn -4;\n\t\t\tcase \"scripts.trill\":\n\t\t\tcase \"scripts.upbow\":\n\t\t\tcase \"scripts.downbow\":\n\t\t\t\treturn -2;\n\t\t\tcase \"scripts.ufermata\":\n\t\t\tcase \"scripts.wedge\":\n\t\t\tcase \"scripts.roll\":\n\t\t\tcase \"scripts.shortphrase\":\n\t\t\tcase \"scripts.longphrase\":\n\t\t\t\treturn -1;\n\t\t\tcase \"scripts.dfermata\":\n\t\t\t\treturn 1;\n\t\t\tdefault: return 0;\n\t\t}\n\t},\n\tsetSymbol: function (name, path) {\n\t\tglyphs[name] = path;\n\t}\n};\n\nmodule.exports = Glyphs; // we need the glyphs for layout information\n","function germanNote(note) {\n\tswitch (note) {\n\t\tcase \"B#\": return \"H#\";\n\t\tcase \"B♯\": return \"H♯\";\n\t\tcase \"B\": return \"H\";\n\t\tcase \"Bb\": return \"B\";\n\t\tcase \"B♭\": return \"B\";\n\t}\n\treturn note;\n}\n\nfunction translateChord(chordString, jazzchords, germanAlphabet) {\n\tvar lines = chordString.split(\"\\n\");\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tlet chord = lines[i];\n\t\t// If the chord isn't in a recognizable format then just skip it.\n\t\tlet reg = chord.match(/^([ABCDEFG][♯♭]?)?([^\\/]+)?(\\/([ABCDEFG][#b♯♭]?))?/);\n\t\tif (!reg) {\n\t\t\tcontinue;\n\t\t}\n\t\tlet baseChord = reg[1] || \"\";\n\t\tlet modifier = reg[2] || \"\";\n\t\tlet bassNote = reg[4] || \"\";\n\t\tif (germanAlphabet) {\n\t\t\tbaseChord = germanNote(baseChord);\n\t\t\tbassNote = germanNote(bassNote);\n\t\t}\n\t\t// This puts markers in the pieces of the chord that are read by the svg creator.\n\t\t// After the main part of the chord (the letter, a sharp or flat, and \"m\") a marker is added. Before a slash a marker is added.\n\t\tconst marker = jazzchords ? \"\\x03\" : \"\";\n\t\tconst bass = bassNote ? \"/\" + bassNote : \"\";\n\t\tlines[i] = [baseChord, modifier, bass].join(marker);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nmodule.exports = translateChord;\n","var drawTempo = require('./tempo');\nvar drawRelativeElement = require('./relative');\nvar spacing = require('../helpers/spacing');\nvar setClass = require('../helpers/set-class');\nvar elementGroup = require('./group-elements');\n\nfunction drawAbsolute(renderer, params, bartop, selectables, staffPos) {\n\tif (params.invisible) return;\n\tvar isTempo = params.children.length > 0 && params.children[0].type === \"TempoElement\";\n\tparams.elemset = [];\n\telementGroup.beginGroup(renderer.paper, renderer.controller);\n\tfor (var i = 0; i < params.children.length; i++) {\n\t\tvar child = params.children[i];\n\t\tswitch (child.type) {\n\t\t\tcase \"TempoElement\":\n\t\t\t\tdrawTempo(renderer, child);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tvar el = drawRelativeElement(renderer, child, bartop);\n\t\t\t\tif (child.type === \"symbol\" && child.c && child.c.indexOf('notehead') >= 0) {\n\t\t\t\t\tel.setAttribute('class', 'abcjs-notehead')\n\t\t\t\t}\n\t\t}\n\t}\n\tvar klass = params.type;\n\tif (params.type === 'note' || params.type === 'rest') {\n\t\tparams.counters = renderer.controller.classes.getCurrent();\n\t\tklass += ' d' + Math.round(params.durationClass * 1000) / 1000;\n\t\tklass = klass.replace(/\\./g, '-');\n\t\tif (params.abcelem.pitches) {\n\t\t\tfor (var j = 0; j < params.abcelem.pitches.length; j++) {\n\t\t\t\tklass += ' p' + params.abcelem.pitches[j].pitch;\n\t\t\t}\n\t\t}\n\t}\n\tvar g = elementGroup.endGroup(klass, params.type);\n\tif (g) {\n\t\t// TODO-PER-HACK! This corrects the classes because the tablature is not being created at the right time.\n\t\tif (params.cloned) {\n\t\t\tparams.cloned.overrideClasses = g.className.baseVal\n\t\t}\n\t\tif (params.overrideClasses) {\n\t\t\tvar type = g.classList && g.classList.length > 0 ? g.classList[0] + ' ' : ''\n\t\t\tg.setAttribute(\"class\", type + params.overrideClasses)\n\t\t}\n\t\tif (isTempo) {\n\t\t\tparams.startChar = params.abcelem.startChar;\n\t\t\tparams.endChar = params.abcelem.endChar;\n\t\t\tselectables.add(params, g, false, staffPos);\n\t\t} else {\n\t\t\tparams.elemset.push(g);\n\t\t\tvar isSelectable = false;\n\t\t\tif (params.type === 'note' || params.type === 'tabNumber') {\n\t\t\t\tisSelectable = true;\n\t\t\t}\n\t\t\tselectables.add(params, g, isSelectable, staffPos);\n\t\t}\n\t} else if (params.elemset.length > 0)\n\t\tselectables.add(params, params.elemset[0], params.type === 'note', staffPos);\n\t// If there was no output, then don't add to the selectables. This happens when using the \"y\" spacer, for instance.\n\n\tif (params.klass)\n\t\tsetClass(params.elemset, \"mark\", \"\", \"#00ff00\");\n\tif (params.hint)\n\t\tsetClass(params.elemset, \"abcjs-hint\", \"\", null);\n\tparams.abcelem.abselem = params;\n\n\tif (params.heads && params.heads.length > 0) {\n\t\tparams.notePositions = [];\n\t\tfor (var jj = 0; jj < params.heads.length; jj++) {\n\t\t\tparams.notePositions.push({\n\t\t\t\tx: params.heads[jj].x + params.heads[jj].w / 2,\n\t\t\t\ty: staffPos.zero - params.heads[jj].pitch * spacing.STEP\n\t\t\t});\n\t\t}\n\t}\n}\n\nmodule.exports = drawAbsolute;\n","var printPath = require('./print-path');\nvar roundNumber = require(\"./round-number\");\n\nfunction drawBeam(renderer, params) {\n\tif (params.beams.length === 0) return;\n\n\tvar pathString = \"\";\n\tfor (var i = 0; i < params.beams.length; i++) {\n\t\tvar beam = params.beams[i];\n\t\tif (beam.split) {\n\t\t\tvar slope = getSlope(renderer, beam.startX, beam.startY, beam.endX, beam.endY);\n\t\t\tvar xes = [];\n\t\t\tfor (var j = 0; j < beam.split.length; j += 2) {\n\t\t\t\txes.push([beam.split[j], beam.split[j + 1]]);\n\t\t\t}\n\t\t\tfor (j = 0; j < xes.length; j++) {\n\t\t\t\tvar y1 = getY(beam.startX, beam.startY, slope, xes[j][0]);\n\t\t\t\tvar y2 = getY(beam.startX, beam.startY, slope, xes[j][1]);\n\t\t\t\tpathString += draw(renderer, xes[j][0], y1, xes[j][1], y2, beam.dy);\n\t\t\t}\n\t\t} else\n\t\t\tpathString += draw(renderer, beam.startX, beam.startY, beam.endX, beam.endY, beam.dy);\n\t}\n\tvar durationClass = (\"abcjs-d\" + params.duration).replace(/\\./g, \"-\");\n\tvar klasses = renderer.controller.classes.generate('beam-elem ' + durationClass);\n\tvar el = printPath(renderer, {\n\t\tpath: pathString,\n\t\tstroke: \"none\",\n\t\tfill: renderer.foregroundColor,\n\t\t'class': klasses\n\t});\n\treturn [el];\n}\n\nfunction draw(renderer, startX, startY, endX, endY, dy) {\n\t// the X coordinates are actual coordinates, but the Y coordinates are in pitches.\n\tstartY = roundNumber(renderer.calcY(startY));\n\tendY = roundNumber(renderer.calcY(endY));\n\tstartX = roundNumber(startX);\n\tendX = roundNumber(endX);\n\tvar startY2 = roundNumber(startY + dy);\n\tvar endY2 = roundNumber(endY + dy);\n\treturn \"M\" + startX + \" \" + startY + \" L\" + endX + \" \" + endY +\n\t\t\"L\" + endX + \" \" + endY2 + \" L\" + startX + \" \" + startY2 + \"z\";\n}\n\nfunction getSlope(renderer, startX, startY, endX, endY) {\n\treturn (endY - startY) / (endX - startX);\n}\n\nfunction getY(startX, startY, slope, currentX) {\n\tvar x = currentX - startX;\n\treturn startY + x * slope;\n}\n\nmodule.exports = drawBeam;\n","var sprintf = require('./sprintf');\nvar spacing = require('../helpers/spacing');\nvar renderText = require('./text');\n\nfunction drawBrace(renderer, params, selectables) {\n\t// The absoluteY number is the spot where the note on the first ledger line is drawn (i.e. middle C if treble clef)\n\t// The STEP offset here moves it to the top and bottom lines\n\tvar startY = params.startVoice.staff.absoluteY - spacing.STEP * 10;\n\tif (params.endVoice && params.endVoice.staff)\n\t\tparams.endY = params.endVoice.staff.absoluteY - spacing.STEP * 2;\n\telse if (params.lastContinuedVoice && params.lastContinuedVoice.staff)\n\t\tparams.endY = params.lastContinuedVoice.staff.absoluteY - spacing.STEP * 2;\n\telse\n\t\tparams.endY = params.startVoice.staff.absoluteY - spacing.STEP * 2;\n\treturn draw(renderer, params.x, startY, params.endY, params.type, params.header, selectables);\n}\n\nfunction straightPath(renderer, xLeft, yTop, yBottom, type) {\n\txLeft += spacing.STEP;\n\tvar xLineWidth = spacing.STEP * 0.75;\n\tvar yOverlap = spacing.STEP * 0.75;\n\tvar height = yBottom - yTop;\n\t// Straight line\n\tvar pathString = sprintf(\"M %f %f l %f %f l %f %f l %f %f z\",\n\t\txLeft, yTop - yOverlap, // top left line\n\t\t0, height + yOverlap * 2, // bottom left line\n\t\txLineWidth, 0, // bottom right line\n\t\t0, - (height + yOverlap * 2) // top right line\n\t);\n\t// Top arm\n\tvar wCurve = spacing.STEP * 2;\n\tvar hCurve = spacing.STEP;\n\tpathString += sprintf(\"M %f %f q %f %f %f %f q %f %f %f %f z\",\n\t\txLeft + xLineWidth, yTop - yOverlap, // top left arm\n\t\twCurve * 0.6, hCurve * 0.2,\n\t\twCurve, -hCurve, // right point\n\t\t-wCurve * 0.1, hCurve * 0.3,\n\t\t-wCurve, hCurve + spacing.STEP // left bottom\n\t);\n\t// Bottom arm\n\tpathString += sprintf(\"M %f %f q %f %f %f %f q %f %f %f %f z\",\n\t\txLeft + xLineWidth, yTop + yOverlap + height, // bottom left arm\n\t\twCurve * 0.6, -hCurve * 0.2,\n\t\twCurve, hCurve, // right point\n\t\t-wCurve * 0.1, -hCurve * 0.3,\n\t\t-wCurve, -hCurve - spacing.STEP // left bottom\n\t);\n\treturn renderer.paper.path({ path: pathString, stroke: renderer.foregroundColor, fill: renderer.foregroundColor, 'class': renderer.controller.classes.generate(type), \"data-name\": type });\n}\n\nfunction curvyPath(renderer, xLeft, yTop, yBottom, type) {\n\tvar yHeight = yBottom - yTop;\n\n\tvar pathString = curve(xLeft,\n\t\tyTop,\n\t\t[7.5, -8, 21, 0, 18.5, -10.5, 7.5],\n\t\t[0, yHeight / 5.5, yHeight / 3.14, yHeight / 2, yHeight / 2.93, yHeight / 4.88, 0]);\n\n\tpathString += curve(xLeft,\n\t\tyTop,\n\t\t[0, 17.5, -7.5, 6.6, -5, 20, 0],\n\t\t[yHeight / 2, yHeight / 1.46, yHeight / 1.22, yHeight, yHeight / 1.19, yHeight / 1.42, yHeight / 2]);\n\n\treturn renderer.paper.path({ path: pathString, stroke: renderer.foregroundColor, fill: renderer.foregroundColor, 'class': renderer.controller.classes.generate(type), \"data-name\": type });\n}\n\nfunction curve(xLeft, yTop, xCurve, yCurve) {\n\treturn sprintf(\"M %f %f C %f %f %f %f %f %f C %f %f %f %f %f %f z\",\n\t\txLeft + xCurve[0], yTop + yCurve[0],\n\t\txLeft + xCurve[1], yTop + yCurve[1],\n\t\txLeft + xCurve[2], yTop + yCurve[2],\n\t\txLeft + xCurve[3], yTop + yCurve[3],\n\t\txLeft + xCurve[4], yTop + yCurve[4],\n\t\txLeft + xCurve[5], yTop + yCurve[5],\n\t\txLeft + xCurve[6], yTop + yCurve[6]);\n}\n\nvar draw = function (renderer, xLeft, yTop, yBottom, type, header, selectables) {//Tony\n\tvar ret;\n\tif (header) {\n\t\trenderer.paper.openGroup({ klass: renderer.controller.classes.generate(\"staff-extra voice-name\"), \"data-name\": type });\n\t\tvar position = yTop + (yBottom - yTop) / 2;\n\t\tposition = position - renderer.controller.getTextSize.baselineToCenter(header, \"voicefont\", 'staff-extra voice-name', 0, 1);\n\n\t\trenderText(renderer, {\n\t\t\tx: renderer.padding.left,\n\t\t\ty: position,\n\t\t\ttext: header,\n\t\t\ttype: 'voicefont',\n\t\t\tklass: 'staff-extra voice-name',\n\t\t\tanchor: 'start',\n\t\t\tcenterVertically: true\n\t\t});\n\t}\n\tif (type === \"brace\")\n\t\tret = curvyPath(renderer, xLeft, yTop, yBottom, type);\n\telse if (type === \"bracket\")\n\t\tret = straightPath(renderer, xLeft, yTop, yBottom, type);\n\tif (header) {\n\t\tret = renderer.paper.closeGroup();\n\t}\n\tselectables.wrapSvgEl({ el_type: type, startChar: -1, endChar: -1 }, ret);\n\n\treturn ret;\n};\nmodule.exports = drawBrace;\n","var sprintf = require('./sprintf');\nvar printPath = require('./print-path');\nvar roundNumber = require(\"./round-number\");\n\nfunction drawCrescendo(renderer, params, selectables) {\n\tif (params.pitch === undefined)\n\t\twindow.console.error(\"Crescendo Element y-coordinate not set.\");\n\tvar y = renderer.calcY(params.pitch) + 4; // This is the top pixel to use (it is offset a little so that it looks good with the volume marks.)\n\tvar height = 8;\n\n\t// TODO-PER: This is just a quick hack to make the dynamic marks not crash if they are mismatched. See the slur treatment for the way to get the beginning and end.\n\tvar left = params.anchor1 ? params.anchor1.x : 0;\n\tvar right = params.anchor2 ? params.anchor2.x : 800;\n\n\tvar el;\n\tif (params.dir === \"<\") {\n\t\tel = drawLine(renderer, y + height / 2, y, y + height / 2, y + height, left, right);\n\t} else {\n\t\tel = drawLine(renderer, y, y + height / 2, y + height, y + height / 2, left, right);\n\t}\n\tselectables.wrapSvgEl({ el_type: \"dynamicDecoration\", startChar: -1, endChar: -1 }, el);\n\treturn [el];\n}\n\nvar drawLine = function (renderer, y1, y2, y3, y4, left, right) {\n\ty1 = roundNumber(y1);\n\ty2 = roundNumber(y2);\n\ty3 = roundNumber(y3);\n\ty4 = roundNumber(y4);\n\tleft = roundNumber(left);\n\tright = roundNumber(right);\n\n\tvar pathString = sprintf(\"M %f %f L %f %f M %f %f L %f %f\",\n\t\tleft, y1, right, y2, left, y3, right, y4);\n\treturn printPath(renderer, { path: pathString, highlight: \"stroke\", stroke: renderer.foregroundColor, 'class': renderer.controller.classes.generate('dynamics decoration'), \"data-name\": \"dynamics\" });\n};\n\nmodule.exports = drawCrescendo;\n","function printDebugBox(renderer, attr, comment) {\n\tvar box = renderer.paper.rectBeneath(attr);\n\tif (comment)\n\t\trenderer.paper.text(comment, { x: 0, y: attr.y + 7, \"text-anchor\": \"start\", \"font-size\": \"14px\", fill: \"rgba(0,0,255,.4)\", stroke: \"rgba(0,0,255,.4)\" });\n\treturn box;\n}\n\nmodule.exports = printDebugBox;\n","var drawStaffGroup = require('./staff-group');\nvar setPaperSize = require('./set-paper-size');\nvar nonMusic = require('./non-music');\nvar spacing = require('../helpers/spacing');\nvar Selectables = require('./selectables');\n\nfunction draw(renderer, classes, abcTune, width, maxWidth, responsive, scale, selectTypes, tuneNumber, lineOffset) {\n\tvar selectables = new Selectables(renderer.paper, selectTypes, tuneNumber);\n\tvar groupClasses = {}\n\tif (classes.shouldAddClasses)\n\t\tgroupClasses.klass = \"abcjs-meta-top\"\n\trenderer.paper.openGroup(groupClasses)\n\trenderer.moveY(renderer.padding.top);\n\tnonMusic(renderer, abcTune.topText, selectables);\n\trenderer.paper.closeGroup()\n\trenderer.moveY(renderer.spacing.music);\n\tvar staffgroups = [];\n\tfor (var line = 0; line < abcTune.lines.length; line++) {\n\t\tclasses.incrLine();\n\t\tvar abcLine = abcTune.lines[line];\n\t\tif (abcLine.staff) {\n\t\t\tif (classes.shouldAddClasses)\n\t\t\t\tgroupClasses.klass = \"abcjs-staff-wrapper abcjs-l\" + classes.lineNumber\n\t\t\trenderer.paper.openGroup(groupClasses)\n\t\t\tif (abcLine.vskip) {\n\t\t\t\trenderer.moveY(abcLine.vskip);\n\t\t\t}\n\t\t\tif (staffgroups.length >= 1)\n\t\t\t\taddStaffPadding(renderer, renderer.spacing.staffSeparation, staffgroups[staffgroups.length - 1], abcLine.staffGroup);\n\t\t\tvar staffgroup = engraveStaffLine(renderer, abcLine.staffGroup, selectables, line);\n\t\t\tstaffgroup.line = lineOffset + line; // If there are non-music lines then the staffgroup array won't line up with the line array, so this keeps track.\n\t\t\tstaffgroups.push(staffgroup);\n\t\t\trenderer.paper.closeGroup()\n\t\t} else if (abcLine.nonMusic) {\n\t\t\tif (classes.shouldAddClasses)\n\t\t\t\tgroupClasses.klass = \"abcjs-non-music\"\n\t\t\trenderer.paper.openGroup(groupClasses)\n\t\t\tnonMusic(renderer, abcLine.nonMusic, selectables);\n\t\t\trenderer.paper.closeGroup()\n\t\t}\n\t}\n\n\tclasses.reset();\n\tif (abcTune.bottomText && abcTune.bottomText.rows && abcTune.bottomText.rows.length > 0) {\n\t\tif (classes.shouldAddClasses)\n\t\t\tgroupClasses.klass = \"abcjs-meta-bottom\"\n\t\trenderer.paper.openGroup(groupClasses)\n\t\trenderer.moveY(24); // TODO-PER: Empirically discovered. What variable should this be?\n\t\tnonMusic(renderer, abcTune.bottomText, selectables);\n\t\trenderer.paper.closeGroup()\n\t}\n\tsetPaperSize(renderer, maxWidth, scale, responsive);\n\treturn { staffgroups: staffgroups, selectables: selectables.getElements() };\n}\n\nfunction engraveStaffLine(renderer, staffGroup, selectables, lineNumber) {\n\tdrawStaffGroup(renderer, staffGroup, selectables, lineNumber);\n\tvar height = staffGroup.height * spacing.STEP;\n\trenderer.y += height;\n\treturn staffGroup;\n}\n\nfunction addStaffPadding(renderer, staffSeparation, lastStaffGroup, thisStaffGroup) {\n\tvar lastStaff = lastStaffGroup.staffs[lastStaffGroup.staffs.length - 1];\n\tvar lastBottomLine = -(lastStaff.bottom - 2); // The 2 is because the scale goes to 2 below the last line.\n\tvar nextTopLine = thisStaffGroup.staffs[0].top - 10; // Because 10 represents the top line.\n\tvar naturalSeparation = nextTopLine + lastBottomLine; // This is how far apart they'd be without extra spacing\n\tvar separationInPixels = naturalSeparation * spacing.STEP;\n\tif (separationInPixels < staffSeparation)\n\t\trenderer.moveY(staffSeparation - separationInPixels);\n}\n\nmodule.exports = draw;\n","var printSymbol = require('./print-symbol');\n\nfunction drawDynamics(renderer, params, selectables) {\n\tif (params.pitch === undefined)\n\t\twindow.console.error(\"Dynamic Element y-coordinate not set.\");\n\tvar scalex = 1;\n\tvar scaley = 1;\n\tvar el = printSymbol(renderer, params.anchor.x, params.pitch, params.dec, {\n\t\tscalex: scalex,\n\t\tscaley: scaley,\n\t\tklass: renderer.controller.classes.generate('decoration dynamics'),\n\t\tfill: renderer.foregroundColor,\n\t\tstroke: \"none\",\n\t\tname: \"dynamics\"\n\t});\n\tselectables.wrapSvgEl({ el_type: \"dynamicDecoration\", startChar: -1, endChar: -1, decoration: params.dec }, el);\n\treturn [el];\n}\n\nmodule.exports = drawDynamics;\n","var sprintf = require('./sprintf');\nvar renderText = require('./text');\nvar printPath = require('./print-path');\nvar roundNumber = require(\"./round-number\");\n\nfunction drawEnding(renderer, params, linestartx, lineendx, selectables) {\n\tif (params.pitch === undefined)\n\t\twindow.console.error(\"Ending Element y-coordinate not set.\");\n\tvar y = roundNumber(renderer.calcY(params.pitch));\n\tvar height = 20;\n\tvar pathString = '';\n\n\tif (params.anchor1) {\n\t\tlinestartx = roundNumber(params.anchor1.x + params.anchor1.w);\n\t\tpathString += sprintf(\"M %f %f L %f %f \",\n\t\t\tlinestartx, y, linestartx, roundNumber(y + height));\n\t}\n\n\tif (params.anchor2) {\n\t\tlineendx = roundNumber(params.anchor2.x);\n\t\tpathString += sprintf(\"M %f %f L %f %f \",\n\t\t\tlineendx, y, lineendx, roundNumber(y + height));\n\t}\n\n\tpathString += sprintf(\"M %f %f L %f %f \",\n\t\tlinestartx, y, lineendx, y);\n\n\trenderer.paper.openGroup({ klass: renderer.controller.classes.generate(\"ending\"), \"data-name\": \"ending\" });\n\tprintPath(renderer, { path: pathString, stroke: renderer.foregroundColor, fill: renderer.foregroundColor, \"data-name\": \"line\" });\n\tif (params.anchor1)\n\t\trenderText(renderer, {\n\t\t\tx: roundNumber(linestartx + 5),\n\t\t\ty: roundNumber(renderer.calcY(params.pitch - 0.5)),\n\t\t\ttext: params.text,\n\t\t\ttype: 'repeatfont',\n\t\t\tklass: 'ending',\n\t\t\tanchor: \"start\",\n\t\t\tnoClass: true,\n\t\t\tname: params.text\n\t\t});\n\tvar g = renderer.paper.closeGroup();\n\tselectables.wrapSvgEl({ el_type: \"ending\", startChar: -1, endChar: -1 }, g);\n\treturn [g];\n}\n\nmodule.exports = drawEnding;\n","var sprintf = require('./sprintf');\nvar printPath = require('./print-path');\nvar roundNumber = require(\"./round-number\");\n\nfunction drawGlissando(renderer, params, selectables) {\n\tif (!params.anchor1 || !params.anchor2 || !params.anchor1.heads || !params.anchor2.heads || params.anchor1.heads.length === 0 || params.anchor2.heads.length === 0)\n\t\twindow.console.error(\"Glissando Element not set.\");\n\n\tvar margin = 4;\n\tvar leftY = renderer.calcY(params.anchor1.heads[0].pitch)\n\tvar rightY = renderer.calcY(params.anchor2.heads[0].pitch)\n\tvar leftX = params.anchor1.x + params.anchor1.w / 2\n\tvar rightX = params.anchor2.x + params.anchor2.w / 2\n\t\n\tvar len = lineLength(leftX, leftY, rightX, rightY)\n\tvar marginLeft = params.anchor1.w / 2 + margin\n\tvar marginRight = params.anchor2.w / 2 + margin\n\tvar s = slope(leftX, leftY, rightX, rightY)\n\tvar leftYAdj = getY(leftY, s, marginLeft)\n\tvar rightYAdj = getY(rightY, s, -marginRight)\n\tvar num = numSquigglies(len - marginLeft - marginRight)\n\n\tvar el = drawSquiggly(renderer, leftX + marginLeft, leftYAdj, num, s)\n\tselectables.wrapSvgEl({ el_type: \"glissando\", startChar: -1, endChar: -1 }, el);\n\treturn [el];\n}\n\nfunction lineLength(leftX, leftY, rightX, rightY) {\n\t// The length from notehead center to notehead center.\n\tvar w = rightX - leftX\n\tvar h = rightY - leftY\n\treturn Math.sqrt(w * w + h * h)\n}\n\nfunction slope(leftX, leftY, rightX, rightY) {\n\treturn (rightY - leftY) / (rightX - leftX)\n}\n\nfunction getY(y, slope, xOfs) {\n\treturn roundNumber(y + (xOfs) * slope);\n}\n\nfunction numSquigglies(length) {\n\tvar endLen = 5; // The width of the end - that is, the non repeating part\n\treturn Math.max(2, Math.floor((length - endLen * 2) / 6));\n}\n\nvar leftStart = [[3.5, -4.8]]\nvar right = [[1.5, -1], [.3, -.3], [-3.5, 3.8]]\nvar leftEnd = [[-1.5, 2]]\nvar top = [[3, 4], [3, -4]]\nvar bottom = [[-3, 4], [-3, -4]]\n\nfunction segment(arr, slope) {\n\tvar ret = \"\";\n\tfor (var i = 0; i < arr.length; i++) {\n\t\tret += 'l' + arr[i][0] + ' ' + getY(arr[i][1], slope, arr[i][0])\n\t}\n\treturn ret\n}\n\nvar drawSquiggly = function (renderer, x, y, num, slope) {\n\tvar p = sprintf(\"M %f %f\", x, y);\n\tp += segment(leftStart, slope)\n\tvar i\n\tfor (i = 0; i < num; i++) {\n\t\tp += segment(top, slope)\n\t}\n\tp += segment(right, slope)\n\tfor (i = 0; i < num; i++)\n\t\tp += segment(bottom, slope)\n\tp += segment(leftEnd, slope) + 'z'\n\treturn printPath(renderer, { path: p, highlight: \"stroke\", stroke: renderer.foregroundColor, 'class': renderer.controller.classes.generate('decoration'), \"data-name\": \"glissando\" });\n}\n\nmodule.exports = drawGlissando;\n","/**\n * Begin a group of glyphs that will always be moved, scaled and highlighted together\n */\n\nvar roundNumber = require(\"./round-number\");\n\nfunction Group() {\n\tthis.ingroup = false;\n}\n\nGroup.prototype.beginGroup = function (paper, controller) {\n\tthis.paper = paper;\n\tthis.controller = controller;\n\tthis.path = [];\n\tthis.lastM = [0, 0];\n\tthis.ingroup = true;\n\tthis.paper.openGroup();\n};\n\nGroup.prototype.isInGroup = function () {\n\treturn this.ingroup;\n}\n\nGroup.prototype.addPath = function (path) {\n\tpath = path || [];\n\tif (path.length === 0) return;\n\tpath[0][0] = \"m\";\n\tpath[0][1] = roundNumber(path[0][1] - this.lastM[0]);\n\tpath[0][2] = roundNumber(path[0][2] - this.lastM[1]);\n\tthis.lastM[0] += path[0][1];\n\tthis.lastM[1] += path[0][2];\n\tthis.path.push(path[0]);\n\tfor (var i = 1, ii = path.length; i < ii; i++) {\n\t\tif (path[i][0] === \"m\") {\n\t\t\tthis.lastM[0] += path[i][1];\n\t\t\tthis.lastM[1] += path[i][2];\n\t\t}\n\t\tthis.path.push(path[i]);\n\t}\n};\n\n/**\n * End a group of glyphs that will always be moved, scaled and highlighted together\n */\nGroup.prototype.endGroup = function (klass, name) {\n\tthis.ingroup = false;\n\t//if (this.path.length === 0) return null;\n\tvar path = \"\";\n\tfor (var i = 0; i < this.path.length; i++)\n\t\tpath += this.path[i].join(\" \");\n\tthis.path = [];\n\n\tvar ret = this.paper.closeGroup();\n\tif (ret) {\n\t\tret.setAttribute(\"class\", this.controller.classes.generate(klass))\n\t\tret.setAttribute(\"fill\", this.controller.renderer.foregroundColor)\n\t\tret.setAttribute(\"stroke\", \"none\")\n\t\tret.setAttribute(\"data-name\", name)\n\t}\n\treturn ret;\n};\n\n// There is just a singleton of this object.\nvar elementGroup = new Group();\n\nmodule.exports = elementGroup;\n","var drawSeparator = require('./separator');\nvar renderText = require('./text');\n\nfunction nonMusic(renderer, obj, selectables) {\n\tfor (var i = 0; i < obj.rows.length; i++) {\n\t\tvar row = obj.rows[i];\n\t\tif (row.absmove) {\n\t\t\trenderer.absolutemoveY(row.absmove);\n\t\t} else if (row.move) {\n\t\t\trenderer.moveY(row.move);\n\t\t} else if (row.text || row.phrases) {\n\t\t\tvar x = row.left ? row.left : 0;\n\t\t\tvar el = renderText(renderer, {\n\t\t\t\tx: x,\n\t\t\t\ty: renderer.y,\n\t\t\t\ttext: row.text,\n\t\t\t\tphrases: row.phrases,\n\t\t\t\t'dominant-baseline': row['dominant-baseline'],\n\t\t\t\ttype: row.font,\n\t\t\t\tklass: row.klass,\n\t\t\t\tname: row.name,\n\t\t\t\tanchor: row.anchor\n\t\t\t});\n\t\t\tif (row.absElemType) {\n\t\t\t\tselectables.wrapSvgEl({\n\t\t\t\t\tel_type: row.absElemType,\n\t\t\t\t\tname: row.name,\n\t\t\t\t\tstartChar: row.startChar,\n\t\t\t\t\tendChar: row.endChar,\n\t\t\t\t\ttext: row.text\n\t\t\t\t}, el);\n\t\t\t}\n\t\t} else if (row.separator) {\n\t\t\tdrawSeparator(renderer, row.separator)\n\t\t} else if (row.startGroup) {\n\t\t\trenderer.paper.openGroup({ klass: row.klass, \"data-name\": row.name });\n\t\t} else if (row.endGroup) {\n\t\t\t// TODO-PER: also create a history element with the title \"row.endGroup\"\n\t\t\tvar g = renderer.paper.closeGroup();\n\t\t\tif (row.absElemType)\n\t\t\t\tselectables.wrapSvgEl({\n\t\t\t\t\tel_type: row.absElemType,\n\t\t\t\t\tname: row.name,\n\t\t\t\t\tstartChar: row.startChar,\n\t\t\t\t\tendChar: row.endChar,\n\t\t\t\t\ttext: \"\"\n\t\t\t\t}, g);\n\t\t}\n\t}\n}\n\nmodule.exports = nonMusic;\n","var sprintf = require('./sprintf');\nvar roundNumber = require(\"./round-number\");\n\nfunction printLine(renderer, x1, x2, y, klass, name, dy) {\n\tvar fill = renderer.foregroundColor;\n\tx1 = roundNumber(x1);\n\tx2 = roundNumber(x2);\n\tvar y1 = roundNumber(y - dy);\n\tvar y2 = roundNumber(y + dy);\n\t// TODO-PER: This fixes a firefox bug where it isn't displayed\n\tif (renderer.firefox112) {\n\t\ty += dy / 2; // Because the y coordinate is the edge of where the line goes but the width widens from the middle.\n\t\tvar attr = {\n\t\t\tx1: x1,\n\t\t\tx2: x2,\n\t\t\ty1: y,\n\t\t\ty2: y,\n\t\t\tstroke: renderer.foregroundColor,\n\t\t\t'stroke-width': Math.abs(dy*2)\n\t\t}\n\t\tif (klass)\n\t\t\tattr['class'] = klass;\n\t\tif (name)\n\t\t\tattr['data-name'] = name;\n\t\t\n\t\treturn renderer.paper.lineToBack(attr);\n\t}\n\n\tvar pathString = sprintf(\"M %f %f L %f %f L %f %f L %f %f z\", x1, y1, x2, y1,\n\t\tx2, y2, x1, y2);\n\tvar options = { path: pathString, stroke: \"none\", fill: fill };\n\tif (name)\n\t\toptions['data-name'] = name;\n\tif (klass)\n\t\toptions['class'] = klass;\n\tvar ret = renderer.paper.pathToBack(options);\n\n\treturn ret;\n}\n\nmodule.exports = printLine;\n\n","function printPath(renderer, attrs, params) {\n\tvar ret = renderer.paper.path(attrs);\n\n\treturn ret;\n}\n\nmodule.exports = printPath;\n","var elementGroup = require('./group-elements');\nvar roundNumber = require(\"./round-number\");\n\nfunction printStem(renderer, x, dx, y1, y2, klass, name) {\n\tif (dx < 0 || y1 < y2) { // correct path \"handedness\" for intersection with other elements\n\t\tvar tmp = roundNumber(y2);\n\t\ty2 = roundNumber(y1);\n\t\ty1 = tmp;\n\t} else {\n\t\ty1 = roundNumber(y1);\n\t\ty2 = roundNumber(y2);\n\t}\n\tx = roundNumber(x);\n\tvar x2 = roundNumber(x + dx);\n\t// TODO-PER: This fixes a firefox bug where it isn't displayed\n\tif (renderer.firefox112) {\n\t\tx += dx / 2; // Because the x coordinate is the edge of where the line goes but the width widens from the middle.\n\t\tvar attr = {\n\t\t\tx1: x,\n\t\t\tx2: x,\n\t\t\ty1: y1,\n\t\t\ty2: y2,\n\t\t\tstroke: renderer.foregroundColor,\n\t\t\t'stroke-width': Math.abs(dx)\n\t\t}\n\t\tif (klass)\n\t\t\tattr['class'] = klass;\n\t\tif (name)\n\t\t\tattr['data-name'] = name;\n\t\t\n\t\treturn renderer.paper.lineToBack(attr);\n\t}\n\tvar pathArray = [[\"M\", x, y1], [\"L\", x, y2], [\"L\", x2, y2], [\"L\", x2, y1], [\"z\"]];\n\tvar attr = { path: \"\" };\n\tfor (var i = 0; i < pathArray.length; i++)\n\t\tattr.path += pathArray[i].join(\" \");\n\tif (klass)\n\t\tattr['class'] = klass;\n\tif (name)\n\t\tattr['data-name'] = name;\n\tif (!elementGroup.isInGroup()) {\n\t\tattr.stroke = \"none\";\n\t\tattr.fill = renderer.foregroundColor;\n\t}\n\treturn renderer.paper.pathToBack(attr);\n}\n\nmodule.exports = printStem;\n","var renderText = require('./text');\nvar glyphs = require('../creation/glyphs');\nvar elementGroup = require('./group-elements');\n\n/**\n * assumes this.y is set appropriately\n * if symbol is a multichar string without a . (as in scripts.staccato) 1 symbol per char is assumed\n * not scaled if not in printgroup\n */\nfunction printSymbol(renderer, x, offset, symbol, options) {\n\t// TODO-PER: what happened to scalex, and scaley? That might have been a bug introduced in refactoring\n\tvar el;\n\tvar ycorr;\n\tif (!symbol) return null;\n\tif (symbol.length > 1 && symbol.indexOf(\".\") < 0) {\n\t\tvar groupClass = elementGroup.isInGroup() ? '' : options.klass // If this is already in a group then don't repeat the classes for the sub-group)\n\t\trenderer.paper.openGroup({ \"data-name\": options.name, klass: groupClass });\n\t\tvar dx = 0;\n\t\tfor (var i = 0; i < symbol.length; i++) {\n\t\t\tvar s = symbol[i];\n\t\t\tycorr = glyphs.getYCorr(s);\n\t\t\tel = glyphs.printSymbol(x + dx, renderer.calcY(offset + ycorr), s, renderer.paper, { stroke: options.stroke, fill: options.fill });\n\t\t\tif (el) {\n\t\t\t\tif (i < symbol.length - 1)\n\t\t\t\t\tdx += kernSymbols(s, symbol[i + 1], glyphs.getSymbolWidth(s));\n\t\t\t} else {\n\t\t\t\trenderText(renderer, { x: x, y: renderer.y, text: \"no symbol:\" + symbol, type: \"debugfont\", klass: 'debug-msg', anchor: 'start' }, false);\n\t\t\t}\n\t\t}\n\t\tvar g = renderer.paper.closeGroup();\n\t\treturn g;\n\t} else {\n\t\tycorr = glyphs.getYCorr(symbol);\n\t\tif (elementGroup.isInGroup()) {\n\t\t\tel = glyphs.printSymbol(x, renderer.calcY(offset + ycorr), symbol, renderer.paper, { \"data-name\": options.name });\n\t\t} else {\n\t\t\tel = glyphs.printSymbol(x, renderer.calcY(offset + ycorr), symbol, renderer.paper, { klass: options.klass, stroke: options.stroke, fill: options.fill, \"data-name\": options.name });\n\t\t}\n\t\tif (el) {\n\t\t\treturn el;\n\t\t}\n\t\trenderText(renderer, { x: x, y: renderer.y, text: \"no symbol:\" + symbol, type: \"debugfont\", klass: 'debug-msg', anchor: 'start' }, false);\n\t\treturn null;\n\t}\n}\n\nfunction kernSymbols(lastSymbol, thisSymbol, lastSymbolWidth) {\n\t// This is just some adjustments to make it look better.\n\tvar width = lastSymbolWidth;\n\tif (lastSymbol === 'f' && thisSymbol === 'f')\n\t\twidth = width * 2 / 3;\n\tif (lastSymbol === 'p' && thisSymbol === 'p')\n\t\twidth = width * 5 / 6;\n\tif (lastSymbol === 'f' && thisSymbol === 'z')\n\t\twidth = width * 5 / 8;\n\treturn width;\n}\n\nmodule.exports = printSymbol;\n","var renderText = require('./text');\nvar printStem = require('./print-stem');\nvar printStaffLine = require('./staff-line');\nvar printSymbol = require('./print-symbol');\n\nfunction drawRelativeElement(renderer, params, bartop) {\n\tif (params.pitch === undefined)\n\t\twindow.console.error(params.type + \" Relative Element y-coordinate not set.\");\n\tvar y = renderer.calcY(params.pitch);\n\tswitch (params.type) {\n\t\tcase \"symbol\":\n\t\t\tif (params.c === null) return null;\n\t\t\tvar klass = \"symbol\";\n\t\t\tif (params.klass) klass += \" \" + params.klass;\n\t\t\tparams.graphelem = printSymbol(renderer, params.x, params.pitch, params.c, {\n\t\t\t\tscalex: params.scalex,\n\t\t\t\tscaley: params.scaley,\n\t\t\t\tklass: renderer.controller.classes.generate(klass),\n\t\t\t\t//\t\t\t\tfill:\"none\",\n\t\t\t\t//\t\t\t\tstroke: renderer.foregroundColor,\n\t\t\t\tname: params.name\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"debug\":\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: renderer.calcY(15), text: \"\" + params.c, type: \"debugfont\", klass: renderer.controller.classes.generate('debug-msg'), anchor: 'start', centerVertically: false, dim: params.dim }, false);\n\t\t\tbreak;\n\t\tcase \"tabNumber\":\n\t\t\tvar hAnchor = \"middle\";\n\t\t\tvar tabFont = \"tabnumberfont\";\n\t\t\tvar tabClass = 'abcjs-tab-number';\n\t\t\tif (params.isGrace) {\n\t\t\t\ttabFont = \"tabgracefont\";\n\t\t\t\ty += 2.5;\n\t\t\t\ttabClass = 'tab-grace'\n\t\t\t}\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: y, text: \"\" + params.c, type: tabFont, klass: renderer.controller.classes.generate(tabClass), anchor: hAnchor, centerVertically: false, dim: params.dim, cursor: 'default' }, false);\n\t\t\tbreak;\n\t\tcase \"barNumber\":\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: y, text: \"\" + params.c, type: \"measurefont\", klass: renderer.controller.classes.generate('bar-number'), anchor: \"middle\", dim: params.dim, name: \"bar-number\" }, true);\n\t\t\tbreak;\n\t\tcase \"lyric\":\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: y, text: params.c, type: \"vocalfont\", klass: renderer.controller.classes.generate('lyric'), anchor: \"middle\", dim: params.dim, name: \"lyric\" }, false);\n\t\t\tbreak;\n\t\tcase \"chord\":\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: y, text: params.c, type: 'gchordfont', klass: renderer.controller.classes.generate(\"chord\"), anchor: \"middle\", dim: params.dim, lane: params.getLane(), name: \"chord\" }, false);\n\t\t\tbreak;\n\t\tcase \"decoration\":\n\t\t\t// The +6 is to compensate for the placement of text in svg: to be on the same row as symbols, the y-coord needs to compensate for the center line.\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: y + 6, text: params.c, type: 'annotationfont', klass: renderer.controller.classes.generate(\"annotation\"), anchor: params.anchor, centerVertically: true, dim: params.dim }, false);\n\t\t\tbreak;\n\t\tcase \"text\":\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: y, text: params.c, type: 'annotationfont', klass: renderer.controller.classes.generate(\"annotation\"), anchor: \"start\", centerVertically: params.centerVertically, dim: params.dim, lane: params.getLane(), name: \"annotation\" }, false);\n\t\t\tbreak;\n\t\tcase \"multimeasure-text\":\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x + params.w / 2, y: y, text: params.c, type: 'tempofont', klass: renderer.controller.classes.generate(\"rest\"), anchor: \"middle\", centerVertically: false, dim: params.dim }, false);\n\t\t\tbreak;\n\t\tcase \"part\":\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: y, text: params.c, type: 'partsfont', klass: renderer.controller.classes.generate(\"part\"), anchor: \"start\", dim: params.dim, name: params.c }, true);\n\t\t\tbreak;\n\t\tcase \"bar\":\n\t\t\tparams.graphelem = printStem(renderer, params.x, params.linewidth + renderer.lineThickness, y, (bartop) ? bartop : renderer.calcY(params.pitch2), null, \"bar\"); break; // bartop can't be 0\n\t\tcase \"stem\":\n\t\t\tvar stemWidth = params.linewidth > 0 ? params.linewidth + renderer.lineThickness : params.linewidth - renderer.lineThickness\n\t\t\tparams.graphelem = printStem(renderer, params.x, stemWidth, y, renderer.calcY(params.pitch2), 'abcjs-stem', 'stem'); break;\n\t\tcase \"ledger\":\n\t\t\tparams.graphelem = printStaffLine(renderer, params.x, params.x + params.w, params.pitch, \"abcjs-ledger\", \"ledger\", 0.35 + renderer.lineThickness); break;\n\t}\n\tif (params.scalex !== 1 && params.graphelem) {\n\t\tscaleExistingElem(renderer.paper, params.graphelem, params.scalex, params.scaley, params.x, y);\n\t}\n\treturn params.graphelem;\n}\n\nfunction scaleExistingElem(paper, elem, scaleX, scaleY, x, y) {\n\tpaper.setAttributeOnElement(elem, { style: \"transform:scale(\" + scaleX + \",\" + scaleY + \");transform-origin:\" + x + \"px \" + y + \"px;\" });\n}\n\nmodule.exports = drawRelativeElement;\n","function roundNumber(x) {\n\treturn parseFloat(x.toFixed(2));\n}\n\nmodule.exports = roundNumber;\n","var highlight = require('../interactive/highlight');\nvar unhighlight = require('../interactive/unhighlight');\n\nfunction Selectables(paper, selectTypes, tuneNumber) {\n\tthis.elements = [];\n\tthis.paper = paper;\n\tthis.tuneNumber = tuneNumber;\n\tthis.selectTypes = selectTypes;\n}\n\nSelectables.prototype.getElements = function () {\n\treturn this.elements;\n};\n\nSelectables.prototype.add = function (absEl, svgEl, isNoteOrTabNumber, staffPos) {\n\tif (!this.canSelect(absEl))\n\t\treturn;\n\tvar params;\n\tif (this.selectTypes === undefined)\n\t\tparams = { selectable: false, \"data-index\": this.elements.length }; // This is the old behavior.\n\telse\n\t\tparams = { selectable: true, tabindex: 0, \"data-index\": this.elements.length };\n\tthis.paper.setAttributeOnElement(svgEl, params);\n\tvar sel = { absEl: absEl, svgEl: svgEl, isDraggable: isNoteOrTabNumber };\n\tif (staffPos !== undefined)\n\t\tsel.staffPos = staffPos;\n\tthis.elements.push(sel);\n\n};\n\nSelectables.prototype.canSelect = function (absEl) {\n\tif (this.selectTypes === false)\n\t\treturn false;\n\tif (!absEl || !absEl.abcelem)\n\t\treturn false;\n\tif (this.selectTypes === true)\n\t\treturn true;\n\tif (this.selectTypes === undefined) {\n\t\t// by default, only notes and tab numbers can be clicked.\n\t\tif (absEl.abcelem.el_type === 'note' || absEl.abcelem.el_type === 'tabNumber') {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\treturn this.selectTypes.indexOf(absEl.abcelem.el_type) >= 0;\n};\n\nSelectables.prototype.wrapSvgEl = function (abcelem, el) {\n\tvar absEl = {\n\t\ttuneNumber: this.tuneNumber,\n\t\tabcelem: abcelem,\n\t\telemset: [el],\n\t\thighlight: highlight,\n\t\tunhighlight: unhighlight\n\t};\n\tthis.add(absEl, el, false);\n};\n\nmodule.exports = Selectables;\n","function drawSeparator(renderer, width) {\n\tvar fill = \"rgba(0,0,0,255)\";\n\tvar stroke = \"rgba(0,0,0,0)\";\n\tvar y = Math.round(renderer.y);\n\tvar staffWidth = renderer.controller.width;\n\tvar x1 = (staffWidth - width) / 2;\n\tvar x2 = x1 + width;\n\tvar pathString = 'M ' + x1 + ' ' + y +\n\t\t' L ' + x2 + ' ' + y +\n\t\t' L ' + x2 + ' ' + (y + 1) +\n\t\t' L ' + x1 + ' ' + (y + 1) +\n\t\t' L ' + x1 + ' ' + y + ' z';\n\trenderer.paper.pathToBack({ path: pathString, stroke: stroke, fill: fill, 'class': renderer.controller.classes.generate('defined-text') });\n}\n\nmodule.exports = drawSeparator;\n","function setPaperSize(renderer, maxwidth, scale, responsive) {\n\tvar w = (maxwidth + renderer.padding.left + renderer.padding.right) * scale;\n\tvar h = (renderer.y + renderer.padding.bottom) * scale;\n\tif (renderer.isPrint)\n\t\th = Math.max(h, 1056); // 11in x 72pt/in x 1.33px/pt\n\t// TODO-PER: We are letting the page get as long as it needs now, but eventually that should go to a second page.\n\n\t// for accessibility\n\tif (renderer.ariaLabel !== '') {\n\t\tvar text = \"Sheet Music\";\n\t\tif (renderer.abctune && renderer.abctune.metaText && renderer.abctune.metaText.title)\n\t\t\ttext += \" for \\\"\" + renderer.abctune.metaText.title + '\"';\n\t\trenderer.paper.setTitle(text);\n\t\tvar label = renderer.ariaLabel ? renderer.ariaLabel : text;\n\t\trenderer.paper.setAttribute(\"aria-label\", label);\n\t}\n\n\t// for dragging - don't select during drag\n\tvar styles = [\n\t\t\"-webkit-touch-callout: none;\",\n\t\t\"-webkit-user-select: none;\",\n\t\t\"-khtml-user-select: none;\",\n\t\t\"-moz-user-select: none;\",\n\t\t\"-ms-user-select: none;\",\n\t\t\"user-select: none;\"\n\t];\n\trenderer.paper.insertStyles(\".abcjs-dragging-in-progress text, .abcjs-dragging-in-progress tspan {\" + styles.join(\" \") + \"}\");\n\n\tvar parentStyles = { overflow: \"hidden\" };\n\tif (responsive === 'resize') {\n\t\trenderer.paper.setResponsiveWidth(w, h);\n\t} else {\n\t\tparentStyles.width = \"\";\n\t\tparentStyles.height = h + \"px\";\n\t\tif (scale < 1) {\n\t\t\tparentStyles.width = w + \"px\";\n\t\t\trenderer.paper.setSize(w / scale, h / scale);\n\t\t} else\n\t\t\trenderer.paper.setSize(w, h);\n\t}\n\trenderer.paper.setScale(scale);\n\trenderer.paper.setParentStyles(parentStyles);\n}\n\nmodule.exports = setPaperSize;\n","/**\n * sprintf() for JavaScript v.0.4\n *\n Copyright (c) 2007-present, Alexandru Mărășteanu \n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n * Neither the name of this software nor the names of its contributors may be\n used to endorse or promote products derived from this software without\n specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n//function str_repeat(i, m) { for (var o = []; m > 0; o[--m] = i); return(o.join('')); }\n\nvar sprintf = function () {\n\tvar i = 0, a, f = arguments[i++], o = [], m, p, c, x;\n\twhile (f) {\n\t\tif (m = /^[^\\x25]+/.exec(f)) o.push(m[0]);\n\t\telse if (m = /^\\x25{2}/.exec(f)) o.push('%');\n\t\telse if (m = /^\\x25(?:(\\d+)\\$)?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-fosuxX])/.exec(f)) {\n\t\t\tif (((a = arguments[m[1] || i++]) == null) || (a == undefined)) throw (\"Too few arguments.\");\n\t\t\tif (/[^s]/.test(m[7]) && (typeof (a) != 'number'))\n\t\t\t\tthrow (\"Expecting number but found \" + typeof (a));\n\t\t\tswitch (m[7]) {\n\t\t\t\tcase 'b': a = a.toString(2); break;\n\t\t\t\tcase 'c': a = String.fromCharCode(a); break;\n\t\t\t\tcase 'd': a = parseInt(a); break;\n\t\t\t\tcase 'e': a = m[6] ? a.toExponential(m[6]) : a.toExponential(); break;\n\t\t\t\tcase 'f': a = m[6] ? parseFloat(a).toFixed(m[6]) : parseFloat(a); break;\n\t\t\t\tcase 'o': a = a.toString(8); break;\n\t\t\t\tcase 's': a = ((a = String(a)) && m[6] ? a.substring(0, m[6]) : a); break;\n\t\t\t\tcase 'u': a = Math.abs(a); break;\n\t\t\t\tcase 'x': a = a.toString(16); break;\n\t\t\t\tcase 'X': a = a.toString(16).toUpperCase(); break;\n\t\t\t}\n\t\t\ta = (/[def]/.test(m[7]) && m[2] && a > 0 ? '+' + a : a);\n\t\t\tc = m[3] ? m[3] == '0' ? '0' : m[3][1] : ' ';\n\t\t\tx = m[5] - String(a).length;\n\t\t\tp = m[5] ? str_repeat(c, x) : '';\n\t\t\to.push(m[4] ? a + p : p + a);\n\t\t}\n\t\telse throw (\"Huh ?!\");\n\t\tf = f.substring(m[0].length);\n\t}\n\treturn o.join('');\n};\n\nmodule.exports = sprintf;\n","var spacing = require('../helpers/spacing');\nvar drawBrace = require('./brace');\nvar drawVoice = require('./voice');\nvar printStaff = require('./staff');\nvar printDebugBox = require('./debug-box');\nvar printStem = require('./print-stem');\nvar nonMusic = require('./non-music');\n\nfunction drawStaffGroup(renderer, params, selectables, lineNumber) {\n\t// We enter this method with renderer.y pointing to the topmost coordinate that we're allowed to draw.\n\t// All of the children that will be drawn have a relative \"pitch\" set, where zero is the first ledger line below the staff.\n\t// renderer.y will be offset at the beginning of each staff by the amount required to make the relative pitch work.\n\t// If there are multiple staves, then renderer.y will be incremented for each new staff.\n\n\tvar colorIndex;\n\n\t// An invisible marker is useful to be able to find where each system starts.\n\t//addInvisibleMarker(renderer, \"abcjs-top-of-system\");\n\n\tvar startY = renderer.y; // So that it can be restored after we're done.\n\t// Set the absolute Y position for each staff here, so the voice drawing below can just use if.\n\tfor (var j = 0; j < params.staffs.length; j++) {\n\t\tvar staff1 = params.staffs[j];\n\t\t//renderer.printHorizontalLine(50, renderer.y, \"start\");\n\t\trenderer.moveY(spacing.STEP, staff1.top);\n\t\tstaff1.absoluteY = renderer.y;\n\t\tif (renderer.showDebug) {\n\t\t\tif (renderer.showDebug.indexOf(\"box\") >= 0 && staff1.voices) {\n\t\t\t\tboxAllElements(renderer, params.voices, staff1.voices);\n\t\t\t}\n\t\t\tif (renderer.showDebug.indexOf(\"grid\") >= 0) {\n\t\t\t\trenderer.paper.dottedLine({ x1: renderer.padding.left, x2: renderer.padding.left + renderer.controller.width, y1: startY, y2: startY, stroke: \"#0000ff\" });\n\t\t\t\tprintDebugBox(renderer,\n\t\t\t\t\t{\n\t\t\t\t\t\tx: renderer.padding.left,\n\t\t\t\t\t\ty: renderer.calcY(staff1.originalTop),\n\t\t\t\t\t\twidth: renderer.controller.width,\n\t\t\t\t\t\theight: renderer.calcY(staff1.originalBottom) - renderer.calcY(staff1.originalTop),\n\t\t\t\t\t\tfill: renderer.foregroundColor,\n\t\t\t\t\t\tstroke: renderer.foregroundColor,\n\t\t\t\t\t\t\"fill-opacity\": 0.1,\n\t\t\t\t\t\t\"stroke-opacity\": 0.1\n\t\t\t\t\t});\n\t\t\t\tcolorIndex = 0;\n\t\t\t\tdebugPrintGridItem(staff1, 'chordHeightAbove');\n\t\t\t\tdebugPrintGridItem(staff1, 'chordHeightBelow');\n\t\t\t\tdebugPrintGridItem(staff1, 'dynamicHeightAbove');\n\t\t\t\tdebugPrintGridItem(staff1, 'dynamicHeightBelow');\n\t\t\t\tdebugPrintGridItem(staff1, 'endingHeightAbove');\n\t\t\t\tdebugPrintGridItem(staff1, 'lyricHeightAbove');\n\t\t\t\tdebugPrintGridItem(staff1, 'lyricHeightBelow');\n\t\t\t\tdebugPrintGridItem(staff1, 'partHeightAbove');\n\t\t\t\tdebugPrintGridItem(staff1, 'tempoHeightAbove');\n\t\t\t\tdebugPrintGridItem(staff1, 'volumeHeightAbove');\n\t\t\t\tdebugPrintGridItem(staff1, 'volumeHeightBelow');\n\t\t\t}\n\t\t}\n\t\trenderer.moveY(spacing.STEP, -staff1.bottom);\n\t\tif (renderer.showDebug) {\n\t\t\tif (renderer.showDebug.indexOf(\"grid\") >= 0) {\n\t\t\t\trenderer.paper.dottedLine({\n\t\t\t\t\tx1: renderer.padding.left,\n\t\t\t\t\tx2: renderer.padding.left + renderer.controller.width,\n\t\t\t\t\ty1: renderer.y,\n\t\t\t\t\ty2: renderer.y,\n\t\t\t\t\tstroke: \"#0000aa\"\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\tvar topLine; // these are to connect multiple staves. We need to remember where they are.\n\tvar bottomLine;\n\n\tvar linePitch = 2;\n\tvar bartop = 0;\n\tfor (var i = 0; i < params.voices.length; i++) {\n\t\tvar staff = params.voices[i].staff;\n\t\tvar tabName = params.voices[i].tabNameInfos;\n\t\trenderer.y = staff.absoluteY;\n\t\trenderer.controller.classes.incrVoice();\n\t\t//renderer.y = staff.y;\n\t\t// offset for starting the counting at middle C\n\t\tif (!params.voices[i].duplicate) {\n\t\t\t//\t\t\trenderer.moveY(spacing.STEP, staff.top);\n\t\t\tif (!topLine) topLine = renderer.calcY(10);\n\t\t\tbottomLine = renderer.calcY(linePitch);\n\t\t\tif (staff.lines !== 0) {\n\t\t\t\tif (staff.linePitch) {\n\t\t\t\t\tlinePitch = staff.linePitch;\n\t\t\t\t}\n\t\t\t\trenderer.controller.classes.newMeasure();\n\t\t\t\tvar lines = printStaff(renderer, params.startx, params.w, staff.lines, staff.linePitch, 0.35);\n\t\t\t\tbottomLine = lines[1];\n\t\t\t\tstaff.bottomLine = bottomLine;\n\t\t\t\tstaff.topLine = lines[0];\n\t\t\t\t// rework bartop when tabs are present with current staff\n\t\t\t\tif (staff.hasTab) {\n\t\t\t\t\t// do not link to staff above (ugly looking)\n\t\t\t\t\tbartop = staff.topLine;\n\t\t\t\t}\n\t\t\t\tif (staff.hasStaff) {\n\t\t\t\t\t// this is a tab\n\t\t\t\t\tbartop = staff.hasStaff.topLine;\n\t\t\t\t\tparams.voices[i].barto = true;\n\t\t\t\t\tparams.voices[i].topLine = topLine;\n\t\t\t\t}\n\n\t\t\t}\n\t\t\tprintBrace(renderer, staff.absoluteY, params.brace, i, selectables);\n\t\t\tprintBrace(renderer, staff.absoluteY, params.bracket, i, selectables);\n\t\t}\n\t\tdrawVoice(renderer, params.voices[i], bartop, selectables, {\n\t\t\ttop: startY,\n\t\t\tzero: renderer.y,\n\t\t\theight: params.height * spacing.STEP\n\t\t});\n\t\tvar tabNameHeight = 0;\n\t\tif (tabName) {\n\t\t\t// print tab infos on staffBottom\n\t\t\tvar r = { rows: [] };\n\t\t\tr.rows.push({ absmove: bottomLine + 2 });\n\t\t\tvar leftMargin = 8;\n\t\t\tr.rows.push({ left: params.startx + leftMargin, text: tabName.name, font: 'tablabelfont', klass: 'text instrument-name', anchor: 'start' });\n\t\t\tr.rows.push({ move: tabName.textSize.height });\n\t\t\tnonMusic(renderer, r);\n\t\t\ttabNameHeight = tabName.textSize.height;\n\t\t}\n\n\t\trenderer.controller.classes.newMeasure();\n\t\tif (!params.voices[i].duplicate) {\n\t\t\tbartop = renderer.calcY(2 + tabNameHeight); // This connects the bar lines between two different staves.\n\t\t\t//\t\t\tif (staff.bottom < 0)\n\t\t\t//\t\t\t\trenderer.moveY(spacing.STEP, -staff.bottom);\n\t\t}\n\t}\n\trenderer.controller.classes.newMeasure();\n\n\t// connect all the staves together with a vertical line\n\tvar staffSize = params.staffs.length;\n\tif (staffSize > 1) {\n\t\ttopLine = params.staffs[0].topLine;\n\t\tbottomLine = params.staffs[staffSize - 1].bottomLine;\n\t\tprintStem(renderer, params.startx, 0.6, topLine, bottomLine, null);\n\t}\n\trenderer.y = startY;\n\n\tfunction debugPrintGridItem(staff, key) {\n\t\tvar colors = [\"rgb(207,27,36)\", \"rgb(168,214,80)\", \"rgb(110,161,224)\", \"rgb(191,119,218)\", \"rgb(195,30,151)\",\n\t\t\t\"rgb(31,170,177)\", \"rgb(220,166,142)\"];\n\t\tif (staff.positionY && staff.positionY[key]) {\n\t\t\tvar height = staff.specialY[key] * spacing.STEP;\n\t\t\tif (key === \"chordHeightAbove\" && staff.specialY.chordLines && staff.specialY.chordLines.above)\n\t\t\t\theight *= staff.specialY.chordLines.above;\n\t\t\tif (key === \"chordHeightBelow\" && staff.specialY.chordLines && staff.specialY.chordLines.below)\n\t\t\t\theight *= staff.specialY.chordLines.below;\n\t\t\tprintDebugBox(renderer,\n\t\t\t\t{\n\t\t\t\t\tx: renderer.padding.left,\n\t\t\t\t\ty: renderer.calcY(staff.positionY[key]),\n\t\t\t\t\twidth: renderer.controller.width,\n\t\t\t\t\theight: height,\n\t\t\t\t\tfill: colors[colorIndex],\n\t\t\t\t\tstroke: colors[colorIndex],\n\t\t\t\t\t\"fill-opacity\": 0.4,\n\t\t\t\t\t\"stroke-opacity\": 0.4\n\t\t\t\t},\n\t\t\t\tkey.substr(0, 4));\n\t\t\tcolorIndex += 1; if (colorIndex > 6) colorIndex = 0;\n\t\t}\n\t}\n}\n\nfunction printBrace(renderer, absoluteY, brace, index, selectables) {\n\tif (brace) {\n\t\tfor (var i = 0; i < brace.length; i++) {\n\t\t\tif (brace[i].isStartVoice(index)) {\n\t\t\t\tbrace[i].startY = absoluteY - spacing.STEP * 10;\n\t\t\t\tbrace[i].elemset = drawBrace(renderer, brace[i], selectables);\n\t\t\t}\n\t\t}\n\t}\n}\n\n// function addInvisibleMarker(renderer, className) {\n// \tvar y = Math.round(renderer.y);\n// \trenderer.paper.pathToBack({path:\"M 0 \" + y + \" L 0 0\", stroke:\"none\", fill:\"none\", \"stroke-opacity\": 0, \"fill-opacity\": 0, 'class': renderer.controller.classes.generate(className), 'data-vertical': y });\n// }\n\nfunction boxAllElements(renderer, voices, which) {\n\tfor (var i = 0; i < which.length; i++) {\n\t\tvar children = voices[which[i]].children;\n\t\tfor (var j = 0; j < children.length; j++) {\n\t\t\tvar elem = children[j];\n\t\t\tvar coords = elem.getFixedCoords();\n\t\t\tif (elem.invisible || coords.t === undefined || coords.b === undefined)\n\t\t\t\tcontinue;\n\t\t\tvar height = (coords.t - coords.b) * spacing.STEP;\n\t\t\tprintDebugBox(renderer,\n\t\t\t\t{\n\t\t\t\t\tx: coords.x,\n\t\t\t\t\ty: renderer.calcY(coords.t),\n\t\t\t\t\twidth: coords.w,\n\t\t\t\t\theight: height,\n\t\t\t\t\tfill: \"#88e888\",\n\t\t\t\t\t\"fill-opacity\": 0.4,\n\t\t\t\t\tstroke: \"#4aa93d\",\n\t\t\t\t\t\"stroke-opacity\": 0.8\n\t\t\t\t});\n\n\t\t\tfor (var k = 0; k < elem.children.length; k++) {\n\t\t\t\tvar relElem = elem.children[k];\n\t\t\t\tvar chord = relElem.getChordDim();\n\t\t\t\tif (chord) {\n\t\t\t\t\tvar y = renderer.calcY(relElem.pitch);\n\t\t\t\t\ty += relElem.dim.font.size * relElem.getLane();\n\t\t\t\t\tprintDebugBox(renderer,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tx: chord.left,\n\t\t\t\t\t\t\ty: y,\n\t\t\t\t\t\t\twidth: chord.right - chord.left,\n\t\t\t\t\t\t\theight: relElem.dim.font.size,\n\t\t\t\t\t\t\tfill: \"none\",\n\t\t\t\t\t\t\tstroke: \"#4aa93d\",\n\t\t\t\t\t\t\t\"stroke-opacity\": 0.8\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nmodule.exports = drawStaffGroup;\n","var printLine = require('./print-line');\n\nfunction printStaffLine(renderer, x1, x2, pitch, klass, name, dy) {\n\tvar y = renderer.calcY(pitch);\n\treturn printLine(renderer, x1, x2, y, klass, name, dy);\n}\n\nmodule.exports = printStaffLine;\n\n","var printStaffLine = require('./staff-line');\n\nfunction printStaff(renderer, startx, endx, numLines, linePitch, dy) {\n\tvar klass = \"abcjs-top-line\";\n\tvar pitch = 2;\n\tif (linePitch) {\n\t\tpitch = linePitch;\n\t}\n\trenderer.paper.openGroup({ prepend: true, klass: renderer.controller.classes.generate(\"abcjs-staff\") });\n\t// If there is one line, it is the B line. Otherwise, the bottom line is the E line.\n\tvar firstYLine = 0;\n\tvar lastYLine = 0;\n\tif (numLines === 1) {\n\t\tprintStaffLine(renderer, startx, endx, 6, klass, null, dy + renderer.lineThickness);\n\t\tfirstYLine = renderer.calcY(10);\n\t\tlastYLine = renderer.calcY(2);\n\t} else {\n\n\t\tfor (var i = numLines - 1; i >= 0; i--) {\n\t\t\tvar curpitch = (i + 1) * pitch;\n\t\t\tlastYLine = renderer.calcY(curpitch);\n\t\t\tif (firstYLine === 0) {\n\t\t\t\tfirstYLine = lastYLine;\n\t\t\t}\n\t\t\tprintStaffLine(renderer, startx, endx, curpitch, klass, null, dy + renderer.lineThickness);\n\t\t\tklass = undefined;\n\t\t}\n\t}\n\trenderer.paper.closeGroup();\n\treturn [firstYLine, lastYLine];\n}\n\nmodule.exports = printStaff;\n","var drawRelativeElement = require('./relative');\nvar renderText = require('./text');\n\nfunction drawTempo(renderer, params) {\n\tvar x = params.x;\n\tif (params.pitch === undefined)\n\t\twindow.console.error(\"Tempo Element y-coordinate not set.\");\n\n\t//var tempoGroup;\n\tparams.tempo.el_type = \"tempo\";\n\t//\trenderer.wrapInAbsElem(params.tempo, \"abcjs-tempo\", function () {\n\t//renderer.paper.openGroup({klass: renderer.controller.classes.generate(\"tempo wha\")});\n\t// The text is aligned with extra room for descenders but numbers look like they are a little too high, so bump it a little.\n\tvar descenderHeight = 2;\n\tvar y = renderer.calcY(params.pitch) + 2;\n\tvar text;\n\tvar size;\n\tif (params.tempo.preString) {\n\t\ttext = renderText(renderer, { x: x, y: y, text: params.tempo.preString, type: 'tempofont', klass: 'abcjs-tempo', anchor: \"start\", noClass: true, name: \"pre\" }, true);\n\t\tsize = renderer.controller.getTextSize.calc(params.tempo.preString, 'tempofont', 'tempo', text);\n\t\tvar preWidth = size.width;\n\t\tvar charWidth = preWidth / params.tempo.preString.length; // Just get some average number to increase the spacing.\n\t\tx += preWidth + charWidth;\n\t}\n\tif (params.note) {\n\t\tparams.note.setX(x);\n\t\tfor (var i = 0; i < params.note.children.length; i++)\n\t\t\tdrawRelativeElement(renderer, params.note.children[i], x);\n\t\tx += (params.note.w + 5);\n\t\tvar str = \"= \" + params.tempo.bpm;\n\t\ttext = renderText(renderer, { x: x, y: y, text: str, type: 'tempofont', klass: 'abcjs-tempo', anchor: \"start\", noClass: true, name: \"beats\" });\n\t\tsize = renderer.controller.getTextSize.calc(str, 'tempofont', 'tempo', text);\n\t\tvar postWidth = size.width;\n\t\tvar charWidth2 = postWidth / str.length; // Just get some average number to increase the spacing.\n\t\tx += postWidth + charWidth2;\n\t}\n\tif (params.tempo.postString) {\n\t\trenderText(renderer, { x: x, y: y, text: params.tempo.postString, type: 'tempofont', klass: 'abcjs-tempo', anchor: \"start\", noClass: true, name: \"post\" }, true);\n\t}\n\t//tempoGroup = renderer.paper.closeGroup();\n\t//\t});\n\t//return [tempoGroup];\n}\n\nmodule.exports = drawTempo;\n","var roundNumber = require(\"./round-number\");\n\nfunction renderText(renderer, params, alreadyInGroup) {\n\tvar y = params.y;\n\n\t// TODO-PER: Probably need to merge the regular text and rich text better. At the least, rich text loses the font box.\n\tif (params.phrases) {\n\t\t//richTextLine = function (phrases, x, y, klass, anchor, target)\n\t\tvar elem = renderer.paper.richTextLine(params.phrases, params.x, params.y, params.klass, params.anchor);\n\t\treturn elem;\n\t}\n\n\tif (params.lane) {\n\t\tvar laneMargin = params.dim.font.size * 0.25;\n\t\ty += (params.dim.font.size + laneMargin) * params.lane;\n\t}\n\n\tvar hash;\n\tif (params.dim) {\n\t\thash = params.dim;\n\t\thash.attr.class = params.klass;\n\t} else\n\t\thash = renderer.controller.getFontAndAttr.calc(params.type, params.klass);\n\tif (params.anchor)\n\t\thash.attr[\"text-anchor\"] = params.anchor;\n\tif (params['dominant-baseline'])\n\t\thash.attr[\"dominant-baseline\"] = params['dominant-baseline'];\n\thash.attr.x = params.x;\n\thash.attr.y = y;\n\tif (!params.centerVertically)\n\t\thash.attr.y += hash.font.size;\n\tif (params.type === 'debugfont') {\n\t\tconsole.log(\"Debug msg: \" + params.text);\n\t\thash.attr.stroke = \"#ff0000\";\n\t}\n\tif (params.cursor) {\n\t\thash.attr.cursor = params.cursor;\n\t}\n\n\tvar text = params.text.replace(/\\n\\n/g, \"\\n \\n\");\n\ttext = text.replace(/^\\n/, \"\\xA0\\n\");\n\n\tif (hash.font.box) {\n\t\tif (!alreadyInGroup)\n\t\t\trenderer.paper.openGroup({ klass: hash.attr['class'], fill: renderer.foregroundColor, \"data-name\": params.name });\n\t\tif (hash.attr[\"text-anchor\"] === \"end\") {\n\t\t\thash.attr.x -= hash.font.padding;\n\t\t} else if (hash.attr[\"text-anchor\"] === \"start\") {\n\t\t\thash.attr.x += hash.font.padding;\n\t\t}\n\t\thash.attr.y += hash.font.padding;\n\t\tdelete hash.attr['class'];\n\t}\n\tif (params.noClass)\n\t\tdelete hash.attr['class'];\n\thash.attr.x = roundNumber(hash.attr.x);\n\thash.attr.y = roundNumber(hash.attr.y);\n\tif (params.name)\n\t\thash.attr[\"data-name\"] = params.name;\n\tvar elem = renderer.paper.text(text, hash.attr);\n\tif (hash.font.box) {\n\t\tvar size = elem.getBBox();\n\n\t\tvar delta = 0;\n\t\tif (hash.attr[\"text-anchor\"] === \"middle\") {\n\t\t\tdelta = size.width / 2 + hash.font.padding;\n\t\t} else if (hash.attr[\"text-anchor\"] === \"end\") {\n\t\t\tdelta = size.width + hash.font.padding * 2;\n\t\t}\n\t\tvar deltaY = 0;\n\t\tif (params.centerVertically) {\n\t\t\tdeltaY = size.height - hash.font.padding;\n\t\t}\n\t\trenderer.paper.rect({ \"data-name\": \"box\", x: Math.round(params.x - delta), y: Math.round(y - deltaY), width: Math.round(size.width + hash.font.padding * 2), height: Math.round(size.height + hash.font.padding * 2) });\n\t\tif (!alreadyInGroup)\n\t\t\telem = renderer.paper.closeGroup();\n\t}\n\treturn elem;\n}\n\nmodule.exports = renderText;\n","var sprintf = require('./sprintf');\nvar roundNumber = require(\"./round-number\");\n\nfunction drawTie(renderer, params, linestartx, lineendx, selectables) {\n\tlayout(params, linestartx, lineendx);\n\n\tvar klass = '';\n\tif (params.anchor1) {\n\t\tklass += 'abcjs-start-m' + params.anchor1.parent.counters.measure + '-n' + params.anchor1.parent.counters.note;\n\t} else\n\t\tklass += 'abcjs-start-edge';\n\tif (params.anchor2) {\n\t\tklass += ' abcjs-end-m' + params.anchor2.parent.counters.measure + '-n' + params.anchor2.parent.counters.note;\n\t} else\n\t\tklass += ' abcjs-end-edge';\n\tif (params.hint)\n\t\tklass = \"abcjs-hint\";\n\tvar fudgeY = params.fixedY ? 1.5 : 0; // TODO-PER: This just compensates for drawArc, which contains too much knowledge of ties and slurs.\n\tvar el = drawArc(renderer, params.startX, params.endX, params.startY + fudgeY, params.endY + fudgeY, params.above, klass, params.isTie, params.dotted);\n\tvar startChar = -1\n\t// This gets the start and end points of the contents of the slur. We assume that the parenthesis are just to the outside of that.\n\tif (params.anchor1 && !params.isTie)\n\t\tstartChar = params.anchor1.parent.abcelem.startChar - 1\n\tvar endChar = -1\n\tif (params.anchor2 && !params.isTie)\n\t\tendChar = params.anchor2.parent.abcelem.endChar + 1\n\n\tselectables.wrapSvgEl({ el_type: \"slur\", startChar: startChar, endChar: endChar }, el);\n\treturn [el];\n}\n\n// TODO-PER: I think params part should have been done earlier in the layout pass.\nvar layout = function (params, lineStartX, lineEndX) {\n\t// We now have all of the input variables set, so we can figure out the start and ending x,y coordinates, and finalize the direction of the arc.\n\n\t// Ties and slurs are handled a little differently, so do calculations for them separately.\n\tif (!params.anchor1 || !params.anchor2)\n\t\tparams.isTie = true; // if the slur goes off the end of the line, then draw it like a tie\n\telse if (params.anchor1.pitch === params.anchor2.pitch && params.internalNotes.length === 0)\n\t\tparams.isTie = true;\n\telse\n\t\tparams.isTie = false;\n\n\tif (params.isTie) {\n\t\tparams.calcTieDirection();\n\t\tparams.calcX(lineStartX, lineEndX);\n\t\tparams.calcTieY();\n\n\t} else {\n\t\tparams.calcSlurDirection();\n\t\tparams.calcX(lineStartX, lineEndX);\n\t\tparams.calcSlurY();\n\t}\n\tparams.avoidCollisionAbove();\n};\n\nvar drawArc = function (renderer, x1, x2, pitch1, pitch2, above, klass, isTie, dotted) {\n\t// If it is a tie vs. a slur, draw it shallower.\n\tvar spacing = isTie ? 1.2 : 1.5;\n\n\tx1 = roundNumber(x1 + 6);\n\tx2 = roundNumber(x2 + 4);\n\tpitch1 = pitch1 + ((above) ? spacing : -spacing);\n\tpitch2 = pitch2 + ((above) ? spacing : -spacing);\n\tvar y1 = roundNumber(renderer.calcY(pitch1));\n\tvar y2 = roundNumber(renderer.calcY(pitch2));\n\n\t//unit direction vector\n\tvar dx = x2 - x1;\n\tvar dy = y2 - y1;\n\tvar norm = Math.sqrt(dx * dx + dy * dy);\n\tvar ux = dx / norm;\n\tvar uy = dy / norm;\n\n\tvar flatten = norm / 3.5;\n\tvar maxFlatten = isTie ? 10 : 25; // If it is a tie vs. a slur, draw it shallower.\n\tvar curve = ((above) ? -1 : 1) * Math.min(maxFlatten, Math.max(4, flatten));\n\n\tvar controlx1 = roundNumber(x1 + flatten * ux - curve * uy);\n\tvar controly1 = roundNumber(y1 + flatten * uy + curve * ux);\n\tvar controlx2 = roundNumber(x2 - flatten * ux - curve * uy);\n\tvar controly2 = roundNumber(y2 - flatten * uy + curve * ux);\n\tvar thickness = 2;\n\tif (klass)\n\t\tklass += ' slur';\n\telse\n\t\tklass = 'slur';\n\tklass += isTie ? ' tie' : ' legato';\n\tvar ret;\n\tif (dotted) {\n\t\tklass += ' dotted';\n\t\tvar pathString2 = sprintf(\"M %f %f C %f %f %f %f %f %f\", x1, y1,\n\t\t\tcontrolx1, controly1, controlx2, controly2, x2, y2);\n\t\tret = renderer.paper.path({ path: pathString2, stroke: renderer.foregroundColor, fill: \"none\", 'stroke-dasharray': \"5 5\", 'class': renderer.controller.classes.generate(klass), \"data-name\": isTie ? \"tie\" : \"slur\" });\n\t} else {\n\t\tvar pathString = sprintf(\"M %f %f C %f %f %f %f %f %f C %f %f %f %f %f %f z\", x1, y1,\n\t\t\tcontrolx1, controly1, controlx2, controly2, x2, y2,\n\t\t\troundNumber(controlx2 - thickness * uy), roundNumber(controly2 + thickness * ux), roundNumber(controlx1 - thickness * uy), roundNumber(controly1 + thickness * ux), x1, y1);\n\t\tret = renderer.paper.path({ path: pathString, stroke: \"none\", fill: renderer.foregroundColor, 'class': renderer.controller.classes.generate(klass), \"data-name\": isTie ? \"tie\" : \"slur\" });\n\t}\n\n\treturn ret;\n};\n\nmodule.exports = drawTie;\n","var sprintf = require('./sprintf');\nvar renderText = require('./text');\nvar printPath = require('./print-path');\nvar roundNumber = require(\"./round-number\");\n\nfunction drawTriplet(renderer, params, selectables) {\n\trenderer.paper.openGroup({ klass: renderer.controller.classes.generate('triplet ' + params.durationClass), \"data-name\": \"triplet\" });\n\tif (!params.hasBeam) {\n\t\tdrawBracket(renderer, params.anchor1.x, params.startNote, params.anchor2.x + params.anchor2.w, params.endNote);\n\t}\n\t// HACK: adjust the position of \"3\". It is too high in all cases so we fudge it by subtracting 1 here.\n\trenderText(renderer, { x: params.xTextPos, y: renderer.calcY(params.yTextPos - 1), text: \"\" + params.number, type: 'tripletfont', anchor: \"middle\", centerVertically: true, noClass: true, name: \"\" + params.number }, true);\n\tvar g = renderer.paper.closeGroup();\n\tselectables.wrapSvgEl({ el_type: \"triplet\", startChar: -1, endChar: -1 }, g);\n\treturn g;\n}\n\nfunction drawLine(l, t, r, b) {\n\treturn sprintf(\"M %f %f L %f %f\", roundNumber(l), roundNumber(t), roundNumber(r), roundNumber(b));\n}\n\nfunction drawBracket(renderer, x1, y1, x2, y2) {\n\ty1 = renderer.calcY(y1);\n\ty2 = renderer.calcY(y2);\n\tvar bracketHeight = 5;\n\n\t// Draw vertical lines at the beginning and end\n\tvar pathString = \"\";\n\tpathString += drawLine(x1, y1, x1, y1 + bracketHeight);\n\tpathString += drawLine(x2, y2, x2, y2 + bracketHeight);\n\n\t// figure out midpoints to draw the broken line.\n\tvar midX = x1 + (x2 - x1) / 2;\n\t//var midY = y1 + (y2-y1)/2;\n\tvar gapWidth = 8;\n\tvar slope = (y2 - y1) / (x2 - x1);\n\tvar leftEndX = midX - gapWidth;\n\tvar leftEndY = y1 + (leftEndX - x1) * slope;\n\tpathString += drawLine(x1, y1, leftEndX, leftEndY);\n\tvar rightStartX = midX + gapWidth;\n\tvar rightStartY = y1 + (rightStartX - x1) * slope;\n\tpathString += drawLine(rightStartX, rightStartY, x2, y2);\n\tprintPath(renderer, { path: pathString, stroke: renderer.foregroundColor, \"data-name\": \"triplet-bracket\" });\n}\n\nmodule.exports = drawTriplet;\n","var drawGlissando = require('./glissando');\nvar drawCrescendo = require('./crescendo');\nvar drawDynamics = require('./dynamics');\nvar drawTriplet = require('./triplet');\nvar drawEnding = require('./ending');\nvar drawTie = require('./tie');\nvar drawBeam = require('./beam');\nvar renderText = require('./text');\nvar drawAbsolute = require('./absolute');\n\nfunction drawVoice(renderer, params, bartop, selectables, staffPos) {\n\tvar width = params.w - 1;\n\trenderer.staffbottom = params.staff.bottom;\n\tvar saveColor = renderer.foregroundColor\n\tif (params.color)\n\t\trenderer.foregroundColor = params.color\n\n\tif (params.header) { // print voice name\n\t\tvar textEl = renderText(renderer, { x: renderer.padding.left, y: renderer.calcY(params.headerPosition), text: params.header, type: 'voicefont', klass: 'staff-extra voice-name', anchor: 'start', centerVertically: true, name: \"voice-name\" }, true);\n\t\tselectables.wrapSvgEl({ el_type: \"voiceName\", startChar: -1, endChar: -1, text: params.header }, textEl);\n\t}\n\n\tvar i;\n\tvar child;\n\tvar foundNote = false;\n\tfor (i = 0; i < params.children.length; i++) {\n\t\tchild = params.children[i];\n\t\tif (child.type === 'note' || child.type === 'rest')\n\t\t\tfoundNote = true;\n\t\tvar justInitializedMeasureNumber = false;\n\t\tif (child.type !== 'staff-extra' && !renderer.controller.classes.isInMeasure()) {\n\t\t\trenderer.controller.classes.startMeasure();\n\t\t\tjustInitializedMeasureNumber = true;\n\t\t}\n\t\tif (params.staff.isTabStaff) {\n\t\t\tchild.invisible = false;\n\t\t\tif (child.type == 'bar') {\n\t\t\t\tif (child.abcelem.lastBar) {\n\t\t\t\t\tbartop = params.topLine;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdrawAbsolute(renderer, child, (params.barto || i === params.children.length - 1) ? bartop : 0, selectables, staffPos);\n\n\t\tif (child.type === 'note' || isNonSpacerRest(child))\n\t\t\trenderer.controller.classes.incrNote();\n\t\tif (child.type === 'bar' && !justInitializedMeasureNumber && foundNote) {\n\t\t\trenderer.controller.classes.incrMeasure();\n\t\t}\n\t}\n\n\trenderer.controller.classes.startMeasure();\n\n\tfor (i = 0; i < params.beams.length; i++) {\n\t\tvar beam = params.beams[i];\n\t\tif (beam === 'bar') {\n\t\t\trenderer.controller.classes.incrMeasure();\n\t\t} else\n\t\t\tdrawBeam(renderer, beam, selectables); // beams must be drawn first for proper printing of triplets, slurs and ties.\n\t}\n\n\trenderer.controller.classes.startMeasure();\n\tfor (i = 0; i < params.otherchildren.length; i++) {\n\t\tchild = params.otherchildren[i];\n\t\tif (child === 'bar') {\n\t\t\trenderer.controller.classes.incrMeasure();\n\t\t} else {\n\t\t\tswitch (child.type) {\n\t\t\t\tcase \"GlissandoElem\":\n\t\t\t\t\tchild.elemset = drawGlissando(renderer, child, selectables);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"CrescendoElem\":\n\t\t\t\t\tchild.elemset = drawCrescendo(renderer, child, selectables);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"DynamicDecoration\":\n\t\t\t\t\tchild.elemset = drawDynamics(renderer, child, selectables);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"TripletElem\":\n\t\t\t\t\tdrawTriplet(renderer, child, selectables);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"EndingElem\":\n\t\t\t\t\tchild.elemset = drawEnding(renderer, child, params.startx + 10, width, selectables);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"TieElem\":\n\t\t\t\t\tchild.elemset = drawTie(renderer, child, params.startx + 10, width, selectables);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.log(child);\n\t\t\t\t\tdrawAbsolute(renderer, child, params.startx + 10, width, selectables, staffPos);\n\t\t\t}\n\t\t}\n\t}\n\trenderer.foregroundColor = saveColor\n\n}\n\nfunction isNonSpacerRest(elem) {\n\tif (elem.type !== 'rest')\n\t\treturn false;\n\tif (elem.abcelem && elem.abcelem.rest && elem.abcelem.rest.type !== 'spacer')\n\t\treturn true;\n\treturn false;\n}\n\nmodule.exports = drawVoice;\n","// abc_engraver_controller.js: Controls the engraving process of an ABCJS abstract syntax tree as produced by ABCJS/parse\n\n/*global Math */\n\nvar spacing = require('./helpers/spacing');\nvar AbstractEngraver = require('./creation/abstract-engraver');\nvar Renderer = require('./renderer');\nvar FreeText = require('./creation/elements/free-text');\nvar Separator = require('./creation/elements/separator');\nvar Subtitle = require('./creation/elements/subtitle');\nvar TopText = require('./creation/elements/top-text');\nvar BottomText = require('./creation/elements/bottom-text');\nvar setupSelection = require('./interactive/selection');\nvar layout = require('./layout/layout');\nvar Classes = require('./helpers/classes');\nvar GetFontAndAttr = require('./helpers/get-font-and-attr');\nvar GetTextSize = require('./helpers/get-text-size');\nvar draw = require('./draw/draw');\nvar tablatures = require('../api/abc_tablatures');\nvar findSelectableElement = require('./interactive/find-selectable-element');\n\n/**\n * @class\n * Controls the engraving process, from ABCJS Abstract Syntax Tree (ABCJS AST) to rendered score sheet\n *\n * Call engraveABC to run the process. This creates a graphelems ABCJS Abstract Engraving Structure (ABCJS AES) that can be accessed through this.staffgroups\n * this data structure is first laid out (giving the graphelems x and y coordinates) and then drawn onto the renderer\n * each ABCJS AES represents a single staffgroup - all elements that are not in a staffgroup are rendered directly by the controller\n *\n * elements in ABCJS AES know their \"source data\" in the ABCJS AST, and their \"target shape\"\n * in the renderer for highlighting purposes\n *\n */\nvar EngraverController = function (paper, params) {\n\tparams = params || {};\n\tthis.findSelectableElement = findSelectableElement;\n\tthis.oneSvgPerLine = params.oneSvgPerLine;\n\tthis.selectionColor = params.selectionColor;\n\tthis.dragColor = params.dragColor ? params.dragColor : params.selectionColor;\n\tthis.dragging = !!params.dragging;\n\tthis.selectTypes = params.selectTypes;\n\tthis.responsive = params.responsive;\n\tthis.space = 3 * spacing.SPACE;\n\tthis.initialClef = params.initialClef;\n\tthis.timeBasedLayout = params.timeBasedLayout;\n\tthis.expandToWidest = !!params.expandToWidest;\n\tthis.scale = params.scale ? parseFloat(params.scale) : 0;\n\tthis.classes = new Classes({ shouldAddClasses: params.add_classes });\n\tif (!(this.scale > 0.1))\n\t\tthis.scale = undefined;\n\n\tif (params.staffwidth) {\n\t\t// Note: Normally all measurements to the engraver are in POINTS. However, if a person is formatting for the\n\t\t// screen and directly inputting the width, then it is more logical to have the measurement in pixels.\n\t\tthis.staffwidthScreen = params.staffwidth;\n\t\tthis.staffwidthPrint = params.staffwidth;\n\t} else {\n\t\tthis.staffwidthScreen = 740; // TODO-PER: Not sure where this number comes from, but this is how it's always been.\n\t\tthis.staffwidthPrint = 680; // The number of pixels in 8.5\", after 1cm of margin has been removed.\n\t}\n\tthis.listeners = [];\n\tif (params.clickListener)\n\t\tthis.addSelectListener(params.clickListener);\n\n\tthis.renderer = new Renderer(paper);\n\tthis.renderer.setPaddingOverride(params);\n\tif (params.showDebug)\n\t\tthis.renderer.showDebug = params.showDebug;\n\tif (params.jazzchords)\n\t\tthis.jazzchords = params.jazzchords;\n\tif (params.accentAbove)\n\t\tthis.accentAbove = params.accentAbove;\n\tif (params.germanAlphabet)\n\t\tthis.germanAlphabet = params.germanAlphabet;\n\tif (params.lineThickness)\n\t\tthis.lineThickness = params.lineThickness;\n\tthis.renderer.controller = this; // TODO-GD needed for highlighting\n\tthis.renderer.foregroundColor = params.foregroundColor ? params.foregroundColor : \"currentColor\";\n\tif (params.ariaLabel !== undefined)\n\t\tthis.renderer.ariaLabel = params.ariaLabel;\n\tthis.renderer.minPadding = params.minPadding ? params.minPadding : 0;\n\n\tthis.reset();\n};\n\nEngraverController.prototype.reset = function () {\n\tthis.selected = [];\n\tthis.staffgroups = [];\n\tif (this.engraver)\n\t\tthis.engraver.reset();\n\tthis.engraver = null;\n\tthis.renderer.reset();\n\tthis.dragTarget = null;\n\tthis.dragIndex = -1;\n\tthis.dragMouseStart = { x: -1, y: -1 };\n\tthis.dragYStep = 0;\n\tif (this.lineThickness)\n\t\tthis.renderer.setLineThickness(this.lineThickness)\n};\n\n/**\n * run the engraving process\n */\nEngraverController.prototype.engraveABC = function (abctunes, tuneNumber, lineOffset) {\n\tif (abctunes[0] === undefined) {\n\t\tabctunes = [abctunes];\n\t}\n\tthis.reset();\n\n\tfor (var i = 0; i < abctunes.length; i++) {\n\t\tif (tuneNumber === undefined)\n\t\t\ttuneNumber = i;\n\t\tthis.getFontAndAttr = new GetFontAndAttr(abctunes[i].formatting, this.classes);\n\t\tthis.getTextSize = new GetTextSize(this.getFontAndAttr, this.renderer.paper);\n\t\tthis.engraveTune(abctunes[i], tuneNumber, lineOffset);\n\t}\n};\n\n/**\n * Some of the items on the page are not scaled, so adjust them in the opposite direction of scaling to cancel out the scaling.\n */\nEngraverController.prototype.adjustNonScaledItems = function (scale) {\n\tthis.width /= scale;\n\tthis.renderer.adjustNonScaledItems(scale);\n};\n\nEngraverController.prototype.getMeasureWidths = function (abcTune) {\n\tthis.reset();\n\tthis.getFontAndAttr = new GetFontAndAttr(abcTune.formatting, this.classes);\n\tthis.getTextSize = new GetTextSize(this.getFontAndAttr, this.renderer.paper);\n\tvar origJazzChords = this.jazzchords\n\n\tthis.setupTune(abcTune, 0);\n\tthis.constructTuneElements(abcTune);\n\t// layout() sets the x-coordinate of the abcTune element here:\n\t// abcTune.lines[0].staffGroup.voices[0].children[0].x\n\tlayout(this.renderer, abcTune, 0, this.space, this.timeBasedLayout);\n\n\tvar ret = [];\n\tvar section;\n\n\tvar needNewSection = true;\n\tfor (var i = 0; i < abcTune.lines.length; i++) {\n\t\tvar abcLine = abcTune.lines[i];\n\t\tif (abcLine.staff) {\n\t\t\tif (needNewSection) {\n\t\t\t\tsection = {\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tmeasureWidths: [],\n\t\t\t\t\t//height: this.renderer.padding.top + this.renderer.spacing.music + this.renderer.padding.bottom + 24, // the 24 is the empirical value added to the bottom of all tunes.\n\t\t\t\t\ttotal: 0\n\t\t\t\t};\n\t\t\t\tret.push(section);\n\t\t\t\tneedNewSection = false;\n\t\t\t}\n\t\t\t// At this point, the voices are laid out so that the bar lines are even with each other. So we just need to get the placement of the first voice.\n\t\t\tif (abcLine.staffGroup.voices.length > 0) {\n\t\t\t\tvar voice = abcLine.staffGroup.voices[0];\n\t\t\t\tvar foundNotStaffExtra = false;\n\t\t\t\tvar lastXPosition = 0;\n\t\t\t\tfor (var k = 0; k < voice.children.length; k++) {\n\t\t\t\t\tvar child = voice.children[k];\n\t\t\t\t\tif (!foundNotStaffExtra && !child.isClef && !child.isKeySig) {\n\t\t\t\t\t\tfoundNotStaffExtra = true;\n\t\t\t\t\t\tsection.left = child.x;\n\t\t\t\t\t\tlastXPosition = child.x;\n\t\t\t\t\t}\n\t\t\t\t\tif (child.type === 'bar') {\n\t\t\t\t\t\tsection.measureWidths.push(child.x - lastXPosition);\n\t\t\t\t\t\tsection.total += (child.x - lastXPosition);\n\t\t\t\t\t\tlastXPosition = child.x;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t//section.height += calcHeight(abcLine.staffGroup) * spacing.STEP;\n\t\t} else\n\t\t\tneedNewSection = true;\n\t}\n\tthis.jazzchords = origJazzChords\n\treturn ret;\n};\n\nEngraverController.prototype.setupTune = function (abcTune, tuneNumber) {\n\tthis.classes.reset();\n\n\tif (abcTune.formatting.jazzchords !== undefined)\n\t\tthis.jazzchords = abcTune.formatting.jazzchords;\n\tif (abcTune.formatting.accentAbove !== undefined)\n\t\tthis.accentAbove = abcTune.formatting.accentAbove;\n\n\tthis.renderer.newTune(abcTune);\n\tthis.engraver = new AbstractEngraver(this.getTextSize, tuneNumber, {\n\t\tbagpipes: abcTune.formatting.bagpipes,\n\t\tflatbeams: abcTune.formatting.flatbeams,\n\t\tgraceSlurs: abcTune.formatting.graceSlurs !== false, // undefined is the default, which is true\n\t\tpercmap: abcTune.formatting.percmap,\n\t\tinitialClef: this.initialClef,\n\t\tjazzchords: this.jazzchords,\n\t\ttimeBasedLayout: this.timeBasedLayout,\n\t\taccentAbove: this.accentAbove,\n\t\tgermanAlphabet: this.germanAlphabet\n\t});\n\tthis.engraver.setStemHeight(this.renderer.spacing.stemHeight);\n\tthis.engraver.measureLength = abcTune.getMeterFraction().num / abcTune.getMeterFraction().den;\n\tif (abcTune.formatting.staffwidth) {\n\t\tthis.width = abcTune.formatting.staffwidth * 1.33; // The width is expressed in pt; convert to px.\n\t} else {\n\t\tthis.width = this.renderer.isPrint ? this.staffwidthPrint : this.staffwidthScreen;\n\t}\n\n\tvar scale = abcTune.formatting.scale ? abcTune.formatting.scale : this.scale;\n\tif (this.responsive === \"resize\") // The resizing will mess with the scaling, so just don't do it explicitly.\n\t\tscale = undefined;\n\tif (scale === undefined) scale = this.renderer.isPrint ? 0.75 : 1;\n\tthis.adjustNonScaledItems(scale);\n\treturn scale;\n};\n\nEngraverController.prototype.constructTuneElements = function (abcTune) {\n\tabcTune.topText = new TopText(abcTune.metaText, abcTune.metaTextInfo, abcTune.formatting, abcTune.lines, this.width, this.renderer.isPrint, this.renderer.padding.left, this.renderer.spacing, this.classes.shouldAddClasses, this.getTextSize);\n\n\t// Generate the raw staff line data\n\tvar i;\n\tvar abcLine;\n\tvar hasPrintedTempo = false;\n\tvar hasSeenNonSubtitle = false;\n\tfor (i = 0; i < abcTune.lines.length; i++) {\n\t\tabcLine = abcTune.lines[i];\n\t\tif (abcLine.staff) {\n\t\t\thasSeenNonSubtitle = true;\n\t\t\tabcLine.staffGroup = this.engraver.createABCLine(abcLine.staff, !hasPrintedTempo ? abcTune.metaText.tempo : null, i);\n\t\t\thasPrintedTempo = true;\n\t\t} else if (abcLine.subtitle) {\n\t\t\t// If the subtitle is at the top, then it was already accounted for. So skip all subtitles until the first non-subtitle line.\n\t\t\tif (hasSeenNonSubtitle) {\n\t\t\t\tvar center = this.width / 2 + this.renderer.padding.left;\n\t\t\t\tabcLine.nonMusic = new Subtitle(this.renderer.spacing.subtitle, abcTune.formatting, abcLine.subtitle, center, this.renderer.padding.left, this.getTextSize);\n\t\t\t}\n\t\t} else if (abcLine.text !== undefined) {\n\t\t\thasSeenNonSubtitle = true;\n\t\t\tabcLine.nonMusic = new FreeText(abcLine.text, abcLine.vskip, this.getFontAndAttr, this.renderer.padding.left, this.width, this.getTextSize);\n\t\t} else if (abcLine.separator !== undefined && abcLine.separator.lineLength) {\n\t\t\thasSeenNonSubtitle = true;\n\t\t\tabcLine.nonMusic = new Separator(abcLine.separator.spaceAbove, abcLine.separator.lineLength, abcLine.separator.spaceBelow);\n\t\t}\n\t}\n\tabcTune.bottomText = new BottomText(abcTune.metaText, this.width, this.renderer.isPrint, this.renderer.padding.left, this.renderer.spacing, this.classes.shouldAddClasses, this.getTextSize);\n};\n\nEngraverController.prototype.engraveTune = function (abcTune, tuneNumber, lineOffset) {\n\n\tvar origJazzChords = this.jazzchords\n\tvar scale = this.setupTune(abcTune, tuneNumber);\n \n\t// Create all of the element objects that will appear on the page.\n\tthis.constructTuneElements(abcTune);\n \n\t//Set the top text now that we know the width\n \n\t// Do all the positioning, both horizontally and vertically\n\tvar maxWidth = layout(this.renderer, abcTune, this.width, this.space, this.expandToWidest, this.timeBasedLayout);\n \n\t//Set the top text now that we know the width\n\tif (this.expandToWidest && maxWidth > this.width + 1) {\n \n\t\tabcTune.topText = new TopText(abcTune.metaText, abcTune.metaTextInfo, abcTune.formatting, abcTune.lines, maxWidth, this.renderer.isPrint, this.renderer.padding.left, this.renderer.spacing, this.classes.shouldAddClasses, this.getTextSize);\n \n\t\tif ((abcTune.lines)&&(abcTune.lines.length > 0)){\n\t\t\tvar nlines = abcTune.lines.length;\n\n\t\t\tfor (var i=0;i 0)){\n\t\t\t\t\t\tvar nRows = entry.nonMusic.rows.length;\n\t\t\t\t\t\tfor (var j=0;j0)){\n\t\t\t\t\t\t\t\t\t\tif (entry.text[0].center){\n\t\t\t\t\t\t\t\t\t\t\tthisRow.left = (maxWidth/2) + this.renderer.padding.left;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Deal with tablature for staff\n\tif (abcTune.tablatures) {\n\t tablatures.layoutTablatures(this.renderer, abcTune);\n\t}\n \n\t// Do all the writing to the SVG\n\tvar ret = draw(this.renderer, this.classes, abcTune, this.width, maxWidth, this.responsive, scale, this.selectTypes, tuneNumber, lineOffset);\n\tthis.staffgroups = ret.staffgroups;\n\tthis.selectables = ret.selectables;\n\tif (this.oneSvgPerLine) {\n\t var div = this.renderer.paper.svg.parentNode;\n\t this.svgs = splitSvgIntoLines(this.renderer, div, abcTune.metaText.title, this.responsive, scale);\n\t} else {\n\t this.svgs = [this.renderer.paper.svg];\n\t}\n\tsetupSelection(this, this.svgs);\n\t\n\tthis.jazzchords = origJazzChords\n};\n\nfunction splitSvgIntoLines(renderer, output, title, responsive, scale) {\n\t// Each line is a top level in the svg. To split it into separate\n\t// svgs iterate through each of those and put them in a new svg. Since\n\t// they are placed absolutely, the viewBox needs to be manipulated to\n\t// get the correct vertical positioning.\n\t// We copy all the attributes from the original svg except for the aria-label\n\t// since we want that to include a count. And the height is now a fraction of the original svg.\n\tif (!title) title = \"Untitled\"\n\tvar source = output.querySelector(\"svg\")\n\tif (responsive === 'resize')\n\t\toutput.style.paddingBottom = ''\n\tvar style = source.querySelector(\"style\")\n\tvar width = responsive === 'resize' ? source.viewBox.baseVal.width : source.getAttribute(\"width\")\n\tvar sections = output.querySelectorAll(\"svg > g\") // each section is a line, or the top matter or the bottom matter, or text that has been inserted.\n\tvar nextTop = 0 // There are often gaps between the elements for spacing, so the actual top and height needs to be inferred.\n\tvar wrappers = [] // Create all the elements and place them at once because we use the current svg to get data. It would disappear after placing the first line.\n\tvar svgs = []\n\tfor (var i = 0; i < sections.length; i++) {\n\t\tvar section = sections[i]\n\t\tvar box = section.getBBox()\n\t\tvar gapBetweenLines = box.y - nextTop // take the margin into account\n\t\tvar height = box.height + gapBetweenLines;\n\t\tvar wrapper = document.createElement(\"div\");\n\t\tvar divStyles = \"overflow: hidden;\"\n\t\tif (responsive !== 'resize')\n\t\t\tdivStyles += \"height:\" + (height * scale) + \"px;\"\n\t\twrapper.setAttribute(\"style\", divStyles)\n\t\tvar svg = duplicateSvg(source)\n\t\tvar fullTitle = \"Sheet Music for \\\"\" + title + \"\\\" section \" + (i + 1)\n\t\tsvg.setAttribute(\"aria-label\", fullTitle)\n\t\tif (responsive !== 'resize')\n\t\t\tsvg.setAttribute(\"height\", height)\n\t\tif (responsive === 'resize')\n\t\t\tsvg.style.position = ''\n\t\t// TODO-PER: Hack! Not sure why this is needed.\n\t\tvar viewBoxHeight = renderer.firefox112 ? height+1 : height\n\t\tsvg.setAttribute(\"viewBox\", \"0 \" + nextTop + \" \" + width + \" \" + viewBoxHeight)\n\t\tsvg.appendChild(style.cloneNode(true))\n\t\tvar titleEl = document.createElement(\"title\")\n\t\ttitleEl.innerText = fullTitle\n\t\tsvg.appendChild(titleEl)\n\t\tsvg.appendChild(section)\n\n\t\twrapper.appendChild(svg)\n\t\tsvgs.push(svg)\n\t\toutput.appendChild(wrapper)\n\t\t//wrappers.push(wrapper)\n\t\tnextTop = box.y + box.height\n\t}\n\t// for (i = 0; i < wrappers.length; i++)\n\t// \toutput.appendChild(wrappers[i])\n\toutput.removeChild(source)\n\treturn svgs;\n}\n\nfunction duplicateSvg(source) {\n\tvar svgNS = \"http://www.w3.org/2000/svg\";\n\tvar svg = document.createElementNS(svgNS, \"svg\");\n\tfor (var i = 0; i < source.attributes.length; i++) {\n\t\tvar attr = source.attributes[i];\n\t\tif (attr.name !== \"height\" && attr.name != \"aria-label\")\n\t\t\tsvg.setAttribute(attr.name, attr.value)\n\t}\n\treturn svg;\n}\n\nEngraverController.prototype.getDim = function (historyEl) {\n\t// Get the dimensions on demand because the getBBox call is expensive.\n\tif (!historyEl.dim) {\n\t\tvar box = historyEl.svgEl.getBBox();\n\t\thistoryEl.dim = { left: Math.round(box.x), top: Math.round(box.y), right: Math.round(box.x + box.width), bottom: Math.round(box.y + box.height) };\n\t}\n\treturn historyEl.dim;\n};\n\nEngraverController.prototype.addSelectListener = function (clickListener) {\n\tthis.listeners[this.listeners.length] = clickListener;\n};\n\nmodule.exports = EngraverController;\n","var Classes = function Classes(options) {\n\tthis.shouldAddClasses = options.shouldAddClasses;\n\tthis.reset();\n}\n\nClasses.prototype.reset = function () {\n\tthis.lineNumber = null;\n\tthis.voiceNumber = null;\n\tthis.measureNumber = null;\n\tthis.measureTotalPerLine = [];\n\tthis.noteNumber = null;\n}\n\nClasses.prototype.incrLine = function () {\n\tif (this.lineNumber === null)\n\t\tthis.lineNumber = 0;\n\telse\n\t\tthis.lineNumber++;\n\tthis.voiceNumber = null;\n\tthis.measureNumber = null;\n\tthis.noteNumber = null;\n};\n\nClasses.prototype.incrVoice = function () {\n\tif (this.voiceNumber === null)\n\t\tthis.voiceNumber = 0;\n\telse\n\t\tthis.voiceNumber++;\n\tthis.measureNumber = null;\n\tthis.noteNumber = null;\n};\n\nClasses.prototype.isInMeasure = function () {\n\treturn this.measureNumber !== null;\n};\n\nClasses.prototype.newMeasure = function () {\n\tif (this.measureNumber)\n\t\tthis.measureTotalPerLine[this.lineNumber] = this.measureNumber;\n\tthis.measureNumber = null;\n\tthis.noteNumber = null;\n};\n\nClasses.prototype.startMeasure = function () {\n\tthis.measureNumber = 0;\n\tthis.noteNumber = 0;\n};\n\nClasses.prototype.incrMeasure = function () {\n\tthis.measureNumber++;\n\tthis.noteNumber = 0;\n};\n\nClasses.prototype.incrNote = function () {\n\tthis.noteNumber++;\n};\n\nClasses.prototype.measureTotal = function () {\n\tvar total = 0;\n\tfor (var i = 0; i < this.lineNumber; i++)\n\t\ttotal += this.measureTotalPerLine[i] ? this.measureTotalPerLine[i] : 0; // This can be null when non-music things are present.\n\tif (this.measureNumber)\n\t\ttotal += this.measureNumber;\n\treturn total;\n};\n\nClasses.prototype.getCurrent = function (c) {\n\treturn {\n\t\tline: this.lineNumber,\n\t\tmeasure: this.measureNumber,\n\t\tmeasureTotal: this.measureTotal(),\n\t\tvoice: this.voiceNumber,\n\t\tnote: this.noteNumber\n\t};\n};\n\nClasses.prototype.generate = function (c) {\n\tif (!this.shouldAddClasses)\n\t\treturn \"\";\n\tvar ret = [];\n\tif (c && c.length > 0) ret.push(c);\n\tif (c === \"abcjs-tab-number\") // TODO-PER-HACK! straighten out the tablature\n\t\treturn ret.join(' ')\n\tif (c === \"text instrument-name\")\n\t\treturn \"abcjs-text abcjs-instrument-name\"\n\tif (this.lineNumber !== null) ret.push(\"l\" + this.lineNumber);\n\tif (this.measureNumber !== null) ret.push(\"m\" + this.measureNumber);\n\tif (this.measureNumber !== null) ret.push(\"mm\" + this.measureTotal()); // measureNumber is null between measures so this is still the test for measureTotal\n\tif (this.voiceNumber !== null) ret.push(\"v\" + this.voiceNumber);\n\tif (c && (c.indexOf('note') >= 0 || c.indexOf('rest') >= 0 || c.indexOf('lyric') >= 0) && this.noteNumber !== null) ret.push(\"n\" + this.noteNumber);\n\t// add a prefix to all classes that abcjs adds.\n\tif (ret.length > 0) {\n\t\tret = ret.join(' '); // Some strings are compound classes - that is, specify more than one class in a string.\n\t\tret = ret.split(' ');\n\t\tfor (var i = 0; i < ret.length; i++) {\n\t\t\tif (ret[i].indexOf('abcjs-') !== 0 && ret[i].length > 0) // if the prefix doesn't already exist and the class is not blank.\n\t\t\t\tret[i] = 'abcjs-' + ret[i];\n\t\t}\n\t}\n\treturn ret.join(' ');\n};\n\n\nmodule.exports = Classes;\n","var GetFontAndAttr = function GetFontAndAttr(formatting, classes) {\n\tthis.formatting = formatting;\n\tthis.classes = classes;\n};\n\nGetFontAndAttr.prototype.updateFonts = function (fontOverrides) {\n\tif (fontOverrides.gchordfont)\n\t\tthis.formatting.gchordfont = fontOverrides.gchordfont;\n\tif (fontOverrides.tripletfont)\n\t\tthis.formatting.tripletfont = fontOverrides.tripletfont;\n\tif (fontOverrides.annotationfont)\n\t\tthis.formatting.annotationfont = fontOverrides.annotationfont;\n\tif (fontOverrides.vocalfont)\n\t\tthis.formatting.vocalfont = fontOverrides.vocalfont;\n};\n\nGetFontAndAttr.prototype.getFamily = function (type) {\n\tif (type[0] === '\"' && type[type.length-1] === '\"') {\n\t\treturn type.substring(1, type.length-1)\n\t}\n\treturn type\n};\n\nGetFontAndAttr.prototype.calc = function (type, klass) {\n\tvar font;\n\tif (typeof type === 'string') {\n\t\tfont = this.formatting[type];\n\t\t// Raphael deliberately changes the font units to pixels for some reason, so we need to change points to pixels here.\n\t\tif (font)\n\t\t\tfont = { face: font.face, size: Math.round(font.size * 4 / 3), decoration: font.decoration, style: font.style, weight: font.weight, box: font.box };\n\t\telse\n\t\t\tfont = { face: \"Arial\", size: Math.round(12 * 4 / 3), decoration: \"underline\", style: \"normal\", weight: \"normal\" };\n\t} else\n\t\tfont = { face: type.face, size: Math.round(type.size * 4 / 3), decoration: type.decoration, style: type.style, weight: type.weight, box: type.box };\n\tvar paddingPercent = this.formatting.fontboxpadding ? this.formatting.fontboxpadding : 0.1\n\tfont.padding = font.size * paddingPercent;\n\n\tvar attr = {\n\t\t\"font-size\": font.size, 'font-style': font.style,\n\t\t\"font-family\": this.getFamily(font.face), 'font-weight': font.weight, 'text-decoration': font.decoration,\n\t\t'class': this.classes.generate(klass)\n\t};\n\treturn { font: font, attr: attr };\n};\n\nmodule.exports = GetFontAndAttr;\n","var GetTextSize = function GetTextSize(getFontAndAttr, svg) {\n\tthis.getFontAndAttr = getFontAndAttr;\n\tthis.svg = svg;\n};\n\nGetTextSize.prototype.updateFonts = function (fontOverrides) {\n\tthis.getFontAndAttr.updateFonts(fontOverrides);\n};\n\nGetTextSize.prototype.attr = function (type, klass) {\n\treturn this.getFontAndAttr.calc(type, klass);\n};\n\nGetTextSize.prototype.getFamily = function (type) {\n\tif (type[0] === '\"' && type[type.length-1] === '\"') {\n\t\treturn type.substring(1, type.length-1)\n\t}\n\treturn type\n};\n\nGetTextSize.prototype.calc = function (text, type, klass, el) {\n\tvar hash;\n\t// This can be passed in either a string or a font. If it is a string it names one of the standard fonts.\n\tif (typeof type === 'string')\n\t\thash = this.attr(type, klass);\n\telse {\n\t\thash = {\n\t\t\tfont: {\n\t\t\t\tface: type.face,\n\t\t\t\tsize: type.size,\n\t\t\t\tdecoration: type.decoration,\n\t\t\t\tstyle: type.style,\n\t\t\t\tweight: type.weight\n\t\t\t},\n\t\t\tattr: {\n\t\t\t\t\"font-size\": type.size,\n\t\t\t\t\"font-style\": type.style,\n\t\t\t\t\"font-family\": this.getFamily(type.face),\n\t\t\t\t\"font-weight\": type.weight,\n\t\t\t\t\"text-decoration\": type.decoration,\n\t\t\t\t\"class\": this.getFontAndAttr.classes.generate(klass)\n\t\t\t}\n\t\t}\n\t}\n\tvar size = this.svg.getTextSize(text, hash.attr, el);\n\tif (hash.font.box) {\n\t\t// Add padding and an equal margin to each side.\n\t\treturn { height: size.height + hash.font.padding * 4, width: size.width + hash.font.padding * 4 };\n\t}\n\treturn size;\n};\n\nGetTextSize.prototype.baselineToCenter = function (text, type, klass, index, total) {\n\t// This is for the case where SVG wants to use the baseline of the first line as the Y coordinate.\n\t// If there are multiple lines of text or there is an array of text then that will not be centered so this adjusts it.\n\tvar height = this.calc(text, type, klass).height;\n\tvar fontHeight = this.attr(type, klass).font.size;\n\n\treturn height * 0.5 + (total - index - 2) * fontHeight;\n};\n\n\nmodule.exports = GetTextSize;\n","var setClass = function (elemset, addClass, removeClass, color) {\n\tif (!elemset)\n\t\treturn;\n\tfor (var i = 0; i < elemset.length; i++) {\n\t\tvar el = elemset[i];\n\t\tvar attr = el.getAttribute(\"highlight\");\n\t\tif (!attr) attr = \"fill\";\n\t\tel.setAttribute(attr, color);\n\t\tvar kls = el.getAttribute(\"class\");\n\t\tif (!kls) kls = \"\";\n\t\tkls = kls.replace(removeClass, \"\");\n\t\tkls = kls.replace(addClass, \"\");\n\t\tif (addClass.length > 0) {\n\t\t\tif (kls.length > 0 && kls[kls.length - 1] !== ' ') kls += \" \";\n\t\t\tkls += addClass;\n\t\t}\n\t\tel.setAttribute(\"class\", kls);\n\t}\n};\n\nmodule.exports = setClass;\n","var spacing = {};\n\nspacing.FONTEM = 360;\nspacing.FONTSIZE = 30;\nspacing.STEP = spacing.FONTSIZE * 93 / 720;\nspacing.SPACE = 10;\nspacing.TOPNOTE = 15;\nspacing.STAVEHEIGHT = 100;\nspacing.INDENT = 50;\n\nmodule.exports = spacing;\n","function findNumber(klass, match, target, name) {\n\tif (klass.indexOf(match) === 0) {\n\t\tvar value = klass.replace(match, '');\n\t\tvar num = parseInt(value, 10);\n\t\tif ('' + num === value)\n\t\t\ttarget[name] = num;\n\t}\n}\n\nfunction createAnalysis(target, ev) {\n\tvar classes = [];\n\tif (target.absEl.elemset) {\n\t\tvar classObj = {};\n\t\tfor (var j = 0; j < target.absEl.elemset.length; j++) {\n\t\t\tvar es = target.absEl.elemset[j];\n\t\t\tif (es) {\n\t\t\t\tvar klass = es.getAttribute(\"class\").split(' ');\n\t\t\t\tfor (var k = 0; k < klass.length; k++)\n\t\t\t\t\tclassObj[klass[k]] = true;\n\t\t\t}\n\t\t}\n\t\tfor (var kk = 0; kk < Object.keys(classObj).length; kk++)\n\t\t\tclasses.push(Object.keys(classObj)[kk]);\n\t}\n\tvar analysis = {};\n\tfor (var ii = 0; ii < classes.length; ii++) {\n\t\tfindNumber(classes[ii], \"abcjs-v\", analysis, \"voice\");\n\t\tfindNumber(classes[ii], \"abcjs-l\", analysis, \"line\");\n\t\tfindNumber(classes[ii], \"abcjs-m\", analysis, \"measure\");\n\t}\n\tif (target.staffPos)\n\t\tanalysis.staffPos = target.staffPos;\n\tvar closest = ev.target;\n\twhile (closest && closest.dataset && !closest.dataset.name && closest.tagName.toLowerCase() !== 'svg')\n\t\tclosest = closest.parentNode;\n\tvar parent = ev.target;\n\twhile (parent && parent.dataset && !parent.dataset.index && parent.tagName.toLowerCase() !== 'svg')\n\t\tparent = parent.parentNode;\n\tif (parent && parent.dataset) {\n\t\tanalysis.name = parent.dataset.name;\n\t\tanalysis.clickedName = closest.dataset.name;\n\t\tanalysis.parentClasses = parent.classList;\n\t}\n\tif (closest && closest.classList)\n\t\tanalysis.clickedClasses = closest.classList;\n\tanalysis.selectableElement = target.svgEl;\n\treturn {classes: classes, analysis: analysis}\n}\n\nmodule.exports = createAnalysis;\n","var createAnalysis = require('./create-analysis');\n\nfunction findSelectableElement(event) {\n\tvar selectable = event\n\twhile (selectable && selectable.attributes && selectable.tagName.toLowerCase() !== 'svg' && !selectable.attributes.selectable) {\n\t\tselectable = selectable.parentNode\n\t}\n\tif (selectable && selectable.attributes && selectable.attributes.selectable) {\n\t\tvar index = selectable.attributes['data-index'].nodeValue\n\t\tif (index) {\n\t\t\tindex = parseInt(index, 10)\n\t\t\tif (index >= 0 && index < this.selectables.length) {\n\t\t\t\tvar element = this.selectables[index]\n\t\t\t\tvar ret = createAnalysis(element, event)\n\t\t\t\tret.index = index\n\t\t\t\tret.element = element\n\t\t\t\treturn ret\n\t\t\t}\n\t\t}\n\t}\n\treturn null\n}\n\nmodule.exports = findSelectableElement;\n","var setClass = require('../helpers/set-class');\n\nvar highlight = function (klass, color) {\n\tif (klass === undefined)\n\t\tklass = \"abcjs-note_selected\";\n\tif (color === undefined)\n\t\tcolor = \"#ff0000\";\n\tsetClass(this.elemset, klass, \"\", color);\n};\n\nmodule.exports = highlight;\n","var spacing = require('../helpers/spacing');\nvar createAnalysis = require('./create-analysis');\n\nfunction setupSelection(engraver, svgs) {\n\tengraver.rangeHighlight = rangeHighlight;\n\tif (engraver.dragging) {\n\t\tfor (var h = 0; h < engraver.selectables.length; h++) {\n\t\t\tvar hist = engraver.selectables[h];\n\t\t\tif (hist.svgEl.getAttribute(\"selectable\") === \"true\") {\n\t\t\t\thist.svgEl.setAttribute(\"tabindex\", 0);\n\t\t\t\thist.svgEl.setAttribute(\"data-index\", h);\n\t\t\t\thist.svgEl.addEventListener(\"keydown\", keyboardDown.bind(engraver));\n\t\t\t\thist.svgEl.addEventListener(\"keyup\", keyboardSelection.bind(engraver));\n\t\t\t\thist.svgEl.addEventListener(\"focus\", elementFocused.bind(engraver));\n\t\t\t}\n\t\t}\n\t}\n\tfor (var i = 0; i < svgs.length; i++) {\n\t\tsvgs[i].addEventListener('touchstart', mouseDown.bind(engraver), { passive: true });\n\t\tsvgs[i].addEventListener('touchmove', mouseMove.bind(engraver), { passive: true });\n\t\tsvgs[i].addEventListener('touchend', mouseUp.bind(engraver), { passive: true });\n\t\tsvgs[i].addEventListener('mousedown', mouseDown.bind(engraver));\n\t\tsvgs[i].addEventListener('mousemove', mouseMove.bind(engraver));\n\t\tsvgs[i].addEventListener('mouseup', mouseUp.bind(engraver));\n\t}\n}\n\nfunction getCoord(ev) {\n\tvar scaleX = 1;\n\tvar scaleY = 1;\n\tvar svg = ev.target.closest('svg')\n\tvar yOffset = 0\n\n\t// when renderer.options.responsive === 'resize' the click coords are in relation to the HTML\n\t// element, we need to convert to the SVG viewBox coords\n\tif (svg && svg.viewBox && svg.viewBox.baseVal) { // Firefox passes null to this when no viewBox is given\n\t\t// Chrome makes these values null when no viewBox is given.\n\t\tif (svg.viewBox.baseVal.width !== 0)\n\t\t\tscaleX = svg.viewBox.baseVal.width / svg.clientWidth\n\t\tif (svg.viewBox.baseVal.height !== 0)\n\t\t\tscaleY = svg.viewBox.baseVal.height / svg.clientHeight\n\t\tyOffset = svg.viewBox.baseVal.y\n\t}\n\n\tvar svgClicked = ev.target && ev.target.tagName === \"svg\";\n\tvar x;\n\tvar y;\n\tif (svgClicked) {\n\t\tx = ev.offsetX;\n\t\ty = ev.offsetY;\n\t} else {\n\t\tx = ev.layerX;\n\t\ty = ev.layerY;\n\t}\n\n\tx = x * scaleX;\n\ty = y * scaleY;\n\t//console.log(x, y)\n\n\treturn [x, y + yOffset];\n}\n\nfunction elementFocused(ev) {\n\t// If there had been another element focused and is being dragged, then report that before setting the new element up.\n\tif (this.dragMechanism === \"keyboard\" && this.dragYStep !== 0 && this.dragTarget)\n\t\tnotifySelect.bind(this)(this.dragTarget, this.dragYStep, this.selectables.length, this.dragIndex, ev);\n\n\tthis.dragYStep = 0;\n}\n\nfunction keyboardDown(ev) {\n\t// Swallow the up and down arrow events - they will be used for dragging with the keyboard\n\tswitch (ev.keyCode) {\n\t\tcase 38:\n\t\tcase 40:\n\t\t\tev.preventDefault();\n\t}\n}\n\nfunction keyboardSelection(ev) {\n\t// \"this\" is the EngraverController because of the bind(this) when setting the event listener.\n\tvar handled = false;\n\tvar index = ev.target.dataset.index;\n\tswitch (ev.keyCode) {\n\t\tcase 13:\n\t\tcase 32:\n\t\t\thandled = true;\n\t\t\tthis.dragTarget = this.selectables[index];\n\t\t\tthis.dragIndex = index;\n\t\t\tthis.dragMechanism = \"keyboard\";\n\t\t\tmouseUp.bind(this)(ev);\n\t\t\tbreak;\n\t\tcase 38: // arrow up\n\t\t\thandled = true;\n\t\t\tthis.dragTarget = this.selectables[index];\n\t\t\tthis.dragIndex = index;\n\t\t\tif (this.dragTarget && this.dragTarget.isDraggable) {\n\t\t\t\tif (this.dragging && this.dragTarget.isDraggable)\n\t\t\t\t\tthis.dragTarget.absEl.highlight(undefined, this.dragColor);\n\t\t\t\tthis.dragYStep--;\n\t\t\t\tthis.dragTarget.svgEl.setAttribute(\"transform\", \"translate(0,\" + (this.dragYStep * spacing.STEP) + \")\");\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 40: // arrow down\n\t\t\thandled = true;\n\t\t\tthis.dragTarget = this.selectables[index];\n\t\t\tthis.dragIndex = index;\n\t\t\tthis.dragMechanism = \"keyboard\";\n\t\t\tif (this.dragTarget && this.dragTarget.isDraggable) {\n\t\t\t\tif (this.dragging && this.dragTarget.isDraggable)\n\t\t\t\t\tthis.dragTarget.absEl.highlight(undefined, this.dragColor);\n\t\t\t\tthis.dragYStep++;\n\t\t\t\tthis.dragTarget.svgEl.setAttribute(\"transform\", \"translate(0,\" + (this.dragYStep * spacing.STEP) + \")\");\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 9: // tab\n\t\t\t// This is losing focus - if there had been dragging, then do the callback\n\t\t\tif (this.dragYStep !== 0) {\n\t\t\t\tmouseUp.bind(this)(ev);\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\t//console.log(ev);\n\t\t\tbreak;\n\t}\n\tif (handled)\n\t\tev.preventDefault();\n}\n\nfunction findElementInHistory(selectables, el) {\n\tif (!el)\n\t\treturn -1;\n\tfor (var i = 0; i < selectables.length; i++) {\n\t\tif (el.dataset.index === selectables[i].svgEl.dataset.index)\n\t\t\treturn i;\n\t}\n\treturn -1;\n}\n\nfunction findElementByCoord(self, x, y) {\n\tvar minDistance = 9999999;\n\tvar closestIndex = -1;\n\tfor (var i = 0; i < self.selectables.length && minDistance > 0; i++) {\n\t\tvar el = self.selectables[i];\n\n\t\tself.getDim(el);\n\t\tif (el.dim.left < x && el.dim.right > x && el.dim.top < y && el.dim.bottom > y) {\n\t\t\t// See if it is a direct hit on an element - if so, definitely take it (there are no overlapping elements)\n\t\t\tclosestIndex = i;\n\t\t\tminDistance = 0;\n\t\t} else if (el.dim.top < y && el.dim.bottom > y) {\n\t\t\t// See if it is the same vertical as the element. Then the distance is the x difference\n\t\t\tvar horiz = Math.min(Math.abs(el.dim.left - x), Math.abs(el.dim.right - x));\n\t\t\tif (horiz < minDistance) {\n\t\t\t\tminDistance = horiz;\n\t\t\t\tclosestIndex = i;\n\t\t\t}\n\t\t} else if (el.dim.left < x && el.dim.right > x) {\n\t\t\t// See if it is the same horizontal as the element. Then the distance is the y difference\n\t\t\tvar vert = Math.min(Math.abs(el.dim.top - y), Math.abs(el.dim.bottom - y));\n\t\t\tif (vert < minDistance) {\n\t\t\t\tminDistance = vert;\n\t\t\t\tclosestIndex = i;\n\t\t\t}\n\t\t} else {\n\t\t\t// figure out the distance to this element.\n\t\t\tvar dx = Math.abs(x - el.dim.left) > Math.abs(x - el.dim.right) ? Math.abs(x - el.dim.right) : Math.abs(x - el.dim.left);\n\t\t\tvar dy = Math.abs(y - el.dim.top) > Math.abs(y - el.dim.bottom) ? Math.abs(y - el.dim.bottom) : Math.abs(y - el.dim.top);\n\t\t\tvar hypotenuse = Math.sqrt(dx * dx + dy * dy);\n\t\t\tif (hypotenuse < minDistance) {\n\t\t\t\tminDistance = hypotenuse;\n\t\t\t\tclosestIndex = i;\n\t\t\t}\n\t\t}\n\t}\n\treturn (closestIndex >= 0 && minDistance <= 12) ? closestIndex : -1;\n}\n\nfunction getBestMatchCoordinates(dim, ev, scale) {\n\t// Different browsers have conflicting meanings for the coordinates that are returned.\n\t// If the item we want is clicked on directly, then we will just see what is the best match.\n\t// This seems like less of a hack than browser sniffing.\n\tif (dim.x <= ev.offsetX && dim.x + dim.width >= ev.offsetX &&\n\t\tdim.y <= ev.offsetY && dim.y + dim.height >= ev.offsetY)\n\t\treturn [ev.offsetX, ev.offsetY];\n\t// Firefox returns a weird value for offset, but layer is correct.\n\t// Safari and Chrome return the correct value for offset, but layer is multiplied by the scale (that is, if it were rendered with { scale: 2 })\n\t// For instance (if scale is 2):\n\t// Firefox: { offsetY: 5, layerY: 335 }\n\t// Others: {offsetY: 335, layerY: 670} (there could be a little rounding, so the number might not be exactly 2x)\n\t// So, if layerY/scale is approx. offsetY, then use offsetY, otherwise use layerY\n\tvar epsilon = Math.abs(ev.layerY / scale - ev.offsetY);\n\tif (epsilon < 3)\n\t\treturn [ev.offsetX, ev.offsetY];\n\telse\n\t\treturn [ev.layerX, ev.layerY];\n}\n\nfunction getTarget(target) {\n\t// This searches up the dom for the first item containing the attribute \"selectable\", or stopping at the SVG.\n\tif (!target)\n\t\treturn null;\n\tif (target.tagName === \"svg\")\n\t\treturn target;\n\n\tif (!target.getAttribute)\n\t\treturn null;\t\n\tvar found = target.getAttribute(\"selectable\");\n\twhile (!found) {\n\t\tif (!target.parentElement)\n\t\t\tfound = true;\n\t\telse {\n\t\t\ttarget = target.parentElement;\n\t\t\tif (target.tagName === \"svg\")\n\t\t\t\tfound = true;\n\t\t\telse\n\t\t\t\tfound = target.getAttribute(\"selectable\");\n\t\t}\n\t}\n\treturn target;\n}\n\nfunction getMousePosition(self, ev) {\n\t// if the user clicked exactly on an element that we're interested in, then we already have the answer.\n\t// This is more reliable than the calculations because firefox returns different coords for offsetX, offsetY\n\tvar x;\n\tvar y;\n\tvar box;\n\tvar clickedOn = findElementInHistory(self.selectables, getTarget(ev.target));\n\tif (clickedOn >= 0) {\n\t\t// There was a direct hit on an element.\n\t\tbox = getBestMatchCoordinates(self.selectables[clickedOn].svgEl.getBBox(), ev, self.scale);\n\t\tx = box[0];\n\t\ty = box[1];\n\t\t//console.log(\"clicked on\", clickedOn, x, y, self.selectables[clickedOn].svgEl.getBBox(), ev.target.getBBox());\n\t} else {\n\t\t// See if they clicked close to an element.\n\t\tbox = getCoord(ev);\n\t\tx = box[0];\n\t\ty = box[1];\n\t\tclickedOn = findElementByCoord(self, x, y);\n\t\t//console.log(\"clicked near\", clickedOn, x, y, printEl(ev.target));\n\t}\n\treturn { x: x, y: y, clickedOn: clickedOn };\n}\n\nfunction attachMissingTouchEventAttributes(touchEv) {\n\tif (!touchEv || !touchEv.target || !touchEv.touches || touchEv.touches.length < 1)\n\t\treturn\n\tvar rect = touchEv.target.getBoundingClientRect();\n\tvar offsetX = touchEv.touches[0].pageX - rect.left;\n\tvar offsetY = touchEv.touches[0].pageY - rect.top;\n\n\ttouchEv.touches[0].offsetX = offsetX;\n\ttouchEv.touches[0].offsetY = offsetY;\n\n\ttouchEv.touches[0].layerX = touchEv.touches[0].pageX;\n\ttouchEv.touches[0].layerY = touchEv.touches[0].pageY;\n}\n\nfunction mouseDown(ev) {\n\t// \"this\" is the EngraverController because of the bind(this) when setting the event listener.\n\tvar _ev = ev;\n\tif (ev.type === 'touchstart') {\n\t\tattachMissingTouchEventAttributes(ev);\n\t\tif (ev.touches.length > 0)\n\t\t\t_ev = ev.touches[0];\n\t}\n\n\tvar positioning = getMousePosition(this, _ev);\n\n\t// Only start dragging if the user clicked close enough to an element and clicked with the main mouse button.\n\tif (positioning.clickedOn >= 0 && (ev.type === 'touchstart' || ev.button === 0) && this.selectables[positioning.clickedOn]) {\n\t\tthis.dragTarget = this.selectables[positioning.clickedOn];\n\t\tthis.dragIndex = positioning.clickedOn;\n\t\tthis.dragMechanism = \"mouse\";\n\t\tthis.dragMouseStart = { x: positioning.x, y: positioning.y };\n\t\tif (this.dragging && this.dragTarget.isDraggable) {\n\t\t\taddGlobalClass(this.renderer.paper, \"abcjs-dragging-in-progress\");\n\t\t\tthis.dragTarget.absEl.highlight(undefined, this.dragColor);\n\t\t}\n\t}\n}\n\nfunction mouseMove(ev) {\n\tvar _ev = ev;\n\tif (ev.type === 'touchmove') {\n\t\tattachMissingTouchEventAttributes(ev);\n\t\tif (ev.touches.length > 0)\n\t\t\t_ev = ev.touches[0];\n\t}\n\tthis.lastTouchMove = ev;\n\t// \"this\" is the EngraverController because of the bind(this) when setting the event listener.\n\n\tif (!this.dragTarget || !this.dragging || !this.dragTarget.isDraggable || this.dragMechanism !== 'mouse' || !this.dragMouseStart)\n\t\treturn;\n\n\tvar positioning = getMousePosition(this, _ev);\n\n\tvar yDist = Math.round((positioning.y - this.dragMouseStart.y) / spacing.STEP);\n\tif (yDist !== this.dragYStep) {\n\t\tthis.dragYStep = yDist;\n\t\tthis.dragTarget.svgEl.setAttribute(\"transform\", \"translate(0,\" + (yDist * spacing.STEP) + \")\");\n\t}\n}\n\nfunction mouseUp(ev) {\n\t// \"this\" is the EngraverController because of the bind(this) when setting the event listener.\n\tvar _ev = ev;\n\tif (ev.type === 'touchend' && this.lastTouchMove) {\n\t\tattachMissingTouchEventAttributes(this.lastTouchMove);\n\t\tif (this.lastTouchMove && this.lastTouchMove.touches && this.lastTouchMove.touches.length > 0)\n\t\t\t_ev = this.lastTouchMove.touches[0];\n\t}\n\n\tif (!this.dragTarget)\n\t\treturn;\n\n\tclearSelection.bind(this)();\n\tif (this.dragTarget.absEl && this.dragTarget.absEl.highlight) {\n\t\tthis.selected = [this.dragTarget.absEl];\n\t\tthis.dragTarget.absEl.highlight(undefined, this.selectionColor);\n\t}\n\n\tnotifySelect.bind(this)(this.dragTarget, this.dragYStep, this.selectables.length, this.dragIndex, _ev);\n\tif (this.dragTarget.svgEl && this.dragTarget.svgEl.focus) {\n\t\tthis.dragTarget.svgEl.focus();\n\t\tthis.dragTarget = null;\n\t\tthis.dragIndex = -1;\n\t}\n\tremoveGlobalClass(this.renderer.svg, \"abcjs-dragging-in-progress\");\n}\n\nfunction setSelection(dragIndex) {\n\tif (dragIndex >= 0 && dragIndex < this.selectables.length) {\n\t\tthis.dragTarget = this.selectables[dragIndex];\n\t\tthis.dragIndex = dragIndex;\n\t\tthis.dragMechanism = \"keyboard\";\n\t\tmouseUp.bind(this)({ target: this.dragTarget.svgEl });\n\t}\n}\n\n\nfunction notifySelect(target, dragStep, dragMax, dragIndex, ev) {\n\tvar ret = createAnalysis(target, ev)\n\tvar classes = ret.classes\n\tvar analysis = ret.analysis\n\n\tfor (var i = 0; i < this.listeners.length; i++) {\n\t\tthis.listeners[i](target.absEl.abcelem, target.absEl.tuneNumber, classes.join(' '), analysis, { step: dragStep, max: dragMax, index: dragIndex, setSelection: setSelection.bind(this) }, ev);\n\t}\n}\n\nfunction clearSelection() {\n\tfor (var i = 0; i < this.selected.length; i++) {\n\t\tthis.selected[i].unhighlight(undefined, this.renderer.foregroundColor);\n\t}\n\tthis.selected = [];\n}\n\nfunction rangeHighlight(start, end) {\n\tclearSelection.bind(this)();\n\tfor (var line = 0; line < this.staffgroups.length; line++) {\n\t\tvar voices = this.staffgroups[line].voices;\n\t\tfor (var voice = 0; voice < voices.length; voice++) {\n\t\t\tvar elems = voices[voice].children;\n\t\t\tfor (var elem = 0; elem < elems.length; elem++) {\n\t\t\t\t// Since the user can highlight more than an element, or part of an element, a hit is if any of the endpoints\n\t\t\t\t// is inside the other range.\n\t\t\t\tvar elStart = elems[elem].abcelem.startChar;\n\t\t\t\tvar elEnd = elems[elem].abcelem.endChar;\n\t\t\t\tif ((end > elStart && start < elEnd) || ((end === start) && end === elEnd)) {\n\t\t\t\t\t//\t\tif (elems[elem].abcelem.startChar>=start && elems[elem].abcelem.endChar<=end) {\n\t\t\t\t\tthis.selected[this.selected.length] = elems[elem];\n\t\t\t\t\telems[elem].highlight(undefined, this.selectionColor);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction getClassSet(el) {\n\tvar oldClass = el.getAttribute('class');\n\tif (!oldClass)\n\t\toldClass = \"\";\n\tvar klasses = oldClass.split(\" \");\n\tvar obj = {};\n\tfor (var i = 0; i < klasses.length; i++)\n\t\tobj[klasses[i]] = true;\n\treturn obj;\n}\n\nfunction setClassSet(el, klassSet) {\n\tvar klasses = [];\n\tfor (var key in klassSet) {\n\t\tif (klassSet.hasOwnProperty(key))\n\t\t\tklasses.push(key);\n\t}\n\tel.setAttribute('class', klasses.join(' '));\n}\n\nfunction addGlobalClass(svg, klass) {\n\tif (svg) {\n\t\tvar obj = getClassSet(svg.svg);\n\t\tobj[klass] = true;\n\t\tsetClassSet(svg.svg, obj);\n\t}\n}\n\nfunction removeGlobalClass(svg, klass) {\n\tif (svg) {\n\t\tvar obj = getClassSet(svg.svg);\n\t\tdelete obj[klass];\n\t\tsetClassSet(svg.svg, obj);\n\t}\n}\n\nmodule.exports = setupSelection;\n","var setClass = require('../helpers/set-class');\n\nvar unhighlight = function (klass, color) {\n\tif (klass === undefined)\n\t\tklass = \"abcjs-note_selected\";\n\tif (color === undefined)\n\t\tcolor = \"#000000\";\n\tsetClass(this.elemset, \"\", klass, color);\n};\n\nmodule.exports = unhighlight;\n","var RelativeElement = require('../creation/elements/relative-element');\nvar spacing = require('../helpers/spacing');\nvar getBarYAt = require('./get-bar-y-at');\n\nvar layoutBeam = function (beam) {\n\tif (beam.elems.length === 0 || beam.allrests) return;\n\n\tvar dy = calcDy(beam.stemsUp, beam.isgrace); // This is the width of the beam line.\n\n\t// create the main beam\n\tvar firstElement = beam.elems[0];\n\tvar lastElement = beam.elems[beam.elems.length - 1];\n\tvar minStemHeight = 0; // The following is to leave space for \"!///!\" marks.\n\tvar referencePitch = beam.stemsUp ? firstElement.abcelem.maxpitch : firstElement.abcelem.minpitch;\n\tminStemHeight = minStem(firstElement, beam.stemsUp, referencePitch, minStemHeight);\n\tminStemHeight = minStem(lastElement, beam.stemsUp, referencePitch, minStemHeight);\n\tminStemHeight = Math.max(beam.stemHeight, minStemHeight + 3); // TODO-PER: The 3 is the width of a 16th beam. The actual height of the beam should be used instead.\n\tvar yPos = calcYPos(beam.average, beam.elems.length, minStemHeight, beam.stemsUp, firstElement.abcelem.averagepitch, lastElement.abcelem.averagepitch, beam.isflat, beam.min, beam.max, beam.isgrace);\n\tvar xPos = calcXPos(beam.stemsUp, firstElement, lastElement);\n\tbeam.addBeam({ startX: xPos[0], endX: xPos[1], startY: yPos[0], endY: yPos[1], dy: dy });\n\n\t// create the rest of the beams (in the case of 1/16th notes, etc.\n\tvar beams = createAdditionalBeams(beam.elems, beam.stemsUp, beam.beams[0], beam.isgrace, dy);\n\tfor (var i = 0; i < beams.length; i++)\n\t\tbeam.addBeam(beams[i]);\n\n\t// Now that the main beam is defined, we know how tall the stems should be, so create them and attach them to the original notes.\n\tcreateStems(beam.elems, beam.stemsUp, beam.beams[0], dy, beam.mainNote);\n};\n\nvar getDurlog = function (duration) {\n\t// TODO-PER: This is a hack to prevent a Chrome lockup. Duration should have been defined already,\n\t// but there's definitely a case where it isn't. [Probably something to do with triplets.]\n\tif (duration === undefined) {\n\t\treturn 0;\n\t}\n\t// console.log(\"getDurlog: \" + duration);\n\treturn Math.floor(Math.log(duration) / Math.log(2));\n};\n\n//\n// private functions\n//\nfunction minStem(element, stemsUp, referencePitch, minStemHeight) {\n\tif (!element.children)\n\t\treturn minStemHeight;\n\tfor (var i = 0; i < element.children.length; i++) {\n\t\tvar elem = element.children[i];\n\t\tif (stemsUp && elem.top !== undefined && elem.c === \"flags.ugrace\")\n\t\t\tminStemHeight = Math.max(minStemHeight, elem.top - referencePitch);\n\t\telse if (!stemsUp && elem.bottom !== undefined && elem.c === \"flags.ugrace\")\n\t\t\tminStemHeight = Math.max(minStemHeight, referencePitch - elem.bottom + 7); // The extra 7 is because we are measuring the slash from the top.\n\t}\n\treturn minStemHeight;\n}\n\nfunction calcSlant(leftAveragePitch, rightAveragePitch, numStems, isFlat) {\n\tif (isFlat)\n\t\treturn 0;\n\tvar slant = leftAveragePitch - rightAveragePitch;\n\tvar maxSlant = numStems / 2;\n\n\tif (slant > maxSlant) slant = maxSlant;\n\tif (slant < -maxSlant) slant = -maxSlant;\n\treturn slant;\n}\n\nfunction calcDy(asc, isGrace) {\n\tvar dy = (asc) ? spacing.STEP : -spacing.STEP;\n\tif (isGrace) dy = dy * 0.4;\n\treturn dy;\n}\n\nfunction calcXPos(asc, firstElement, lastElement) {\n\tvar starthead = firstElement.heads[asc ? 0 : firstElement.heads.length - 1];\n\tvar endhead = lastElement.heads[asc ? 0 : lastElement.heads.length - 1];\n\tvar startX = starthead.x;\n\tif (asc) startX += starthead.w - 0.6;\n\tvar endX = endhead.x;\n\tendX += (asc) ? endhead.w : 0.6;\n\treturn [startX, endX];\n}\n\nfunction calcYPos(average, numElements, stemHeight, asc, firstAveragePitch, lastAveragePitch, isFlat, minPitch, maxPitch, isGrace) {\n\tvar barpos = stemHeight - 2; // (isGrace)? 5:7;\n\tvar barminpos = stemHeight - 2;\n\tvar pos = Math.round(asc ? Math.max(average + barpos, maxPitch + barminpos) : Math.min(average - barpos, minPitch - barminpos));\n\n\tvar slant = calcSlant(firstAveragePitch, lastAveragePitch, numElements, isFlat);\n\tvar startY = pos + Math.floor(slant / 2);\n\tvar endY = pos + Math.floor(-slant / 2);\n\n\t// If the notes are too high or too low, make the beam go down to the middle\n\tif (!isGrace) {\n\t\tif (asc && pos < 6) {\n\t\t\tstartY = 6;\n\t\t\tendY = 6;\n\t\t} else if (!asc && pos > 6) {\n\t\t\tstartY = 6;\n\t\t\tendY = 6;\n\t\t}\n\t}\n\n\treturn [startY, endY];\n}\n\nfunction createStems(elems, asc, beam, dy, mainNote) {\n\tfor (var i = 0; i < elems.length; i++) {\n\t\tvar elem = elems[i];\n\t\tif (elem.abcelem.rest)\n\t\t\tcontinue;\n\t\t// TODO-PER: This is odd. If it is a regular beam then elems is an array of AbsoluteElements, if it is a grace beam then it is an array of objects , so we directly attach the element to the parent. We tell it if is a grace note because they are passed in as a generic object instead of an AbsoluteElement.\n\t\tvar isGrace = elem.addExtra ? false : true;\n\t\tvar parent = isGrace ? mainNote : elem;\n\t\tvar furthestHead = elem.heads[(asc) ? 0 : elem.heads.length - 1];\n\t\tvar ovalDelta = 1 / 5;//(isGrace)?1/3:1/5;\n\t\tvar pitch = furthestHead.pitch + ((asc) ? ovalDelta : -ovalDelta);\n\t\tvar dx = asc ? furthestHead.w : 0; // down-pointing stems start on the left side of the note, up-pointing stems start on the right side, so we offset by the note width.\n\t\tif (!isGrace)\n\t\t\tdx += furthestHead.dx;\n\t\tvar x = furthestHead.x + dx; // this is now the actual x location in pixels.\n\t\tvar bary = getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, x);\n\t\tvar lineWidth = (asc) ? -0.6 : 0.6;\n\t\tif (!asc)\n\t\t\tbary -= (dy / 2) / spacing.STEP;\t// TODO-PER: This is just a fudge factor so the down-pointing stems don't overlap.\n\t\tif (isGrace)\n\t\t\tdx += elem.heads[0].dx;\n\t\t// TODO-PER-HACK: One type of note head has a different placement of the stem. This should be more generically calculated:\n\t\tif (furthestHead.c === 'noteheads.slash.quarter') {\n\t\t\tif (asc)\n\t\t\t\tpitch += 1;\n\t\t\telse\n\t\t\t\tpitch -= 1;\n\t\t}\n\t\tvar stem = new RelativeElement(null, dx, 0, pitch, {\n\t\t\t\"type\": \"stem\",\n\t\t\t\"pitch2\": bary,\n\t\t\tlinewidth: lineWidth\n\t\t});\n\t\tstem.setX(parent.x); // This is after the x coordinates were set, so we have to set it directly.\n\t\tparent.addRight(stem);\n\t}\n\n}\n\nfunction createAdditionalBeams(elems, asc, beam, isGrace, dy) {\n\tvar beams = [];\n\tvar auxBeams = []; // auxbeam will be {x, y, durlog, single} auxbeam[0] should match with durlog=-4 (16th) (j=-4-durlog)\n\tfor (var i = 0; i < elems.length; i++) {\n\t\tvar elem = elems[i];\n\t\tif (elem.abcelem.rest)\n\t\t\tcontinue;\n\t\tvar furthestHead = elem.heads[(asc) ? 0 : elem.heads.length - 1];\n\t\tvar x = furthestHead.x + ((asc) ? furthestHead.w : 0);\n\t\tvar bary = getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, x);\n\n\t\tvar sy = (asc) ? -1.5 : 1.5;\n\t\tif (isGrace) sy = sy * 2 / 3; // This makes the second beam on grace notes closer to the first one.\n\t\tvar duration = elem.abcelem.duration; // get the duration via abcelem because of triplets\n\t\tif (duration === 0) duration = 0.25; // if this is stemless, then we use quarter note as the duration.\n\t\tfor (var durlog = getDurlog(duration); durlog < -3; durlog++) {\n\t\t\tvar index = -4 - durlog;\n\t\t\tif (auxBeams[index]) {\n\t\t\t\tauxBeams[index].single = false;\n\t\t\t} else {\n\t\t\t\tauxBeams[index] = {\n\t\t\t\t\tx: x + ((asc) ? -0.6 : 0), y: bary + sy * (index + 1),\n\t\t\t\t\tdurlog: durlog, single: true\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (i > 0 && elem.abcelem.beambr && elem.abcelem.beambr <= (index + 1)) {\n\t\t\t\tif (!auxBeams[index].split)\n\t\t\t\t\tauxBeams[index].split = [auxBeams[index].x];\n\t\t\t\tvar xPos = calcXPos(asc, elems[i - 1], elem);\n\t\t\t\tif (auxBeams[index].split[auxBeams[index].split.length - 1] >= xPos[0]) {\n\t\t\t\t\t// the reduction in beams leaves a note unattached so create a small flag for it.\n\t\t\t\t\txPos[0] += elem.w;\n\t\t\t\t}\n\t\t\t\tauxBeams[index].split.push(xPos[0]);\n\t\t\t\tauxBeams[index].split.push(xPos[1]);\n\t\t\t}\n\t\t}\n\n\t\tfor (var j = auxBeams.length - 1; j >= 0; j--) {\n\t\t\tif (i === elems.length - 1 || getDurlog(elems[i + 1].abcelem.duration) > (-j - 4)) {\n\n\t\t\t\tvar auxBeamEndX = x;\n\t\t\t\tvar auxBeamEndY = bary + sy * (j + 1);\n\n\n\t\t\t\tif (auxBeams[j].single) {\n\t\t\t\t\tauxBeamEndX = (i === 0) ? x + 5 : x - 5;\n\t\t\t\t\tauxBeamEndY = getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, auxBeamEndX) + sy * (j + 1);\n\t\t\t\t}\n\t\t\t\tvar b = { startX: auxBeams[j].x, endX: auxBeamEndX, startY: auxBeams[j].y, endY: auxBeamEndY, dy: dy }\n\t\t\t\tif (auxBeams[j].split !== undefined) {\n\t\t\t\t\tvar split = auxBeams[j].split;\n\t\t\t\t\tif (b.endX <= split[split.length - 1]) {\n\t\t\t\t\t\t// the reduction in beams leaves the last note by itself, so create a little flag for it\n\t\t\t\t\t\tsplit[split.length - 1] -= elem.w;\n\t\t\t\t\t}\n\t\t\t\t\tsplit.push(b.endX);\n\t\t\t\t\tb.split = auxBeams[j].split;\n\t\t\t\t}\n\t\t\t\tbeams.push(b);\n\t\t\t\tauxBeams = auxBeams.slice(0, j);\n\t\t\t}\n\t\t}\n\t}\n\treturn beams;\n}\n\nmodule.exports = layoutBeam;\n","function getBarYAt(startx, starty, endx, endy, x) {\n\treturn starty + (endy - starty) / (endx - startx) * (x - startx);\n}\n\nmodule.exports = getBarYAt;\n\n","function getLeftEdgeOfStaff(renderer, getTextSize, voices, brace, bracket) {\n\tvar x = renderer.padding.left;\n\n\t// find out how much space will be taken up by voice headers\n\tvar voiceheaderw = 0;\n\tvar i;\n\tvar size;\n\tfor (i = 0; i < voices.length; i++) {\n\t\tif (voices[i].header) {\n\t\t\tsize = getTextSize.calc(voices[i].header, 'voicefont', '');\n\t\t\tvoiceheaderw = Math.max(voiceheaderw, size.width);\n\t\t}\n\t}\n\tvoiceheaderw = addBraceSize(voiceheaderw, brace, getTextSize);\n\tvoiceheaderw = addBraceSize(voiceheaderw, bracket, getTextSize);\n\n\tif (voiceheaderw) {\n\t\t// Give enough spacing to the right - we use the width of an A for the amount of spacing.\n\t\tvar sizeW = getTextSize.calc(\"A\", 'voicefont', '');\n\t\tvoiceheaderw += sizeW.width;\n\t}\n\tx += voiceheaderw;\n\n\tvar ofs = 0;\n\tofs = setBraceLocation(brace, x, ofs);\n\tofs = setBraceLocation(bracket, x, ofs);\n\treturn x + ofs;\n}\n\nfunction addBraceSize(voiceheaderw, brace, getTextSize) {\n\tif (brace) {\n\t\tfor (var i = 0; i < brace.length; i++) {\n\t\t\tif (brace[i].header) {\n\t\t\t\tvar size = getTextSize.calc(brace[i].header, 'voicefont', '');\n\t\t\t\tvoiceheaderw = Math.max(voiceheaderw, size.width);\n\t\t\t}\n\t\t}\n\t}\n\treturn voiceheaderw;\n}\n\nfunction setBraceLocation(brace, x, ofs) {\n\tif (brace) {\n\t\tfor (var i = 0; i < brace.length; i++) {\n\t\t\tsetLocation(x, brace[i]);\n\t\t\tofs = Math.max(ofs, brace[i].getWidth());\n\t\t}\n\t}\n\treturn ofs;\n}\n\nfunction setLocation(x, element) {\n\telement.x = x;\n}\n\nmodule.exports = getLeftEdgeOfStaff;\n","var getLeftEdgeOfStaff = require('./get-left-edge-of-staff');\n\nfunction layoutInGrid(renderer, staffGroup, timeBasedLayout) {\n\tvar leftEdge = getLeftEdgeOfStaff(renderer, staffGroup.getTextSize, staffGroup.voices, staffGroup.brace, staffGroup.bracket);\n\tvar ret = getTotalDuration(staffGroup, timeBasedLayout.minPadding)\n\tvar totalDuration = ret.totalDuration\n\tvar minSpacing = ret.minSpacing\n\tvar totalWidth = minSpacing * totalDuration\n\tif (timeBasedLayout.minWidth)\n\t\ttotalWidth = Math.max(totalWidth, timeBasedLayout.minWidth)\n\tvar leftAlignPadding = timeBasedLayout.minPadding ? timeBasedLayout.minPadding/2 : 2 // If the padding isn't specified still give it some\n\n\tstaffGroup.startx = leftEdge\n\tstaffGroup.w = totalWidth + leftEdge\n\tfor (var i = 0; i < staffGroup.voices.length; i++) {\n\t\tvar voice = staffGroup.voices[i]\n\t\tvoice.startx = leftEdge\n\t\tvoice.w = totalWidth + leftEdge\n\n\t\tvar x = leftEdge\n\t\tvar afterFixedLeft = false\n\t\tvar durationUnit = 0\n\t\tfor (var j = 0; j < voice.children.length; j++) {\n\t\t\tvar child = voice.children[j]\n\t\t\tif (!afterFixedLeft) {\n\t\t\t\tif (child.duration !== 0) {\n\t\t\t\t\t// We got to the first music element on the line\n\t\t\t\t\tafterFixedLeft = true\n\t\t\t\t\tdurationUnit = (totalWidth + leftEdge - x) / totalDuration\n\t\t\t\t\tstaffGroup.gridStart = x\n\t\t\t\t} else {\n\t\t\t\t\t// We are still doing the preliminary stuff - clef, time sig, etc.\n\t\t\t\t\tchild.x = x\n\t\t\t\t\tx += child.w + child.minspacing\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (afterFixedLeft) {\n\t\t\t\tif (timeBasedLayout.align === 'center')\n\t\t\t\t\tchild.x = x + (child.duration * durationUnit) / 2 - child.w / 2\n\t\t\t\telse {\n\t\t\t\t\t// left align with padding - but no padding for barlines, they should be right aligned.\n\t\t\t\t\t// TODO-PER: it looks better to move bar lines one pixel to right. Not sure why.\n\t\t\t\t\tif (child.duration === 0) {\n\t\t\t\t\t\tchild.x = x + 1 - child.w\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// child.extraw has the width of the accidentals - push the note to the right to take that into consideration. It will be 0 if there is nothing to the left.\n\t\t\t\t\t\tchild.x = x + leftAlignPadding - child.extraw\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tx += child.duration * durationUnit\n\t\t\t}\n\t\t\tfor (var k = 0; k < child.children.length; k++) {\n\t\t\t\tvar grandchild = child.children[k]\n\t\t\t\t// some elements don't have a dx - Tempo, for instance\n\t\t\t\tvar dx = grandchild.dx ? grandchild.dx : 0\n\t\t\t\tgrandchild.x = child.x + dx\n\t\t\t}\n\t\t}\n\t\tstaffGroup.gridEnd = x\n\t}\n\treturn totalWidth\n}\n\nfunction getTotalDuration(staffGroup, timeBasedLayout) {\n\tvar maxSpacing = 0\n\tvar maxCount = 0\n\tfor (var i = 0; i < staffGroup.voices.length; i++) {\n\t\tvar count = 0\n\t\tvar voice = staffGroup.voices[i]\n\t\tfor (var j = 0; j < voice.children.length; j++) {\n\t\t\tvar element = voice.children[j]\n\t\t\tcount += element.duration\n\t\t\tif (element.duration) {\n\t\t\t\tvar width = (element.w+timeBasedLayout) / element.duration\n\t\t\t\tmaxSpacing = Math.max(maxSpacing, width)\n\t\t\t}\n\t\t}\n\t\tmaxCount = Math.max(maxCount, count)\n\t}\n\treturn { totalDuration: maxCount, minSpacing: maxSpacing}\n}\n\nmodule.exports = layoutInGrid;\n","var layoutVoice = require('./voice');\nvar setUpperAndLowerElements = require('./set-upper-and-lower-elements');\nvar layoutStaffGroup = require('./staff-group');\nvar getLeftEdgeOfStaff = require('./get-left-edge-of-staff');\nvar layoutInGrid = require('./layout-in-grid');\n\n// This sets the \"x\" attribute on all the children in abctune.lines\n// It also sets the \"w\" and \"startx\" attributes on \"voices\"\n// It also sets the \"w\" and \"startx\" attributes on \"voices.children\"\nvar layout = function (renderer, abctune, width, space, expandToWidest, timeBasedLayout) {\n\tvar i;\n\tvar abcLine;\n\t// Adjust the x-coordinates to their absolute positions\n\tvar maxWidth = width;\n\tfor (i = 0; i < abctune.lines.length; i++) {\n\t\tabcLine = abctune.lines[i];\n\t\tif (abcLine.staff) {\n\t\t\t// console.log(\"=== line\", i)\n\t\t\tvar thisWidth;\n\t\t\tif (timeBasedLayout !== undefined)\n\t\t\t\tthisWidth = layoutInGrid(renderer, abcLine.staffGroup, timeBasedLayout);\n\t\t\telse\n\t\t\t\tthisWidth = setXSpacing(renderer, maxWidth, space, abcLine.staffGroup, abctune.formatting, i === abctune.lines.length - 1, false);\n\t\t\t// console.log(thisWidth, maxWidth)\n\t\t\tif (Math.round(thisWidth) > Math.round(maxWidth)) { // to take care of floating point weirdness\n\t\t\t\tmaxWidth = thisWidth\n\t\t\t\tif (expandToWidest)\n\t\t\t\t\ti = -1 // do the calculations over with the new width\n\t\t\t}\n\t\t}\n\t}\n\n\t// Layout the beams and add the stems to the beamed notes.\n\tfor (i = 0; i < abctune.lines.length; i++) {\n\t\tabcLine = abctune.lines[i];\n\t\tif (abcLine.staffGroup && abcLine.staffGroup.voices) {\n\t\t\tfor (var j = 0; j < abcLine.staffGroup.voices.length; j++)\n\t\t\t\tlayoutVoice(abcLine.staffGroup.voices[j]);\n\t\t\tsetUpperAndLowerElements(renderer, abcLine.staffGroup);\n\t\t}\n\t}\n\n\t// Set the staff spacing\n\t// TODO-PER: we should have been able to do this by the time we called setUpperAndLowerElements, but for some reason the \"bottom\" element seems to be set as a side effect of setting the X spacing.\n\tfor (i = 0; i < abctune.lines.length; i++) {\n\t\tabcLine = abctune.lines[i];\n\t\tif (abcLine.staffGroup) {\n\t\t\tabcLine.staffGroup.setHeight();\n\t\t}\n\t}\n\treturn maxWidth;\n}\n// Do the x-axis positioning for a single line (a group of related staffs)\nvar setXSpacing = function (renderer, width, space, staffGroup, formatting, isLastLine, debug) {\n\tvar leftEdge = getLeftEdgeOfStaff(renderer, staffGroup.getTextSize, staffGroup.voices, staffGroup.brace, staffGroup.bracket);\n\tvar newspace = space;\n\t//dumpGroup(\"before\", staffGroup)\n\tfor (var it = 0; it < 8; it++) { // TODO-PER: shouldn't need multiple passes, but each pass gets it closer to the right spacing. (Only affects long lines: normal lines break out of this loop quickly.)\n\t\t// console.log(\"iteration\", it)\n\t\tvar ret = layoutStaffGroup(newspace, renderer.minPadding, debug, staffGroup, leftEdge);\n\t\tnewspace = calcHorizontalSpacing(isLastLine, formatting.stretchlast, width + renderer.padding.left, staffGroup.w, newspace, ret.spacingUnits, ret.minSpace, renderer.padding.left + renderer.padding.right);\n\t\tif (debug)\n\t\t\tconsole.log(\"setXSpace\", it, staffGroup.w, newspace, staffGroup.minspace);\n\t\tif (newspace === null) break;\n\t}\n\t//dumpGroup(\"after\",staffGroup)\n\tcenterWholeRests(staffGroup.voices);\n\treturn staffGroup.w - leftEdge\n};\n\nfunction replacer(key, value) {\n\t// Filtering out properties\n\tif (key === 'parent') {\n\t\treturn 'parent';\n\t}\n\tif (key === 'beam') {\n\t\treturn 'beam';\n\t}\n\treturn value;\n}\n\nfunction dumpGroup(label, staffGroup) {\n\tconsole.log(\"=================== \" + label + \" =========================\")\n\tconsole.log(staffGroup)\n\tconsole.log(JSON.stringify(staffGroup, replacer, \"\\t\"))\n}\n\nfunction calcHorizontalSpacing(isLastLine, stretchLast, targetWidth, lineWidth, spacing, spacingUnits, minSpace, padding) {\n\tif (isLastLine) {\n\t\tif (stretchLast === undefined) {\n\t\t\tif (lineWidth / targetWidth < 0.66) return null; // keep this for backward compatibility. The break isn't quite the same for some reason.\n\t\t} else {\n\t\t\t// \"Stretch the last music line of a tune when it lacks less than the float fraction of the page width.\"\n\t\t\tvar lack = 1 - (lineWidth + padding) / targetWidth;\n\t\t\tvar stretch = lack < stretchLast;\n\t\t\tif (!stretch) return null; // don't stretch last line too much\n\t\t}\n\t}\n\tif (Math.abs(targetWidth - lineWidth) < 2) return null; // if we are already near the target width, we're done.\n\tvar relSpace = spacingUnits * spacing;\n\tvar constSpace = lineWidth - relSpace;\n\tif (spacingUnits > 0) {\n\t\tspacing = (targetWidth - constSpace) / spacingUnits;\n\t\tif (spacing * minSpace > 50) {\n\t\t\tspacing = 50 / minSpace;\n\t\t}\n\t\treturn spacing;\n\t}\n\treturn null;\n}\n\nfunction centerWholeRests(voices) {\n\t// whole rests are a special case: if they are by themselves in a measure, then they should be centered.\n\t// (If they are not by themselves, that is probably a user error, but we'll just center it between the two items to either side of it.)\n\tfor (var i = 0; i < voices.length; i++) {\n\t\tvar voice = voices[i];\n\t\t// Look through all of the elements except for the first and last. If the whole note appears there then there isn't anything to center it between anyway.\n\t\tfor (var j = 1; j < voice.children.length - 1; j++) {\n\t\t\tvar absElem = voice.children[j];\n\t\t\tif (absElem.abcelem.rest && (absElem.abcelem.rest.type === 'whole' || absElem.abcelem.rest.type === 'multimeasure')) {\n\t\t\t\tvar before = voice.children[j - 1];\n\t\t\t\tvar after = voice.children[j + 1];\n\t\t\t\tabsElem.center(before, after);\n\t\t\t}\n\t\t}\n\t}\n}\n\nmodule.exports = layout;\n","var spacing = require('../helpers/spacing');\n\nvar setUpperAndLowerElements = function (renderer, staffGroup) {\n\t// Each staff already has the top and bottom set, now we see if there are elements that are always on top and bottom, and resolve their pitch.\n\t// Also, get the overall height of all the staves in this group.\n\tvar lastStaffBottom;\n\tfor (var i = 0; i < staffGroup.staffs.length; i++) {\n\t\tvar staff = staffGroup.staffs[i];\n\t\t// the vertical order of elements that are above is: tempo, part, volume/dynamic, ending/chord, lyric\n\t\t// the vertical order of elements that are below is: lyric, chord, volume/dynamic\n\t\tvar positionY = {\n\t\t\ttempoHeightAbove: 0,\n\t\t\tpartHeightAbove: 0,\n\t\t\tvolumeHeightAbove: 0,\n\t\t\tdynamicHeightAbove: 0,\n\t\t\tendingHeightAbove: 0,\n\t\t\tchordHeightAbove: 0,\n\t\t\tlyricHeightAbove: 0,\n\n\t\t\tlyricHeightBelow: 0,\n\t\t\tchordHeightBelow: 0,\n\t\t\tvolumeHeightBelow: 0,\n\t\t\tdynamicHeightBelow: 0\n\t\t};\n\n\t\tif (renderer.showDebug && renderer.showDebug.indexOf(\"box\") >= 0) {\n\t\t\tstaff.originalTop = staff.top; // This is just being stored for debugging purposes.\n\t\t\tstaff.originalBottom = staff.bottom; // This is just being stored for debugging purposes.\n\t\t}\n\n\t\tincTop(staff, positionY, 'lyricHeightAbove');\n\t\tincTop(staff, positionY, 'chordHeightAbove', staff.specialY.chordLines.above);\n\t\tif (staff.specialY.endingHeightAbove) {\n\t\t\tif (staff.specialY.chordHeightAbove)\n\t\t\t\tstaff.top += 2;\n\t\t\telse\n\t\t\t\tstaff.top += staff.specialY.endingHeightAbove + margin;\n\t\t\tpositionY.endingHeightAbove = staff.top;\n\t\t}\n\t\tif (staff.specialY.dynamicHeightAbove && staff.specialY.volumeHeightAbove) {\n\t\t\tstaff.top += Math.max(staff.specialY.dynamicHeightAbove, staff.specialY.volumeHeightAbove) + margin;\n\t\t\tpositionY.dynamicHeightAbove = staff.top;\n\t\t\tpositionY.volumeHeightAbove = staff.top;\n\t\t} else {\n\t\t\tincTop(staff, positionY, 'dynamicHeightAbove');\n\t\t\tincTop(staff, positionY, 'volumeHeightAbove');\n\t\t}\n\t\tincTop(staff, positionY, 'partHeightAbove');\n\t\tincTop(staff, positionY, 'tempoHeightAbove');\n\n\t\tif (staff.specialY.lyricHeightBelow) {\n\t\t\tstaff.specialY.lyricHeightBelow += renderer.spacing.vocal / spacing.STEP;\n\t\t\tpositionY.lyricHeightBelow = staff.bottom;\n\t\t\tstaff.bottom -= (staff.specialY.lyricHeightBelow + margin);\n\t\t}\n\t\tif (staff.specialY.chordHeightBelow) {\n\t\t\tpositionY.chordHeightBelow = staff.bottom;\n\t\t\tvar hgt = staff.specialY.chordHeightBelow;\n\t\t\tif (staff.specialY.chordLines.below)\n\t\t\t\thgt *= staff.specialY.chordLines.below;\n\t\t\tstaff.bottom -= (hgt + margin);\n\t\t}\n\t\tif (staff.specialY.volumeHeightBelow && staff.specialY.dynamicHeightBelow) {\n\t\t\tpositionY.volumeHeightBelow = staff.bottom;\n\t\t\tpositionY.dynamicHeightBelow = staff.bottom;\n\t\t\tstaff.bottom -= (Math.max(staff.specialY.volumeHeightBelow, staff.specialY.dynamicHeightBelow) + margin);\n\t\t} else if (staff.specialY.volumeHeightBelow) {\n\t\t\tpositionY.volumeHeightBelow = staff.bottom; staff.bottom -= (staff.specialY.volumeHeightBelow + margin);\n\t\t} else if (staff.specialY.dynamicHeightBelow) {\n\t\t\tpositionY.dynamicHeightBelow = staff.bottom; staff.bottom -= (staff.specialY.dynamicHeightBelow + margin);\n\t\t}\n\n\t\tif (renderer.showDebug && renderer.showDebug.indexOf(\"box\") >= 0)\n\t\t\tstaff.positionY = positionY; // This is just being stored for debugging purposes.\n\n\t\tfor (var j = 0; j < staff.voices.length; j++) {\n\t\t\tvar voice = staffGroup.voices[staff.voices[j]];\n\t\t\tsetUpperAndLowerVoiceElements(positionY, voice, renderer.spacing);\n\t\t}\n\t\t// We might need a little space in between staves if the staves haven't been pushed far enough apart by notes or extra vertical stuff.\n\t\t// Only try to put in extra space if this isn't the top staff.\n\t\tif (lastStaffBottom !== undefined) {\n\t\t\tvar thisStaffTop = staff.top - 10;\n\t\t\tvar forcedSpacingBetween = lastStaffBottom + thisStaffTop;\n\t\t\tvar minSpacingInPitches = renderer.spacing.systemStaffSeparation / spacing.STEP;\n\t\t\tvar addedSpace = minSpacingInPitches - forcedSpacingBetween;\n\t\t\tif (addedSpace > 0)\n\t\t\t\tstaff.top += addedSpace;\n\t\t}\n\t\tstaff.top += renderer.spacing.staffTopMargin / spacing.STEP\n\n\t\tlastStaffBottom = 2 - staff.bottom; // the staff starts at position 2 and the bottom variable is negative. Therefore to find out how large the bottom is, we reverse the sign of the bottom, and add the 2 in.\n\n\t\t// Now we need a little margin on the top, so we'll just throw that in.\n\t\t//staff.top += 4;\n\t\t//console.log(\"Staff Y: \",i,heightInPitches,staff.top,staff.bottom);\n\t}\n\t//console.log(\"Staff Height: \",heightInPitches,this.height);\n};\n\nvar margin = 1;\nfunction incTop(staff, positionY, item, count) {\n\tif (staff.specialY[item]) {\n\t\tvar height = staff.specialY[item];\n\t\tif (count)\n\t\t\theight *= count;\n\t\tstaff.top += height + margin;\n\t\tpositionY[item] = staff.top;\n\t}\n}\n\nfunction setUpperAndLowerVoiceElements(positionY, voice, spacing) {\n\tvar i;\n\tvar abselem;\n\tfor (i = 0; i < voice.children.length; i++) {\n\t\tabselem = voice.children[i];\n\t\tsetUpperAndLowerAbsoluteElements(positionY, abselem, spacing);\n\t}\n\tfor (i = 0; i < voice.otherchildren.length; i++) {\n\t\tabselem = voice.otherchildren[i];\n\t\tswitch (abselem.type) {\n\t\t\tcase 'CrescendoElem':\n\t\t\t\tsetUpperAndLowerCrescendoElements(positionY, abselem);\n\t\t\t\tbreak;\n\t\t\tcase 'DynamicDecoration':\n\t\t\t\tsetUpperAndLowerDynamicElements(positionY, abselem);\n\t\t\t\tbreak;\n\t\t\tcase 'EndingElem':\n\t\t\t\tsetUpperAndLowerEndingElements(positionY, abselem);\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\n// For each of the relative elements that can't be placed in advance (because their vertical placement depends on everything\n// else on the line), this iterates through them and sets their pitch. By the time this is called, specialYResolved contains a\n// hash with the vertical placement (in pitch units) for each type.\n// TODO-PER: I think this needs to be separated by \"above\" and \"below\". How do we know that for dynamics at the point where they are being defined, though? We need a pass through all the relative elements to set \"above\" and \"below\".\nfunction setUpperAndLowerAbsoluteElements(specialYResolved, element, spacing) {\n\t// specialYResolved contains the actual pitch for each of the classes of elements.\n\tfor (var i = 0; i < element.children.length; i++) {\n\t\tvar child = element.children[i];\n\t\tfor (var key in element.specialY) { // for each class of element that needs to be placed vertically\n\t\t\tif (element.specialY.hasOwnProperty(key)) {\n\t\t\t\tif (child[key]) { // If this relative element has defined a height for this class of element\n\t\t\t\t\tchild.pitch = specialYResolved[key];\n\t\t\t\t\tif (child.top === undefined) { // TODO-PER: HACK! Not sure this is the right place to do this.\n\t\t\t\t\t\tif (child.type === 'TempoElement') {\n\t\t\t\t\t\t\tsetUpperAndLowerTempoElement(specialYResolved, child);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsetUpperAndLowerRelativeElements(specialYResolved, child, spacing);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telement.pushTop(child.top);\n\t\t\t\t\t\telement.pushBottom(child.bottom);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction setUpperAndLowerCrescendoElements(positionY, element) {\n\tif (element.dynamicHeightAbove)\n\t\telement.pitch = positionY.dynamicHeightAbove;\n\telse\n\t\telement.pitch = positionY.dynamicHeightBelow;\n}\n\nfunction setUpperAndLowerDynamicElements(positionY, element) {\n\tif (element.volumeHeightAbove)\n\t\telement.pitch = positionY.volumeHeightAbove;\n\telse\n\t\telement.pitch = positionY.volumeHeightBelow;\n}\n\nfunction setUpperAndLowerEndingElements(positionY, element) {\n\telement.pitch = positionY.endingHeightAbove - 2;\n}\n\nfunction setUpperAndLowerTempoElement(positionY, element) {\n\telement.pitch = positionY.tempoHeightAbove;\n\telement.top = positionY.tempoHeightAbove;\n\telement.bottom = positionY.tempoHeightAbove;\n\tif (element.note) {\n\t\tvar tempoPitch = element.pitch - element.totalHeightInPitches + 1; // The pitch we receive is the top of the allotted area: change that to practically the bottom.\n\t\telement.note.top = tempoPitch;\n\t\telement.note.bottom = tempoPitch;\n\t\tfor (var i = 0; i < element.note.children.length; i++) {\n\t\t\tvar child = element.note.children[i];\n\t\t\tchild.top += tempoPitch;\n\t\t\tchild.bottom += tempoPitch;\n\t\t\tchild.pitch += tempoPitch;\n\t\t\tif (child.pitch2 !== undefined)\n\t\t\t\tchild.pitch2 += tempoPitch;\n\t\t}\n\t}\n}\n\nfunction setUpperAndLowerRelativeElements(positionY, element, renderSpacing) {\n\tswitch (element.type) {\n\t\tcase \"part\":\n\t\t\telement.top = positionY.partHeightAbove + element.height;\n\t\t\telement.bottom = positionY.partHeightAbove;\n\t\t\tbreak;\n\t\tcase \"text\":\n\t\tcase \"chord\":\n\t\t\tif (element.chordHeightAbove) {\n\t\t\t\telement.top = positionY.chordHeightAbove;\n\t\t\t\telement.bottom = positionY.chordHeightAbove;\n\t\t\t} else {\n\t\t\t\telement.top = positionY.chordHeightBelow;\n\t\t\t\telement.bottom = positionY.chordHeightBelow;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"lyric\":\n\t\t\tif (element.lyricHeightAbove) {\n\t\t\t\telement.top = positionY.lyricHeightAbove;\n\t\t\t\telement.bottom = positionY.lyricHeightAbove;\n\t\t\t} else {\n\t\t\t\telement.top = positionY.lyricHeightBelow + renderSpacing.vocal / spacing.STEP;\n\t\t\t\telement.bottom = positionY.lyricHeightBelow + renderSpacing.vocal / spacing.STEP;\n\t\t\t\telement.pitch -= renderSpacing.vocal / spacing.STEP;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"debug\":\n\t\t\telement.top = positionY.chordHeightAbove;\n\t\t\telement.bottom = positionY.chordHeightAbove;\n\t\t\tbreak;\n\t}\n\tif (element.pitch === undefined || element.top === undefined)\n\t\tconsole.error(\"RelativeElement position not set.\", element.type, element.pitch, element.top, positionY);\n}\n\nmodule.exports = setUpperAndLowerElements;\n","var layoutVoiceElements = require('./voice-elements');\n\nfunction checkLastBarX(voices) {\n\tvar maxX = 0;\n\tfor (var i = 0; i < voices.length; i++) {\n\t\tvar curVoice = voices[i];\n\t\tif (curVoice.children.length > 0) {\n\t\t\tvar lastChild = curVoice.children.length - 1;\n\t\t\tvar maxChild = curVoice.children[lastChild];\n\t\t\tif (maxChild.abcelem.el_type === 'bar') {\n\t\t\t\tvar barX = maxChild.children[0].x;\n\t\t\t\tif (barX > maxX) {\n\t\t\t\t\tmaxX = barX;\n\t\t\t\t} else {\n\t\t\t\t\tmaxChild.children[0].x = maxX;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nvar layoutStaffGroup = function (spacing, minPadding, debug, staffGroup, leftEdge) {\n\tvar epsilon = 0.0000001; // Fudging for inexactness of floating point math.\n\tvar spacingunits = 0; // number of times we will have ended up using the spacing distance (as opposed to fixed width distances)\n\tvar minspace = 1000; // a big number to start off with - used to find out what the smallest space between two notes is -- GD 2014.1.7\n\n\tvar x = leftEdge;\n\tstaffGroup.startx = x;\n\tvar i;\n\n\tvar currentduration = 0;\n\tif (debug) console.log(\"init layout\", spacing);\n\tfor (i = 0; i < staffGroup.voices.length; i++) {\n\t\tlayoutVoiceElements.beginLayout(x, staffGroup.voices[i]);\n\t}\n\n\tvar spacingunit = 0; // number of spacingunits coming from the previously laid out element to this one\n\twhile (!finished(staffGroup.voices)) {\n\t\t// find first duration level to be laid out among candidates across voices\n\t\tcurrentduration = null; // candidate smallest duration level\n\t\tfor (i = 0; i < staffGroup.voices.length; i++) {\n\t\t\tif (!layoutVoiceElements.layoutEnded(staffGroup.voices[i]) && (!currentduration || getDurationIndex(staffGroup.voices[i]) < currentduration))\n\t\t\t\tcurrentduration = getDurationIndex(staffGroup.voices[i]);\n\t\t}\n\n\n\t\t// isolate voices at current duration level\n\t\tvar currentvoices = [];\n\t\tvar othervoices = [];\n\t\tfor (i = 0; i < staffGroup.voices.length; i++) {\n\t\t\tvar durationIndex = getDurationIndex(staffGroup.voices[i]);\n\t\t\t// PER: Because of the inexactness of JS floating point math, we just get close.\n\t\t\tif (durationIndex - currentduration > epsilon) {\n\t\t\t\tothervoices.push(staffGroup.voices[i]);\n\t\t\t\t//console.log(\"out: voice \",i);\n\t\t\t} else {\n\t\t\t\tcurrentvoices.push(staffGroup.voices[i]);\n\t\t\t\t//if (debug) console.log(\"in: voice \",i);\n\t\t\t}\n\t\t}\n\n\t\t// among the current duration level find the one which needs starting furthest right\n\t\tspacingunit = 0; // number of spacingunits coming from the previously laid out element to this one\n\t\tvar spacingduration = 0;\n\t\tfor (i = 0; i < currentvoices.length; i++) {\n\t\t\t//console.log(\"greatest spacing unit\", x, layoutVoiceElements.getNextX(currentvoices[i]), layoutVoiceElements.getSpacingUnits(currentvoices[i]), currentvoices[i].spacingduration);\n\t\t\tif (layoutVoiceElements.getNextX(currentvoices[i]) > x) {\n\t\t\t\tx = layoutVoiceElements.getNextX(currentvoices[i]);\n\t\t\t\tspacingunit = layoutVoiceElements.getSpacingUnits(currentvoices[i]);\n\t\t\t\tspacingduration = currentvoices[i].spacingduration;\n\t\t\t}\n\t\t}\n\t\tspacingunits += spacingunit;\n\t\tminspace = Math.min(minspace, spacingunit);\n\t\tif (debug) console.log(\"currentduration: \", currentduration, spacingunits, minspace);\n\n\t\tvar lastTopVoice = undefined;\n\t\tfor (i = 0; i < currentvoices.length; i++) {\n\t\t\tvar v = currentvoices[i];\n\t\t\tif (v.voicenumber === 0)\n\t\t\t\tlastTopVoice = i;\n\t\t\tvar topVoice = (lastTopVoice !== undefined && currentvoices[lastTopVoice].voicenumber !== v.voicenumber) ? currentvoices[lastTopVoice] : undefined;\n\t\t\tif (!isSameStaff(v, topVoice))\n\t\t\t\ttopVoice = undefined;\n\t\t\tvar voicechildx = layoutVoiceElements.layoutOneItem(x, spacing, v, minPadding, topVoice);\n\t\t\tvar dx = voicechildx - x;\n\t\t\tif (dx > 0) {\n\t\t\t\tx = voicechildx; //update x\n\t\t\t\tfor (var j = 0; j < i; j++) { // shift over all previously laid out elements\n\t\t\t\t\tlayoutVoiceElements.shiftRight(dx, currentvoices[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// remove the value of already counted spacing units in other voices (e.g. if a voice had planned to use up 5 spacing units but is not in line to be laid out at this duration level - where we've used 2 spacing units - then we must use up 3 spacing units, not 5)\n\t\tfor (i = 0; i < othervoices.length; i++) {\n\t\t\tothervoices[i].spacingduration -= spacingduration;\n\t\t\tlayoutVoiceElements.updateNextX(x, spacing, othervoices[i]); // adjust other voices expectations\n\t\t}\n\n\t\t// update indexes of currently laid out elems\n\t\tfor (i = 0; i < currentvoices.length; i++) {\n\t\t\tvar voice = currentvoices[i];\n\t\t\tlayoutVoiceElements.updateIndices(voice);\n\t\t}\n\t} // finished laying out\n\n\n\t// find the greatest remaining x as a base for the width\n\tfor (i = 0; i < staffGroup.voices.length; i++) {\n\t\tif (layoutVoiceElements.getNextX(staffGroup.voices[i]) > x) {\n\t\t\tx = layoutVoiceElements.getNextX(staffGroup.voices[i]);\n\t\t\tspacingunit = layoutVoiceElements.getSpacingUnits(staffGroup.voices[i]);\n\t\t}\n\t}\n\n\t// adjust lastBar when needed (multi staves)\n\tcheckLastBarX(staffGroup.voices);\n\t//console.log(\"greatest remaining\",spacingunit,x);\n\tspacingunits += spacingunit;\n\tstaffGroup.setWidth(x);\n\n\treturn { spacingUnits: spacingunits, minSpace: minspace };\n};\n\n\nfunction finished(voices) {\n\tfor (var i = 0; i < voices.length; i++) {\n\t\tif (!layoutVoiceElements.layoutEnded(voices[i])) return false;\n\t}\n\treturn true;\n}\n\nfunction getDurationIndex(element) {\n\treturn element.durationindex - (element.children[element.i] && (element.children[element.i].duration > 0) ? 0 : 0.0000005); // if the ith element doesn't have a duration (is not a note), its duration index is fractionally before. This enables CLEF KEYSIG TIMESIG PART, etc. to be laid out before we get to the first note of other voices\n}\n\nfunction isSameStaff(voice1, voice2) {\n\tif (!voice1 || !voice1.staff || !voice1.staff.voices || voice1.staff.voices.length === 0)\n\t\treturn false;\n\tif (!voice2 || !voice2.staff || !voice2.staff.voices || voice2.staff.voices.length === 0)\n\t\treturn false;\n\treturn (voice1.staff.voices[0] === voice2.staff.voices[0]);\n}\n\nmodule.exports = layoutStaffGroup;\n","var getBarYAt = require('./get-bar-y-at');\n\nfunction layoutTriplet(element) {\n\t// TODO end and beginning of line (PER: P.S. I'm not sure this can happen: I think the parser will always specify both the start and end points.)\n\tif (element.anchor1 && element.anchor2) {\n\t\telement.hasBeam = !!element.anchor1.parent.beam && element.anchor1.parent.beam === element.anchor2.parent.beam;\n\t\tvar beam = element.anchor1.parent.beam;\n\t\t// if hasBeam is true, then the first and last element in the triplet have the same beam.\n\t\t// We also need to check if the beam doesn't contain other notes so that `(3 dcdcc` will do a bracket.\n\t\tif (element.hasBeam && (beam.elems[0] !== element.anchor1.parent || beam.elems[beam.elems.length - 1] !== element.anchor2.parent))\n\t\t\telement.hasBeam = false;\n\n\t\tif (element.hasBeam) {\n\t\t\t// If there is a beam then we don't need to draw anything except the text. The beam could either be above or below.\n\t\t\tvar left = isAbove(beam) ? element.anchor1.x + element.anchor1.w : element.anchor1.x;\n\t\t\telement.yTextPos = heightAtMidpoint(left, element.anchor2.x, beam);\n\t\t\telement.yTextPos += isAbove(beam) ? 3 : -2; // This creates some space between the beam and the number.\n\t\t\telement.xTextPos = xAtMidpoint(left, element.anchor2.x);\n\t\t\telement.top = element.yTextPos + 1;\n\t\t\telement.bottom = element.yTextPos - 2;\n\t\t\tif (isAbove(beam))\n\t\t\t\telement.endingHeightAbove = 4;\n\t\t} else {\n\t\t\t// If there isn't a beam, then we need to draw the bracket and the text. The bracket is always above.\n\t\t\t// The bracket is never lower than the 'a' line, but is 4 pitches above the first and last notes. If there is\n\t\t\t// a tall note in the middle, the bracket is horizontal and above the highest note.\n\t\t\telement.startNote = Math.max(element.anchor1.parent.top, 9) + 4;\n\t\t\telement.endNote = Math.max(element.anchor2.parent.top, 9) + 4;\n\t\t\t// If it starts or ends on a rest, make the beam horizontal\n\t\t\tif (element.anchor1.parent.type === \"rest\" && element.anchor2.parent.type !== \"rest\")\n\t\t\t\telement.startNote = element.endNote;\n\t\t\telse if (element.anchor2.parent.type === \"rest\" && element.anchor1.parent.type !== \"rest\")\n\t\t\t\telement.endNote = element.startNote;\n\t\t\t// See if the middle note is really high.\n\t\t\tvar max = 0;\n\t\t\tfor (var i = 0; i < element.middleElems.length; i++) {\n\t\t\t\tmax = Math.max(max, element.middleElems[i].top);\n\t\t\t}\n\t\t\tmax += 4;\n\t\t\tif (max > element.startNote || max > element.endNote) {\n\t\t\t\telement.startNote = max;\n\t\t\t\telement.endNote = max;\n\t\t\t}\n\t\t\tif (element.flatBeams) {\n\t\t\t\telement.startNote = Math.max(element.startNote, element.endNote);\n\t\t\t\telement.endNote = Math.max(element.startNote, element.endNote);\n\t\t\t}\n\n\t\t\telement.yTextPos = element.startNote + (element.endNote - element.startNote) / 2;\n\t\t\telement.xTextPos = element.anchor1.x + (element.anchor2.x + element.anchor2.w - element.anchor1.x) / 2;\n\t\t\telement.top = element.yTextPos + 1;\n\t\t}\n\t}\n\tdelete element.middleElems;\n\tdelete element.flatBeams;\n}\n\nfunction isAbove(beam) {\n\treturn beam.stemsUp;\n}\n\n// We can't just use the entire beam for the calculation. The range has to be passed in, because the beam might extend into some unrelated notes. for instance, (3_a'f'e'f'2 when L:16\nfunction heightAtMidpoint(startX, endX, beam) {\n\tif (beam.beams.length === 0)\n\t\treturn 0;\n\tbeam = beam.beams[0];\n\tvar midPoint = startX + (endX - startX) / 2;\n\treturn getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, midPoint);\n}\n\nfunction xAtMidpoint(startX, endX) {\n\treturn startX + (endX - startX) / 2;\n}\n\nmodule.exports = layoutTriplet;\n","var VoiceElement = function VoiceElements() { }\n\nVoiceElement.beginLayout = function (startx, voice) {\n\tvoice.i = 0;\n\tvoice.durationindex = 0;\n\t//this.ii=this.children.length;\n\tvoice.startx = startx;\n\tvoice.minx = startx; // furthest left to where negatively positioned elements are allowed to go\n\tvoice.nextx = startx; // x position where the next element of this voice should be placed assuming no other voices and no fixed width constraints\n\tvoice.spacingduration = 0; // duration left to be laid out in current iteration (omitting additional spacing due to other aspects, such as bars, dots, sharps and flats)\n};\n\nVoiceElement.layoutEnded = function (voice) {\n\treturn (voice.i >= voice.children.length);\n};\n\nVoiceElement.getNextX = function (voice) {\n\treturn Math.max(voice.minx, voice.nextx);\n};\n\n// number of spacing units expected for next positioning\nVoiceElement.getSpacingUnits = function (voice) {\n\treturn Math.sqrt(voice.spacingduration * 8);\n};\n\n// Try to layout the element at index this.i\n// x - position to try to layout the element at\n// spacing - base spacing\n// can't call this function more than once per iteration\nVoiceElement.layoutOneItem = function (x, spacing, voice, minPadding, firstVoice) {\n\tvar child = voice.children[voice.i];\n\tif (!child) return 0;\n\tvar er = x - voice.minx; // available extrawidth to the left\n\tvar pad = voice.durationindex + child.duration > 0 ? minPadding : 0; // only add padding to the items that aren't fixed to the left edge.\n\t// See if this item overlaps the item in the first voice. If firstVoice is undefined then there's nothing to compare.\n\tif (child.abcelem.el_type === \"note\" && !child.abcelem.rest && voice.voicenumber !== 0 && firstVoice) {\n\t\tvar firstChild = firstVoice.children[firstVoice.i];\n\t\t// It overlaps if the either the child's top or bottom is inside the firstChild's or at least within 1\n\t\t// A special case is if the element is on the same line then it can share a note head, if the notehead is the same\n\t\tvar overlaps = firstChild &&\n\t\t\t((child.abcelem.maxpitch <= firstChild.abcelem.maxpitch + 1 && child.abcelem.maxpitch >= firstChild.abcelem.minpitch - 1) ||\n\t\t\t\t(child.abcelem.minpitch <= firstChild.abcelem.maxpitch + 1 && child.abcelem.minpitch >= firstChild.abcelem.minpitch - 1))\n\t\t// See if they can share a note head\n\t\tif (overlaps && child.abcelem.minpitch === firstChild.abcelem.minpitch && child.abcelem.maxpitch === firstChild.abcelem.maxpitch &&\n\t\t\tfirstChild.heads && firstChild.heads.length > 0 && child.heads && child.heads.length > 0 &&\n\t\t\tfirstChild.heads[0].c === child.heads[0].c)\n\t\t\toverlaps = false;\n\t\t// If this note overlaps the note in the first voice and we haven't moved the note yet (this can be called multiple times)\n\t\tif (overlaps) {\n\t\t\t// I think that firstChild should always have at least one note head, but defensively make sure.\n\t\t\t// There was a problem with this being called more than once so if a value is adjusted then it is saved so it is only adjusted once.\n\t\t\tvar firstChildNoteWidth = firstChild.heads && firstChild.heads.length > 0 ? firstChild.heads[0].realWidth : firstChild.fixed.w;\n\t\t\tif (!child.adjustedWidth)\n\t\t\t\tchild.adjustedWidth = firstChildNoteWidth + child.w;\n\t\t\tchild.w = child.adjustedWidth\n\t\t\tfor (var j = 0; j < child.children.length; j++) {\n\t\t\t\tvar relativeChild = child.children[j];\n\t\t\t\tif (relativeChild.name.indexOf(\"accidental\") < 0) {\n\t\t\t\t\tif (!relativeChild.adjustedWidth)\n\t\t\t\t\t\trelativeChild.adjustedWidth = relativeChild.dx + firstChildNoteWidth;\n\t\t\t\t\trelativeChild.dx = relativeChild.adjustedWidth\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t}\n\tvar extraWidth = getExtraWidth(child, pad);\n\tif (er < extraWidth) { // shift right by needed amount\n\t\t// There's an exception if a bar element is after a Part element, there is no shift.\n\t\tif (voice.i === 0 || child.type !== 'bar' || (voice.children[voice.i - 1].type !== 'part' && voice.children[voice.i - 1].type !== 'tempo'))\n\t\t\tx += extraWidth - er;\n\t}\n\tchild.setX(x);\n\n\tvoice.spacingduration = child.duration;\n\t//update minx\n\tvoice.minx = x + getMinWidth(child); // add necessary layout space\n\tif (voice.i !== voice.children.length - 1) voice.minx += child.minspacing; // add minimumspacing except on last elem\n\n\tthis.updateNextX(x, spacing, voice);\n\n\t// contribute to staff y position\n\t//this.staff.top = Math.max(child.top,this.staff.top);\n\t//this.staff.bottom = Math.min(child.bottom,this.staff.bottom);\n\n\treturn x; // where we end up having placed the child\n};\n\nVoiceElement.shiftRight = function (dx, voice) {\n\tvar child = voice.children[voice.i];\n\tif (!child) return;\n\tchild.setX(child.x + dx);\n\tvoice.minx += dx;\n\tvoice.nextx += dx;\n};\n\n// call when spacingduration has been updated\nVoiceElement.updateNextX = function (x, spacing, voice) {\n\tvoice.nextx = x + (spacing * this.getSpacingUnits(voice));\n};\n\nVoiceElement.updateIndices = function (voice) {\n\tif (!this.layoutEnded(voice)) {\n\t\tvoice.durationindex += voice.children[voice.i].duration;\n\t\tif (voice.children[voice.i].type === 'bar') voice.durationindex = Math.round(voice.durationindex * 64) / 64; // everytime we meet a barline, do rounding to nearest 64th\n\t\tvoice.i++;\n\t}\n};\n\nfunction getExtraWidth(child, minPadding) { // space needed to the left of the note\n\tvar padding = 0;\n\tif (child.type === 'note' || child.type === 'bar')\n\t\tpadding = minPadding;\n\treturn -child.extraw + padding;\n}\n\nfunction getMinWidth(child) { // absolute space taken to the right of the note\n\treturn child.w;\n}\n\nmodule.exports = VoiceElement;\n","var layoutBeam = require('./beam');\nvar getBarYAt = require('./get-bar-y-at');\nvar layoutTriplet = require('./triplet');\n\nvar layoutVoice = function (voice) {\n\tfor (var i = 0; i < voice.beams.length; i++) {\n\t\tif (voice.beams[i].type === 'BeamElem') {\n\t\t\tlayoutBeam(voice.beams[i]);\n\t\t\tmoveDecorations(voice.beams[i]);\n\t\t\t// The above will change the top and bottom of the abselem children, so see if we need to expand our range.\n\t\t\tfor (var j = 0; j < voice.beams[i].elems.length; j++) {\n\t\t\t\tvoice.adjustRange(voice.beams[i].elems[j]);\n\t\t\t}\n\t\t}\n\t}\n\tvoice.staff.specialY.chordLines = setLaneForChord(voice.children);\n\n\t// Now we can layout the triplets\n\tfor (i = 0; i < voice.otherchildren.length; i++) {\n\t\tvar child = voice.otherchildren[i];\n\t\tif (child.type === 'TripletElem') {\n\t\t\tlayoutTriplet(child);\n\t\t\tvoice.adjustRange(child);\n\t\t}\n\t}\n\tvoice.staff.top = Math.max(voice.staff.top, voice.top);\n\tvoice.staff.bottom = Math.min(voice.staff.bottom, voice.bottom);\n};\n\nfunction moveDecorations(beam) {\n\tvar padding = 1.5; // This is the vertical padding between elements, in pitches.\n\tfor (var ch = 0; ch < beam.elems.length; ch++) {\n\t\tvar child = beam.elems[ch];\n\t\tif (child.top) {\n\t\t\t// We now know where the ornaments should have been placed, so move them if they would overlap.\n\t\t\tvar top = yAtNote(child, beam);\n\t\t\tfor (var i = 0; i < child.children.length; i++) {\n\t\t\t\tvar el = child.children[i];\n\t\t\t\tif (el.klass === 'ornament' && el.position !== 'below') {\n\t\t\t\t\tif (el.bottom - padding < top) {\n\t\t\t\t\t\tvar distance = top - el.bottom + padding; // Find the distance that it needs to move and add a little margin so the element doesn't touch the beam.\n\t\t\t\t\t\tel.bottom += distance;\n\t\t\t\t\t\tel.top += distance;\n\t\t\t\t\t\tel.pitch += distance;\n\t\t\t\t\t\ttop = child.top = el.top;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction placeInLane(rightMost, relElem) {\n\t// These items are centered so figure the coordinates accordingly.\n\t// The font reports some extra space so the margin is built in.\n\tvar xCoords = relElem.getChordDim();\n\tif (xCoords) {\n\t\tfor (var i = 0; i < rightMost.length; i++) {\n\t\t\tvar fits = rightMost[i] < xCoords.left;\n\t\t\tif (fits) {\n\t\t\t\tif (i > 0)\n\t\t\t\t\trelElem.putChordInLane(i);\n\t\t\t\trightMost[i] = xCoords.right;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t// If we didn't return early, then we need a new row\n\t\trightMost.push(xCoords.right);\n\t\trelElem.putChordInLane(rightMost.length - 1);\n\t}\n}\n\nfunction setLaneForChord(absElems) {\n\t// Criteria:\n\t// 1) lane numbers start from the bottom so that as many items as possible are in lane 0, closest to the music.\n\t// 2) a chord can have more than one line (for instance \"C\\nD\") each line is a lane.\n\t// 3) if two adjoining items would touch then push the second one to the next lane.\n\t// 4) use as many lanes as is necessary to get everything to not touch.\n\t// 5) leave a margin between items, so use another lane if the chords would have less than a character's width.\n\t// 6) if the chord only has one character, allow it to be closer than if the chord has more than one character.\n\tvar rightMostAbove = [0];\n\tvar rightMostBelow = [0];\n\tvar i;\n\tvar j;\n\tvar relElem;\n\tfor (i = 0; i < absElems.length; i++) {\n\t\tfor (j = 0; j < absElems[i].children.length; j++) {\n\t\t\trelElem = absElems[i].children[j];\n\t\t\tif (relElem.chordHeightAbove) {\n\t\t\t\tplaceInLane(rightMostAbove, relElem);\n\t\t\t}\n\t\t}\n\t\tfor (j = absElems[i].children.length - 1; j >= 0; j--) {\n\t\t\trelElem = absElems[i].children[j];\n\t\t\tif (relElem.chordHeightBelow) {\n\t\t\t\tplaceInLane(rightMostBelow, relElem);\n\t\t\t}\n\t\t}\n\t}\n\t// If we used a second line, then we need to go back and set the first lines.\n\t// Also we need to flip the indexes of the names so that we can count from the top line.\n\tif (rightMostAbove.length > 1 || rightMostBelow.length > 1)\n\t\tsetLane(absElems, rightMostAbove.length, rightMostBelow.length);\n\treturn { above: rightMostAbove.length, below: rightMostBelow.length };\n}\n\nfunction numAnnotationsBelow(absElem) {\n\tvar count = 0;\n\tfor (var j = 0; j < absElem.children.length; j++) {\n\t\tvar relElem = absElem.children[j];\n\t\tif (relElem.chordHeightBelow)\n\t\t\tcount++;\n\t}\n\treturn count;\n}\n\nfunction setLane(absElems, numLanesAbove, numLanesBelow) {\n\tfor (var i = 0; i < absElems.length; i++) {\n\t\tvar below = numAnnotationsBelow(absElems[i]);\n\t\tfor (var j = 0; j < absElems[i].children.length; j++) {\n\t\t\tvar relElem = absElems[i].children[j];\n\t\t\tif (relElem.chordHeightAbove) {\n\t\t\t\trelElem.invertLane(numLanesAbove);\n\t\t\t\t// } else if (relElem.chordHeightBelow) {\n\t\t\t\t// \trelElem.invertLane(below);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction yAtNote(element, beam) {\n\tbeam = beam.beams[0];\n\treturn getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, element.x);\n}\n\n\nmodule.exports = layoutVoice;\n","// abc_renderer.js: API to render to SVG/Raphael/whatever rendering engine\n\n/*global Math */\n\nvar spacing = require('./helpers/spacing');\nvar Svg = require('./svg');\n\n/**\n * Implements the API for rendering ABCJS Abstract Rendering Structure to a canvas/paper (e.g. SVG, Raphael, etc)\n * @param {Object} paper\n */\nvar Renderer = function (paper) {\n\tthis.paper = new Svg(paper);\n\tthis.controller = null;\n\n\tthis.space = 3 * spacing.SPACE;\n\tthis.padding = {}; // renderer's padding is managed by the controller\n\tthis.reset();\n\tthis.firefox112 = navigator.userAgent.indexOf('Firefox/112.0') >= 0\n};\n\nRenderer.prototype.reset = function () {\n\n\tthis.paper.clear();\n\tthis.y = 0;\n\tthis.abctune = null;\n\tthis.path = null;\n\tthis.isPrint = false;\n\tthis.lineThickness = 0;\n\tthis.initVerticalSpace();\n};\n\nRenderer.prototype.newTune = function (abcTune) {\n\tthis.abctune = abcTune; // TODO-PER: this is just to get the font info.\n\tthis.setVerticalSpace(abcTune.formatting);\n\t//this.measureNumber = null;\n\t//this.noteNumber = null;\n\tthis.isPrint = abcTune.media === 'print';\n\tthis.setPadding(abcTune);\n};\n\nRenderer.prototype.setLineThickness = function (lineThickness) {\n\tthis.lineThickness = lineThickness\n};\n\nRenderer.prototype.setPaddingOverride = function (params) {\n\tthis.paddingOverride = {\n\t\ttop: params.paddingtop, bottom: params.paddingbottom,\n\t\tright: params.paddingright, left: params.paddingleft\n\t};\n};\n\nRenderer.prototype.setPadding = function (abctune) {\n\t// If the padding is set in the tune, then use that.\n\t// Otherwise, if the padding is set in the override, use that.\n\t// Otherwise, use the defaults (there are a different set of defaults for screen and print.)\n\tfunction setPaddingVariable(self, paddingKey, formattingKey, printDefault, screenDefault) {\n\t\tif (abctune.formatting[formattingKey] !== undefined)\n\t\t\tself.padding[paddingKey] = abctune.formatting[formattingKey];\n\t\telse if (self.paddingOverride[paddingKey] !== undefined)\n\t\t\tself.padding[paddingKey] = self.paddingOverride[paddingKey];\n\t\telse if (self.isPrint)\n\t\t\tself.padding[paddingKey] = printDefault;\n\t\telse\n\t\t\tself.padding[paddingKey] = screenDefault;\n\t}\n\t// 1cm x 0.393701in/cm x 72pt/in x 1.33px/pt = 38px\n\t// 1.8cm x 0.393701in/cm x 72pt/in x 1.33px/pt = 68px\n\tsetPaddingVariable(this, 'top', 'topmargin', 38, 15);\n\tsetPaddingVariable(this, 'bottom', 'botmargin', 38, 15);\n\tsetPaddingVariable(this, 'left', 'leftmargin', 68, 15);\n\tsetPaddingVariable(this, 'right', 'rightmargin', 68, 15);\n};\n\n/**\n * Some of the items on the page are not scaled, so adjust them in the opposite direction of scaling to cancel out the scaling.\n * @param {float} scale\n */\nRenderer.prototype.adjustNonScaledItems = function (scale) {\n\tthis.padding.top /= scale;\n\tthis.padding.bottom /= scale;\n\tthis.padding.left /= scale;\n\tthis.padding.right /= scale;\n\tthis.abctune.formatting.headerfont.size /= scale;\n\tthis.abctune.formatting.footerfont.size /= scale;\n};\n\n/**\n * Set the the values for all the configurable vertical space options.\n */\nRenderer.prototype.initVerticalSpace = function () {\n\t// conversion: 37.7953 = conversion factor for cm to px.\n\t// All of the following values are in px.\n\tthis.spacing = {\n\t\tcomposer: 7.56, // Set the vertical space above the composer.\n\t\tgraceBefore: 8.67, // Define the space before, inside and after the grace notes.\n\t\tgraceInside: 10.67,\n\t\tgraceAfter: 16,\n\t\tinfo: 0, // Set the vertical space above the infoline.\n\t\tlineSkipFactor: 1.1, // Set the factor for spacing between lines of text. (multiply this by the font size)\n\t\tmusic: 7.56, // Set the vertical space above the first staff.\n\t\tparagraphSkipFactor: 0.4, // Set the factor for spacing between text paragraphs. (multiply this by the font size)\n\t\tparts: 11.33, // Set the vertical space above a new part.\n\t\tslurHeight: 1.0, // Set the slur height factor.\n\t\tstaffSeparation: 61.33, // Do not put a staff system closer than from the previous system.\n\t\tstaffTopMargin: 0,\n\t\tstemHeight: 26.67 + 10, // Set the stem height.\n\t\tsubtitle: 3.78, // Set the vertical space above the subtitle.\n\t\tsystemStaffSeparation: 48, // Do not place the staves closer than inside a system. * This values applies to all staves when in the tune header. Otherwise, it applies to the next staff\n\t\ttext: 18.9, // Set the vertical space above the history.\n\t\ttitle: 7.56, // Set the vertical space above the title.\n\t\ttop: 30.24, //Set the vertical space above the tunes and on the top of the continuation pages.\n\t\tvocal: 0, // Set the vertical space above the lyrics under the staves.\n\t\twords: 0 // Set the vertical space above the lyrics at the end of the tune.\n\t};\n\t/*\n\tTODO-PER: Handle the x-coordinate spacing items, too.\nmaxshrink Default: 0.65\nSet how much to compress horizontally when music line breaks\nare automatic.\n must be between 0 (natural spacing)\nand 1 (max shrinking).\n\n// This next value is used to compute the natural spacing of\n// the notes. The base spacing of the crotchet is always\n// 40 pts. When the duration of a note type is twice the\n// duration of an other note type, its spacing is multiplied\n// by this factor.\n// The default value causes the note spacing to be multiplied\n// by 2 when its duration is multiplied by 4, i.e. the\n// space of the semibreve is 80 pts and the space of the\n// semiquaver is 20 pts.\n// Setting this value to 1 sets all note spacing to 40 pts.\nnoteSpacingFactor: 1.414, // Set the note spacing factor to (range 1..2).\n\nscale Default: 0.75 Set the page scale factor. Note that the header and footer are not scaled.\n\nstretchlast Default: 0.8\nStretch the last music line of a tune when it exceeds\nthe fraction of the page width.\n range is 0.0 to 1.0.\n\t */\n};\n\nRenderer.prototype.setVerticalSpace = function (formatting) {\n\t// conversion from pts to px 4/3\n\tif (formatting.staffsep !== undefined)\n\t\tthis.spacing.staffSeparation = formatting.staffsep * 4 / 3;\n\tif (formatting.composerspace !== undefined)\n\t\tthis.spacing.composer = formatting.composerspace * 4 / 3;\n\tif (formatting.partsspace !== undefined)\n\t\tthis.spacing.parts = formatting.partsspace * 4 / 3;\n\tif (formatting.textspace !== undefined)\n\t\tthis.spacing.text = formatting.textspace * 4 / 3;\n\tif (formatting.musicspace !== undefined)\n\t\tthis.spacing.music = formatting.musicspace * 4 / 3;\n\tif (formatting.titlespace !== undefined)\n\t\tthis.spacing.title = formatting.titlespace * 4 / 3;\n\tif (formatting.sysstaffsep !== undefined)\n\t\tthis.spacing.systemStaffSeparation = formatting.sysstaffsep * 4 / 3;\n\tif (formatting.stafftopmargin !== undefined)\n\t\tthis.spacing.staffTopMargin = formatting.stafftopmargin * 4 / 3;\n\tif (formatting.subtitlespace !== undefined)\n\t\tthis.spacing.subtitle = formatting.subtitlespace * 4 / 3;\n\tif (formatting.topspace !== undefined)\n\t\tthis.spacing.top = formatting.topspace * 4 / 3;\n\tif (formatting.vocalspace !== undefined)\n\t\tthis.spacing.vocal = formatting.vocalspace * 4 / 3;\n\tif (formatting.wordsspace !== undefined)\n\t\tthis.spacing.words = formatting.wordsspace * 4 / 3;\n};\n\n\n/**\n * Calculates the y for a given pitch value (relative to the stave the renderer is currently printing)\n * @param {number} ofs pitch value (bottom C on a G clef = 0, D=1, etc.)\n */\nRenderer.prototype.calcY = function (ofs) {\n\treturn this.y - ofs * spacing.STEP;\n};\n\nRenderer.prototype.moveY = function (em, numLines) {\n\tif (numLines === undefined) numLines = 1;\n\tthis.y += em * numLines;\n};\n\nRenderer.prototype.absolutemoveY = function (y) {\n\tthis.y = y;\n};\n\nmodule.exports = Renderer;\n","// abc_voice_element.js: Definition of the VoiceElement class.\n\n/*global module */\n\nvar svgNS = \"http://www.w3.org/2000/svg\";\n\nfunction Svg(wrapper) {\n\tthis.svg = createSvg();\n\tthis.currentGroup = [];\n\twrapper.appendChild(this.svg);\n}\n\nSvg.prototype.clear = function () {\n\tif (this.svg) {\n\t\tvar wrapper = this.svg.parentNode;\n\t\tthis.svg = createSvg();\n\t\tthis.currentGroup = [];\n\t\tif (wrapper) {\n\t\t\t// TODO-PER: If the wrapper is not present, then the underlying div was pulled out from under this instance. It's possible that is still useful (for creating the music off page?)\n\t\t\twrapper.innerHTML = \"\";\n\t\t\twrapper.appendChild(this.svg);\n\t\t}\n\t}\n};\n\nSvg.prototype.setTitle = function (title) {\n\tvar titleEl = document.createElement(\"title\");\n\tvar titleNode = document.createTextNode(title);\n\ttitleEl.appendChild(titleNode);\n\tthis.svg.insertBefore(titleEl, this.svg.firstChild);\n};\n\nSvg.prototype.setResponsiveWidth = function (w, h) {\n\t// this technique is from: http://thenewcode.com/744/Make-SVG-Responsive, thx to https://github.com/iantresman\n\tthis.svg.setAttribute(\"viewBox\", \"0 0 \" + w + \" \" + h);\n\tthis.svg.setAttribute(\"preserveAspectRatio\", \"xMinYMin meet\");\n\tthis.svg.removeAttribute(\"height\");\n\tthis.svg.removeAttribute(\"width\");\n\tthis.svg.style['display'] = \"inline-block\";\n\tthis.svg.style['position'] = \"absolute\";\n\tthis.svg.style['top'] = \"0\";\n\tthis.svg.style['left'] = \"0\";\n\n\tif (this.svg.parentNode) {\n\t\tvar cls = this.svg.parentNode.getAttribute(\"class\");\n\t\tif (!cls)\n\t\t\tthis.svg.parentNode.setAttribute(\"class\", \"abcjs-container\");\n\t\telse if (cls.indexOf(\"abcjs-container\") < 0)\n\t\t\tthis.svg.parentNode.setAttribute(\"class\", cls + \" abcjs-container\");\n\t\tthis.svg.parentNode.style['display'] = \"inline-block\";\n\t\tthis.svg.parentNode.style['position'] = \"relative\";\n\t\tthis.svg.parentNode.style['width'] = \"100%\";\n\t\t// PER: I changed the padding from 100% to this through trial and error.\n\t\t// The example was using a square image, but this music might be either wider or taller.\n\t\tvar padding = h / w * 100;\n\t\tthis.svg.parentNode.style['padding-bottom'] = padding + \"%\";\n\t\tthis.svg.parentNode.style['vertical-align'] = \"middle\";\n\t\tthis.svg.parentNode.style['overflow'] = \"hidden\";\n\t}\n};\n\nSvg.prototype.setSize = function (w, h) {\n\tthis.svg.setAttribute('width', w);\n\tthis.svg.setAttribute('height', h);\n};\n\nSvg.prototype.setAttribute = function (attr, value) {\n\tthis.svg.setAttribute(attr, value);\n};\n\nSvg.prototype.setScale = function (scale) {\n\tif (scale !== 1) {\n\t\tthis.svg.style.transform = \"scale(\" + scale + \",\" + scale + \")\";\n\t\tthis.svg.style['-ms-transform'] = \"scale(\" + scale + \",\" + scale + \")\";\n\t\tthis.svg.style['-webkit-transform'] = \"scale(\" + scale + \",\" + scale + \")\";\n\t\tthis.svg.style['transform-origin'] = \"0 0\";\n\t\tthis.svg.style['-ms-transform-origin-x'] = \"0\";\n\t\tthis.svg.style['-ms-transform-origin-y'] = \"0\";\n\t\tthis.svg.style['-webkit-transform-origin-x'] = \"0\";\n\t\tthis.svg.style['-webkit-transform-origin-y'] = \"0\";\n\t} else {\n\t\tthis.svg.style.transform = \"\";\n\t\tthis.svg.style['-ms-transform'] = \"\";\n\t\tthis.svg.style['-webkit-transform'] = \"\";\n\t}\n};\n\nSvg.prototype.insertStyles = function (styles) {\n\tvar el = document.createElementNS(svgNS, \"style\");\n\tel.textContent = styles;\n\tthis.svg.insertBefore(el, this.svg.firstChild); // prepend is not available on older browsers.\n\t//\tthis.svg.prepend(el);\n};\n\nSvg.prototype.setParentStyles = function (attr) {\n\t// This is needed to get the size right when there is scaling involved.\n\tfor (var key in attr) {\n\t\tif (attr.hasOwnProperty(key)) {\n\t\t\tif (this.svg.parentNode)\n\t\t\t\tthis.svg.parentNode.style[key] = attr[key];\n\t\t}\n\t}\n\t// This is the last thing that gets called, so delete the temporary SVG if one was created\n\tif (this.dummySvg) {\n\t\tvar body = document.querySelector('body');\n\t\tbody.removeChild(this.dummySvg);\n\t\tthis.dummySvg = null;\n\t}\n\n};\n\nfunction constructHLine(x1, y1, x2) {\n\tvar len = x2 - x1;\n\treturn \"M \" + x1 + \" \" + y1 +\n\t\t\" l \" + len + ' ' + 0 +\n\t\t\" l \" + 0 + \" \" + 1 + \" \" +\n\t\t\" l \" + (-len) + \" \" + 0 + \" \" + \" z \";\n}\n\nfunction constructVLine(x1, y1, y2) {\n\tvar len = y2 - y1;\n\treturn \"M \" + x1 + \" \" + y1 +\n\t\t\" l \" + 0 + ' ' + len +\n\t\t\" l \" + 1 + \" \" + 0 + \" \" +\n\t\t\" l \" + 0 + \" \" + (-len) + \" \" + \" z \";\n}\n\nSvg.prototype.rect = function (attr) {\n\t// This uses path instead of rect so that it can be hollow and the color changes with \"fill\" instead of \"stroke\".\n\tvar lines = [];\n\tvar x1 = attr.x;\n\tvar y1 = attr.y;\n\tvar x2 = attr.x + attr.width;\n\tvar y2 = attr.y + attr.height;\n\tlines.push(constructHLine(x1, y1, x2));\n\tlines.push(constructHLine(x1, y2, x2));\n\tlines.push(constructVLine(x2, y1, y2));\n\tlines.push(constructVLine(x1, y2, y1));\n\n\treturn this.path({ path: lines.join(\" \"), stroke: \"none\", \"data-name\": attr[\"data-name\"] });\n};\n\nSvg.prototype.dottedLine = function (attr) {\n\tvar el = document.createElementNS(svgNS, 'line');\n\tel.setAttribute(\"x1\", attr.x1);\n\tel.setAttribute(\"x2\", attr.x2);\n\tel.setAttribute(\"y1\", attr.y1);\n\tel.setAttribute(\"y2\", attr.y2);\n\tel.setAttribute(\"stroke\", attr.stroke);\n\tel.setAttribute(\"stroke-dasharray\", \"5,5\");\n\tthis.svg.insertBefore(el, this.svg.firstChild);\n};\n\nSvg.prototype.rectBeneath = function (attr) {\n\tvar el = document.createElementNS(svgNS, 'rect');\n\tel.setAttribute(\"x\", attr.x);\n\tel.setAttribute(\"width\", attr.width);\n\tel.setAttribute(\"y\", attr.y);\n\tel.setAttribute(\"height\", attr.height);\n\tif (attr.stroke)\n\t\tel.setAttribute(\"stroke\", attr.stroke);\n\tif (attr['stroke-opacity'])\n\t\tel.setAttribute(\"stroke-opacity\", attr['stroke-opacity']);\n\tif (attr.fill)\n\t\tel.setAttribute(\"fill\", attr.fill);\n\tif (attr['fill-opacity'])\n\t\tel.setAttribute(\"fill-opacity\", attr['fill-opacity']);\n\tthis.svg.insertBefore(el, this.svg.firstChild);\n};\n\nSvg.prototype.text = function (text, attr, target) {\n\tvar el = document.createElementNS(svgNS, 'text');\n\tel.setAttribute(\"stroke\", \"none\");\n\tfor (var key in attr) {\n\t\tif (attr.hasOwnProperty(key)) {\n\t\t\tel.setAttribute(key, attr[key]);\n\t\t}\n\t}\n\tvar lines = (\"\" + text).split(\"\\n\");\n\tfor (var i = 0; i < lines.length; i++) {\n\t\tvar line = document.createElementNS(svgNS, 'tspan');\n\t\tline.setAttribute(\"x\", attr.x ? attr.x : 0);\n\t\tif (i !== 0)\n\t\t\tline.setAttribute(\"dy\", \"1.2em\");\n\t\tif (lines[i].indexOf(\"\\x03\") !== -1) {\n\t\t\tvar parts = lines[i].split('\\x03')\n\t\t\tline.textContent = parts[0];\n\t\t\tif (parts[1]) {\n\t\t\t\tvar ts2 = document.createElementNS(svgNS, 'tspan');\n\t\t\t\tts2.setAttribute(\"dy\", \"-0.3em\");\n\t\t\t\tts2.setAttribute(\"style\", \"font-size:0.7em\");\n\t\t\t\tts2.textContent = parts[1];\n\t\t\t\tline.appendChild(ts2);\n\t\t\t}\n\t\t\tif (parts[2]) {\n\t\t\t\tvar dist = parts[1] ? \"0.4em\" : \"0.1em\";\n\t\t\t\tvar ts3 = document.createElementNS(svgNS, 'tspan');\n\t\t\t\tts3.setAttribute(\"dy\", dist);\n\t\t\t\tts3.setAttribute(\"style\", \"font-size:0.7em\");\n\t\t\t\tts3.textContent = parts[2];\n\t\t\t\tline.appendChild(ts3);\n\t\t\t}\n\t\t} else\n\t\t\tline.textContent = lines[i];\n\t\tel.appendChild(line);\n\t}\n\tif (target)\n\t\ttarget.appendChild(el);\n\telse\n\t\tthis.append(el);\n\treturn el;\n};\n\nSvg.prototype.richTextLine = function (phrases, x, y, klass, anchor, target) {\n\tvar el = document.createElementNS(svgNS, 'text');\n\tel.setAttribute(\"stroke\", \"none\");\n\tel.setAttribute(\"class\", klass);\n\tel.setAttribute(\"x\", x);\n\tel.setAttribute(\"y\", y);\n\tel.setAttribute(\"text-anchor\", anchor);\n\tel.setAttribute(\"dominant-baseline\", \"middle\");\n\n\tfor (var i = 0; i < phrases.length; i++) {\n\t\tvar phrase = phrases[i]\n\t\tvar tspan = document.createElementNS(svgNS, 'tspan');\n\t\tvar attrs = Object.keys(phrase.attrs)\n\t\tfor (var j = 0; j < attrs.length; j++) {\n\t\t\tvar value = phrase.attrs[attrs[j]]\n\t\t\tif (value !== '')\n\t\t\t\ttspan.setAttribute(attrs[j], value)\n\t\t}\n\t\ttspan.textContent = phrase.content;\n\n\t\tel.appendChild(tspan);\n\t}\n\n\tif (target)\n\t\ttarget.appendChild(el);\n\telse\n\t\tthis.append(el);\n\treturn el;\n}\n\nSvg.prototype.guessWidth = function (text, attr) {\n\tvar svg = this.createDummySvg();\n\tvar el = this.text(text, attr, svg);\n\tvar size;\n\ttry {\n\t\tsize = el.getBBox();\n\t\tif (isNaN(size.height) || !size.height) // TODO-PER: I don't think this can happen unless there isn't a browser at all.\n\t\t\tsize = { width: attr['font-size'] / 2, height: attr['font-size'] + 2 }; // Just a wild guess.\n\t\telse\n\t\t\tsize = { width: size.width, height: size.height };\n\t} catch (ex) {\n\t\tsize = { width: attr['font-size'] / 2, height: attr['font-size'] + 2 }; // Just a wild guess.\n\t}\n\tsvg.removeChild(el);\n\treturn size;\n};\n\nSvg.prototype.createDummySvg = function () {\n\tif (!this.dummySvg) {\n\t\tthis.dummySvg = createSvg();\n\t\tvar styles = [\n\t\t\t\"display: block !important;\",\n\t\t\t\"height: 1px;\",\n\t\t\t\"width: 1px;\",\n\t\t\t\"position: absolute;\"\n\t\t];\n\t\tthis.dummySvg.setAttribute('style', styles.join(\"\"));\n\t\tvar body = document.querySelector('body');\n\t\tbody.appendChild(this.dummySvg);\n\t}\n\n\treturn this.dummySvg;\n};\n\nvar sizeCache = {};\n\nSvg.prototype.getTextSize = function (text, attr, el) {\n\tif (typeof text === 'number')\n\t\ttext = '' + text;\n\tif (!text || text.match(/^\\s+$/))\n\t\treturn { width: 0, height: 0 };\n\tvar key;\n\tif (text.length < 20) {\n\t\t// The short text tends to be repetitive and getBBox is really slow, so lets cache.\n\t\tkey = text + JSON.stringify(attr);\n\t\tif (sizeCache[key])\n\t\t\treturn sizeCache[key];\n\t}\n\tvar removeLater = !el;\n\tif (!el)\n\t\tel = this.text(text, attr);\n\tvar size;\n\ttry {\n\t\tsize = el.getBBox();\n\t\tif (isNaN(size.height) || !size.height)\n\t\t\tsize = this.guessWidth(text, attr);\n\t\telse\n\t\t\tsize = { width: size.width, height: size.height };\n\t} catch (ex) {\n\t\tsize = this.guessWidth(text, attr);\n\t}\n\tif (removeLater) {\n\t\tif (this.currentGroup.length > 0)\n\t\t\tthis.currentGroup[0].removeChild(el);\n\t\telse\n\t\t\tthis.svg.removeChild(el);\n\t}\n\tif (key)\n\t\tsizeCache[key] = size;\n\treturn size;\n};\n\nSvg.prototype.openGroup = function (options) {\n\toptions = options ? options : {};\n\tvar el = document.createElementNS(svgNS, \"g\");\n\tif (options.klass)\n\t\tel.setAttribute(\"class\", options.klass);\n\tif (options.fill)\n\t\tel.setAttribute(\"fill\", options.fill);\n\tif (options.stroke)\n\t\tel.setAttribute(\"stroke\", options.stroke);\n\tif (options['data-name'])\n\t\tel.setAttribute(\"data-name\", options['data-name']);\n\n\tif (options.prepend)\n\t\tthis.prepend(el);\n\telse\n\t\tthis.append(el);\n\tthis.currentGroup.unshift(el);\n\treturn el;\n};\n\nSvg.prototype.closeGroup = function () {\n\tvar g = this.currentGroup.shift();\n\tif (g && g.children.length === 0) {\n\t\t// If nothing was added to the group it is because all the elements were invisible. We don't need the group, then.\n\t\tg.parentElement.removeChild(g);\n\t\treturn null;\n\t}\n\treturn g;\n};\n\nSvg.prototype.path = function (attr) {\n\tvar el = document.createElementNS(svgNS, \"path\");\n\tfor (var key in attr) {\n\t\tif (attr.hasOwnProperty(key)) {\n\t\t\tif (key === 'path')\n\t\t\t\tel.setAttributeNS(null, 'd', attr.path);\n\t\t\telse if (key === 'klass')\n\t\t\t\tel.setAttributeNS(null, \"class\", attr[key]);\n\t\t\telse if (attr[key] !== undefined)\n\t\t\t\tel.setAttributeNS(null, key, attr[key]);\n\t\t}\n\t}\n\tthis.append(el);\n\treturn el;\n};\n\nSvg.prototype.pathToBack = function (attr) {\n\tvar el = document.createElementNS(svgNS, \"path\");\n\tfor (var key in attr) {\n\t\tif (attr.hasOwnProperty(key)) {\n\t\t\tif (key === 'path')\n\t\t\t\tel.setAttributeNS(null, 'd', attr.path);\n\t\t\telse if (key === 'klass')\n\t\t\t\tel.setAttributeNS(null, \"class\", attr[key]);\n\t\t\telse\n\t\t\t\tel.setAttributeNS(null, key, attr[key]);\n\t\t}\n\t}\n\tthis.prepend(el);\n\treturn el;\n};\n\nSvg.prototype.lineToBack = function (attr) {\n\tvar el = document.createElementNS(svgNS, 'line');\n\tvar keys = Object.keys(attr)\n\tfor (var i = 0; i < keys.length; i++)\n\t\tel.setAttribute(keys[i], attr[keys[i]]);\n\tthis.prepend(el);\n\treturn el;\n};\n\n\nSvg.prototype.append = function (el) {\n\tif (this.currentGroup.length > 0)\n\t\tthis.currentGroup[0].appendChild(el);\n\telse\n\t\tthis.svg.appendChild(el);\n};\n\nSvg.prototype.prepend = function (el) {\n\t// The entire group is prepended, so don't prepend the individual elements.\n\tif (this.currentGroup.length > 0)\n\t\tthis.currentGroup[0].appendChild(el);\n\telse\n\t\tthis.svg.insertBefore(el, this.svg.firstChild);\n};\n\nSvg.prototype.setAttributeOnElement = function (el, attr) {\n\tfor (var key in attr) {\n\t\tif (attr.hasOwnProperty(key)) {\n\t\t\tel.setAttributeNS(null, key, attr[key]);\n\t\t}\n\t}\n};\n\nSvg.prototype.moveElementToChild = function (parent, child) {\n\tparent.appendChild(child);\n};\n\nfunction createSvg() {\n\tvar svg = document.createElementNS(svgNS, \"svg\");\n\tsvg.setAttributeNS(\"http://www.w3.org/2000/xmlns/\", \"xmlns:xlink\", \"http://www.w3.org/1999/xlink\");\n\tsvg.setAttribute('role', 'img'); // for accessibility\n\tsvg.setAttribute('fill', 'currentColor'); // for automatically picking up dark mode and high contrast\n\tsvg.setAttribute('stroke', 'currentColor'); // for automatically picking up dark mode and high contrast\n\treturn svg;\n}\n\n\nmodule.exports = Svg;\n","var version = '6.4.0';\n\nmodule.exports = version;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./index.js\");\n",""],"names":["version","require","animation","tuneBook","sequence","strTranspose","abcjs","signature","Object","keys","forEach","key","renderAbc","tuneMetrics","TimingCallbacks","glyphs","setGlyph","setSymbol","CreateSynth","instrumentIndexToName","pitchToNoteName","SynthSequence","CreateSynthControl","registerAudioContext","activeAudioContext","supportsAudio","playEvent","SynthController","getMidiFile","midiRenderer","synth","module","exports","timer","cursor","startAnimation","paper","tune","options","stop","undefined","showCursor","querySelector","document","createElement","className","style","position","appendChild","hideMeasures","elements","i","length","element","classList","contains","display","lastMeasure","disappearMeasuresAfter","selector","querySelectorAll","disappearMeasuresBefore","measureCallback","hideCurrentMeasure","hideFinishedMeasures","getLineAndMeasure","line","measureNumber","setCursor","range","measureStart","left","top","width","height","qpm","bpm","eventCallback","start","pauseAnimation","pause","stopAnimation","StringTablature","pluginTab","name","defaultTuning","isTabBig","tabSymbolOffset","abcTablatures","inited","plugins","register","plugin","tablature","setError","msg","warnings","warning","push","preparePlugins","tuneNumber","params","returned","nbPlugins","tabs","ii","args","instrument","tabName","visualTranspose","abcSrc","pluginInstance","classz","instance","tabType","layoutTablatures","renderer","abcTune","tablatures","staffLineCount","nTabs","kk","firstStaffOnly","suppress","lines","staff","curStaff","maxStaves","jj","tabPlugin","init","render","target","self","parseInt","tempo","metaText","getBpm","extraMeasuresAtBeginning","beatCallback","lineEndCallback","lineEndAnticipation","beatSubdivisions","joggerTimer","replaceTarget","newTarget","noteTimings","setTiming","lineEndTimings","getLineEndTimings","startTime","currentBeat","currentEvent","currentLine","currentTime","isPaused","isRunning","pausedPercent","justUnpaused","newSeekPercent","lastTimestamp","millisecondsPerBeat","lastMoment","milliseconds","totalBeats","Math","round","doTiming","timestamp","type","thisStartTime","leftEvent","endTimings","requestAnimationFrame","ret","doBeatCallback","ret2","promise","shouldStop","then","Promise","resolve","result","next","endMs","ev","max","debugInfo","offMs","gapMs","gapPx","endX","offPx","JOGGING_INTERVAL","animationJogger","performance","now","setTimeout","offsetPercent","units","setProgress","reset","reportNext","clearTimeout","currentMillisecond","percent","oldEvent","oldBeat","floor","timings","anticipation","callbackTimes","lastTop","timing","bottom","Parse","bookParser","tunebook","numberOfTunes","abc","tunes","split","num","TuneBook","book","parsed","header","prototype","getTuneById","id","getTuneByTitle","title","parseOnly","numTunes","output","callback","renderEngine","isArray","testObject","propertyIsEnumerable","currentTune","startingTune","abcParser","div","getElementById","parse","startPos","getTune","getWarnings","override","innerHTML","flattenTune","tuneObj","staves","j","k","voices","concat","measuresParser","lastChord","measureStartChord","fragStart","hasNotes","voice","elem","startChar","chord","el_type","frag","substring","endChar","measure","startEnding","endEnding","extractMeasures","arr","arr2","measures","hasPickup","getPickupLength","kkk","Tune","EngraverController","wrap","resizeDivs","resizeOuter","window","innerWidth","hasOwnProperty","outer","ofs","offsetLeft","addEventListener","e","renderOne","lineOffset","viewportHorizontal","scrollHorizontal","overflowX","overflowY","overflow","children","viewportVertical","engraver_controller","engraveABC","engraver","parent","parentNode","parserParams","engraverParams","renderParams","warnings_id","warning_id","highlight","clickListener","abcString","removeDiv","setAttribute","body","staffwidth","doLineWrapping","afterParsing","removeChild","widths","getMeasureWidths","calcLineWraps","reParse","revisedParams","explanation","sections","relativeMajor","key1sharp","acc","note","key2sharp","key3sharp","key4sharp","key5sharp","key6sharp","key7sharp","key1flat","key2flat","key3flat","key4flat","key5flat","key6flat","key7flat","keyAccidentals","newKey","JSON","stringify","modes","stepsFromC","keyReverse","createKeyReverse","allKeys","keyObj","toLowerCase","mode","match","maj","relativeMode","majorKey","group","regMode","thisMode","ind","indexOf","transposeKey","steps","fromC","parseCommon","spacing","flatten","delineTune","media","metaTextInfo","formatting","staffNum","voiceNum","lineNum","runningFonts","copy","dest","src","prop","attrs","copyTopInfo","copyBottomInfo","getBeatLength","meter","getMeterFraction","multiplier","den","computePickupLength","barLength","pickupLength","v","tripletMultiplier","el","isSpacer","rest","startTriplet","duration","endTriplet","getBarLength","getTotalTime","totalTime","getTotalBeats","millisecondsPerMeasure","bpmOverride","beatsPerMeasure","getBeatsPerMeasure","minutesPerMeasure","beatLen","barLen","getMeter","value","getKeySignature","getElementFromChar","char","addVerticalInfo","timingEvents","lastBarTop","lastBarBottom","lastEventTop","lastEventBottom","nextTop","nextBottom","makeSortedArray","hash","sort","a","b","diff","addElementToEvents","eventHash","voiceTimeMilliseconds","timeDivider","isTiedState","nextIsBar","hint","realDuration","durationClass","abcelem","es","elemset","isTiedToNext","startTie","startCharArray","endCharArray","x","w","midiPitches","cloneArray","midiGraceNotePitches","min","makeVoicesArray","voicesArr","tempos","staffgroups","staffs","firstStaff","middleC","absoluteY","STEP","lastStaff","isTabStaff","noteFound","tempoLocations","setupEvents","startingDelay","startingBpm","warp","time","maxVoiceTimeMilliseconds","voiceTime","startingRepeatElem","endingRepeatElem","tempoDone","thisMeasure","lastHash","barType","endRepeat","startRepeat","lastVoiceTimeMilliseconds","el2","element2","addEndPoints","addUsefulCallbackInfo","skipTies","index","staffGroup","lastEl","beatLength","statedBeatLength","measuresOfDelay","console","log","naturalBpm","beatsPerSecond","measureLength","setUpAudio","seq","percmap","midi","deline","findSelectableElement","selectables","getSelectableArray","inputLines","lineBreaks","outputLines","inMusicLine","currentMeter","currentKey","currentClef","currentVocalFont","currentGChordFont","currentTripletFont","currentAnnotationFont","inputLine","vskip","outputLine","s","inputStaff","outputStaff","objEqual","addMeterToVoices","addKeyToVoices","abbrevTitle","clef","addClefToVoices","vocalfont","addFontToVoices","gchordfont","tripletfont","annotationfont","outputVoice","inputVoice","cloneLine","replacer","unshift","font","input","inputValue","outputValue","keys2","CustomEvent","event","bubbles","cancelable","detail","evt","createEvent","initCustomEvent","Event","EditArea","textareaid","textarea","initialText","isDragging","addSelectionListener","listener","onmousemove","fireSelectionChanged","addChangeListener","changelistener","onkeyup","fireChanged","onmousedown","onmouseup","onchange","getSelection","selectionStart","end","selectionEnd","setSelection","setSelectionRange","createTextRange","collapse","moveEnd","moveStart","select","focus","getString","setString","str","getElem","gatherAbcParams","abcjsParams","midi_options","parser_options","render_options","Editor","editarea","indicate_changed","canvas_id","paper_id","insertBefore","selectionChangeCallback","clientClickListener","bind","cursorControl","generate_midi","generateDownload","midi_download_id","downloadMidi","generateInline","midi_id","inlineMidi","warningsdiv","generate_warnings","onchangeCallback","currentAbc","bReentry","parseABC","modelChanged","addClassName","hasClassName","elementClassName","RegExp","test","removeClassName","strip","replace","setReadOnly","readOnly","readonlyClass","removeAttribute","redrawMidi","midiPause","downloadMidiEl","inlineMidiEl","engravingEl","dispatchEvent","userAction","synthControl","load","setTune","timerId","disable","error","message","join","updateSelection","paramChanged","synthParamChanged","t","selection","rangeHighlight","setDirtyStyle","isDirty","bIsPaused","wasDirty","setNotDirty","classes","analysis","drag","mouseEvent","shouldPause","visualObj","pauseMidi","rendererFactory","create","baseDuration","commands","setGlobalInfo","tracks","startTrack","notePlacement","cmd","setText","text","pan","setChannel","setInstrument","channel","gapLengthInBeats","gap","pitch","volume","cents","addNotes","endTrack","getData","times","h","parseFloat","lastTime","events","distance","addRest","startNote","endNote","clone","source","destination","property","cloneHashOfHash","cloneHashOfArrayOfHash","startsWith","pattern","endsWith","d","lastIndexOf","last","parseDirective","ParseHeader","ParseMusic","Tokenizer","TuneBuilder","tuneBuilder","tokenizer","wordsContinuation","symbolContinuation","addPositioning","positioning","addFont","fonts","multilineVars","iChar","accidentals","root","origMeter","hasMainTitle","default_length","verticalPos","octave","next_note_duration","start_new_line","is_in_header","partForNextLine","tempoForNextLine","havent_set_length","macros","currBarNumber","barCounter","ignoredDecorations","score_is_present","inEnding","inTie","inTieChord","vocalPosition","dynamicPosition","chordPosition","ornamentPosition","volumePosition","openSlurs","freegchord","endingHoldOver","differentFont","defaultFonts","decoration","face","size","weight","addFormattingOptions","elType","measurefont","repeatfont","duplicateStartEndingHoldOvers","restoreStartEndingHoldOvers","addWarning","addWarningObject","warningObject","warningObjects","encode","warn","col_num","bad_char","clean_line","lineIndex","column","music","getWarningObjects","addWords","words","word_list","last_divider","addWord","word","syllable","translateString","divider","escNext","skip","to","inSlur","pitches","shift","lyric","addSymbols","parseLine","err","addDirective","getCurrentVoice","lineContinuation","parseMusic","parseHeader","regular","newline","startNewLine","symbols","appendLastMeasure","nextVoice","addHintMeasure","nextStaff","stave","nextStave","addHintMeasures","nextLine","strTune","switches","i2","substr","all","backslash","comment","padding","Array","pop","print","globalTranspose","setVisualTranspose","format","globalFormatting","header_only","stop_on_warning","wasInHeader","setRunningFont","cleanUp","barsperstaff","staffnonote","ph","pl","papersize","landscape","pagewidth","pageheight","hint_measures","wrapLines","barNumbers","directives","initialWhiteSpace","tuneStrings","pos","dir","arrDir","pure","initialize","tokenizer_","warn_","multilineVars_","tune_","tuneBuilder_","initializeFonts","historyfont","infofont","partsfont","textfont","wordsfont","composerfont","subtitlefont","tempofont","titlefont","footerfont","headerfont","voicefont","tablabelfont","tabnumberfont","tabgracefont","fontTypeCanHaveBox","fontTranslation","fontFace","getFontParameter","tokens","currentSetting","processNumberOnly","token","box","state","hyphenLast","currToken","psFont","getChangingFont","getGlobalFont","setScale","scratch","tok","isNaN","scale","drumNames","interpretPercMap","restOfString","sound","noteHead","getRequiredMeasurement","points","getMeasurement","used","oneParameterMeasurement","addMultilineVar","intt","addMultilineVarBool","addMultilineVarOneParamChoice","choices","choice","found","midiCmdParam0","midiCmdParam1String","midiCmdParam1Integer","midiCmdParam1Integer1OptionalInteger","midiCmdParam2Integer","midiCmdParam4Integer","midiCmdParam5Integer","midiCmdParam1String1Integer","midiCmdParamFraction","midiCmdParam1StringVariableIntegers","parseMidiCommand","midi_cmd","midi_params","drummap","p","hasBeginMusic","appendElement","parseFontChangeLine","textstr","textParts","setfont","textarr","whichFont","positionChoices","tokenize","stripComment","bagpipes","flatbeams","jazzchords","accentAbove","germanAlphabet","graceSlurs","lt","parseStretchLast","lineThickness","sl","stretchlast","titlecaps","titleleft","measurebox","voiceScale","currentVoice","floatt","changeVoiceScale","voiceColor","color","changeVoiceColor","addSpacing","addSeparator","spaceAbove","spaceBelow","lenLine","partsBox","setBarNumberImmediate","textBlock","addText","continueall","centerstr","addCentered","sfTokens","sfNum","addVoice","newStaff","bracket","brace","continueBar","numVoices","connectBarLines","openParen","openBracket","openBrace","justOpenParen","justOpenBracket","justOpenBrace","lastVoice","addContinueBar","ty","vc","continueId","pgNum","getInt","addNewPage","digits","subCmd","addMetaText","footerStr","getMeat","footerArr","footer","center","right","addMetaTextObj","formatHash","fontboxpadding","stafftopmargin","parseKeyVoice","setTitle","origSize","addSubtitle","setMeter","parseNum","parseFraction","totalLength","mv","calcTempo","relTempo","dur","resolveTempo","addUserDefinition","equals","before","after","legalChars","setDefaultLength","len","len_arr","n","tempoString","larghissimo","adagissimo","sostenuto","grave","largo","lento","larghetto","adagio","adagietto","andante","andantino","moderato","allegretto","allegro","animato","agitato","veloce","vivace","vivacissimo","allegrissimo","presto","prestissimo","setTempo","delaySet","preString","suppressBpm","postString","printTempo","letter_to_inline_header","startLine","ws","eatWhiteSpace","appendStartingElement","parseKey","foundClef","foundKey","fixKey","part","parseVoice","letter_to_body_header","metaTextHeaders","A","B","C","D","F","G","I","N","O","R","S","W","Z","field","restOfLine","addMetaTextArray","peekLine","toUpperCase","theReverser","transpose","standardKey","keyName","localTranspose","keySignature","clefLines","mid","calcMiddle","oct","fixClef","clefPos","deepCopyKey","E","c","f","g","addPosToKey","impliedNaturals","fixedKey","parseMiddle","normalizeAccidentals","accs","isInline","retPitch","getKeyPitch","retAcc","getSharpFlat","retMode","getMode","oldKey","keyCompensate","savedOrigKey","globalTransposeOrigKeySig","getKeyAccidentals2","explicitAccidentals","splice","getPitchFromTokens","stafflines","staffscale","setCurrentVoice","getToken","isNew","staffInfo","startStaff","addNextTokenToStaffInfo","attr","getVoiceToken","addNextTokenToVoiceInfo","getNextToken","addNextNoteTokenToVoiceInfo","noteToTransposition","oct2","stem","suppressChords","cue","vi","spacing_below_offset","subname","legalAccents","volumeDecorations","dynamicDecorations","accentPseudonyms","accentDynamicPseudonyms","nonDecorations","durations","rests","accMap","tripletQ","MusicParser","_tokenizer","_warn","_multilineVars","_tune","_tuneBuilder","_header","isInTie","overlayLevel","voiceIndex","startOfLine","isWhiteSpace","delayStartNewLine","tripletNotesLeft","retHeader","startI","retInlineHeader","letter_to_spacer","letter_to_chord","chordName","addedChord","ci","rel_position","skipWhiteSpace","force_end_beam_last","letter_to_accent","beambr","letter_to_grace","gracenotes","letter_to_bar","measureNotEmpty","bar","barFirstEndingNum","isFirstVoice","barNumber","letter_to_overlay","letter_to_open_slurs_and_triplets","consumed","startSlur","dottedSlur","triplet","tripletR","num_notes","chordStartChar","chordDuration","rememberEndBeam","done","accent","chordNote","getCoreNote","end_beam","endTie","setIsInTie","postChordDone","addEndBeam","endSlur","br2","getBrokenRhythm","fraction","getFraction","ch","core","accidental","midipitch","graceNotes","durationOfMeasure","getBrackettedSubstring","getFloat","y","gra","acciaccatura","endBeam","macro","includes","findIndex","curr_pos","getBarLine","orig_bar_len","ending","retRep","getTokenOf","scoreTranspose","targetKey","st","canHaveBrokenRhythm","isComplete","dottedTie","durationSetByPreviousNote","grace_notes","getNumber","addTieToLastNote","X","z","dblflat","flat","natural","sharp","dblsharp","quarterflat","quartersharp","finished","skipAlpha","firstThree","getClef","bExplicitOnly","strOrig","needsClef","strClef","isMatch","explicit","colons","getKeyAccidental","accTranslation","isLetter","isNumber","alphaUntilWhiteSpace","int2","float2","close","charMap","charMap1","charMap2","out","iSave","getTitleNumber","regex","exec","foundNumber","thePatterns","thisPattern","theTitleNumber","trim","substInChord","maxErrorChars","_matchChar","matchChar","esc","allNotes","transposeChordName","keyIndex","newKeyMinor","localTransposeVerticalMovement","localTransposePreferFlats","baseKey","thisKeyIndex","recognized","newKeyName","transposedKey","newKeySig","charCodeAt","ceil","pitchToLetter","accidentalChange","origPitch","newPitch","origKeySig","origPitchLetter","origAccidental","currentAccidental","delta","newPitchLetter","newAccidental","calcAccidental","accidentals2","accidentals3","actual","pitchIndex","noteName","allPitches","sharpChords","flatChords","sharpChordsFree","flatChordsFree","preferFlats","freeGCchord","extra1","bass","extra2","resolveOverlays","madeChanges","durationsPerLines","overlayVoice","hasOverlay","snip","durationThisBar","inOverlay","overlayDuration","snipStart","ov","direction","indexOfLastBar","findLastBar","fixTitles","firstMusicLine","hasATitle","currSlur","closeLine","simplifyMetaText","anyDeleted","hasAny","containsNotes","filter","wrapMusicLines","keepThis","containsNotesStrict","workingClef","cleanUpSlursInLine","addEndSlur","obj","chordPos","offNum","slurNum","addStartSlur","usedNums","nextNum","label","gg","ggg","fixClefPlacement","permanentItems","barNumThisLine","getNextMusicLine","cp","ss","vv","startElement","section","slice","potentialStartBeam","potentialEndBeam","vskipPending","getLastNote","getDuration","startBeam","hashParams","This","pushNote","hp","currStaff","mid2","endBeamHere","endBeamLast","hashParams2","pushLine","info","subtitle","newpage","lineLength","separator","createVoice","thisStaff","head","createStaff","setLineFont","createLine","isDifferent","lastElement","isFirstLine","currLine","isArrayOfStrings","notes","history","addRichTextToAnnotationsAndLyrics","l","linesBreakElements","findLineBreaks","addLineBreaks","lastKeySig","lastStem","currentBarNumber","action","ogLine","currVoice","lineBreakArray","lineBreakIndexes","lbai","lineCounter","lineStart","lbi","freeFormLineBreaks","lineBreakPoint","totals","totalThisLine","attemptedWidth","oldDistance","newDistance","newArr","oneTry","measureWidths","idealWidths","accumulator","lineAccumulator","lineWidths","lastVariance","highestVariance","startIndex","otherTries","measureWidth","thisVariance","abs","varianceIsClose","newWidths","newBreaks","optimizeLineWidths","numLines","total","idealWidth","otherTry","variances","aveVariance","lineWidth","attempts","smallest","smallestIndex","failed","variance","fixedMeasureLineBreaks","preferredMeasuresPerLine","thisWidth","getRevisedTuneParams","staffWidth","minSpacing","minSpacingLimit","maxSpacing","lastLineLimit","accumulatedLineBreaks","explanations","usableWidth","minLineSize","allowableVariance","minWidth","ff","reason","changes","transposeOneTune","changeAllKeySigs","transposeVoices","count","segment","destinationKey","transposeVoice","createKeyAccidentals","setLetterDistance","keyRoot","letterDistance","letters","measureAccidentals","transposedMeasureAccidentals","prefersFlats","newChord","replaceChord","parseNote","transposePitch","upper","replaceNote","grace","newGrace","replaceGrace","octaves","major","newMajor","newMode","origDistFromC","newDistFromC","adj","keyAcc","newNote","courtesy","regPitch","regNote","regOptionalNote","regSpace","reg","currentAcc","calcAdjustment","noteLen","trailingLen","leadingLen","regPreBracket","regOpenBracket","regCloseBracket","endLen","regOpenBrace","regCloseBrace","regPreBrace","regPreNote","thisAccidental","keyAccidental","measureAccidental","ChordTrack","pitchesToPerc","barAccidentals","startingTempo","startingMeter","tempoChangeFactor","currentInstrument","currentTrack","lastNoteDurationPosition","currentTrackName","lastEventTime","chordTrack","drumInstrument","lastBarTime","doBeatAccents","stressBeat1","stressBeatDown","stressBeatUp","beatFraction","nextVolume","nextVolumeDelta","slurCount","drumTrack","drumTrackFinished","drumDefinition","drumBars","normalBreakBetweenNotes","slurredBreakBetweenNotes","staccatoBreakBetweenNotes","percmap_","midiOptions","bassprog","bassvol","chordprog","chordvol","gchord","chordsOff","preProcess","setTranspose","setLastBarTime","voiceOff","voicesOff","trackName","writeNote","setKeySignature","getBeatFraction","alignDrumToMeter","setTempoChangeFactor","barEnd","writeDrum","setRhythmHead","timeToRealTime","program","normalizeDrumDefinition","gChordOn","beats","paramChange","finish","detuneOctave","findOctaves","addTrack","totalDuration","durationRounded","ties","timeCounter","tempoMultiplier","thisDuration","tie","item","calcBeat","currTime","distanceFromStart","processVolume","beat","barBeat","findNoteModifications","velocity","thisBreakBetweenNotes","noteModification","doModifiedNotes","noteTime","numNotes","pp","runningDuration","shortestNote","processChord","graces","processGraceNotes","writeGraceNotes","rt","ms","currentTrackMilliseconds","currentTrackWholeNotes","ePitches","actualPitch","adjustPitch","adjustForMicroTone","endType","realDur","getRealDuration","extractOctave","extractNote","lowercase","companionDuration","graceDuration","midiGrace","gp","durationInMeasures","quarterToneFactor","description","on","totalPlay","bars","playCount","measuresPerBeat","factor","measureLen","detuneCents","track","topEvent","topNote","centsToFactor","setAttributes","elm","Midi","trackstrings","trackcount","noteOnAndChannel","noteOffAndChannel","toHex","divisions","timeSignature","encodeString","noteWarped","trackInstrument","silencelength","tracklength","number","ccPrefix","toString","HALF_STEP","loudness","toDurationHex","bend","to7BitHex","embed","noplayer","data","link","href","firstChild","controller","autoplay","loop","enablejavascript","cmdType","nameArray","hex","sharpCount","flatCount","sig","dens","clocks","encodeHex","lower","higher","res","bits","PERCUSSION_PROGRAM","abctune","midiTranspose","channelExplicitlySet","drumPattern","drum","drumIntro","drumOn","drumOffAfterIntro","drumOff","rhythmHeadThisBar","crescendoSize","startingMidi","globals","drumbars","drumon","nobeataccents","interpretTempo","defaultQpm","startVoice","inCrescendo","inDiminuendo","durationCounter","tempoChanges","currentVolume","startRepeatPlaceholder","skipEndingPlaceholder","startingDrumSet","setDynamics","volumes","dynamicType","voiceNumber","numNotesToDecoration","endDec","endingVolume","n2","endDec2","voiceName","getTrackTitle","cl","addKey","addMeter","intro","drumoff","noteEventsInBar","tripletDurationTotal","tripletDurationCount","noteElem","durationTotal","chordVoiceOffThisBar","interpretMeter","drumChange","addIfDifferent","tacet","param","insertTempoChanges","pickups","insertPoint","counter","changePositions","lastTempo","noChordVoice","removeNaturals","newMeter","abcjsAudioContext","pow","chordTrackFinished","chordChannel","currentChords","chordLastBar","gChordTacet","hasRhythmHead","bassInstrument","chordInstrument","boomVolume","chickVolume","overridePattern","parseGChord","isRhythmHead","chick","note2","resolveChords","chordTrackEmpty","findChord","breakSynonyms","interpretChord","basses","chordTranspose","bass2","chordNotes","remaining","fifth","explicitBass","bassAcc","bassShift","boom","boom2","modifier","intervals","chordIntervals","M","m","noteLength","isEmpty","endTime","thisMeasureLength","portionOfAMeasure","currentChordsExpanded","expandCurrentChords","rhythmPatterns","beatsPresent","firstBoom","minLength","isBoom","newBass","resolvePitch","oo","currentChord","num8thNotes","chords","current","createNoteMap","map","nextNote","inst","loopImage","playImage","pauseImage","loadingImage","resetImage","Error","HTMLElement","ac","buildDom","attachListeners","isDisabled","add","remove","setWarp","resetAll","pushedButtons","button","pushPlay","startButton","pushLoop","loopButton","progressBackground","progressThumb","clientWidth","clock","totalSeconds","minutes","seconds","secondsFormatted","afterResume","isResumed","hasLoop","loopHandler","hasRestart","restartHandler","hasPlay","playHandler","playPromiseHandler","hasProgress","progressHandler","hasWarp","warpHandler","hasClock","html","repeatTitle","repeatAria","restartTitle","restartAria","playTitle","playAria","randomTitle","randomAria","warpTitle","warpAria","acResumerMiddleWare","playBtn","isPromise","needsInit","status","resume","response","doNext","getNote","downloadBuffer","placeNote","soundsCache","notSupportedMessage","originalSoundFontUrl","defaultSoundFontUrl","alternateSoundFontUrl","audioBufferPossible","directSource","startTimeSec","pausedTimeSec","audioBuffers","audioContext","debugCallback","_deviceCapable","reject","soundFontUrl","soundFontVolumeMultiplier","programOffsets","fadeLength","NaN","noteEnd","meterSize","flattened","sequenceCallback","callbackContext","onEnded","meterFraction","cached","errorNotes","pitchNumber","label2","batches","CHUNK","results","loaded","_loadBatch","batch","delay","promises","pending","oneResponse","which","newBatch","list","prime","fadeTimeSec","totalSamples","sampleRate","noteMapTracks","swing","addSwing","panDistances","setPan","uniqueSounds","noteMap","trackNumber","panDistance","allPromises","audioBuffer","createBuffer","key2","parts","resolveData","me","suspend","numTracks","panParam","panNumber","even","currLow","currHigh","resumePosition","_kickOffSound","seek","offset","elapsed","download","getAudioBuffer","getIsRunning","trackNum","createBufferSource","buffer","connect","onended","volumeIncrease","halfbeatLength","swingDuration","oldEventStart","URL","createObjectURL","bufferToWave","numOfChan","numberOfChannels","ArrayBuffer","view","DataView","channels","sample","setUint32","setUint16","getChannelData","setInt16","Blob","midiCreate","midiOutputType","decoded","Uint8Array","generateMidiDownloadLink","isFunction","functionToCheck","getType","call","midiParams","divClasses","downloadClass","preTextDownload","downloadLabel","filename","fileName","postTextDownload","svg","url","instrumentCache","xhr","XMLHttpRequest","noteUrl","open","responseType","onload","noteDecoded","maybePromise","decodeAudioData","onerror","send","notesInOrder","noteToMidi","midiToNote","pitchMap","f0","n0","s0","x0","f1","n1","s1","x1","f2","s2","x2","f3","n3","s3","x3","f4","n4","s4","x4","f5","n5","s5","x5","f6","n6","s6","x6","f7","n7","s7","x7","f8","n8","s8","x8","f9","n9","s9","x9","f10","n10","s10","x10","f11","n11","s11","x11","f12","n12","s12","x12","f13","n13","s13","x13","f14","n14","s14","x14","f15","n15","s15","x15","f16","n16","s16","x16","pitchObj","outputAudioBuffer","startArray","volumeMultiplier","ofsMs","noteEndSec","OfflineAC","OfflineAudioContext","webkitOfflineAudioContext","offlineCtx","noteBufferPromise","gainNode","createGain","createStereoPanner","panNode","setValueAtTime","gain","linearRampToValueAtTime","playbackRate","noteOff","fnResolve","oncomplete","renderedBuffer","copyToChannel","startRendering","toBuffer","fromBuffer","fromData","toData","midiGracePitches","appendNote","doPlay","AudioContext","webkitAudioContext","navigator","mozAudioContext","msAudioContext","aac","midiBuffer","currentTempo","control","isLooping","isStarted","isLoaded","isLoading","visualOptions","displayPlay","displayProgress","displayLoop","toggleLoop","displayRestart","restart","play","randomAccess","displayWarp","onWarp","audioParams","go","loadingResponse","subdivisions","onReady","notesStatus","destroy","runWhenReady","_play","sleep","fn","arg1","onStart","_randomAccess","background","getBoundingClientRect","offsetWidth","newWarp","wasPlaying","startPercent","onFinished","beatNumber","onBeat","onEvent","lineEvent","onLineEnd","getUrl","click","revokeObjectURL","starts","instrumentNumber","TabNote","TabNotes","buildCapo","capoTuning","tuning","capo","iii","curNote","jjj","emit","buildPatterns","strings","highestNote","tabNotes","stringNotes","build","buildSecond","first","sameString","jjjj","curPos","nextPos","noteToNumber","secondPos","handleChordNotes","retNotes","iiii","clefTranspose","checkKeyAccidentals","toNumber","stringNumber","secondPosition","firstSize","emitNoAccidentals","isFlat","noteEquiv","getAccidentalEquiv","isAltered","isDouble","isSharp","stringPitches","pitchAltered","quarter","StringPatterns","stringToPitch","startingPitch","linePitch","invalidNumber","notesToNumber","retGraces","replaceAll","tabInfos","_super","tunePos","inError","lineSpace","verticalSize","pitch2","bypass","isPercussion","setRelative","child","relative","hasComma","hasQuote","isKeySharp","isKeyFlat","isLower","isQuoted","cloneNote","newTabNote","sameNoteAs","isLowerThan","curAccidentals","cloned","prevNote","fromNote","toNote","fromN","toN","from","tn","buildReturned","toIndex","TabStringPatterns","converter","TabCommon","TabRenderer","Plugin","staffNumber","tabSettings","nbLines","hideTabSymbol","semantics","staffIndex","rndrer","doLayout","AbcStringTab","AbsoluteElement","RelativeElement","isObject","constructor","cloneObject","cloneAbsolute","absSrc","cloneAbsoluteAndRelatives","buildTabAbsolute","absX","relX","tabIcon","tabYPos","icon","Ypos","tabAbsolute","tabRelative","lyricsDim","extra","TabAbsoluteElements","getInitialStaffSize","tabNameInfos","buildRelativeTabNote","def","isGrace","strNote","opt","tabNoteRelative","getXGrace","graceInRest","absElem","convertToNumber","tabPos","posNote","buildGraceRelativesForRest","absChild","tabVoice","mm","defGrace","graceX","curGrace","tabGraceRelative","staffAbsolute","keySig","tabVoiceIndex","staffSize","defNote","isClef","lastBar","bn","abselem","restGraces","heads","lyricDim","ll","dx","VoiceElement","initSpecialY","tempoHeightAbove","partHeightAbove","volumeHeightAbove","dynamicHeightAbove","endingHeightAbove","chordHeightAbove","lyricHeightAbove","lyricHeightBelow","chordHeightBelow","volumeHeightBelow","dynamicHeightBelow","getLyricHeight","maxLyricHeight","curAbs","specialY","buildTabName","stringSemantics","textSize","getTextSize","doDraw","calc","absolutes","tabStaff","tabSize","islastTabInStaff","getStaffNumbers","nbStaffs","getParentStaffIndex","linkStaffAndTabs","parentIndex","hasStaff","hasTab","isMultiVoiceSingleStaff","getNextTabPos","tabIndex","handledVoices","inProgress","nbVoices","getLastStaff","lastTab","checkVoiceKeySig","curVoice","elem0","firstVoice","lyricsHeight","padd","prevIndex","previousStaff","tabTop","staffGroupInfos","dy","nextTabPos","parentStaff","duplicate","nameHeight","BeamElem","BraceElem","createClef","createKeySignature","createNoteHead","createTimeSignature","Decoration","EndingElem","StaffGroupElement","TempoElement","TieElem","TripletElem","addChord","chartable","rhythm","nostem","harmonic","triangle","uflags","dflags","AbstractEngraver","isBagpipes","flatBeams","initialClef","slurs","slursbyvoice","tiesbyvoice","endingsbyvoice","scaleByVoice","colorByVoice","tripletmultiplier","abcline","accidentalSlot","accidentalshiftx","dotshiftx","hasVocals","minY","partstartelem","startlimitelem","stemdir","setStemHeight","heightInPixels","stemHeight","getCurrentVoiceId","pushCrossLineElems","popCrossLineElems","containsLyrics","createABCLine","staffgroup","tempoSet","restoreState","createABCStaff","abcstaff","updateFonts","barfrom","barto","headerPosition","baselineToCenter","addMeasureNumber","addChild","ts","staffLines","isSingleLineStaff","createABCVoice","setStaffLimits","setBottomStaff","continuing","getBeamGroup","addOther","voicetotal","voicenumber","slur","force","stemDir","dotted","setHint","setAveragePitch","minpitch","isFirstStaff","abselems","createABCElement","tempoElement","addFixedX","saveState","tiesSave","slursSave","slursbyvoiceSave","tiesbyvoiceSave","createBeam","createNote","isClosed","createBarLine","invisible","absKey","dim","abselem3","abselem2","addFixed","sortPitch","sum","averagepitch","maxpitch","elems","abselemset","beamelem","runningDirection","setStemDirection","tempStemDir","stemsUp","calcDir","addBeam","sorted","tmp","ledgerLines","minPitch","maxPitch","isRest","symbolWidth","additionalLedgers","addGraceNotes","notehead","roomtaken","gracescale","graceScaleStem","gracebeam","flag","mainNote","graceoffsets","gracepitch","headx","extrax","highestVert","addSlursAndTies","addExtra","dAcciaccatura","addRight","scalex","scaley","pseudoabselem","p1","p2","linewidth","getSymbolWidth","isInvisibleRest","anchor1","anchor2","addRestToAbsElement","dot","isMultiVoice","durlog","restpitch","roomTaken","roomTakenRight","mmWidth","addHead","numMeasures","addIfNotExist","addNoteToAbcElement","zeroDuration","noteSymbol","prev","curr","printer_shift","percHead","isTopWhenStemIsDown","isBottomWhenStemIsUp","hasStem","shouldExtendStem","printAccidentals","extraw","extraLeft","addLyric","lyricStr","ly","roomtakenright","tot","inc","durationForSpacing","absType","durationClassOveride","ret1","createDecoration","ret3","setCloseAnchor","middleNote","pitchelem","setEndAnchor","setRange","slurid","setStartX","addInternalNote","measureNumDim","vert","anchor","firstdots","firstthin","thick","secondthin","seconddots","setEndX","textWidth","minspacing","translateChord","noteheadWidth","isAnnotation","klass","chordString","chordWidth","chordHeight","realWidth","relPositionY","pos2","addTextIf","rows","marginLeft","marginTop","move","absElemType","inGroup","noMove","marginBottom","calcHeight","symbolHeightInPitches","clefOffsets","adjustspacing","isKeySig","symbol","fudge","thickness","newDotShiftX","shiftheadx","adjust","opts","xdelta","dotadjusty","symb","accSlotFound","accPlace","numWidth","denWidth","maxWidth","i3","DynamicDecoration","CrescendoElem","GlissandoElem","startDiminuendoX","startCrescendoX","minTop","minBottom","closeDecoration","yPos","deltaX","getSymbolAlign","yPos2","blank1","blank2","fixedY","above","below","volumeDecoration","compoundDecoration","highestPitch","lowestPitch","placement","stackedDecoration","incrementPlacement","getPlacement","textDecoration","textFudge","textHeight","symbolDecoration","symbolList","hasOne","leftDecoration","dynamicDecoration","diminuendo","crescendo","glissando","startGlissandoX","unhighlight","fixed","getFixedCoords","_addChild","half","setLimit","member","pushTop","pushBottom","setX","midpoint","firstElement","isflat","isgrace","forceup","forcedown","average","allrests","beams","beam","calcAverage","middleLine","numElements","richText","BottomText","isPrint","paddingLeft","shouldAddClasses","unalignedWords","extraText","defFont","space","addMultiLine","addSingleLine","preface","content","groupName","startGroup","endGroup","discography","transcription","endVoice","lastContinuedVoice","getWidth","isStartVoice","dec","FreeText","getFontAndAttr","maxHeight","leftSide","currentFont","centerVertically","getChordDim","margin","invertLane","lane","putChordInLane","getLane","largestY","row","phrases","thisWord","phrase","getFamily","Separator","staffnumber","setHeight","setWidth","Subtitle","tAnchor","tLeft","totalHeightInPitches","temposcale","tempoNote","internalNotes","startLimitElem","startLimitX","endLimitElem","endLimitX","calcTieDirection","referencePitch","calcSlurDirection","hasDownStem","calcX","lineStartX","lineEndX","startX","calcTieY","startY","endY","calcSlurY","beamInterferes","midPoint","hasBeam1","hasBeam2","isLastInBeam","isFirstInBeam","avoidCollisionAbove","maxInnerHeight","TopText","headerTextHeight","origin","composer","hasSimpleComposerLine","composerLine","ingroup","author","partOrder","middleElems","otherchildren","firstItem","adjustRange","pathClone","pathArray","pathScale","kx","ky","Glyphs","printSymbol","path","getPathForSymbol","getYCorr","germanNote","baseChord","bassNote","marker","drawTempo","drawRelativeElement","setClass","elementGroup","drawAbsolute","bartop","staffPos","isTempo","beginGroup","counters","getCurrent","overrideClasses","baseVal","isSelectable","notePositions","zero","printPath","roundNumber","drawBeam","pathString","slope","getSlope","xes","y1","getY","y2","draw","klasses","generate","stroke","fill","foregroundColor","calcY","startY2","endY2","currentX","sprintf","renderText","drawBrace","straightPath","xLeft","yTop","yBottom","xLineWidth","yOverlap","wCurve","hCurve","curvyPath","yHeight","curve","xCurve","yCurve","openGroup","closeGroup","wrapSvgEl","drawCrescendo","drawLine","y3","y4","printDebugBox","rectBeneath","drawStaffGroup","setPaperSize","nonMusic","Selectables","responsive","selectTypes","groupClasses","moveY","topText","incrLine","abcLine","lineNumber","addStaffPadding","staffSeparation","engraveStaffLine","bottomText","getElements","lastStaffGroup","thisStaffGroup","lastBottomLine","nextTopLine","naturalSeparation","separationInPixels","drawDynamics","drawEnding","linestartx","lineendx","noClass","drawGlissando","leftY","rightY","leftX","rightX","marginRight","leftYAdj","rightYAdj","numSquigglies","drawSquiggly","sqrt","xOfs","leftStart","leftEnd","Group","lastM","isInGroup","addPath","drawSeparator","absmove","absolutemoveY","printLine","firefox112","lineToBack","pathToBack","printStem","ycorr","groupClass","kernSymbols","lastSymbol","thisSymbol","lastSymbolWidth","printStaffLine","graphelem","hAnchor","tabFont","tabClass","stemWidth","scaleExistingElem","scaleX","scaleY","setAttributeOnElement","toFixed","absEl","svgEl","isNoteOrTabNumber","canSelect","selectable","tabindex","sel","isDraggable","maxwidth","ariaLabel","styles","insertStyles","parentStyles","setResponsiveWidth","setSize","setParentStyles","arguments","o","String","fromCharCode","toExponential","str_repeat","drawVoice","printStaff","colorIndex","staff1","showDebug","boxAllElements","dottedLine","originalTop","originalBottom","debugPrintGridItem","topLine","bottomLine","incrVoice","newMeasure","startx","printBrace","tabNameHeight","r","leftMargin","colors","positionY","chordLines","coords","relElem","endx","prepend","firstYLine","lastYLine","curpitch","descenderHeight","preWidth","charWidth","postWidth","charWidth2","alreadyInGroup","richTextLine","laneMargin","getBBox","deltaY","rect","drawTie","layout","fudgeY","drawArc","isTie","pitch1","norm","ux","uy","maxFlatten","controlx1","controly1","controlx2","controly2","pathString2","drawTriplet","hasBeam","drawBracket","xTextPos","yTextPos","bracketHeight","midX","gapWidth","leftEndX","leftEndY","rightStartX","rightStartY","staffbottom","saveColor","textEl","foundNote","justInitializedMeasureNumber","isInMeasure","startMeasure","isNonSpacerRest","incrNote","incrMeasure","Renderer","setupSelection","Classes","GetFontAndAttr","GetTextSize","oneSvgPerLine","selectionColor","dragColor","dragging","SPACE","timeBasedLayout","expandToWidest","add_classes","staffwidthScreen","staffwidthPrint","listeners","addSelectListener","setPaddingOverride","minPadding","selected","dragTarget","dragIndex","dragMouseStart","dragYStep","setLineThickness","abctunes","engraveTune","adjustNonScaledItems","origJazzChords","setupTune","constructTuneElements","needNewSection","foundNotStaffExtra","lastXPosition","newTune","hasPrintedTempo","hasSeenNonSubtitle","nlines","entry","nRows","thisRow","svgs","splitSvgIntoLines","paddingBottom","viewBox","getAttribute","wrappers","gapBetweenLines","wrapper","divStyles","duplicateSvg","fullTitle","viewBoxHeight","cloneNode","titleEl","innerText","svgNS","createElementNS","attributes","getDim","historyEl","measureTotalPerLine","noteNumber","measureTotal","fontOverrides","paddingPercent","fontHeight","addClass","removeClass","kls","FONTEM","FONTSIZE","TOPNOTE","STAVEHEIGHT","INDENT","findNumber","createAnalysis","classObj","closest","dataset","tagName","clickedName","parentClasses","clickedClasses","selectableElement","nodeValue","hist","keyboardDown","keyboardSelection","elementFocused","mouseDown","passive","mouseMove","mouseUp","getCoord","yOffset","clientHeight","svgClicked","offsetX","offsetY","layerX","layerY","dragMechanism","notifySelect","keyCode","preventDefault","handled","findElementInHistory","findElementByCoord","minDistance","closestIndex","horiz","hypotenuse","getBestMatchCoordinates","epsilon","getTarget","parentElement","getMousePosition","clickedOn","attachMissingTouchEventAttributes","touchEv","touches","pageX","pageY","_ev","addGlobalClass","lastTouchMove","yDist","clearSelection","removeGlobalClass","dragStep","dragMax","step","elStart","elEnd","getClassSet","oldClass","setClassSet","klassSet","getBarYAt","layoutBeam","calcDy","minStemHeight","minStem","calcYPos","xPos","calcXPos","createAdditionalBeams","createStems","getDurlog","calcSlant","leftAveragePitch","rightAveragePitch","numStems","slant","maxSlant","asc","starthead","endhead","firstAveragePitch","lastAveragePitch","barpos","barminpos","furthestHead","ovalDelta","bary","auxBeams","sy","single","auxBeamEndX","auxBeamEndY","starty","endy","getLeftEdgeOfStaff","voiceheaderw","addBraceSize","sizeW","setBraceLocation","setLocation","layoutInGrid","leftEdge","getTotalDuration","totalWidth","leftAlignPadding","afterFixedLeft","durationUnit","gridStart","align","grandchild","gridEnd","maxCount","layoutVoice","setUpperAndLowerElements","layoutStaffGroup","setXSpacing","isLastLine","debug","newspace","it","calcHorizontalSpacing","spacingUnits","minSpace","minspace","centerWholeRests","dumpGroup","stretchLast","targetWidth","lack","stretch","relSpace","constSpace","lastStaffBottom","incTop","vocal","hgt","setUpperAndLowerVoiceElements","thisStaffTop","forcedSpacingBetween","minSpacingInPitches","systemStaffSeparation","addedSpace","staffTopMargin","setUpperAndLowerAbsoluteElements","setUpperAndLowerCrescendoElements","setUpperAndLowerDynamicElements","setUpperAndLowerEndingElements","specialYResolved","setUpperAndLowerTempoElement","setUpperAndLowerRelativeElements","tempoPitch","renderSpacing","layoutVoiceElements","checkLastBarX","maxX","lastChild","maxChild","barX","spacingunits","currentduration","beginLayout","spacingunit","layoutEnded","getDurationIndex","currentvoices","othervoices","durationIndex","spacingduration","getNextX","getSpacingUnits","lastTopVoice","topVoice","isSameStaff","voicechildx","layoutOneItem","shiftRight","updateNextX","updateIndices","durationindex","voice1","voice2","layoutTriplet","isAbove","heightAtMidpoint","xAtMidpoint","VoiceElements","minx","nextx","er","pad","overlaps","firstChildNoteWidth","adjustedWidth","relativeChild","extraWidth","getExtraWidth","getMinWidth","moveDecorations","setLaneForChord","yAtNote","placeInLane","rightMost","xCoords","fits","absElems","rightMostAbove","rightMostBelow","setLane","numAnnotationsBelow","numLanesAbove","numLanesBelow","Svg","userAgent","clear","initVerticalSpace","setVerticalSpace","setPadding","paddingOverride","paddingtop","paddingbottom","paddingright","paddingleft","setPaddingVariable","paddingKey","formattingKey","printDefault","screenDefault","graceBefore","graceInside","graceAfter","lineSkipFactor","paragraphSkipFactor","slurHeight","staffsep","composerspace","partsspace","textspace","musicspace","titlespace","sysstaffsep","subtitlespace","topspace","vocalspace","wordsspace","em","createSvg","currentGroup","titleNode","createTextNode","cls","transform","textContent","dummySvg","constructHLine","constructVLine","ts2","dist","ts3","append","tspan","guessWidth","createDummySvg","ex","sizeCache","removeLater","setAttributeNS","moveElementToChild"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"abcjs-basic.js","mappings":"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EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,KAAK,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAC7G,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,KAAK,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IACvF,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,KAAK,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAC5E,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,KAAK,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IACvF,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,KAAK,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAClG,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,KAAK,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAC7G,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,KAAK,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG;IACv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E,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,IAAI;EACR,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,IAAI;EACR,EAA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AAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAC9+B,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,IAAI;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAC3zC,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAM,CAAC;EAC/2D,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAChqE,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACx2D,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACv1D,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACtvD,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACnwD,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACtsD,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI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I,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACz9C,WAAW,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACx+B,YAAY,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAC1iD,YAAY,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAChlE,YAAY,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACtiF,aAAa,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACzvG,mBAAmB,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,IAAI;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAC/+E,uBAAuB,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,IAAI;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAClvD,iBAAiB,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,GAAG;IAAE2O,CAAC,EAAE;EAAK,CAAC;EAC3sC,kBAAkB,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,IAAI;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACzwC,sBAAsB,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAChuC,qBAAqB,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,IAAI;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAC/9E,sBAAsB,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,IAAI;IAAE2O,CAAC,EAAE;EAAM,CAAC;EAClnE,UAAU,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,IAAI;IAAE2O,CAAC,EAAE;EAAK,CAAC;EACpS,eAAe,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAM,CAAC;EACz+D,iBAAiB,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAA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,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAM,CAAC;EACzrC,kBAAkB,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACngC,kBAAkB,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE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AAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAM,CAAC;EAC1lC,eAAe,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAA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EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAM,CAAC;EACz8C,eAAe,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAM,CAAC;EAC3/F,eAAe,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,EAAE;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACl1F,cAAc,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,E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EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAM,CAAC;EAC3gC,eAAe,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAI,CAAC;EACplC,kBAAkB,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,CAAC;IAAE2O,CAAC,EAAE;EAAG,CAAC;EAC7R,iBAAiB,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAChmD,YAAY,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAM,CAAC;EACv0B,aAAa,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACn7C,aAAa,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAClgE,aAAa,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,I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AAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACh/C,aAAa,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAC/6D,aAAa,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACt/E,SAAS,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAM,CAAC;EACzkI,SAAS,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAC3rD,SAAS,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACllI,YAAY,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,EAAE;IAAE2O,CAAC,EAAE;EAAM,CAAC;EAC3qB,SAAS,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACl9L,UAAU,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAChxL,gBAAgB,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAC/+C,aAAa,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC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EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EAClxD,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAM,CAAC;EAChyE,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,MAAM;IAAE2O,CAAC,EAAE;EAAO,CAAC;EACr9D,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,IAAI;IAAE2O,CAAC,EAAE;EAAM,CAAC;EACrxC,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAM,CAAC;EACz5C,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAM,CAAC;EAC3xC,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAM,CAAC;EACzoC,GAAG,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE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,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAE5P,CAAC,EAAE,KAAK;IAAE2O,CAAC,EAAE;EAAK,CAAC;EAC1yC,cAAc,EAAE;IAAEiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,G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","sources":["webpack://ABCJS/webpack/universalModuleDefinition","webpack://ABCJS/./index.js","webpack://ABCJS/./src/api/abc_animation.js","webpack://ABCJS/./src/api/abc_tablatures.js","webpack://ABCJS/./src/api/abc_timing_callbacks.js","webpack://ABCJS/./src/api/abc_tunebook.js","webpack://ABCJS/./src/api/abc_tunebook_svg.js","webpack://ABCJS/./src/api/tune-metrics.js","webpack://ABCJS/./src/const/key-accidentals.js","webpack://ABCJS/./src/const/relative-major.js","webpack://ABCJS/./src/data/abc_tune.js","webpack://ABCJS/./src/data/deline-tune.js","webpack://ABCJS/./src/edit/abc_editarea.js","webpack://ABCJS/./src/edit/abc_editor.js","webpack://ABCJS/./src/midi/abc_midi_create.js","webpack://ABCJS/./src/parse/abc_common.js","webpack://ABCJS/./src/parse/abc_parse.js","webpack://ABCJS/./src/parse/abc_parse_book.js","webpack://ABCJS/./src/parse/abc_parse_directive.js","webpack://ABCJS/./src/parse/abc_parse_header.js","webpack://ABCJS/./src/parse/abc_parse_key_voice.js","webpack://ABCJS/./src/parse/abc_parse_music.js","webpack://ABCJS/./src/parse/abc_parse_settings.js","webpack://ABCJS/./src/parse/abc_tokenizer.js","webpack://ABCJS/./src/parse/abc_transpose.js","webpack://ABCJS/./src/parse/all-notes.js","webpack://ABCJS/./src/parse/transpose-chord.js","webpack://ABCJS/./src/parse/tune-builder.js","webpack://ABCJS/./src/parse/wrap_lines.js","webpack://ABCJS/./src/str/output.js","webpack://ABCJS/./src/synth/abc_midi_flattener.js","webpack://ABCJS/./src/synth/abc_midi_renderer.js","webpack://ABCJS/./src/synth/abc_midi_sequencer.js","webpack://ABCJS/./src/synth/active-audio-context.js","webpack://ABCJS/./src/synth/cents-to-factor.js","webpack://ABCJS/./src/synth/chord-track.js","webpack://ABCJS/./src/synth/create-note-map.js","webpack://ABCJS/./src/synth/create-synth-control.js","webpack://ABCJS/./src/synth/create-synth.js","webpack://ABCJS/./src/synth/download-buffer.js","webpack://ABCJS/./src/synth/get-midi-file.js","webpack://ABCJS/./src/synth/images/loading.svg.js","webpack://ABCJS/./src/synth/images/loop.svg.js","webpack://ABCJS/./src/synth/images/pause.svg.js","webpack://ABCJS/./src/synth/images/play.svg.js","webpack://ABCJS/./src/synth/images/reset.svg.js","webpack://ABCJS/./src/synth/instrument-index-to-name.js","webpack://ABCJS/./src/synth/load-note.js","webpack://ABCJS/./src/synth/note-to-midi.js","webpack://ABCJS/./src/synth/pitch-to-note-name.js","webpack://ABCJS/./src/synth/pitches-to-perc.js","webpack://ABCJS/./src/synth/place-note.js","webpack://ABCJS/./src/synth/play-event.js","webpack://ABCJS/./src/synth/register-audio-context.js","webpack://ABCJS/./src/synth/sounds-cache.js","webpack://ABCJS/./src/synth/supports-audio.js","webpack://ABCJS/./src/synth/synth-controller.js","webpack://ABCJS/./src/synth/synth-sequence.js","webpack://ABCJS/./src/tablatures/instruments/string-patterns.js","webpack://ABCJS/./src/tablatures/instruments/string-tablature.js","webpack://ABCJS/./src/tablatures/instruments/tab-note.js","webpack://ABCJS/./src/tablatures/instruments/tab-notes.js","webpack://ABCJS/./src/tablatures/instruments/tab-string-patterns.js","webpack://ABCJS/./src/tablatures/instruments/tab-string.js","webpack://ABCJS/./src/tablatures/tab-absolute-elements.js","webpack://ABCJS/./src/tablatures/tab-common.js","webpack://ABCJS/./src/tablatures/tab-renderer.js","webpack://ABCJS/./src/write/creation/abstract-engraver.js","webpack://ABCJS/./src/write/creation/add-chord.js","webpack://ABCJS/./src/write/creation/add-text-if.js","webpack://ABCJS/./src/write/creation/calc-height.js","webpack://ABCJS/./src/write/creation/create-clef.js","webpack://ABCJS/./src/write/creation/create-key-signature.js","webpack://ABCJS/./src/write/creation/create-note-head.js","webpack://ABCJS/./src/write/creation/create-time-signature.js","webpack://ABCJS/./src/write/creation/decoration.js","webpack://ABCJS/./src/write/creation/elements/absolute-element.js","webpack://ABCJS/./src/write/creation/elements/beam-element.js","webpack://ABCJS/./src/write/creation/elements/bottom-text.js","webpack://ABCJS/./src/write/creation/elements/brace-element.js","webpack://ABCJS/./src/write/creation/elements/crescendo-element.js","webpack://ABCJS/./src/write/creation/elements/dynamic-decoration.js","webpack://ABCJS/./src/write/creation/elements/ending-element.js","webpack://ABCJS/./src/write/creation/elements/free-text.js","webpack://ABCJS/./src/write/creation/elements/glissando-element.js","webpack://ABCJS/./src/write/creation/elements/relative-element.js","webpack://ABCJS/./src/write/creation/elements/rich-text.js","webpack://ABCJS/./src/write/creation/elements/separator.js","webpack://ABCJS/./src/write/creation/elements/staff-group-element.js","webpack://ABCJS/./src/write/creation/elements/subtitle.js","webpack://ABCJS/./src/write/creation/elements/tempo-element.js","webpack://ABCJS/./src/write/creation/elements/tie-element.js","webpack://ABCJS/./src/write/creation/elements/top-text.js","webpack://ABCJS/./src/write/creation/elements/triplet-element.js","webpack://ABCJS/./src/write/creation/elements/voice-element.js","webpack://ABCJS/./src/write/creation/glyphs.js","webpack://ABCJS/./src/write/creation/translate-chord.js","webpack://ABCJS/./src/write/draw/absolute.js","webpack://ABCJS/./src/write/draw/beam.js","webpack://ABCJS/./src/write/draw/brace.js","webpack://ABCJS/./src/write/draw/crescendo.js","webpack://ABCJS/./src/write/draw/debug-box.js","webpack://ABCJS/./src/write/draw/draw.js","webpack://ABCJS/./src/write/draw/dynamics.js","webpack://ABCJS/./src/write/draw/ending.js","webpack://ABCJS/./src/write/draw/glissando.js","webpack://ABCJS/./src/write/draw/group-elements.js","webpack://ABCJS/./src/write/draw/non-music.js","webpack://ABCJS/./src/write/draw/print-line.js","webpack://ABCJS/./src/write/draw/print-path.js","webpack://ABCJS/./src/write/draw/print-stem.js","webpack://ABCJS/./src/write/draw/print-symbol.js","webpack://ABCJS/./src/write/draw/relative.js","webpack://ABCJS/./src/write/draw/round-number.js","webpack://ABCJS/./src/write/draw/selectables.js","webpack://ABCJS/./src/write/draw/separator.js","webpack://ABCJS/./src/write/draw/set-paper-size.js","webpack://ABCJS/./src/write/draw/sprintf.js","webpack://ABCJS/./src/write/draw/staff-group.js","webpack://ABCJS/./src/write/draw/staff-line.js","webpack://ABCJS/./src/write/draw/staff.js","webpack://ABCJS/./src/write/draw/tempo.js","webpack://ABCJS/./src/write/draw/text.js","webpack://ABCJS/./src/write/draw/tie.js","webpack://ABCJS/./src/write/draw/triplet.js","webpack://ABCJS/./src/write/draw/voice.js","webpack://ABCJS/./src/write/engraver-controller.js","webpack://ABCJS/./src/write/helpers/classes.js","webpack://ABCJS/./src/write/helpers/get-font-and-attr.js","webpack://ABCJS/./src/write/helpers/get-text-size.js","webpack://ABCJS/./src/write/helpers/set-class.js","webpack://ABCJS/./src/write/helpers/spacing.js","webpack://ABCJS/./src/write/interactive/create-analysis.js","webpack://ABCJS/./src/write/interactive/find-selectable-element.js","webpack://ABCJS/./src/write/interactive/highlight.js","webpack://ABCJS/./src/write/interactive/selection.js","webpack://ABCJS/./src/write/interactive/unhighlight.js","webpack://ABCJS/./src/write/layout/beam.js","webpack://ABCJS/./src/write/layout/get-bar-y-at.js","webpack://ABCJS/./src/write/layout/get-left-edge-of-staff.js","webpack://ABCJS/./src/write/layout/layout-in-grid.js","webpack://ABCJS/./src/write/layout/layout.js","webpack://ABCJS/./src/write/layout/set-upper-and-lower-elements.js","webpack://ABCJS/./src/write/layout/staff-group.js","webpack://ABCJS/./src/write/layout/triplet.js","webpack://ABCJS/./src/write/layout/voice-elements.js","webpack://ABCJS/./src/write/layout/voice.js","webpack://ABCJS/./src/write/renderer.js","webpack://ABCJS/./src/write/svg.js","webpack://ABCJS/./version.js","webpack://ABCJS/webpack/bootstrap","webpack://ABCJS/webpack/before-startup","webpack://ABCJS/webpack/startup","webpack://ABCJS/webpack/after-startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"abcjs\"] = factory();\n\telse\n\t\troot[\"ABCJS\"] = factory();\n})(this, function() {\nreturn ","/**!\nCopyright (c) 2009-2023 Paul Rosen and Gregory Dyke\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n **This text is from: http://opensource.org/licenses/MIT**\n!**/\nvar version = require('./version');\nvar animation = require('./src/api/abc_animation');\nvar tuneBook = require('./src/api/abc_tunebook');\nvar sequence = require('./src/synth/abc_midi_sequencer');\nvar strTranspose = require('./src/str/output');\n\nvar abcjs = {};\n\nabcjs.signature = \"abcjs-basic v\" + version;\n\nObject.keys(animation).forEach(function (key) {\n\tabcjs[key] = animation[key];\n});\n\nObject.keys(tuneBook).forEach(function (key) {\n\tabcjs[key] = tuneBook[key];\n});\n\nabcjs.renderAbc = require('./src/api/abc_tunebook_svg');\nabcjs.tuneMetrics = require('./src/api/tune-metrics');\nabcjs.TimingCallbacks = require('./src/api/abc_timing_callbacks');\n\nvar glyphs = require('./src/write/creation/glyphs');\nabcjs.setGlyph = glyphs.setSymbol;\nabcjs.strTranspose = strTranspose;\n\nvar CreateSynth = require('./src/synth/create-synth');\nvar instrumentIndexToName = require('./src/synth/instrument-index-to-name');\nvar pitchToNoteName = require('./src/synth/pitch-to-note-name');\nvar SynthSequence = require('./src/synth/synth-sequence');\nvar CreateSynthControl = require('./src/synth/create-synth-control');\nvar registerAudioContext = require('./src/synth/register-audio-context');\nvar activeAudioContext = require('./src/synth/active-audio-context');\nvar supportsAudio = require('./src/synth/supports-audio');\nvar playEvent = require('./src/synth/play-event');\nvar SynthController = require('./src/synth/synth-controller');\nvar getMidiFile = require('./src/synth/get-midi-file');\nvar midiRenderer = require('./src/synth/abc_midi_renderer');\n\nabcjs.synth = {\n\tCreateSynth: CreateSynth,\n\tinstrumentIndexToName: instrumentIndexToName,\n\tpitchToNoteName: pitchToNoteName,\n\tSynthController: SynthController,\n\tSynthSequence: SynthSequence,\n\tCreateSynthControl: CreateSynthControl,\n\tregisterAudioContext: registerAudioContext,\n\tactiveAudioContext: activeAudioContext,\n\tsupportsAudio: supportsAudio,\n\tplayEvent: playEvent,\n\tgetMidiFile: getMidiFile,\n\tsequence: sequence,\n\tmidiRenderer: midiRenderer,\n};\n\nabcjs['Editor'] = require('./src/edit/abc_editor');\nabcjs['EditArea'] = require('./src/edit/abc_editarea');\n\nmodule.exports = abcjs;\n","// abc_animation.js: handles animating the music in real time.\n\nvar TimingCallbacks = require('./abc_timing_callbacks');\n\nvar animation = {};\n\n(function() {\n\t\"use strict\";\n\n\tvar timer;\n\tvar cursor;\n\tanimation.startAnimation = function(paper, tune, options) {\n\t\t//options.bpm\n\t\t//options.showCursor\n\t\t//options.hideCurrentMeasure\n\t\t//options.hideFinishedMeasures\n\t\tif (timer) {\n\t\t\ttimer.stop();\n\t\t\ttimer = undefined;\n\t\t}\n\n\t\tif (options.showCursor) {\n\t\t\tcursor = paper.querySelector('.abcjs-cursor');\n\t\t\tif (!cursor) {\n\t\t\t\tcursor = document.createElement('DIV');\n\t\t\t\tcursor.className = 'abcjs-cursor cursor';\n\t\t\t\tcursor.style.position = 'absolute';\n\n\t\t\t\tpaper.appendChild(cursor);\n\t\t\t\tpaper.style.position = 'relative';\n\t\t\t}\n\t\t}\n\n\t\tfunction hideMeasures(elements) {\n\t\t\tfor (var i = 0; i < elements.length; i++) {\n\t\t\t\tvar element = elements[i];\n\t\t\t\tif (!element.classList.contains('abcjs-bar'))\n\t\t\t\t\telement.style.display = \"none\";\n\t\t\t}\n\t\t}\n\n\t\tvar lastMeasure;\n\t\tfunction disappearMeasuresAfter(selector) {\n\t\t\tif (lastMeasure) {\n\t\t\t\tvar elements = paper.querySelectorAll(lastMeasure);\n\t\t\t\thideMeasures(elements);\n\t\t\t}\n\t\t\tlastMeasure = selector;\n\t\t}\n\n\t\tfunction disappearMeasuresBefore(selector) {\n\t\t\tvar elements = paper.querySelectorAll(selector);\n\t\t\thideMeasures(elements);\n\t\t}\n\n\t\tfunction measureCallback(selector) {\n\t\t\tif (options.hideCurrentMeasure) {\n\t\t\t\tdisappearMeasuresBefore(selector);\n\t\t\t} else if (options.hideFinishedMeasures) {\n\t\t\t\tdisappearMeasuresAfter(selector);\n\t\t\t}\n\t\t}\n\n\t\tfunction getLineAndMeasure(element) {\n\t\t\treturn '.abcjs-l' + element.line + '.abcjs-m' + element.measureNumber;\n\t\t}\n\n\t\tfunction setCursor(range) {\n\t\t\tif (range) {\n\t\t\t\tif (range.measureStart) {\n\t\t\t\t\tvar selector = getLineAndMeasure(range);\n\t\t\t\t\tif (selector)\n\t\t\t\t\t\tmeasureCallback(selector);\n\t\t\t\t}\n\t\t\t\tif (cursor) {\n\t\t\t\t\tcursor.style.left = range.left + \"px\";\n\t\t\t\t\tcursor.style.top = range.top + \"px\";\n\t\t\t\t\tcursor.style.width = range.width + \"px\";\n\t\t\t\t\tcursor.style.height = range.height + \"px\";\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttimer.stop();\n\t\t\t\ttimer = undefined;\n\t\t\t}\n\t\t}\n\n\t\ttimer = new TimingCallbacks(tune, {\n\t\t\tqpm: options.bpm,\n\t\t\teventCallback: setCursor\n\t\t});\n\t\ttimer.start();\n\t};\n\n\tanimation.pauseAnimation = function(pause) {\n\t\tif (timer) {\n\t\t\tif (pause)\n\t\t\t\ttimer.pause();\n\t\t\telse\n\t\t\t\ttimer.start();\n\t\t}\n\t};\n\n\tanimation.stopAnimation = function() {\n\t\tif (timer) {\n\t\t\ttimer.stop();\n\t\t\ttimer = undefined;\n\t\t}\n\t};\n\n})();\n\nmodule.exports = animation;\n","/*\n * Tablature Plugins\n * tablature are defined dynamically and registered inside abcjs\n * by calling abcTablatures.register(plugin) \n * where plugin represents a plugin instance \n * \n */\nvar StringTablature = require('../tablatures/instruments/tab-string');\n\n/* extend the table below when adding a new instrument plugin */\n\n// Existing tab classes \nvar pluginTab = {\n 'violin': { name: 'StringTab', defaultTuning: ['G,', 'D', 'A', 'e'], isTabBig: false, tabSymbolOffset: 0},\n 'fiddle': { name: 'StringTab', defaultTuning: ['G,', 'D', 'A', 'e'], isTabBig: false, tabSymbolOffset: 0},\n 'mandolin': { name: 'StringTab', defaultTuning: ['G,', 'D', 'A', 'e'], isTabBig: false, tabSymbolOffset: 0},\n 'guitar': { name: 'StringTab', defaultTuning: ['E,', 'A,', 'D', 'G' , 'B' , 'e'], isTabBig: true, tabSymbolOffset: 0},\n 'fiveString': { name: 'StringTab', defaultTuning: ['C,', 'G,', 'D', 'A', 'e'], isTabBig: false, tabSymbolOffset: -.95},\n};\n\nvar abcTablatures = {\n\n inited: false,\n plugins: {},\n\n \n /**\n * to be called once per plugin for registration \n * @param {*} plugin \n */\n register: function (plugin) {\n var name = plugin.name;\n var tablature = plugin.tablature;\n this.plugins[name] = tablature;\n },\n\n setError: function (tune, msg) {\n if (tune.warnings) {\n tune.warning.push(msg);\n } else {\n tune.warnings = [msg];\n }\n },\n\n /**\n * handle params for current processed score\n * @param {*} tune current tune \n * @param {*} tuneNumber number in tune list\n * @param {*} params params to be processed for tablature\n * @return prepared tablatures plugin instances for current tune\n */\n preparePlugins: function (tune, tuneNumber, params) {\n var returned = null;\n var nbPlugins = 0;\n if (params.tablature) {\n // validate requested plugins \n var tabs = params.tablature;\n returned = [];\n for (var ii = 0; ii < tabs.length; ii++) {\n var args = tabs[ii];\n var instrument = args['instrument'];\n if (instrument == null) {\n this.setError(tune, \"tablature 'instrument' is missing\");\n return returned;\n }\n var tabName = pluginTab[instrument];\n var plugin = null;\n if (tabName) {\n plugin = this.plugins[tabName.name];\n }\n if (plugin) {\n if (params.visualTranspose != 0) {\n // populate transposition request to tabs\n args.visualTranspose = params.visualTranspose;\n }\n args.abcSrc = params.tablature.abcSrc;\n var pluginInstance = {\n classz: plugin,\n tuneNumber: tuneNumber,\n params: args,\n instance: null,\n tabType: tabName,\n };\n // proceed with tab plugin init \n // plugin.init(tune, tuneNumber, args, ii);\n returned.push(pluginInstance);\n nbPlugins++;\n } else if (instrument === '') {\n // create a placeholder - there is no tab for this staff\n returned.push(null)\n } else {\n // unknown tab plugin \n //this.emit_error('Undefined tablature plugin: ' + tabName)\n this.setError(tune, 'Undefined tablature plugin: ' + instrument);\n return returned;\n }\n }\n }\n return returned;\n },\n\n /**\n * Call requested plugin\n * @param {*} renderer \n * @param {*} abcTune \n */\n layoutTablatures: function layoutTablatures(renderer, abcTune) {\n var tabs = abcTune.tablatures;\n\n // chack tabs request for each staffs\n var staffLineCount = 0;\n \n // Clear the suppression flag\n if (tabs && (tabs.length > 0)){\n var nTabs = tabs.length;\n for (var kk=0;kk 1){\n if (tabs && (tabs.length > 0)){\n var nTabs = tabs.length;\n for (var kk=0;kk self.currentEvent && self.noteTimings[self.currentEvent].milliseconds < self.currentTime) {\n\t\t\t\tif (self.eventCallback && self.noteTimings[self.currentEvent].type === 'event') {\n\t\t\t\t\tvar thisStartTime = self.startTime; // the event callback can call seek and change the position from beneath us.\n\t\t\t\t\tself.eventCallback(self.noteTimings[self.currentEvent]);\n\t\t\t\t\tif (thisStartTime !== self.startTime) {\n\t\t\t\t\t\tself.currentTime = timestamp - self.startTime;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tself.currentEvent++;\n\t\t\t}\n\t\t\tif (self.lineEndCallback && self.lineEndTimings.length > self.currentLine && self.lineEndTimings[self.currentLine].milliseconds < self.currentTime && self.currentEvent < self.noteTimings.length) {\n\t\t\t\tvar leftEvent = self.noteTimings[self.currentEvent].milliseconds === self.currentTime ? self.noteTimings[self.currentEvent] : self.noteTimings[self.currentEvent-1]\n\t\t\t\tself.lineEndCallback(self.lineEndTimings[self.currentLine], leftEvent, { line: self.currentLine, endTimings: self.lineEndTimings, currentTime: self.currentTime });\n\t\t\t\tself.currentLine++;\n\t\t\t}\n\t\t\tif (self.currentTime < self.lastMoment) {\n\t\t\t\trequestAnimationFrame(self.doTiming);\n\t\t\t\tif (self.currentBeat * self.millisecondsPerBeat < self.currentTime) {\n\t\t\t\t\tvar ret = self.doBeatCallback(timestamp);\n\t\t\t\t\tif (ret !== null)\n\t\t\t\t\t\tself.currentTime = ret;\n\t\t\t\t}\n\t\t\t} else if (self.currentBeat <= self.totalBeats) {\n\t\t\t\t// Because of timing issues (for instance, if the browser tab isn't active), the beat callbacks might not have happened when they are supposed to. To keep the client programs from having to deal with that, this will keep calling the loop until all of them have been sent.\n\t\t\t\tif (self.beatCallback) {\n\t\t\t\t\tvar ret2 = self.doBeatCallback(timestamp);\n\t\t\t\t\tif (ret2 !== null)\n\t\t\t\t\t\tself.currentTime = ret2;\n\t\t\t\t\trequestAnimationFrame(self.doTiming);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (self.currentTime >= self.lastMoment) {\n\t\t\t\tif (self.eventCallback) {\n\t\t\t\t\t// At the end, the event callback can return \"continue\" to keep from stopping.\n\t\t\t\t\t// The event callback can either be a promise or not.\n\t\t\t\t\tvar promise = self.eventCallback(null);\n\t\t\t\t\tself.shouldStop(promise).then(function(shouldStop) {\n\t\t\t\t\t\tif (shouldStop)\n\t\t\t\t\t\t\tself.stop();\n\t\t\t\t\t})\n\t\t\t\t} else\n\t\t\t\t\tself.stop();\n\t\t\t}\n\t\t}\n\t};\n\n\tself.shouldStop = function(promise) {\n\t\t// The return of the last event callback can be \"continue\" or a promise that returns \"continue\".\n\t\t// If it is then don't call stop. Any other value calls stop.\n\t\treturn new Promise(function (resolve) {\n\t\t\tif (!promise)\n\t\t\t\treturn resolve(true);\n\t\t\tif (promise === \"continue\")\n\t\t\t\treturn resolve(false);\n\t\t\tif (promise.then) {\n\t\t\t\tpromise.then(function (result) {\n\t\t\t\t\tresolve(result !== \"continue\");\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t};\n\n\tself.doBeatCallback = function(timestamp) {\n\t\tif (self.beatCallback) {\n\t\t\tvar next = self.currentEvent;\n\t\t\twhile (next < self.noteTimings.length && self.noteTimings[next].left === null)\n\t\t\t\tnext++;\n\t\t\tvar endMs;\n\t\t\tvar ev;\n\t\t\tif (next < self.noteTimings.length) {\n\t\t\t\tendMs = self.noteTimings[next].milliseconds;\n\t\t\t\tnext = Math.max(0, self.currentEvent - 1);\n\t\t\t\twhile (next >= 0 && self.noteTimings[next].left === null)\n\t\t\t\t\tnext--;\n\n\t\t\t\tev = self.noteTimings[next];\n\t\t\t}\n\n\t\t\tvar position = {};\n\t\t\tvar debugInfo = {};\n\t\t\tif (ev) {\n\t\t\t\tposition.top = ev.top;\n\t\t\t\tposition.height = ev.height;\n\n\t\t\t\t// timestamp = the time passed in from the animation timer\n\t\t\t\t// self.startTime = the time that the tune was started (if there was seeking or pausing, it is adjusted to keep the math the same)\n\t\t\t\t// ev = the event that is either happening now or has most recently passed.\n\t\t\t\t// ev.milliseconds = the time that the current event starts (relative to self.startTime)\n\t\t\t\t// endMs = the time that the next event starts\n\t\t\t\t// ev.endX = the x coordinate that the next event happens (or the end of the line or repeat measure)\n\t\t\t\t// ev.left = the x coordinate of the current event\n\t\t\t\t//\n\t\t\t\t// The output is the X coordinate of the current cursor location. It is calculated with the ratio of the length of the event and the width of it.\n\t\t\t\tvar offMs = Math.max(0, timestamp-self.startTime-ev.milliseconds); // Offset in time from the last beat\n\t\t\t\tvar gapMs = endMs - ev.milliseconds; // Length of this event in time\n\t\t\t\tvar gapPx = ev.endX - ev.left; // The length in pixels\n\t\t\t\tvar offPx = gapMs ? offMs * gapPx / gapMs : 0;\n\t\t\t\tposition.left = ev.left + offPx;\n\t\t\t\t// See if this is before the first event - that is the case where there are \"prep beats\"\n\t\t\t\tif (self.currentEvent === 0 && ev.milliseconds > timestamp-self.startTime)\n\t\t\t\t\tposition.left = undefined\n\t\t\t\t\n\t\t\t\tdebugInfo = {\n\t\t\t\t\ttimestamp: timestamp,\n\t\t\t\t\tstartTime: self.startTime,\n\t\t\t\t\tev: ev,\n\t\t\t\t\tendMs: endMs,\n\t\t\t\t\toffMs: offMs,\n\t\t\t\t\toffPx: offPx,\n\t\t\t\t\tgapMs: gapMs,\n\t\t\t\t\tgapPx: gapPx\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tdebugInfo = {\n\t\t\t\t\ttimestamp: timestamp,\n\t\t\t\t\tstartTime: self.startTime,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tvar thisStartTime = self.startTime; // the beat callback can call seek and change the position from beneath us.\n\t\t\tself.beatCallback(\n\t\t\t\tself.currentBeat / self.beatSubdivisions,\n\t\t\t\tself.totalBeats / self.beatSubdivisions,\n\t\t\t\tself.lastMoment,\n\t\t\t\tposition,\n\t\t\t\tdebugInfo);\n\t\t\tif (thisStartTime !== self.startTime) {\n\t\t\t\treturn timestamp - self.startTime;\n\t\t\t} else\n\t\t\t\tself.currentBeat++;\n\t\t}\n\t\treturn null;\n\t};\n\n\t// In general music doesn't need a timer at 60 fps because notes don't happen that fast.\n\t// For instance, at 120 beats per minute, a sixteenth note takes 125ms. So just as a\n\t// compromise value between performance and jank this is set about half that.\n\tvar JOGGING_INTERVAL = 60;\n\n\tself.animationJogger = function() {\n\t\t// There are some cases where the animation timer doesn't work: for instance when\n\t\t// this isn't running in a visible tab and sometimes on mobile devices. We compensate\n\t\t// by having a backup timer using setTimeout. This won't be accurate so the performance\n\t\t// will be jerky, but without it the requestAnimationFrame might be skipped and so\n\t\t// not called again.\n\t\tif (self.isRunning) {\n\t\t\tself.doTiming(performance.now());\n\t\t\tself.joggerTimer = setTimeout(self.animationJogger, JOGGING_INTERVAL);\n\t\t}\n\t};\n\n\tself.start = function(offsetPercent, units) {\n\t\tself.isRunning = true;\n\t\tif (self.isPaused) {\n\t\t\tself.isPaused = false;\n\t\t\tif (offsetPercent === undefined)\n\t\t\t\tself.justUnpaused = true;\n\t\t}\n\t\tif (offsetPercent) {\n\t\t\tself.setProgress(offsetPercent, units);\n\t\t} else if (offsetPercent === 0) {\n\t\t\tself.reset();\n\t\t} else if (self.pausedPercent !== null) {\n\t\t\tvar now = performance.now();\n\t\t\tself.currentTime = self.lastMoment * self.pausedPercent;\n\t\t\tself.startTime = now - self.currentTime;\n\t\t\tself.pausedPercent = null;\n\t\t\tself.reportNext = true;\n\t\t}\n\t\trequestAnimationFrame(self.doTiming);\n\t\tself.joggerTimer = setTimeout(self.animationJogger, JOGGING_INTERVAL);\n\t};\n\tself.pause = function() {\n\t\tself.isPaused = true;\n\t\tvar now = performance.now();\n\t\tself.pausedPercent = (now - self.startTime) / self.lastMoment;\n\t\tself.isRunning = false;\n\t\tif (self.joggerTimer) {\n\t\t\tclearTimeout(self.joggerTimer);\n\t\t\tself.joggerTimer = null;\n\t\t}\n\t};\n\tself.currentMillisecond = function() {\n\t\treturn self.currentTime;\n\t};\n\tself.reset = function() {\n\t\tself.currentBeat = 0;\n\t\tself.currentEvent = 0;\n\t\tself.currentLine = 0;\n\t\tself.startTime = null;\n\t\tself.pausedPercent = null;\n\t};\n\tself.stop = function() {\n\t\tself.pause();\n\t\tself.reset();\n\t};\n\tself.setProgress = function(position, units) {\n\t\t// the effect of this function is to move startTime so that the callbacks happen correctly for the new seek.\n\t\tvar percent;\n\t\tswitch (units) {\n\t\t\tcase \"seconds\":\n\t\t\t\tself.currentTime = position * 1000;\n\t\t\t\tif (self.currentTime < 0) self.currentTime = 0;\n\t\t\t\tif (self.currentTime > self.lastMoment) self.currentTime = self.lastMoment;\n\t\t\t\tpercent = self.currentTime / self.lastMoment;\n\t\t\t\tbreak;\n\t\t\tcase \"beats\":\n\t\t\t\tself.currentTime = position * self.millisecondsPerBeat * self.beatSubdivisions;\n\t\t\t\tif (self.currentTime < 0) self.currentTime = 0;\n\t\t\t\tif (self.currentTime > self.lastMoment) self.currentTime = self.lastMoment;\n\t\t\t\tpercent = self.currentTime / self.lastMoment;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// this is \"percent\" or any illegal value\n\t\t\t\t// this is passed a value between 0 and 1.\n\t\t\t\tpercent = position;\n\t\t\t\tif (percent < 0) percent = 0;\n\t\t\t\tif (percent > 1) percent = 1;\n\t\t\t\tself.currentTime = self.lastMoment * percent;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (!self.isRunning)\n\t\t\tself.pausedPercent = percent;\n\n\t\tvar now = performance.now();\n\t\tself.startTime = now - self.currentTime;\n\n\t\tvar oldEvent = self.currentEvent;\n\t\tself.currentEvent = 0;\n\t\twhile (self.noteTimings.length > self.currentEvent && self.noteTimings[self.currentEvent].milliseconds < self.currentTime) {\n\t\t\tself.currentEvent++;\n\t\t}\n\n\t\tif (self.lineEndCallback) {\n\t\t\tself.currentLine = 0;\n\t\t\twhile (self.lineEndTimings.length > self.currentLine && self.lineEndTimings[self.currentLine].milliseconds + self.lineEndAnticipation < self.currentTime) {\n\t\t\t\tself.currentLine++;\n\t\t\t}\n\t\t}\n\n\t\tvar oldBeat = self.currentBeat;\n\t\tself.currentBeat = Math.floor(self.currentTime / self.millisecondsPerBeat);\n\t\tif (self.beatCallback && oldBeat !== self.currentBeat) // If the movement caused the beat to change, then immediately report it to the client.\n\t\t\tself.doBeatCallback(self.startTime+self.currentTime);\n\n\t\tif (self.eventCallback && self.currentEvent >= 0 && self.noteTimings[self.currentEvent].type === 'event')\n\t\t\tself.eventCallback(self.noteTimings[self.currentEvent]);\n\t\tif (self.lineEndCallback)\n\t\t\tself.lineEndCallback(self.lineEndTimings[self.currentLine], self.noteTimings[self.currentEvent], { line: self.currentLine, endTimings: self.lineEndTimings });\n\n\t\tself.joggerTimer = setTimeout(self.animationJogger, JOGGING_INTERVAL);\n\t};\n};\n\nfunction getLineEndTimings(timings, anticipation) {\n\t// Returns an array of milliseconds to call the lineEndCallback.\n\t// This figures out the timing of the beginning of each line and subtracts the anticipation from it.\n\tvar callbackTimes = [];\n\tvar lastTop = null;\n\tfor (var i = 0; i < timings.length; i++) {\n\t\tvar timing = timings[i];\n\t\tif (timing.type !== 'end' && timing.top !== lastTop) {\n\t\t\tcallbackTimes.push({ measureNumber: timing.measureNumber, milliseconds: timing.milliseconds-anticipation, top: timing.top, bottom: timing.top+timing.height });\n\t\t\tlastTop = timing.top;\n\t\t}\n\t}\n\treturn callbackTimes;\n}\n\nmodule.exports = TimingCallbacks;\n\n","// abc_tunebook.js: splits a string representing ABC Music Notation into individual tunes.\n\nvar Parse = require('../parse/abc_parse');\nvar bookParser = require('../parse/abc_parse_book');\nvar tablatures = require('./abc_tablatures');\n\n\nvar tunebook = {};\n\n(function() {\n\t\"use strict\";\n\n\ttunebook.numberOfTunes = function(abc) {\n\t\tvar tunes = abc.split(\"\\nX:\");\n\t\tvar num = tunes.length;\n\t\tif (num === 0) num = 1;\n\t\treturn num;\n\t};\n\n\tvar TuneBook = tunebook.TuneBook = function(book) {\n\t\tvar parsed = bookParser(book);\n\t\tthis.header = parsed.header;\n\t\tthis.tunes = parsed.tunes;\n\t};\n\n\tTuneBook.prototype.getTuneById = function(id) {\n\t\tfor (var i = 0; i < this.tunes.length; i++) {\n\t\t\tif (this.tunes[i].id === ''+id)\n\t\t\t\treturn this.tunes[i];\n\t\t}\n\t\treturn null;\n\t};\n\n\tTuneBook.prototype.getTuneByTitle = function(title) {\n\t\tfor (var i = 0; i < this.tunes.length; i++) {\n\t\t\tif (this.tunes[i].title === title)\n\t\t\t\treturn this.tunes[i];\n\t\t}\n\t\treturn null;\n\t};\n\n\ttunebook.parseOnly = function(abc, params) {\n\t\tvar numTunes = tunebook.numberOfTunes(abc);\n\n\t\t// this just needs to be passed in because this tells the engine how many tunes to process.\n\t\tvar output = [];\n\t\tfor (var i = 0; i < numTunes; i++) {\n\t\t\toutput.push(1);\n\t\t}\n\t\tfunction callback() {\n\t\t\t// Don't need to do anything with the parsed tunes.\n\t\t}\n\t\treturn tunebook.renderEngine(callback, output, abc, params);\n\t};\n\n\ttunebook.renderEngine = function (callback, output, abc, params) {\n\t\tvar ret = [];\n\t\tvar isArray = function(testObject) {\n\t\t\treturn testObject && !(testObject.propertyIsEnumerable('length')) && typeof testObject === 'object' && typeof testObject.length === 'number';\n\t\t};\n\n\t\t// check and normalize input parameters\n\t\tif (output === undefined || abc === undefined)\n\t\t\treturn;\n\t\tif (!isArray(output))\n\t\t\toutput = [ output ];\n\t\tif (params === undefined)\n\t\t\tparams = {};\n\t\tvar currentTune = params.startingTune ? parseInt(params.startingTune, 10) : 0;\n\n\t\t// parse the abc string\n\t\tvar book = new TuneBook(abc);\n\t\tvar abcParser = new Parse();\n\n\t\t// output each tune, if it exists. Otherwise clear the div.\n\t\tfor (var i = 0; i < output.length; i++) {\n\t\t\tvar div = output[i];\n\t\t\tif (div === \"*\") {\n\t\t\t\t// This is for \"headless\" rendering: doing the work but not showing the svg.\n\t\t\t} else if (typeof(div) === \"string\")\n\t\t\t\tdiv = document.getElementById(div);\n\t\t\tif (div) {\n\t\t\t\tif (currentTune >= 0 && currentTune < book.tunes.length) {\n\t\t\t\t\tabcParser.parse(book.tunes[currentTune].abc, params, book.tunes[currentTune].startPos - book.header.length);\n\t\t\t\t\tvar tune = abcParser.getTune();\n\t\t\t\t\t//\n\t\t\t\t\t// Init tablatures plugins\n\t\t\t\t\t//\n\t\t\t\t\tif (params.tablature) {\n\t\t\t\t\t\ttablatures.init();\n\t\t\t\t\t\ttune.tablatures = tablatures.preparePlugins(tune, currentTune, params);\n\t\t\t\t\t}\n\t\t\t\t\tvar warnings = abcParser.getWarnings();\n\t\t\t\t\tif (warnings)\n\t\t\t\t\t\ttune.warnings = warnings;\n\t\t\t\t\tvar override = callback(div, tune, i, book.tunes[currentTune].abc);\n\t\t\t\t\tret.push(override ? override : tune);\n\t\t\t\t} else {\n\t\t\t\t\tif (div['innerHTML'])\n\t\t\t\t\t\tdiv.innerHTML = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tcurrentTune++;\n\t\t}\n\t return ret;\n\t};\n\n\tfunction flattenTune(tuneObj) {\n\t\t// This removes the line breaks and removes the non-music lines.\n\t\tvar staves = [];\n\t\tfor (var j = 0; j < tuneObj.lines.length; j++) {\n\t\t\tvar line = tuneObj.lines[j];\n\t\t\tif (line.staff) {\n\t\t\t\tfor (var k = 0; k < line.staff.length; k++) {\n\t\t\t\t\tvar staff = line.staff[k];\n\t\t\t\t\tif (!staves[k])\n\t\t\t\t\t\tstaves[k] = staff;\n\t\t\t\t\telse {\n\t\t\t\t\t\tfor (var i = 0; i < staff.voices.length; i++) {\n\t\t\t\t\t\t\tif (staves[k].voices[i])\n\t\t\t\t\t\t\t\tstaves[k].voices[i] = staves[k].voices[i].concat(staff.voices[i]);\n\t\t\t\t\t\t\t// TODO-PER: If staves[k].voices[i] doesn't exist, that means a voice appeared in the middle of the tune. That isn't handled yet.\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn staves;\n\t}\n\n\tfunction measuresParser(staff, tune) {\n\t\tvar voices = [];\n\t\tvar lastChord = null;\n\t\tvar measureStartChord = null;\n\t\tvar fragStart = null;\n\t\tvar hasNotes = false;\n\n\t\tfor (var i = 0; i < staff.voices.length; i++) {\n\t\t\tvar voice = staff.voices[i];\n\t\t\tvoices.push([]);\n\t\t\tfor (var j = 0; j < voice.length; j++) {\n\t\t\t\tvar elem = voice[j];\n\t\t\t\tif (fragStart === null && elem.startChar >= 0) {\n\t\t\t\t\tfragStart = elem.startChar;\n\t\t\t\t\tif (elem.chord === undefined)\n\t\t\t\t\t\tmeasureStartChord = lastChord;\n\t\t\t\t\telse\n\t\t\t\t\t\tmeasureStartChord = null;\n\t\t\t\t}\n\t\t\t\tif (elem.chord)\n\t\t\t\t\tlastChord = elem;\n\t\t\t\tif (elem.el_type === 'bar') {\n\t\t\t\t\tif (hasNotes) {\n\t\t\t\t\t\tvar frag = tune.abc.substring(fragStart, elem.endChar);\n\t\t\t\t\t\tvar measure = {abc: frag};\n\t\t\t\t\t\tlastChord = measureStartChord && measureStartChord.chord && measureStartChord.chord.length > 0 ? measureStartChord.chord[0].name : null;\n\t\t\t\t\t\tif (lastChord)\n\t\t\t\t\t\t\tmeasure.lastChord = lastChord;\n\t\t\t\t\t\tif (elem.startEnding)\n\t\t\t\t\t\t\tmeasure.startEnding = elem.startEnding;\n\t\t\t\t\t\tif (elem.endEnding)\n\t\t\t\t\t\t\tmeasure.endEnding = elem.endEnding;\n\t\t\t\t\t\tvoices[i].push(measure);\n\t\t\t\t\t\tfragStart = null;\n\t\t\t\t\t\thasNotes = false;\n\t\t\t\t\t}\n\t\t\t\t} else if (elem.el_type === 'note') {\n\t\t\t\t\thasNotes = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn voices;\n\t}\n\n\ttunebook.extractMeasures = function(abc) {\n\t\tvar tunes = [];\n\t\tvar book = new TuneBook(abc);\n\t\tfor (var i = 0; i < book.tunes.length; i++) {\n\t\t\tvar tune = book.tunes[i];\n\t\t\tvar arr = tune.abc.split(\"K:\");\n\t\t\tvar arr2 = arr[1].split(\"\\n\");\n\t\t\tvar header = arr[0] + \"K:\" + arr2[0] + \"\\n\";\n\t\t\tvar lastChord = null;\n\t\t\tvar measureStartChord = null;\n\t\t\tvar fragStart = null;\n\t\t\tvar measures = [];\n\t\t\tvar hasNotes = false;\n\t\t\tvar tuneObj = tunebook.parseOnly(tune.abc)[0];\n\t\t\tvar hasPickup = tuneObj.getPickupLength() > 0;\n\t\t\t// var staves = flattenTune(tuneObj);\n\t\t\t// for (var s = 0; s < staves.length; s++) {\n\t\t\t// \tvar voices = measuresParser(staves[s], tune);\n\t\t\t// \tif (s === 0)\n\t\t\t// \t\tmeasures = voices;\n\t\t\t// \telse {\n\t\t\t// \t\tfor (var ss = 0; ss < voices.length; ss++) {\n\t\t\t// \t\t\tvar voice = voices[ss];\n\t\t\t// \t\t\tif (measures.length <= ss)\n\t\t\t// \t\t\t\tmeasures.push([]);\n\t\t\t// \t\t\tvar measureVoice = measures[ss];\n\t\t\t// \t\t\tfor (var sss = 0; sss < voice.length; sss++) {\n\t\t\t// \t\t\t\tif (measureVoice.length > sss)\n\t\t\t// \t\t\t\t\tmeasureVoice[sss].abc += \"\\n\" + voice[sss].abc;\n\t\t\t// \t\t\t\telse\n\t\t\t// \t\t\t\t\tmeasures.push(voice[sss]);\n\t\t\t// \t\t\t}\n\t\t\t// \t\t}\n\t\t\t// \t}\n\t\t\t// \tconsole.log(voices);\n\t\t\t// }\n\t\t\t// measures = measures[0];\n\n\t\t\tfor (var j = 0; j < tuneObj.lines.length; j++) {\n\t\t\t\tvar line = tuneObj.lines[j];\n\t\t\t\tif (line.staff) {\n\t\t\t\t\tfor (var k = 0; k < 1 /*line.staff.length*/; k++) {\n\t\t\t\t\t\tvar staff = line.staff[k];\n\t\t\t\t\t\tfor (var kk = 0; kk < 1 /*staff.voices.length*/; kk++) {\n\t\t\t\t\t\t\tvar voice = staff.voices[kk];\n\t\t\t\t\t\t\tfor (var kkk = 0; kkk < voice.length; kkk++) {\n\t\t\t\t\t\t\t\tvar elem = voice[kkk];\n\t\t\t\t\t\t\t\tif (fragStart === null && elem.startChar >= 0) {\n\t\t\t\t\t\t\t\t\tfragStart = elem.startChar;\n\t\t\t\t\t\t\t\t\tif (elem.chord === undefined)\n\t\t\t\t\t\t\t\t\t\tmeasureStartChord = lastChord;\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\tmeasureStartChord = null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (elem.chord)\n\t\t\t\t\t\t\t\t\tlastChord = elem;\n\t\t\t\t\t\t\t\tif (elem.el_type === 'bar') {\n\t\t\t\t\t\t\t\t\tif (hasNotes) {\n\t\t\t\t\t\t\t\t\t\tvar frag = tune.abc.substring(fragStart, elem.endChar);\n\t\t\t\t\t\t\t\t\t\tvar measure = {abc: frag};\n\t\t\t\t\t\t\t\t\t\tlastChord = measureStartChord && measureStartChord.chord && measureStartChord.chord.length > 0 ? measureStartChord.chord[0].name : null;\n\t\t\t\t\t\t\t\t\t\tif (lastChord)\n\t\t\t\t\t\t\t\t\t\t\tmeasure.lastChord = lastChord;\n\t\t\t\t\t\t\t\t\t\tif (elem.startEnding)\n\t\t\t\t\t\t\t\t\t\t\tmeasure.startEnding = elem.startEnding;\n\t\t\t\t\t\t\t\t\t\tif (elem.endEnding)\n\t\t\t\t\t\t\t\t\t\t\tmeasure.endEnding = elem.endEnding;\n\t\t\t\t\t\t\t\t\t\tmeasures.push(measure);\n\t\t\t\t\t\t\t\t\t\tfragStart = null;\n\t\t\t\t\t\t\t\t\t\thasNotes = false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (elem.el_type === 'note') {\n\t\t\t\t\t\t\t\t\thasNotes = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ttunes.push({\n\t\t\t\theader: header,\n\t\t\t\tmeasures: measures,\n\t\t\t\thasPickup: hasPickup\n\t\t\t});\n\t\t}\n\t\treturn tunes;\n\t};\n})();\n\nmodule.exports = tunebook;\n","var tunebook = require('./abc_tunebook');\nvar Tune = require('../data/abc_tune');\n\nvar EngraverController = require('../write/engraver-controller');\nvar Parse = require('../parse/abc_parse');\nvar wrap = require('../parse/wrap_lines');\n// var tablatures = require('./abc_tablatures');\n\n\nvar resizeDivs = {};\nfunction resizeOuter() {\n var width = window.innerWidth;\n for (var id in resizeDivs) {\n if (resizeDivs.hasOwnProperty(id)) {\n var outer = resizeDivs[id];\n var ofs = outer.offsetLeft;\n width -= ofs * 2;\n outer.style.width = width + \"px\";\n }\n }\n}\n\ntry {\n window.addEventListener(\"resize\", resizeOuter);\n window.addEventListener(\"orientationChange\", resizeOuter);\n} catch(e) {\n // if we aren't in a browser, this code will crash, but it is not needed then either.\n}\n\nfunction renderOne(div, tune, params, tuneNumber, lineOffset) {\n if (params.viewportHorizontal) {\n // Create an inner div that holds the music, so that the passed in div will be the viewport.\n div.innerHTML = '
';\n if (params.scrollHorizontal) {\n div.style.overflowX = \"auto\";\n div.style.overflowY = \"hidden\";\n } else\n div.style.overflow = \"hidden\";\n resizeDivs[div.id] = div; // We use a hash on the element's id so that multiple calls won't keep adding to the list.\n div = div.children[0]; // The music should be rendered in the inner div.\n }\n else if (params.viewportVertical) {\n // Create an inner div that holds the music, so that the passed in div will be the viewport.\n div.innerHTML = '
';\n div.style.overflowX = \"hidden\";\n div.style.overflowY = \"auto\";\n div = div.children[0]; // The music should be rendered in the inner div.\n }\n else\n\t div.innerHTML = \"\";\n var engraver_controller = new EngraverController(div, params);\n engraver_controller.engraveABC(tune, tuneNumber, lineOffset);\n tune.engraver = engraver_controller;\n if (params.viewportVertical || params.viewportHorizontal) {\n // If we added a wrapper around the div, then we need to size the wrapper, too.\n var parent = div.parentNode;\n parent.style.width = div.style.width;\n }\n}\n\n// A quick way to render a tune from javascript when interactivity is not required.\n// This is used when a javascript routine has some abc text that it wants to render\n// in a div or collection of divs. One tune or many can be rendered.\n//\n// parameters:\n// output: an array of divs that the individual tunes are rendered to.\n// If the number of tunes exceeds the number of divs in the array, then\n// only the first tunes are rendered. If the number of divs exceeds the number\n// of tunes, then the unused divs are cleared. The divs can be passed as either\n// elements or strings of ids. If ids are passed, then the div MUST exist already.\n// (if a single element is passed, then it is an implied array of length one.)\n// (if a null is passed for an element, or the element doesn't exist, then that tune is skipped.)\n// abc: text representing a tune or an entire tune book in ABC notation.\n// renderParams: hash of:\n// startingTune: an index, starting at zero, representing which tune to start rendering at.\n// (If this element is not present, then rendering starts at zero.)\n// width: 800 by default. The width in pixels of the output paper\nvar renderAbc = function(output, abc, parserParams, engraverParams, renderParams) {\n // Note: all parameters have been condensed into the first ones. It doesn't hurt anything to allow the old format, so just copy them here.\n var params = {};\n var key;\n if (parserParams) {\n for (key in parserParams) {\n if (parserParams.hasOwnProperty(key)) {\n params[key] = parserParams[key];\n }\n }\n if (params.warnings_id && params.tablature) {\n params.tablature.warning_id = params.warnings_id;\n }\n }\n if (engraverParams) {\n for (key in engraverParams) {\n if (engraverParams.hasOwnProperty(key)) {\n\t // There is a conflict with the name of the parameter \"listener\". If it is in the second parameter, then it is for click.\n\t if (key === \"listener\") {\n\t \tif (engraverParams[key].highlight)\n\t\t params.clickListener = engraverParams[key].highlight;\n\t } else\n params[key] = engraverParams[key];\n }\n }\n }\n if (renderParams) {\n for (key in renderParams) {\n if (renderParams.hasOwnProperty(key)) {\n params[key] = renderParams[key];\n }\n }\n }\n\n function callback(div, tune, tuneNumber, abcString) {\n var removeDiv = false;\n if (div === \"*\") {\n removeDiv = true;\n div = document.createElement(\"div\");\n div.setAttribute(\"style\", \"visibility: hidden;\");\n document.body.appendChild(div);\n }\n if (!removeDiv && params.wrap && params.staffwidth) {\n tune = doLineWrapping(div, tune, tuneNumber, abcString, params);\n\t return tune;\n }\n if (params.afterParsing)\n params.afterParsing(tune, tuneNumber, abcString);\n renderOne(div, tune, params, tuneNumber, 0);\n if (removeDiv)\n div.parentNode.removeChild(div);\n return null;\n }\n\n return tunebook.renderEngine(callback, output, abc, params);\n};\n\nfunction doLineWrapping(div, tune, tuneNumber, abcString, params) {\n\tvar engraver_controller = new EngraverController(div, params);\n\tvar widths = engraver_controller.getMeasureWidths(tune);\n\n\tvar ret = wrap.calcLineWraps(tune, widths, params);\n\tif (ret.reParse) {\n var abcParser = new Parse();\n abcParser.parse(abcString, ret.revisedParams);\n tune = abcParser.getTune();\n var warnings = abcParser.getWarnings();\n if (warnings)\n tune.warnings = warnings;\n }\n if (params.afterParsing)\n params.afterParsing(tune, tuneNumber, abcString);\n renderOne(div, tune, ret.revisedParams, tuneNumber, 0);\n\ttune.explanation = ret.explanation;\n\treturn tune;\n}\n\nmodule.exports = renderAbc;\n","var tunebook = require('./abc_tunebook');\nvar EngraverController = require('../write/engraver-controller');\n\nvar tuneMetrics = function(abc, params) {\n function callback(div, tune, tuneNumber, abcString) {\n\t\tdiv = document.createElement(\"div\");\n\t\tdiv.setAttribute(\"style\", \"visibility: hidden;\");\n\t\tdocument.body.appendChild(div);\n\t\tvar engraver_controller = new EngraverController(div, params);\n\t\tvar widths = engraver_controller.getMeasureWidths(tune);\n div.parentNode.removeChild(div);\n return {sections: widths};\n }\n\n return tunebook.renderEngine(callback, \"*\", abc, params);\n};\n\nmodule.exports = tuneMetrics;\n","var { relativeMajor } = require(\"./relative-major\");\n\nvar key1sharp = { acc: 'sharp', note: 'f' };\nvar key2sharp = { acc: 'sharp', note: 'c' };\nvar key3sharp = { acc: 'sharp', note: 'g' };\nvar key4sharp = { acc: 'sharp', note: 'd' };\nvar key5sharp = { acc: 'sharp', note: 'A' };\nvar key6sharp = { acc: 'sharp', note: 'e' };\nvar key7sharp = { acc: 'sharp', note: 'B' };\nvar key1flat = { acc: 'flat', note: 'B' };\nvar key2flat = { acc: 'flat', note: 'e' };\nvar key3flat = { acc: 'flat', note: 'A' };\nvar key4flat = { acc: 'flat', note: 'd' };\nvar key5flat = { acc: 'flat', note: 'G' };\nvar key6flat = { acc: 'flat', note: 'c' };\nvar key7flat = { acc: 'flat', note: 'F' };\n\nvar keys = {\n\t'C#': [key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp, key7sharp],\n\t'F#': [key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp],\n\t'B': [key1sharp, key2sharp, key3sharp, key4sharp, key5sharp],\n\t'E': [key1sharp, key2sharp, key3sharp, key4sharp],\n\t'A': [key1sharp, key2sharp, key3sharp],\n\t'D': [key1sharp, key2sharp],\n\t'G': [key1sharp],\n\t'C': [],\n\t'F': [key1flat],\n\t'Bb': [key1flat, key2flat],\n\t'Eb': [key1flat, key2flat, key3flat],\n\t'Cm': [key1flat, key2flat, key3flat],\n\t'Ab': [key1flat, key2flat, key3flat, key4flat],\n\t'Db': [key1flat, key2flat, key3flat, key4flat, key5flat],\n\t'Gb': [key1flat, key2flat, key3flat, key4flat, key5flat, key6flat],\n\t'Cb': [key1flat, key2flat, key3flat, key4flat, key5flat, key6flat, key7flat],\n\n\t// The following are not in the 2.0 spec, but seem normal enough.\n\t// TODO-PER: These SOUND the same as what's written, but they aren't right\n\t'A#': [key1flat, key2flat],\n\t'B#': [],\n\t'D#': [key1flat, key2flat, key3flat],\n\t'E#': [key1flat],\n\t'G#': [key1flat, key2flat, key3flat, key4flat],\n\t'none': [],\n};\n\nfunction keyAccidentals(key) {\n\tvar newKey = keys[relativeMajor(key)]\n\tif (!newKey) // If we don't recognize the key then there is no change\n\t\treturn null\n\treturn JSON.parse(JSON.stringify(newKey))\n};\n\nmodule.exports = keyAccidentals;\n","// All these keys have the same number of accidentals\nvar keys = {\n\t'C': { modes: ['CMaj', 'Amin', 'Am', 'GMix', 'DDor', 'EPhr', 'FLyd', 'BLoc'], stepsFromC: 0 },\n\t'Db': { modes: ['DbMaj', 'Bbmin', 'Bbm', 'AbMix', 'EbDor', 'FPhr', 'GbLyd', 'CLoc'], stepsFromC: 1 },\n\t'D': { modes: ['DMaj', 'Bmin', 'Bm', 'AMix', 'EDor', 'F#Phr', 'GLyd', 'C#Loc'], stepsFromC: 2 },\n\t'Eb': { modes: ['EbMaj', 'Cmin', 'Cm', 'BbMix', 'FDor', 'GPhr', 'AbLyd', 'DLoc'], stepsFromC: 3 },\n\t'E': { modes: ['EMaj', 'C#min', 'C#m', 'BMix', 'F#Dor', 'G#Phr', 'ALyd', 'D#Loc'], stepsFromC: 4 },\n\t'F': { modes: ['FMaj', 'Dmin', 'Dm', 'CMix', 'GDor', 'APhr', 'BbLyd', 'ELoc'], stepsFromC: 5 },\n\t'Gb': { modes: ['GbMaj', 'Ebmin', 'Ebm', 'DbMix', 'AbDor', 'BbPhr', 'CbLyd', 'FLoc'], stepsFromC: 6 },\n\t'G': { modes: ['GMaj', 'Emin', 'Em', 'DMix', 'ADor', 'BPhr', 'CLyd', 'F#Loc'], stepsFromC: 7 },\n\t'Ab': { modes: ['AbMaj', 'Fmin', 'Fm', 'EbMix', 'BbDor', 'CPhr', 'DbLyd', 'GLoc'], stepsFromC: 8 },\n\t'A': { modes: ['AMaj', 'F#min', 'F#m', 'EMix', 'BDor', 'C#Phr', 'DLyd', 'G#Loc'], stepsFromC: 9 },\n\t'Bb': { modes: ['BbMaj', 'Gmin', 'Gm', 'FMix', 'CDor', 'DPhr', 'EbLyd', 'ALoc'], stepsFromC: 10 },\n\t'B': { modes: ['BMaj', 'G#min', 'G#m', 'F#Mix', 'C#Dor', 'D#Phr', 'ELyd', 'A#Loc'], stepsFromC: 11 },\n\t// Enharmonic keys\n\t'C#': { modes: ['C#Maj', 'A#min', 'A#m', 'G#Mix', 'D#Dor', 'E#Phr', 'F#Lyd', 'B#Loc'], stepsFromC: 1 },\n\t'F#': { modes: ['F#Maj', 'D#min', 'D#m', 'C#Mix', 'G#Dor', 'A#Phr', 'BLyd', 'E#Loc'], stepsFromC: 6 },\n\t'Cb': { modes: ['CbMaj', 'Abmin', 'Abm', 'GbMix', 'DbDor', 'EbPhr', 'FbLyd', 'BbLoc'], stepsFromC: 11 },\n}\n\nvar keyReverse = null\n\nfunction createKeyReverse() {\n\tkeyReverse = {}\n\tvar allKeys = Object.keys(keys)\n\tfor (var i = 0 ; i < allKeys.length; i++) {\n\t\tvar keyObj = keys[allKeys[i]]\n\t\tkeyReverse[allKeys[i].toLowerCase()] = allKeys[i];\n\t\tfor (var j = 0; j < keyObj.modes.length; j++) {\n\t\t\tvar mode = keyObj.modes[j].toLowerCase()\n\t\t\tkeyReverse[mode] = allKeys[i];\n\t\t}\n\t}\n}\n\nfunction relativeMajor(key) {\n\t// Translate a key to its relative major. If it doesn't exist, do the best we can\n\t// by just returning the original key.\n\t// There are alternate spellings of these - so the search needs to be case insensitive.\n\t// To make this efficient, the first time this is called the \"keys\" object is reversed so this search is fast in the future\n\tif (!keyReverse) {\n\t\tcreateKeyReverse()\n\t}\n\t// get the key portion itself - there might be other stuff, like extra sharps and flats, or the mode written out.\n\tvar mode = key.toLowerCase().match(/([a-g][b#]?)(maj|min|mix|dor|phr|lyd|loc|m)?/)\n\tif (!mode || !mode[2])\n\t\treturn key;\n\tmode = mode[1] + mode[2]\n\tvar maj = keyReverse[mode]\n\tif (maj)\n\t\treturn maj;\n\treturn key;\n}\n\nfunction relativeMode(majorKey, mode) {\n\t// The reverse of the relativeMajor. Translate it back to the original mode.\n\t// If it isn't a recognized mode or it is already major, then just return the major key.\n\tvar group = keys[majorKey]\n\tif (!group)\n\t\treturn majorKey;\n\tif (mode === '')\n\t\treturn majorKey;\n\tvar match = mode.toLowerCase().match(/^(maj|min|mix|dor|phr|lyd|loc|m)/)\t\n\tif (!match)\n\t\treturn majorKey\n\tvar regMode = match[1]\t\n\tfor (var i = 0; i < group.modes.length; i++) {\n\t\tvar thisMode = group.modes[i]\n\t\tvar ind = thisMode.toLowerCase().indexOf(regMode)\n\t\tif (ind !== -1 && ind === thisMode.length - regMode.length)\n\t\t\treturn thisMode.substring(0, thisMode.length - regMode.length)\n\t}\n\treturn majorKey;\n}\n\nfunction transposeKey(key, steps) {\n\t// This takes a major key and adds the desired steps.\n\t// It assigns each key a number that is the number of steps from C so that there can just be arithmetic.\n\tvar match = keys[key]\n\tif (!match)\n\t\treturn key;\n\twhile (steps < 0) steps += 12;\n\tvar fromC = (match.stepsFromC + steps) % 12;\n\tfor (var i = 0; i < Object.keys(keys).length; i++) {\n\t\tvar k = Object.keys(keys)[i]\n\t\tif (keys[k].stepsFromC === fromC)\n\t\t\treturn k;\n\t}\n\treturn key;\n}\n\nmodule.exports = {relativeMajor: relativeMajor, relativeMode: relativeMode, transposeKey: transposeKey};\n","// abc_tune.js: a computer usable internal structure representing one tune.\n\nvar parseCommon = require('../parse/abc_common');\nvar spacing = require('../write/helpers/spacing');\nvar sequence = require('../synth/abc_midi_sequencer');\nvar flatten = require('../synth/abc_midi_flattener');\nvar delineTune = require(\"./deline-tune\");\n\n/**\n * This is the data for a single ABC tune. It is created and populated by the window.ABCJS.parse.Parse class.\n * Also known as the ABCJS Abstract Syntax Tree\n * @alternateClassName ABCJS.Tune\n */\nvar Tune = function() {\n\tthis.reset = function () {\n\t\tthis.version = \"1.1.0\";\n\t\tthis.media = \"screen\";\n\t\tthis.metaText = {};\n\t\tthis.metaTextInfo = {};\n\t\tthis.formatting = {};\n\t\tthis.lines = [];\n\t\tthis.staffNum = 0;\n\t\tthis.voiceNum = 0;\n\t\tthis.lineNum = 0;\n\t\tthis.runningFonts = {};\n\t\tdelete this.visualTranspose;\n\t};\n\tthis.reset();\n\n\tfunction copy(dest, src, prop, attrs) {\n\t\tfor (var i = 0; i < attrs.length; i++)\n\t\t\tdest[prop][attrs[i]] = src[prop][attrs[i]];\n\t}\n\n\tthis.copyTopInfo = function(src) {\n\t\tvar attrs = ['tempo', 'title', 'header', 'rhythm', 'origin', 'composer', 'author', 'partOrder'];\n\t\tcopy(this, src, \"metaText\", attrs);\n\t\tcopy(this, src, \"metaTextInfo\", attrs);\n\t};\n\n\tthis.copyBottomInfo = function(src) {\n\t\tvar attrs = ['unalignedWords',\n\t\t\t'book',\n\t\t\t'source',\n\t\t\t'discography',\n\t\t\t'notes',\n\t\t\t'transcription',\n\t\t\t'history',\n\t\t\t'abc-copyright',\n\t\t\t'abc-creator',\n\t\t\t'abc-edited-by',\n\t\t\t'footer']\n\t\tcopy(this, src, \"metaText\", attrs);\n\t\tcopy(this, src, \"metaTextInfo\", attrs);\n\t};\n\n\t// The structure consists of a hash with the following two items:\n\t// metaText: a hash of {key, value}, where key is one of: title, author, rhythm, source, transcription, unalignedWords, etc...\n\t// tempo: { noteLength: number (e.g. .125), bpm: number }\n\t// lines: an array of elements, or one of the following:\n\t//\n\t// STAFF: array of elements\n\t// SUBTITLE: string\n\t//\n\t// TODO: actually, the start and end char should modify each part of the note type\n\t// The elements all have a type field and a start and end char\n\t// field. The rest of the fields depend on the type and are listed below:\n\t// REST: duration=1,2,4,8; chord: string\n\t// NOTE: accidental=none,dbl_flat,flat,natural,sharp,dbl_sharp\n\t//\t\tpitch: \"C\" is 0. The numbers refer to the pitch letter.\n\t//\t\tduration: .5 (sixteenth), .75 (dotted sixteenth), 1 (eighth), 1.5 (dotted eighth)\n\t//\t\t\t2 (quarter), 3 (dotted quarter), 4 (half), 6 (dotted half) 8 (whole)\n\t//\t\tchord: { name:chord, position: one of 'default', 'above', 'below' }\n\t//\t\tend_beam = true or undefined if this is the last note in a beam.\n\t//\t\tlyric: array of { syllable: xxx, divider: one of \" -_\" }\n\t//\t\tstartTie = true|undefined\n\t//\t\tendTie = true|undefined\n\t//\t\tstartTriplet = num <- that is the number to print\n\t//\t\tendTriplet = true|undefined (the last note of the triplet)\n\t// TODO: actually, decoration should be an array.\n\t//\t\tdecoration: upbow, downbow, accent\n\t// BAR: type=bar_thin, bar_thin_thick, bar_thin_thin, bar_thick_thin, bar_right_repeat, bar_left_repeat, bar_double_repeat\n\t//\tnumber: 1 or 2: if it is the start of a first or second ending\n\t// CLEF: type=treble,bass\n\t// KEY-SIG:\n\t//\t\taccidentals[]: { acc:sharp|dblsharp|natural|flat|dblflat, note:a|b|c|d|e|f|g }\n\t// METER: type: common_time,cut_time,specified\n\t//\t\tif specified, { num: 99, den: 99 }\n\n\tthis.getBeatLength = function() {\n\t\t// This returns a fraction: for instance 1/4 for a quarter\n\t\t// There are two types of meters: compound and regular. Compound meter has 3 beats counted as one.\n\t\tvar meter = this.getMeterFraction();\n\t\tvar multiplier = 1;\n\t\tif (meter.num === 6 || meter.num === 9 || meter.num === 12)\n\t\t\tmultiplier = 3;\n\t\telse if (meter.num === 3 && meter.den === 8)\n\t\t\tmultiplier = 3;\n\n\t\treturn multiplier / meter.den;\n\t};\n\n\tfunction computePickupLength(lines, barLength) {\n\t\tvar pickupLength = 0;\n\t\tfor (var i = 0; i < lines.length; i++) {\n\t\t\tif (lines[i].staff) {\n\t\t\t\tfor (var j = 0; j < lines[i].staff.length; j++) {\n\t\t\t\t\tfor (var v = 0; v < lines[i].staff[j].voices.length; v++) {\n\t\t\t\t\t\tvar voice = lines[i].staff[j].voices[v];\n\t\t\t\t\t\tvar tripletMultiplier = 1;\n\t\t\t\t\t\tfor (var el = 0; el < voice.length; el++) {\n\t\t\t\t\t\t\tvar isSpacer = voice[el].rest && voice[el].rest.type === \"spacer\";\n\t\t\t\t\t\t\tif (voice[el].startTriplet)\n\t\t\t\t\t\t\t\ttripletMultiplier = voice[el].tripletMultiplier;\n\t\t\t\t\t\t\tif (voice[el].duration && !isSpacer && voice[el].el_type !== \"tempo\")\n\t\t\t\t\t\t\t\tpickupLength += voice[el].duration * tripletMultiplier;\n\t\t\t\t\t\t\tif (voice[el].endTriplet)\n\t\t\t\t\t\t\t\ttripletMultiplier = 1;\n\t\t\t\t\t\t\tif (pickupLength >= barLength)\n\t\t\t\t\t\t\t\tpickupLength -= barLength;\n\t\t\t\t\t\t\tif (voice[el].el_type === 'bar')\n\t\t\t\t\t\t\t\treturn pickupLength;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn pickupLength;\n\t}\n\tthis.getPickupLength = function() {\n\t\tvar barLength = this.getBarLength();\n\t\tvar pickupLength = computePickupLength(this.lines, barLength);\n\n\t\t// If computed pickup length is very close to 0 or the bar length, we assume\n\t\t// that we actually have a full bar and hence no pickup.\n\t\treturn (pickupLength < 1e-8 || barLength-pickupLength < 1e-8) ? 0 : pickupLength;\n\t};\n\n\tthis.getBarLength = function() {\n\t\tvar meter = this.getMeterFraction();\n\t\treturn meter.num / meter.den;\n\t};\n\n\tthis.getTotalTime = function() {\n\t\treturn this.totalTime;\n\t};\n\n\tthis.getTotalBeats = function() {\n\t\treturn this.totalBeats;\n\t};\n\n\tthis.millisecondsPerMeasure = function(bpmOverride) {\n\t\tvar bpm;\n\t\tif (bpmOverride) {\n\t\t\tbpm = bpmOverride;\n\t\t} else {\n\t\t\tvar tempo = this.metaText ? this.metaText.tempo : null;\n\t\t\tbpm = this.getBpm(tempo);\n\t\t}\n\t\tif (bpm <= 0)\n\t\t\tbpm = 1; // I don't think this can happen, but we don't want a possibility of dividing by zero.\n\n\t\tvar beatsPerMeasure = this.getBeatsPerMeasure();\n\n\t\tvar minutesPerMeasure = beatsPerMeasure / bpm;\n\t\treturn minutesPerMeasure * 60000;\n\t};\n\n\tthis.getBeatsPerMeasure = function() {\n\t\tvar beatLen = this.getBeatLength();\n\t\tvar barLen = this.getBarLength();\n\t\treturn barLen / beatLen;\n\t};\n\n\tthis.getMeter = function() {\n\t\tfor (var i = 0; i < this.lines.length; i++) {\n\t\t\tvar line = this.lines[i];\n\t\t\tif (line.staff) {\n\t\t\t\tfor (var j = 0; j < line.staff.length; j++) {\n\t\t\t\t\tvar meter = line.staff[j].meter;\n\t\t\t\t\tif (meter) {\n\t\t\t\t\t\treturn meter;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn { type: \"common_time\" };\n\t};\n\n\tthis.getMeterFraction = function() {\n\t\tvar meter = this.getMeter();\n\t\tvar num = 4;\n\t\tvar den = 4;\n\t\tif (meter) {\n\t\t\tif (meter.type === 'specified') {\n\t\t\t\tnum = parseInt(meter.value[0].num, 10);\n\t\t\t\tden = parseInt(meter.value[0].den,10);\n\t\t\t} else if (meter.type === 'cut_time') {\n\t\t\t\tnum = 2;\n\t\t\t\tden = 2;\n\t\t\t} else if (meter.type === 'common_time') {\n\t\t\t\tnum = 4;\n\t\t\t\tden = 4;\n\t\t\t}\n\t\t}\n\t\tthis.meter = { num: num, den: den };\n\t\treturn this.meter; // TODO-PER: is this saved value used anywhere? A get function shouldn't change state.\n\t};\n\n\tthis.getKeySignature = function() {\n\t\tfor (var i = 0; i < this.lines.length; i++) {\n\t\t\tvar line = this.lines[i];\n\t\t\tif (line.staff) {\n\t\t\t\tfor (var j = 0; j < line.staff.length; j++) {\n\t\t\t\t\tif (line.staff[j].key)\n\t\t\t\t\t\treturn line.staff[j].key;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn { };\n\t};\n\n\tthis.getElementFromChar = function(char) {\n\t\tfor (var i = 0; i < this.lines.length; i++) {\n\t\t\tvar line = this.lines[i];\n\t\t\tif (line.staff) {\n\t\t\t\tfor (var j = 0; j < line.staff.length; j++) {\n\t\t\t\t\tvar staff = line.staff[j];\n\t\t\t\t\tfor (var k = 0; k < staff.voices.length; k++) {\n\t\t\t\t\t\tvar voice = staff.voices[k];\n\t\t\t\t\t\tfor (var ii = 0; ii < voice.length; ii++) {\n\t\t\t\t\t\t\tvar elem = voice[ii];\n\t\t\t\t\t\t\tif (elem.startChar && elem.endChar &&\n\t\t\t\t\t\t\t\telem.startChar <= char && elem.endChar > char)\n\t\t\t\t\t\t\t\treturn elem;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\n\tfunction addVerticalInfo(timingEvents) {\n\t\t// Add vertical info to the bar events: put the next event's top, and the event after the next measure's top.\n\t\tvar lastBarTop;\n\t\tvar lastBarBottom;\n\t\tvar lastEventTop;\n\t\tvar lastEventBottom;\n\t\tfor (var e = timingEvents.length - 1; e >= 0; e--) {\n\t\t\tvar ev = timingEvents[e];\n\t\t\tif (ev.type === 'bar') {\n\t\t\t\tev.top = lastEventTop;\n\t\t\t\tev.nextTop = lastBarTop;\n\t\t\t\tlastBarTop = lastEventTop;\n\n\t\t\t\tev.bottom = lastEventBottom;\n\t\t\t\tev.nextBottom = lastBarBottom;\n\t\t\t\tlastBarBottom = lastEventBottom;\n\t\t\t} else if (ev.type === 'event') {\n\t\t\t\tlastEventTop = ev.top;\n\t\t\t\tlastEventBottom = ev.top + ev.height;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction makeSortedArray(hash) {\n\t\tvar arr = [];\n\t\tfor (var k in hash) {\n\t\t\tif (hash.hasOwnProperty(k))\n\t\t\t\tarr.push(hash[k]);\n\t\t}\n\t\tarr = arr.sort(function (a, b) {\n\t\t\tvar diff = a.milliseconds - b.milliseconds;\n\t\t\t// if the events have the same time, make sure a bar comes before a note\n\t\t\tif (diff !== 0) {\n\t\t\t\treturn diff;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn a.type === \"bar\" ? -1 : 1;\n\t\t\t}\n\t\t});\n\t\treturn arr;\n\t}\n\n\tthis.addElementToEvents = function(eventHash, element, voiceTimeMilliseconds, top, height, line, measureNumber, timeDivider, isTiedState, nextIsBar) {\n\t\tif (element.hint)\n\t\t\treturn { isTiedState: undefined, duration: 0 };\n\t\tvar realDuration = element.durationClass ? element.durationClass : element.duration;\n\t\tif (element.abcelem.rest && element.abcelem.rest.type === \"spacer\")\n\t\t\trealDuration = 0;\n\t\tif (realDuration > 0) {\n\t\t\tvar es = [];\n\t\t\t// If there is an invisible rest, then there are not elements, so don't push a null one.\n\t\t\tfor (var i = 0; i < element.elemset.length; i++) {\n\t\t\t\tif (element.elemset[i] !== null)\n\t\t\t\t\tes.push(element.elemset[i]);\n\t\t\t}\n\t\t\tvar isTiedToNext = element.startTie;\n\t\t\tif (isTiedState !== undefined) {\n\t\t\t\teventHash[\"event\" + isTiedState].elements.push(es); // Add the tied note to the first note that it is tied to\n\t\t\t\tif (nextIsBar) {\n\t\t\t\t\tif (!eventHash[\"event\" + voiceTimeMilliseconds]) {\n\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds] = {\n\t\t\t\t\t\t\ttype: \"event\",\n\t\t\t\t\t\t\tmilliseconds: voiceTimeMilliseconds,\n\t\t\t\t\t\t\tline: line,\n\t\t\t\t\t\t\tmeasureNumber: measureNumber,\n\t\t\t\t\t\t\ttop: top,\n\t\t\t\t\t\t\theight: height,\n\t\t\t\t\t\t\tleft: null,\n\t\t\t\t\t\t\twidth: 0,\n\t\t\t\t\t\t\telements: [],\n\t\t\t\t\t\t\tstartChar: null,\n\t\t\t\t\t\t\tendChar: null,\n\t\t\t\t\t\t\tstartCharArray: [],\n\t\t\t\t\t\t\tendCharArray: []\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].measureStart = true;\n\t\t\t\t\tnextIsBar = false;\n\t\t\t\t}\n\t\t\t\tif (!isTiedToNext)\n\t\t\t\t\tisTiedState = undefined;\n\t\t\t} else {\n\t\t\t\t// the last note wasn't tied.\n\t\t\t\tif (!eventHash[\"event\" + voiceTimeMilliseconds]) {\n\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds] = {\n\t\t\t\t\t\ttype: \"event\",\n\t\t\t\t\t\tmilliseconds: voiceTimeMilliseconds,\n\t\t\t\t\t\tline: line,\n\t\t\t\t\t\tmeasureNumber: measureNumber,\n\t\t\t\t\t\ttop: top,\n\t\t\t\t\t\theight: height,\n\t\t\t\t\t\tleft: element.x,\n\t\t\t\t\t\twidth: element.w,\n\t\t\t\t\t\telements: [es],\n\t\t\t\t\t\tstartChar: element.abcelem.startChar,\n\t\t\t\t\t\tendChar: element.abcelem.endChar,\n\t\t\t\t\t\tstartCharArray: [element.abcelem.startChar],\n\t\t\t\t\t\tendCharArray: [element.abcelem.endChar],\n\t\t\t\t\t\tmidiPitches: element.abcelem.midiPitches ? parseCommon.cloneArray(element.abcelem.midiPitches) : []\n\t\t\t\t\t};\n\t\t\t\t\tif (element.abcelem.midiGraceNotePitches)\n\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].midiGraceNotePitches = parseCommon.cloneArray(element.abcelem.midiGraceNotePitches);\n\t\t\t\t} else {\n\t\t\t\t\t// If there is more than one voice then two notes can fall at the same time. Usually they would be lined up in the same place, but if it is a whole rest, then it is placed funny. In any case, the left most element wins.\n\t\t\t\t\tif (eventHash[\"event\" + voiceTimeMilliseconds].left)\n\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].left = Math.min(eventHash[\"event\" + voiceTimeMilliseconds].left, element.x);\n\t\t\t\t\telse\n\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].left = element.x;\n\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].elements.push(es);\n\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].startCharArray.push(element.abcelem.startChar);\n\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].endCharArray.push(element.abcelem.endChar);\n\t\t\t\t\tif (eventHash[\"event\" + voiceTimeMilliseconds].startChar === null)\n\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].startChar =element.abcelem.startChar;\n\t\t\t\t\tif (eventHash[\"event\" + voiceTimeMilliseconds].endChar === null)\n\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].endChar =element.abcelem.endChar;\n\t\t\t\t\tif (element.abcelem.midiPitches && element.abcelem.midiPitches.length) {\n\t\t\t\t\t\tif (!eventHash[\"event\" + voiceTimeMilliseconds].midiPitches)\n\t\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].midiPitches = [];\n\t\t\t\t\t\tfor (var i = 0; i < element.abcelem.midiPitches.length; i++)\n\t\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].midiPitches.push(element.abcelem.midiPitches[i]);\n\t\t\t\t\t}\n\t\t\t\t\tif (element.abcelem.midiGraceNotePitches && element.abcelem.midiGraceNotePitches.length) {\n\t\t\t\t\t\tif (!eventHash[\"event\" + voiceTimeMilliseconds].midiGraceNotePitches)\n\t\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].midiGraceNotePitches = [];\n\t\t\t\t\t\tfor (var j = 0; j < element.abcelem.midiGraceNotePitches.length; j++)\n\t\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].midiGraceNotePitches.push(element.abcelem.midiGraceNotePitches[j]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (nextIsBar) {\n\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].measureStart = true;\n\t\t\t\t\tnextIsBar = false;\n\t\t\t\t}\n\t\t\t\t// TODO-PER: There doesn't seem to be a harm in letting ties be two different notes and it fixes a bug when a tie goes to a new line. If there aren't other problems with this change, then the variable can be removed completely. \n\t\t\t\t// if (isTiedToNext)\n\t\t\t\t// \tisTiedState = voiceTimeMilliseconds;\n\t\t\t}\n\t\t}\n\t\treturn { isTiedState: isTiedState, duration: realDuration / timeDivider, nextIsBar: nextIsBar || element.type === 'bar' };\n\t};\n\n\tthis.makeVoicesArray = function() {\n\t\t// First make a new array that is arranged by voice so that the repeats that span different lines are handled correctly.\n\t\tvar voicesArr = [];\n\t\tvar measureNumber = [];\n\t\tvar tempos = {};\n\t\tfor (var line = 0; line < this.engraver.staffgroups.length; line++) {\n\t\t\tvar group = this.engraver.staffgroups[line];\n\t\t\tif (group && group.staffs && group.staffs.length > 0) {\n\t\t\t\tvar firstStaff = group.staffs[0];\n\t\t\t\tvar middleC = firstStaff.absoluteY;\n\t\t\t\tvar top = middleC - firstStaff.top * spacing.STEP;\n\t\t\t\tvar lastStaff = group.staffs[group.staffs.length - 1];\n\t\t\t\tmiddleC = lastStaff.absoluteY;\n\t\t\t\tvar bottom = middleC - lastStaff.bottom * spacing.STEP;\n\t\t\t\tvar height = bottom - top;\n\n\t\t\t\tvar voices = group.voices;\n\t\t\t\tfor (var v = 0; v < voices.length; v++) {\n\t\t\t\t\tif (voices[v].staff && voices[v].staff.isTabStaff)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tvar noteFound = false;\n\t\t\t\t\tif (!voicesArr[v])\n\t\t\t\t\t\tvoicesArr[v] = [];\n\t\t\t\t\tif (measureNumber[v] === undefined)\n\t\t\t\t\t\tmeasureNumber[v] = 0;\n\t\t\t\t\tvar elements = voices[v].children;\n\t\t\t\t\tfor (var elem = 0; elem < elements.length; elem++) {\n\t\t\t\t\t\tif (elements[elem].type === \"tempo\")\n\t\t\t\t\t\t\ttempos[measureNumber[v]] = this.getBpm(elements[elem].abcelem);\n\t\t\t\t\t\tvoicesArr[v].push({top: top, height: height, line: group.line, measureNumber: measureNumber[v], elem: elements[elem]});\n\t\t\t\t\t\tif (elements[elem].type === 'bar' && noteFound) // Count the measures by counting the bar lines, but skip a bar line that appears at the left of the music, before any notes.\n\t\t\t\t\t\t\tmeasureNumber[v]++;\n\t\t\t\t\t\tif (elements[elem].type === 'note' || elements[elem].type === 'rest')\n\t\t\t\t\t\t\tnoteFound = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.tempoLocations = tempos; // This should be passed back, but the function is accessible publicly so that would break the interface.\n\t\treturn voicesArr;\n\t};\n\n\tthis.setupEvents = function(startingDelay, timeDivider, startingBpm, warp) {\n\t\tif (!warp) warp = 1;\n\t\tvar timingEvents = [];\n\n\t\tvar eventHash = {};\n\t\t// The time is the number of seconds from the beginning of the piece.\n\t\t// The units we are scanning are in notation units (i.e. 0.25 is a quarter note)\n\t\tvar time = startingDelay;\n\t\tvar isTiedState;\n\t\tvar nextIsBar = true;\n\t\tvar voices = this.makeVoicesArray();\n\t\tvar maxVoiceTimeMilliseconds = 0;\n\t\tfor (var v = 0; v < voices.length; v++) {\n\t\t\tvar voiceTime = time;\n\t\t\tvar voiceTimeMilliseconds = Math.round(voiceTime * 1000);\n\t\t\tvar startingRepeatElem = 0;\n\t\t\tvar endingRepeatElem = -1;\n\t\t\tvar elements = voices[v];\n\t\t\tvar bpm = startingBpm;\n\t\t\ttimeDivider = this.getBeatLength() * bpm / 60;\n\t\t\tvar tempoDone = -1;\n\t\t\tfor (var elem = 0; elem < elements.length; elem++) {\n\t\t\t\tvar thisMeasure = elements[elem].measureNumber;\n\t\t\t\tif (tempoDone !== thisMeasure && this.tempoLocations[thisMeasure]) {\n\t\t\t\t\tbpm = this.tempoLocations[thisMeasure];\n\t\t\t\t\ttimeDivider = warp * this.getBeatLength() * bpm / 60;\n\t\t\t\t\ttempoDone = thisMeasure;\n\t\t\t\t}\n\t\t\t\tvar element = elements[elem].elem;\n\t\t\t\tvar ret = this.addElementToEvents(eventHash, element, voiceTimeMilliseconds, elements[elem].top, elements[elem].height, elements[elem].line, elements[elem].measureNumber, timeDivider, isTiedState, nextIsBar);\n\t\t\t\tisTiedState = ret.isTiedState;\n\t\t\t\tnextIsBar = ret.nextIsBar;\n\t\t\t\tvoiceTime += ret.duration;\n\t\t\t\tvar lastHash;\n\t\t\t\tif (element.duration > 0 && eventHash[\"event\" + voiceTimeMilliseconds]) // This won't exist if this is the end of a tie.\n\t\t\t\t\tlastHash = \"event\" + voiceTimeMilliseconds;\n\t\t\t\tvoiceTimeMilliseconds = Math.round(voiceTime * 1000);\n\t\t\t\tif (element.type === 'bar') {\n\t\t\t\t\tvar barType = element.abcelem.type;\n\t\t\t\t\tvar endRepeat = (barType === \"bar_right_repeat\" || barType === \"bar_dbl_repeat\");\n\t\t\t\t\tvar startEnding = (element.abcelem.startEnding === '1');\n\t\t\t\t\tvar startRepeat = (barType === \"bar_left_repeat\" || barType === \"bar_dbl_repeat\" || barType === \"bar_right_repeat\");\n\t\t\t\t\tif (endRepeat) {\n\t\t\t\t\t\t// Force the end of the previous note to the position of the measure - the cursor won't go past the end repeat\n\t\t\t\t\t\tif (elem > 0) {\n\t\t\t\t\t\t\teventHash[lastHash].endX = element.x;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (endingRepeatElem === -1)\n\t\t\t\t\t\t\tendingRepeatElem = elem;\n\t\t\t\t\t\tvar lastVoiceTimeMilliseconds = 0;\n\t\t\t\t\t\ttempoDone = -1;\n\t\t\t\t\t\tfor (var el2 = startingRepeatElem; el2 < endingRepeatElem; el2++) {\n\t\t\t\t\t\t\tthisMeasure = elements[el2].measureNumber;\n\t\t\t\t\t\t\tif (tempoDone !== thisMeasure && this.tempoLocations[thisMeasure]) {\n\t\t\t\t\t\t\t\tbpm = this.tempoLocations[thisMeasure];\n\t\t\t\t\t\t\t\ttimeDivider = warp * this.getBeatLength() * bpm / 60;\n\t\t\t\t\t\t\t\ttempoDone = thisMeasure;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvar element2 = elements[el2].elem;\n\t\t\t\t\t\t\tret = this.addElementToEvents(eventHash, element2, voiceTimeMilliseconds, elements[el2].top, elements[el2].height, elements[el2].line, elements[el2].measureNumber, timeDivider, isTiedState, nextIsBar);\n\t\t\t\t\t\t\tisTiedState = ret.isTiedState;\n\t\t\t\t\t\t\tnextIsBar = ret.nextIsBar;\n\t\t\t\t\t\t\tvoiceTime += ret.duration;\n\t\t\t\t\t\t\tlastVoiceTimeMilliseconds = voiceTimeMilliseconds;\n\t\t\t\t\t\t\tvoiceTimeMilliseconds = Math.round(voiceTime * 1000);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (eventHash[\"event\" + lastVoiceTimeMilliseconds]) // This won't exist if it is the beginning of the next line. That's ok because we will just count the end of the last line as the end.\n\t\t\t\t\t\t\teventHash[\"event\" + lastVoiceTimeMilliseconds].endX = elements[endingRepeatElem].elem.x;\n\t\t\t\t\t\tnextIsBar = true;\n\t\t\t\t\t\tendingRepeatElem = -1;\n\t\t\t\t\t}\n\t\t\t\t\tif (startEnding)\n\t\t\t\t\t\tendingRepeatElem = elem;\n\t\t\t\t\tif (startRepeat)\n\t\t\t\t\t\tstartingRepeatElem = elem;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmaxVoiceTimeMilliseconds = Math.max(maxVoiceTimeMilliseconds, voiceTimeMilliseconds)\n\t\t}\n\t\t// now we have all the events, but if there are multiple voices then there may be events out of order or duplicated, so normalize it.\n\t\ttimingEvents = makeSortedArray(eventHash);\n\t\taddVerticalInfo(timingEvents);\n\t\taddEndPoints(this.lines, timingEvents)\n\t\ttimingEvents.push({ type: \"end\", milliseconds: maxVoiceTimeMilliseconds });\n\t\tthis.addUsefulCallbackInfo(timingEvents, bpm*warp);\n\t\treturn timingEvents;\n\t};\n\n\tthis.addUsefulCallbackInfo = function(timingEvents, bpm) {\n\t\tvar millisecondsPerMeasure = this.millisecondsPerMeasure(bpm);\n\t\tfor (var i = 0; i < timingEvents.length; i++) {\n\t\t\tvar ev = timingEvents[i];\n\t\t\tev.millisecondsPerMeasure = millisecondsPerMeasure;\n\t\t}\n\t};\n\n\tfunction skipTies(elements, index) {\n\t\twhile (index < elements.length && elements[index].left === null)\n\t\t\tindex++;\n\t\treturn elements[index];\n\t}\n\tfunction addEndPoints(lines, elements) {\n\t\tif (elements.length < 1)\n\t\t\treturn;\n\t\tfor (var i = 0; i < elements.length-1; i++) {\n\t\t\tvar el = elements[i];\n\t\t\tvar next = skipTies(elements, i+1);\n\t\t\tif (el.left !== null) {\n\t\t\t\t// If there is no left element that is because this is a tie so it should be skipped.\n\t\t\t\tvar endX = (next && el.top === next.top) ? next.left : lines[el.line].staffGroup.w;\n\t\t\t\t// If this is already set, it is because the notes aren't sequential here, like the next thing is a repeat bar line.\n\t\t\t\t// In that case, the right-most position is passed in. There could still be an intervening note in another voice, so always look for the closest position.\n\t\t\t\t// If there is a repeat that stays on the same line, the endX set above won't be right because the next note will be before. In that case, use the endX that was calculated.\n\t\t\t\tif (el.endX !== undefined) {\n\t\t\t\t\tif (endX > el.left)\n\t\t\t\t\t\tel.endX = Math.min(el.endX, endX);\n\t\t\t\t} else\n\t\t\t\t\tel.endX = endX;\n\t\t\t}\n\t\t}\n\t\tvar lastEl = elements[elements.length-1];\n\t\tlastEl.endX = lines[lastEl.line].staffGroup.w;\n\t}\n\n\tthis.getBpm = function(tempo) {\n\t\tvar bpm;\n\t\tif (tempo) {\n\t\t\tbpm = tempo.bpm;\n\t\t\tvar beatLength = this.getBeatLength();\n\t\t\tvar statedBeatLength = tempo.duration && tempo.duration.length > 0 ? tempo.duration[0] : beatLength;\n\t\t\tbpm = bpm * statedBeatLength / beatLength;\n\t\t}\n\t\tif (!bpm) {\n\t\t\tbpm = 180;\n\t\t\t// Compensate for compound meter, where the beat isn't a beat.\n\t\t\tvar meter = this.getMeterFraction();\n\t\t\tif (meter && meter.num !== 3 && (meter.num % 3 === 0)) {\n\t\t\t\tbpm = 120;\n\t\t\t}\n\t\t}\n\t\treturn bpm;\n\t};\n\n\tthis.setTiming = function (bpm, measuresOfDelay) {\n\t\tmeasuresOfDelay = measuresOfDelay || 0;\n\t\tif (!this.engraver || !this.engraver.staffgroups) {\n\t\t\tconsole.log(\"setTiming cannot be called before the tune is drawn.\");\n\t\t\tthis.noteTimings = [];\n\t\t\treturn this.noteTimings;\n\t\t}\n\n\t\tvar tempo = this.metaText ? this.metaText.tempo : null;\n\t\tvar naturalBpm = this.getBpm(tempo);\n\t\tvar warp = 1;\n\t\tif (bpm) {\n\t\t\tif (tempo)\n\t\t\t\twarp = bpm / naturalBpm;\n\t\t} else\n\t\t\tbpm = naturalBpm;\n\n\t\t// Calculate the basic midi data. We only care about the qpm variable here.\n\t\t//this.setUpAudio({qpm: bpm});\n\n\t\tvar beatLength = this.getBeatLength();\n\t\tvar beatsPerSecond = bpm / 60;\n\n\t\tvar measureLength = this.getBarLength();\n\n\t\tvar startingDelay = measureLength / beatLength * measuresOfDelay / beatsPerSecond;\n\t\tif (startingDelay)\n\t\t\tstartingDelay -= this.getPickupLength() / beatLength / beatsPerSecond;\n\t\tvar timeDivider = beatLength * beatsPerSecond;\n\n\t\tthis.noteTimings = this.setupEvents(startingDelay, timeDivider, bpm, warp);\n\t\tif (this.noteTimings.length > 0) {\n\t\t\tthis.totalTime = this.noteTimings[this.noteTimings.length - 1].milliseconds / 1000;\n\t\t\tthis.totalBeats = this.totalTime * beatsPerSecond;\n\t\t} else {\n\t\t\tthis.totalTime = undefined;\n\t\t\tthis.totalBeats = undefined;\n\t\t}\n\t\treturn this.noteTimings;\n\t};\n\n\tthis.setUpAudio = function(options) {\n\t\tif (!options) options = {};\n\t\tvar seq = sequence(this, options);\n\t\treturn flatten(seq, options, this.formatting.percmap, this.formatting.midi);\n\t};\n\tthis.deline = function(options) {\n\t\treturn delineTune(this.lines, options);\n\t}\n\tthis.findSelectableElement = function(target) {\n\t\tif (this.engraver && this.engraver.selectables)\n\t\t\treturn this.engraver.findSelectableElement(target)\n\t\treturn null\n\t}\n\tthis.getSelectableArray = function() {\n\t\tif (this.engraver && this.engraver.selectables)\n\t\t\treturn this.engraver.selectables\n\t\treturn []\n\t}\n};\n\nmodule.exports = Tune;\n","function delineTune(inputLines, options) {\n\tif (!options) options = {};\n\tvar lineBreaks = !!options.lineBreaks;\n\tvar outputLines = [];\n\tvar inMusicLine = false;\n\tvar currentMeter = [];\n\tvar currentKey = [];\n\tvar currentClef = [];\n\tvar currentVocalFont = [];\n\tvar currentGChordFont = [];\n\tvar currentTripletFont = [];\n\tvar currentAnnotationFont = [];\n\tfor (var i = 0; i < inputLines.length; i++) {\n\t\tvar inputLine = inputLines[i];\n\t\tif (inputLine.staff) {\n\t\t\tif (inMusicLine && !inputLine.vskip) {\n\t\t\t\tvar outputLine = outputLines[outputLines.length-1];\n\t\t\t\t//findMismatchKeys(inputLine, outputLine, [\"staff\", \"staffGroup\"], \"line\", i)\n\t\t\t\tfor (var s = 0; s < outputLine.staff.length; s++) {\n\t\t\t\t\tvar inputStaff = inputLine.staff[s];\n\t\t\t\t\tvar outputStaff = outputLine.staff[s];\n\t\t\t\t\tif (inputStaff) {\n\t\t\t\t\t\tif (!objEqual(inputStaff.meter, currentMeter[s])) {\n\t\t\t\t\t\t\t// The meter changed for this line, otherwise it wouldn't have been set\n\t\t\t\t\t\t\taddMeterToVoices(inputStaff.meter, inputStaff.voices)\n\t\t\t\t\t\t\tcurrentMeter[s] = inputStaff.meter;\n\t\t\t\t\t\t\tdelete inputStaff.meter;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!objEqual(inputStaff.key, currentKey[s])) {\n\t\t\t\t\t\t\taddKeyToVoices(inputStaff.key, inputStaff.voices);\n\t\t\t\t\t\t\tcurrentKey[s] = inputStaff.key;\n\t\t\t\t\t\t\tdelete inputStaff.key;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (inputStaff.title)\n\t\t\t\t\t\t\toutputStaff.abbrevTitle = inputStaff.title;\n\t\t\t\t\t\tif (!objEqual(inputStaff.clef, currentClef[s])) {\n\t\t\t\t\t\t\taddClefToVoices(inputStaff.clef, inputStaff.voices);\n\t\t\t\t\t\t\tcurrentClef[s] = inputStaff.clef;\n\t\t\t\t\t\t\tdelete inputStaff.clef;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!objEqual(inputStaff.vocalfont, currentVocalFont[s])) {\n\t\t\t\t\t\t\taddFontToVoices(inputStaff.vocalfont, inputStaff.voices, 'vocalfont')\n\t\t\t\t\t\t\tcurrentVocalFont[s] = inputStaff.vocalfont;\n\t\t\t\t\t\t\tdelete inputStaff.vocalfont;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!objEqual(inputStaff.gchordfont, currentGChordFont[s])) {\n\t\t\t\t\t\t\taddFontToVoices(inputStaff.gchordfont, inputStaff.voices, 'gchordfont')\n\t\t\t\t\t\t\tcurrentGChordFont[s] = inputStaff.gchordfont;\n\t\t\t\t\t\t\tdelete inputStaff.gchordfont;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!objEqual(inputStaff.tripletfont, currentTripletFont[s])) {\n\t\t\t\t\t\t\taddFontToVoices(inputStaff.tripletfont, inputStaff.voices, 'tripletfont')\n\t\t\t\t\t\t\tcurrentTripletFont[s] = inputStaff.tripletfont;\n\t\t\t\t\t\t\tdelete inputStaff.tripletfont;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!objEqual(inputStaff.annotationfont, currentAnnotationFont[s])) {\n\t\t\t\t\t\t\taddFontToVoices(inputStaff.annotationfont, inputStaff.voices, 'annotationfont')\n\t\t\t\t\t\t\tcurrentAnnotationFont[s] = inputStaff.annotationfont;\n\t\t\t\t\t\t\tdelete inputStaff.annotationfont;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//findMismatchKeys(inputStaff, outputStaff, [\"voices\", \"title\", \"abbrevTitle\", \"barNumber\", \"meter\", \"key\", \"clef\", \"vocalfont\", \"gchordfont\", \"tripletfont\", \"annotationfont\"], \"staff\", i + ' ' + s)\n\t\t\t\t\tif (inputStaff) {\n\t\t\t\t\t\tfor (var v = 0; v < outputStaff.voices.length; v++) {\n\t\t\t\t\t\t\tvar outputVoice = outputStaff.voices[v];\n\t\t\t\t\t\t\tvar inputVoice = inputStaff.voices[v];\n\t\t\t\t\t\t\tif (lineBreaks)\n\t\t\t\t\t\t\t\toutputVoice.push({el_type: \"break\"});\n\t\t\t\t\t\t\tif (inputVoice)\n\t\t\t\t\t\t\t\toutputStaff.voices[v] = outputVoice.concat(inputVoice)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (var ii = 0; ii < inputLine.staff.length; ii++) {\n\t\t\t\t\tcurrentKey[ii] = inputLine.staff[ii].key;\n\t\t\t\t\tcurrentMeter[ii] = inputLine.staff[ii].meter;\n\t\t\t\t\tcurrentClef[ii] = inputLine.staff[ii].clef;\n\t\t\t\t}\n\t\t\t\t// copy this because we are going to change it and we don't want to change the original.\n\t\t\t\toutputLines.push(cloneLine(inputLine));\n\t\t\t}\n\t\t\tinMusicLine = true;\n\t\t} else {\n\t\t\tinMusicLine = false;\n\t\t\toutputLines.push(inputLine);\n\t\t}\n\t}\n\treturn outputLines;\n}\n// function findMismatchKeys(input, output, ignore, context, context2) {\n// \tif (!input) {\n// \t\treturn;\n// \t}\n// \tvar outputKeys = Object.keys(output);\n// \tvar inputKeys = Object.keys(input);\n// \tfor (var ii = 0; ii < ignore.length; ii++) {\n// \t\tif (outputKeys.indexOf(ignore[ii]) >= 0) {\n// \t\t\toutputKeys.splice(outputKeys.indexOf(ignore[ii]), 1);\n// \t\t}\n// \t\tif (inputKeys.indexOf(ignore[ii]) >= 0) {\n// \t\t\tinputKeys.splice(inputKeys.indexOf(ignore[ii]), 1);\n// \t\t}\n// \t}\n// \tif (inputKeys.join(\",\") !== outputKeys.join(\",\")) {\n// \t\tconsole.log(\"keys mismatch \"+context + ' ' + context2, input, output);\n// \t}\n// \tfor (var k = 0; k < inputKeys.length; k++) {\n// \t\tvar key = inputKeys[k];\n// \t\tif (ignore.indexOf(key) < 0) {\n// \t\t\tvar inputValue = JSON.stringify(input[key], replacer);\n// \t\t\tvar outputValue = JSON.stringify(output[key], replacer);\n// \t\t\tif (inputValue !== outputValue)\n// \t\t\t\tconsole.log(\"value mismatch \"+context + ' ' + context2 + ' ' + key, inputValue, outputValue)\n// \t\t}\n// \t}\n// }\nfunction replacer(key, value) {\n\t// Filtering out properties\n\tif (key === 'abselem') {\n\t\treturn 'abselem';\n\t}\n\treturn value;\n}\n\nfunction addMeterToVoices(meter, voices) {\n\tmeter.el_type = \"meter\";\n\tmeter.startChar = -1;\n\tmeter.endChar = -1;\n\tfor (var i = 0; i < voices.length; i++) {\n\t\tvoices[i].unshift(meter);\n\t}\n}\n\nfunction addKeyToVoices(key, voices) {\n\tkey.el_type = \"key\";\n\tkey.startChar = -1;\n\tkey.endChar = -1;\n\tfor (var i = 0; i < voices.length; i++) {\n\t\tvoices[i].unshift(key);\n\t}\n}\n\nfunction addClefToVoices(clef, voices) {\n\tclef.el_type = \"clef\";\n\tclef.startChar = -1;\n\tclef.endChar = -1;\n\tfor (var i = 0; i < voices.length; i++) {\n\t\tvoices[i].unshift(clef);\n\t}\n}\n\nfunction addFontToVoices(font, voices, type) {\n\tfont.el_type = \"font\";\n\tfont.type = type;\n\tfont.startChar = -1;\n\tfont.endChar = -1;\n\tfor (var i = 0; i < voices.length; i++) {\n\t\tvoices[i].unshift(font);\n\t}\n}\n\nfunction objEqual(input, output) {\n\tif (!input)\n\t\treturn true; // the default is whatever the old output is.\n\tvar inputValue = JSON.stringify(input, replacer);\n\tvar outputValue = JSON.stringify(output, replacer);\n\treturn inputValue === outputValue;\n}\n\nfunction cloneLine(line) {\n\tvar output = {};\n\tvar keys = Object.keys(line);\n\tfor (var i = 0; i < keys.length; i++) {\n\t\tif (keys[i] !== \"staff\")\n\t\t\toutput[keys[i]] = line[keys[i]];\n\t\telse {\n\t\t\toutput.staff = [];\n\t\t\tfor (var j = 0; j < line.staff.length; j++) {\n\t\t\t\tvar staff = {};\n\t\t\t\tvar keys2 = Object.keys(line.staff[j]);\n\t\t\t\tfor (var k = 0; k < keys2.length; k++) {\n\t\t\t\t\tif (keys2[k] !== \"voices\")\n\t\t\t\t\t\tstaff[keys2[k]] = line.staff[j][keys2[k]];\n\t\t\t\t\telse {\n\t\t\t\t\t\tstaff.voices = [];\n\t\t\t\t\t\tfor (var v = 0; v < line.staff[j].voices.length; v++) {\n\t\t\t\t\t\t\tstaff.voices.push([].concat(line.staff[j].voices[v]));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\toutput.staff.push(staff)\n\t\t\t}\n\t\t}\n\t}\n\treturn output;\n}\n\nmodule.exports = delineTune;\n","// abc_editor.js\n\n// window.ABCJS.Editor is the interface class for the area that contains the ABC text. It is responsible for\n// holding the text of the tune and calling the parser and the rendering engines.\n//\n// EditArea is an example of using a textarea as the control that is shown to the user. As long as\n// the same interface is used, window.ABCJS.Editor can use a different type of object.\n//\n// EditArea:\n// - constructor(textareaid)\n//\t\tThis contains the id of a textarea control that will be used.\n// - addSelectionListener(listener)\n//\t\tA callback class that contains the entry point fireSelectionChanged()\n// - addChangeListener(listener)\n//\t\tA callback class that contains the entry point fireChanged()\n// - getSelection()\n//\t\treturns the object { start: , end: } with the current selection in characters\n// - setSelection(start, end)\n//\t\tstart and end are the character positions that should be selected.\n// - getString()\n//\t\treturns the ABC text that is currently displayed.\n// - setString(str)\n//\t\tsets the ABC text that is currently displayed, and resets the initialText variable\n// - getElem()\n//\t\treturns the textarea element\n// - string initialText\n//\t\tContains the starting text. This can be compared against the current text to see if anything changed.\n//\n\n// Polyfill for CustomEvent for old IE versions\ntry {\n\tif (typeof window.CustomEvent !== \"function\") {\n\t\tvar CustomEvent = function (event, params) {\n\t\t\tparams = params || {bubbles: false, cancelable: false, detail: undefined};\n\t\t\tvar evt = document.createEvent('CustomEvent');\n\t\t\tevt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n\t\t\treturn evt;\n\t\t};\n\t\tCustomEvent.prototype = window.Event.prototype;\n\t\twindow.CustomEvent = CustomEvent;\n\t}\n} catch (e) {\n\t// if we aren't in a browser, this code will crash, but it is not needed then either.\n}\n\nvar EditArea = function(textareaid) {\n if (typeof textareaid === \"string\")\n this.textarea = document.getElementById(textareaid);\n else\n this.textarea = textareaid;\n this.initialText = this.textarea.value;\n this.isDragging = false;\n}\n\nEditArea.prototype.addSelectionListener = function(listener) {\n this.textarea.onmousemove = function(ev) {\n\t if (this.isDragging)\n\t listener.fireSelectionChanged();\n };\n};\n\nEditArea.prototype.addChangeListener = function(listener) {\n this.changelistener = listener;\n this.textarea.onkeyup = function() {\n listener.fireChanged();\n };\n this.textarea.onmousedown = function() {\n\tthis.isDragging = true;\n listener.fireSelectionChanged();\n };\n this.textarea.onmouseup = function() {\n\tthis.isDragging = false;\n listener.fireChanged();\n };\n this.textarea.onchange = function() {\n listener.fireChanged();\n };\n};\n\n//TODO won't work under IE?\nEditArea.prototype.getSelection = function() {\n return {start: this.textarea.selectionStart, end: this.textarea.selectionEnd};\n};\n\nEditArea.prototype.setSelection = function(start, end) {\n\tif(this.textarea.setSelectionRange)\n\t this.textarea.setSelectionRange(start, end);\n\telse if(this.textarea.createTextRange) {\n\t\t// For IE8\n\t var e = this.textarea.createTextRange();\n\t e.collapse(true);\n\t e.moveEnd('character', end);\n\t e.moveStart('character', start);\n\t e.select();\n\t}\n this.textarea.focus();\n};\n\nEditArea.prototype.getString = function() {\n return this.textarea.value;\n};\n\nEditArea.prototype.setString = function(str) {\n this.textarea.value = str;\n this.initialText = this.getString();\n if (this.changelistener) {\n this.changelistener.fireChanged();\n }\n};\n\nEditArea.prototype.getElem = function() {\n return this.textarea;\n};\n\nmodule.exports = EditArea;\n","// window.ABCJS.Editor:\n//\n// constructor(editarea, params)\n//\t\tif editarea is a string, then it is an HTML id of a textarea control.\n//\t\tOtherwise, it should be an instantiation of an object that expresses the EditArea interface.\n//\n//\t\tparams is a hash of:\n//\t\tcanvas_id: or paper_id: HTML id to draw in. If not present, then the drawing happens just below the editor.\n//\t\tgenerate_midi: if present, then midi is generated.\n//\t\tmidi_id: if present, the HTML id to place the midi control. Otherwise it is placed in the same div as the paper.\n//\t\tmidi_download_id: if present, the HTML id to place the midi download link. Otherwise it is placed in the same div as the paper.\n//\t\tgenerate_warnings: if present, then parser warnings are displayed on the page.\n//\t\twarnings_id: if present, the HTML id to place the warnings. Otherwise they are placed in the same div as the paper.\n//\t\tonchange: if present, the callback function to call whenever there has been a change.\n//\t\tgui: if present, the paper can send changes back to the editor (presumably because the user changed something directly.)\n//\t\tparser_options: options to send to the parser engine.\n//\t\tmidi_options: options to send to the midi engine.\n//\t\trender_options: options to send to the render engine.\n//\t\tindicate_changed: the dirty flag is set if this is true.\n//\n// - setReadOnly(bool)\n//\t\tadds or removes the class abc_textarea_readonly, and adds or removes the attribute readonly=yes\n// - setDirtyStyle(bool)\n//\t\tadds or removes the class abc_textarea_dirty\n// - modelChanged()\n//\t\tCalled when the model has been changed to trigger re-rendering\n// - parseABC()\n//\t\tCalled internally by fireChanged()\n//\t\treturns true if there has been a change since last call.\n// - updateSelection()\n//\t\tCalled when the user has changed the selection. This calls the engraver to show the selection.\n// - fireSelectionChanged()\n//\t\tCalled by the textarea object when the user has changed the selection.\n// - paramChanged(engraverparams)\n//\t\tCalled to signal that the engraver params have changed, so re-rendering should occur.\n// - fireChanged()\n//\t\tCalled by the textarea object when the user has changed something.\n// - setNotDirty()\n//\t\tCalled by the client app to reset the dirty flag\n// - isDirty()\n//\t\tReturns true or false, whether the textarea contains the same text that it started with.\n// - highlight(abcelem)\n//\t\tCalled by the engraver to highlight an area.\n// - pause(bool)\n//\t\tStops the automatic rendering when the user is typing.\n//\nvar parseCommon = require('../parse/abc_common');\nvar SynthController = require('../synth/synth-controller');\nvar supportsAudio = require('../synth/supports-audio');\nvar renderAbc = require('../api/abc_tunebook_svg');\nvar EditArea = require('./abc_editarea');\n\nfunction gatherAbcParams(params) {\n\t// There used to be a bunch of ways parameters can be passed in. This just simplifies it.\n\tvar abcjsParams = {};\n\tvar key;\n\tif (params.abcjsParams) {\n\t\tfor (key in params.abcjsParams) {\n\t\t\tif (params.abcjsParams.hasOwnProperty(key)) {\n\t\t\t\tabcjsParams[key] = params.abcjsParams[key];\n\t\t\t}\n\t\t}\n\t}\n\tif (params.midi_options) {\n\t\tfor (key in params.midi_options) {\n\t\t\tif (params.midi_options.hasOwnProperty(key)) {\n\t\t\t\tabcjsParams[key] = params.midi_options[key];\n\t\t\t}\n\t\t}\n\t}\n\tif (params.parser_options) {\n\t\tfor (key in params.parser_options) {\n\t\t\tif (params.parser_options.hasOwnProperty(key)) {\n\t\t\t\tabcjsParams[key] = params.parser_options[key];\n\t\t\t}\n\t\t}\n\t}\n\tif (params.render_options) {\n\t\tfor (key in params.render_options) {\n\t\t\tif (params.render_options.hasOwnProperty(key)) {\n\t\t\t\tabcjsParams[key] = params.render_options[key];\n\t\t\t}\n\t\t}\n\t}\n\t/*\n\tif (params.tablature_options) {\n\t\tabcjsParams['tablatures'] = params.tablature_options;\n\t}\n\t*/\n\tif (abcjsParams.tablature) {\n\t\tif (params.warnings_id) {\n\t\t\t// store for plugin error handling\n\t\t\tabcjsParams.tablature.warnings_id = params.warnings_id;\n\t\t}\n\t}\n\treturn abcjsParams;\n}\n\nvar Editor = function(editarea, params) {\n\t// Copy all the options that will be passed through\n\tthis.abcjsParams = gatherAbcParams(params);\n\n\tif (params.indicate_changed)\n\t\tthis.indicate_changed = true;\n if (typeof editarea === \"string\") {\n this.editarea = new EditArea(editarea);\n } else {\n this.editarea = editarea;\n }\n this.editarea.addSelectionListener(this);\n this.editarea.addChangeListener(this);\n\n if (params.canvas_id) {\n this.div = params.canvas_id;\n } else if (params.paper_id) {\n this.div = params.paper_id;\n } else {\n this.div = document.createElement(\"DIV\");\n this.editarea.getElem().parentNode.insertBefore(this.div, this.editarea.getElem());\n }\n if (typeof this.div === 'string')\n\t this.div = document.getElementById(this.div);\n\n if (params.selectionChangeCallback) {\n \tthis.selectionChangeCallback = params.selectionChangeCallback;\n }\n\n this.clientClickListener = this.abcjsParams.clickListener;\n this.abcjsParams.clickListener = this.highlight.bind(this);\n\n if (params.synth) {\n \tif (supportsAudio()) {\n\t this.synth = {\n\t\t el: params.synth.el,\n\t\t cursorControl: params.synth.cursorControl,\n\t\t options: params.synth.options\n\t };\n }\n }\n\t// If the user wants midi, then store the elements that it will be written to. The element could either be passed in as an id,\n\t// an element, or nothing. If nothing is passed in, then just put the midi on top of the generated music.\n\tif (params.generate_midi) {\n\t \tthis.generate_midi = params.generate_midi;\n\t\tif (this.abcjsParams.generateDownload) {\n\t\t\tif (typeof params.midi_download_id === 'string')\n\t\t\t\tthis.downloadMidi = document.getElementById(params.midi_download_id);\n\t\t\telse if (params.midi_download_id) // assume, if the var is not a string it is an element. If not, it will crash soon enough.\n\t\t\t\tthis.downloadMidi = params.midi_download_id;\n\t\t}\n\t\tif (this.abcjsParams.generateInline !== false) { // The default for this is true, so undefined is also true.\n\t\t\tif (typeof params.midi_id === 'string')\n\t\t\t\tthis.inlineMidi = document.getElementById(params.midi_id);\n\t\t\telse if (params.midi_id) // assume, if the var is not a string it is an element. If not, it will crash soon enough.\n\t\t\t\tthis.inlineMidi = params.midi_id;\n\t\t}\n\t}\n\n if (params.warnings_id) {\n \tif (typeof(params.warnings_id) === \"string\")\n this.warningsdiv = document.getElementById(params.warnings_id);\n \telse\n\t\tthis.warningsdiv = params.warnings_id;\n } else if (params.generate_warnings) {\n\t this.warningsdiv = document.createElement(\"div\");\n\t this.div.parentNode.insertBefore(this.warningsdiv, this.div);\n }\n\n this.onchangeCallback = params.onchange;\n\n this.currentAbc = \"\";\n this.tunes = [];\n this.bReentry = false;\n this.parseABC();\n this.modelChanged();\n\n this.addClassName = function(element, className) {\n var hasClassName = function(element, className) {\n var elementClassName = element.className;\n return (elementClassName.length > 0 && (elementClassName === className ||\n new RegExp(\"(^|\\\\s)\" + className + \"(\\\\s|$)\").test(elementClassName)));\n };\n\n if (!hasClassName(element, className))\n element.className += (element.className ? ' ' : '') + className;\n return element;\n };\n\n this.removeClassName = function(element, className) {\n element.className = parseCommon.strip(element.className.replace(\n new RegExp(\"(^|\\\\s+)\" + className + \"(\\\\s+|$)\"), ' '));\n return element;\n };\n\n this.setReadOnly = function(readOnly) {\n\t var readonlyClass = 'abc_textarea_readonly';\n\t var el = this.editarea.getElem();\n if (readOnly) {\n el.setAttribute('readonly', 'yes');\n\t this.addClassName(el, readonlyClass);\n\t} else {\n el.removeAttribute('readonly');\n\t this.removeClassName(el, readonlyClass);\n }\n };\n};\n\nEditor.prototype.redrawMidi = function() {\n\tif (this.generate_midi && !this.midiPause) {\n\t\tvar event = new window.CustomEvent(\"generateMidi\", {\n\t\t\tdetail: {\n\t\t\t\ttunes: this.tunes,\n\t\t\t\tabcjsParams: this.abcjsParams,\n\t\t\t\tdownloadMidiEl: this.downloadMidi,\n\t\t\t\tinlineMidiEl: this.inlineMidi,\n\t\t\t\tengravingEl: this.div\n\t\t\t}\n\t\t});\n\t\twindow.dispatchEvent(event);\n\t}\n\tif (this.synth) {\n\t\tvar userAction = this.synth.synthControl; // Can't really tell if there was a user action before drawing, but we assume that if the synthControl was created already there was a user action.\n\t\tif (!this.synth.synthControl) {\n\t\t\tthis.synth.synthControl = new SynthController();\n\t\t\tthis.synth.synthControl.load(this.synth.el, this.synth.cursorControl, this.synth.options);\n\t\t}\n\t\tthis.synth.synthControl.setTune(this.tunes[0], userAction, this.synth.options);\n\t}\n};\n\nEditor.prototype.modelChanged = function() {\n if (this.bReentry)\n return; // TODO is this likely? maybe, if we rewrite abc immediately w/ abc2abc\n\tthis.bReentry = true;\n\ttry {\n\t\tthis.timerId = null;\n\t\tif (this.synth && this.synth.synthControl)\n\t\t\tthis.synth.synthControl.disable(true);\n\n\t\tthis.tunes = renderAbc(this.div, this.currentAbc, this.abcjsParams);\n\t\tif (this.tunes.length > 0) {\n\t\t\tthis.warnings = this.tunes[0].warnings;\n\t\t}\n\t\tthis.redrawMidi();\n\t} catch(error) {\n\t\tconsole.error(\"ABCJS error: \", error);\n\t\tif (!this.warnings)\n\t\t\tthis.warnings = [];\n\t\tthis.warnings.push(error.message);\n\t}\n\n if (this.warningsdiv) {\n this.warningsdiv.innerHTML = (this.warnings) ? this.warnings.join(\"
\") : \"No errors\";\n }\n this.updateSelection();\n this.bReentry = false;\n};\n\n// Call this to reparse in response to the client changing the parameters on the fly\nEditor.prototype.paramChanged = function(engraverParams) {\n\tif (engraverParams) {\n\t\tfor (var key in engraverParams) {\n\t\t\tif (engraverParams.hasOwnProperty(key)) {\n\t\t\t\tthis.abcjsParams[key] = engraverParams[key];\n\t\t\t}\n\t\t}\n\t}\n\tthis.currentAbc = \"\";\n\tthis.fireChanged();\n};\n\nEditor.prototype.synthParamChanged = function(options) {\n\tif (!this.synth)\n\t\treturn;\n\tthis.synth.options = {};\n\tif (options) {\n\t\tfor (var key in options) {\n\t\t\tif (options.hasOwnProperty(key)) {\n\t\t\t\tthis.synth.options[key] = options[key];\n\t\t\t}\n\t\t}\n\t}\n\tthis.currentAbc = \"\";\n\tthis.fireChanged();\n};\n\n// return true if the model has changed\nEditor.prototype.parseABC = function() {\n var t = this.editarea.getString();\n if (t===this.currentAbc) {\n this.updateSelection();\n return false;\n }\n\n this.currentAbc = t;\n return true;\n};\n\nEditor.prototype.updateSelection = function() {\n var selection = this.editarea.getSelection();\n try {\n \tif (this.tunes.length > 0 && this.tunes[0].engraver)\n\t this.tunes[0].engraver.rangeHighlight(selection.start, selection.end);\n } catch (e) {} // maybe printer isn't defined yet?\n\tif (this.selectionChangeCallback)\n\t\tthis.selectionChangeCallback(selection.start, selection.end);\n};\n\n// Called when the textarea's selection is in the process of changing (after mouse down, dragging, or keyboard arrows)\nEditor.prototype.fireSelectionChanged = function() {\n this.updateSelection();\n};\n\nEditor.prototype.setDirtyStyle = function(isDirty) {\n\tif (this.indicate_changed === undefined)\n\t\treturn;\n var addClassName = function(element, className) {\n var hasClassName = function(element, className) {\n var elementClassName = element.className;\n return (elementClassName.length > 0 && (elementClassName === className ||\n new RegExp(\"(^|\\\\s)\" + className + \"(\\\\s|$)\").test(elementClassName)));\n };\n\n if (!hasClassName(element, className))\n element.className += (element.className ? ' ' : '') + className;\n return element;\n };\n\n var removeClassName = function(element, className) {\n element.className = parseCommon.strip(element.className.replace(\n new RegExp(\"(^|\\\\s+)\" + className + \"(\\\\s+|$)\"), ' '));\n return element;\n };\n\n\tvar readonlyClass = 'abc_textarea_dirty';\n\tvar el = this.editarea.getElem();\n\tif (isDirty) {\n\t\taddClassName(el, readonlyClass);\n\t} else {\n\t\tremoveClassName(el, readonlyClass);\n }\n};\n\n// call when the textarea alerts us that the abc text is changed and needs re-parsing\nEditor.prototype.fireChanged = function() {\n if (this.bIsPaused)\n return;\n if (this.parseABC()) {\n var self = this;\n if (this.timerId)\t// If the user is still typing, cancel the update\n clearTimeout(this.timerId);\n this.timerId = setTimeout(function () {\n self.modelChanged();\n }, 300);\t// Is this a good compromise between responsiveness and not redrawing too much?\n\t var isDirty = this.isDirty();\n\t if (this.wasDirty !== isDirty) {\n\t\t this.wasDirty = isDirty;\n\t\t this.setDirtyStyle(isDirty);\n\t }\n\t if (this.onchangeCallback)\n\t\t this.onchangeCallback(this);\n\t }\n};\n\nEditor.prototype.setNotDirty = function() {\n\tthis.editarea.initialText = this.editarea.getString();\n\tthis.wasDirty = false;\n\tthis.setDirtyStyle(false);\n};\n\nEditor.prototype.isDirty = function() {\n\tif (this.indicate_changed === undefined)\n\t\treturn false;\n\treturn this.editarea.initialText !== this.editarea.getString();\n};\n\nEditor.prototype.highlight = function(abcelem, tuneNumber, classes, analysis, drag, mouseEvent) {\n\t// TODO-PER: The marker appears to get off by one for each tune parsed. I'm not sure why, but adding the tuneNumber in corrects it for the time being.\n//\tvar offset = (tuneNumber !== undefined) ? this.startPos[tuneNumber] + tuneNumber : 0;\n\n this.editarea.setSelection(abcelem.startChar, abcelem.endChar);\n\tif (this.selectionChangeCallback)\n\t\tthis.selectionChangeCallback(abcelem.startChar, abcelem.endChar);\n\tif (this.clientClickListener)\n\t\tthis.clientClickListener(abcelem, tuneNumber, classes, analysis, drag, mouseEvent);\n};\n\nEditor.prototype.pause = function(shouldPause) {\n\tthis.bIsPaused = shouldPause;\n\tif (!shouldPause)\n\t\tthis.fireChanged();\n};\n\nEditor.prototype.millisecondsPerMeasure = function() {\n\tif (!this.synth || !this.synth.synthControl || !this.synth.synthControl.visualObj)\n\t\treturn 0;\n\treturn this.synth.synthControl.visualObj.millisecondsPerMeasure();\n};\n\nEditor.prototype.pauseMidi = function(shouldPause) {\n\tthis.midiPause = shouldPause;\n\tif (!shouldPause)\n\t\tthis.redrawMidi();\n};\n\nmodule.exports = Editor;\n","// abc_midi_create.js: Turn a linear series of events into a midi file.\n\nvar rendererFactory = require('../synth/abc_midi_renderer');\n\nvar create;\n\n(function() {\n\t\"use strict\";\n\n\tvar baseDuration = 480*4; // nice and divisible, equals 1 whole note\n\n\tcreate = function(abcTune, options) {\n\t\tif (options === undefined) options = {};\n\t\tvar commands = abcTune.setUpAudio(options);\n\t\tvar midi = rendererFactory();\n\n\t\tvar title = abcTune.metaText ? abcTune.metaText.title : undefined;\n\t\tif (title && title.length > 128)\n\t\t\ttitle = title.substring(0,124) + '...';\n\t\tvar key = abcTune.getKeySignature();\n\t\tvar time = abcTune.getMeterFraction();\n\t\tvar beatsPerSecond = commands.tempo / 60;\n\t\t//var beatLength = abcTune.getBeatLength();\n\t\tmidi.setGlobalInfo(commands.tempo, title, key, time);\n\n\t\tfor (var i = 0; i < commands.tracks.length; i++) {\n\t\t\tmidi.startTrack();\n\t\t\tvar notePlacement = {};\n\t\t\tfor (var j = 0; j < commands.tracks[i].length; j++) {\n\t\t\t\tvar event = commands.tracks[i][j];\n\t\t\t\tswitch (event.cmd) {\n\t\t\t\t\tcase 'text':\n\t\t\t\t\t\tmidi.setText(event.type, event.text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'program':\n\t\t\t\t\t\tvar pan = 0;\n\t\t\t\t\t\tif (options.pan && options.pan.length > i)\n\t\t\t\t\t\t\tpan = options.pan[i];\n\t\t\t\t\t\tif (event.instrument === 128) {\n\t\t\t\t\t\t\t// If we're using the percussion voice, change to Channel 10\n\t\t\t\t\t\t\tmidi.setChannel(9, pan);\n\t\t\t\t\t\t\tmidi.setInstrument(0);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tmidi.setChannel(event.channel, pan);\n\t\t\t\t\t\t\tmidi.setInstrument(event.instrument);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'note':\n\t\t\t\t\t\tvar gapLengthInBeats = event.gap * beatsPerSecond;\n\t\t\t\t\t\tvar start = event.start;\n\t\t\t\t\t\t// The staccato and legato are indicated by event.gap.\n\t\t\t\t\t\t// event.gap is in seconds but the durations are in whole notes.\n\t\t\t\t\t\tvar end = start + event.duration - gapLengthInBeats;\n\t\t\t\t\t\tif (!notePlacement[start])\n\t\t\t\t\t\t\tnotePlacement[start] = [];\n\t\t\t\t\t\tnotePlacement[start].push({ pitch: event.pitch, volume: event.volume, cents: event.cents });\n\t\t\t\t\t\tif (!notePlacement[end])\n\t\t\t\t\t\t\tnotePlacement[end] = [];\n\t\t\t\t\t\tnotePlacement[end].push({ pitch: event.pitch, volume: 0 });\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.log(\"MIDI create Unknown: \" + event.cmd);\n\t\t\t\t}\n\t\t\t}\n\t\t\taddNotes(midi, notePlacement, baseDuration);\n\t\t\tmidi.endTrack();\n\t\t}\n\n\t\treturn midi.getData();\n\t};\n\n\tfunction addNotes(midi, notePlacement, baseDuration) {\n\t\tvar times = Object.keys(notePlacement);\n\t\tfor (var h = 0; h < times.length; h++)\n\t\t\ttimes[h] = parseFloat(times[h]);\n\t\ttimes.sort(function(a,b) {\n\t\t\treturn a - b;\n\t\t});\n\t\tvar lastTime = 0;\n\t\tfor (var i = 0; i < times.length; i++) {\n\t\t\tvar events = notePlacement[times[i]];\n\t\t\tif (times[i] > lastTime) {\n\t\t\t\tvar distance = (times[i] - lastTime) * baseDuration;\n\t\t\t\tmidi.addRest(distance);\n\t\t\t\tlastTime = times[i];\n\t\t\t}\n\t\t\tfor (var j = 0; j < events.length; j++) {\n\t\t\t\tvar event = events[j];\n\t\t\t\tif (event.volume) {\n\t\t\t\t\tmidi.startNote(event.pitch, event.volume, event.cents);\n\t\t\t\t} else {\n\t\t\t\t\tmidi.endNote(event.pitch);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n})();\n\nmodule.exports = create;\n","// abc_parse.js: parses a string representing ABC Music Notation into a usable internal structure.\n\nvar parseCommon = {};\n\nparseCommon.clone = function(source) {\n\tvar destination = {};\n\tfor (var property in source)\n\t\tif (source.hasOwnProperty(property))\n\t\t\tdestination[property] = source[property];\n\treturn destination;\n};\n\nparseCommon.cloneArray = function(source) {\n\tvar destination = [];\n\tfor (var i = 0; i < source.length; i++) {\n\t\tdestination.push(parseCommon.clone(source[i]));\n\t}\n\treturn destination;\n};\n\nparseCommon.cloneHashOfHash = function(source) {\n\tvar destination = {};\n\tfor (var property in source)\n\t\tif (source.hasOwnProperty(property))\n\t\t\tdestination[property] = parseCommon.clone(source[property]);\n\treturn destination;\n};\n\nparseCommon.cloneHashOfArrayOfHash = function(source) {\n\tvar destination = {};\n\tfor (var property in source)\n\t\tif (source.hasOwnProperty(property))\n\t\t\tdestination[property] = parseCommon.cloneArray(source[property]);\n\treturn destination;\n};\n\nparseCommon.strip = function(str) {\n\treturn str.replace(/^\\s+/, '').replace(/\\s+$/, '');\n};\n\nparseCommon.startsWith = function(str, pattern) {\n\treturn str.indexOf(pattern) === 0;\n};\n\nparseCommon.endsWith = function(str, pattern) {\n\tvar d = str.length - pattern.length;\n\treturn d >= 0 && str.lastIndexOf(pattern) === d;\n};\n\nparseCommon.last = function(arr) {\n\tif (arr.length === 0)\n\t\treturn null;\n\treturn arr[arr.length-1];\n};\n\n\nmodule.exports = parseCommon;\n","// abc_parse.js: parses a string representing ABC Music Notation into a usable internal structure.\n\nvar parseCommon = require('./abc_common');\nvar parseDirective = require('./abc_parse_directive');\nvar ParseHeader = require('./abc_parse_header');\nvar ParseMusic = require('./abc_parse_music');\nvar Tokenizer = require('./abc_tokenizer');\nvar wrap = require('./wrap_lines');\n\nvar Tune = require('../data/abc_tune');\nvar TuneBuilder = require('../parse/tune-builder');\n\nvar Parse = function() {\n\t\"use strict\";\n\tvar tune = new Tune();\n\tvar tuneBuilder = new TuneBuilder(tune);\n\tvar tokenizer;\n\tvar wordsContinuation = '';\n\tvar symbolContinuation = '';\n\n\tthis.getTune = function() {\n\t\tvar t = {\n\t\t\tformatting: tune.formatting,\n\t\t\tlines: tune.lines,\n\t\t\tmedia: tune.media,\n\t\t\tmetaText: tune.metaText,\n\t\t\tmetaTextInfo: tune.metaTextInfo,\n\t\t\tversion: tune.version,\n\n\t\t\taddElementToEvents: tune.addElementToEvents,\n\t\t\taddUsefulCallbackInfo: tune.addUsefulCallbackInfo,\n\t\t\tgetTotalTime: tune.getTotalTime,\n\t\t\tgetTotalBeats: tune.getTotalBeats,\n\t\t\tgetBarLength: tune.getBarLength,\n\t\t\tgetBeatLength: tune.getBeatLength,\n\t\t\tgetBeatsPerMeasure: tune.getBeatsPerMeasure,\n\t\t\tgetBpm: tune.getBpm,\n\t\t\tgetMeter: tune.getMeter,\n\t\t\tgetMeterFraction: tune.getMeterFraction,\n\t\t\tgetPickupLength: tune.getPickupLength,\n\t\t\tgetKeySignature: tune.getKeySignature,\n\t\t\tgetElementFromChar: tune.getElementFromChar,\n\t\t\tmakeVoicesArray: tune.makeVoicesArray,\n\t\t\tmillisecondsPerMeasure: tune.millisecondsPerMeasure,\n\t\t\tsetupEvents: tune.setupEvents,\n\t\t\tsetTiming: tune.setTiming,\n\t\t\tsetUpAudio: tune.setUpAudio,\n\t\t\tdeline: tune.deline,\n\t\t\tfindSelectableElement: tune.findSelectableElement,\n\t\t\tgetSelectableArray: tune.getSelectableArray,\n\t\t};\n\t\tif (tune.lineBreaks)\n\t\t\tt.lineBreaks = tune.lineBreaks;\n\t\tif (tune.visualTranspose)\n\t\t\tt.visualTranspose = tune.visualTranspose;\n\t\treturn t;\n\t};\n\n\tfunction addPositioning(el, type, value) {\n\t\tif (!el.positioning) el.positioning = {};\n\t\tel.positioning[type] = value;\n\t}\n\n\tfunction addFont(el, type, value) {\n\t\tif (!el.fonts) el.fonts = {};\n\t\tel.fonts[type] = value;\n\t}\n\n\tvar multilineVars = {\n\t\treset: function() {\n\t\t\tfor (var property in this) {\n\t\t\t\tif (this.hasOwnProperty(property) && typeof this[property] !== \"function\") {\n\t\t\t\t\tdelete this[property];\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.iChar = 0;\n\t\t\tthis.key = {accidentals: [], root: 'none', acc: '', mode: '' };\n\t\t\tthis.meter = null; // if no meter is specified, free meter is assumed\n\t\t\tthis.origMeter = null;\t// this is for new voices that are created after we set the meter.\n\t\t\tthis.hasMainTitle = false;\n\t\t\tthis.default_length = 0.125;\n\t\t\tthis.clef = { type: 'treble', verticalPos: 0 };\n\t\t\tthis.octave = 0;\n\t\t\tthis.next_note_duration = 0;\n\t\t\tthis.start_new_line = true;\n\t\t\tthis.is_in_header = true;\n\t\t\tthis.partForNextLine = {};\n\t\t\tthis.tempoForNextLine = [];\n\t\t\tthis.havent_set_length = true;\n\t\t\tthis.voices = {};\n\t\t\tthis.staves = [];\n\t\t\tthis.macros = {};\n\t\t\tthis.currBarNumber = 1;\n\t\t\tthis.barCounter = {};\n\t\t\tthis.ignoredDecorations = [];\n\t\t\tthis.score_is_present = false;\t// Can't have original V: lines when there is the score directive\n\t\t\tthis.inEnding = false;\n\t\t\tthis.inTie = [];\n\t\t\tthis.inTieChord = {};\n\t\t\tthis.vocalPosition = \"auto\";\n\t\t\tthis.dynamicPosition = \"auto\";\n\t\t\tthis.chordPosition = \"auto\";\n\t\t\tthis.ornamentPosition = \"auto\";\n\t\t\tthis.volumePosition = \"auto\";\n\t\t\tthis.openSlurs = [];\n\t\t\tthis.freegchord = false;\n\t\t\tthis.endingHoldOver = {};\n\t\t},\n\t\tdifferentFont: function(type, defaultFonts) {\n\t\t\tif (this[type].decoration !== defaultFonts[type].decoration) return true;\n\t\t\tif (this[type].face !== defaultFonts[type].face) return true;\n\t\t\tif (this[type].size !== defaultFonts[type].size) return true;\n\t\t\tif (this[type].style !== defaultFonts[type].style) return true;\n\t\t\tif (this[type].weight !== defaultFonts[type].weight) return true;\n\t\t\treturn false;\n\t\t},\n\t\taddFormattingOptions: function(el, defaultFonts, elType) {\n\t\t\tif (elType === 'note') {\n\t\t\t\tif (this.vocalPosition !== 'auto') addPositioning(el, 'vocalPosition', this.vocalPosition);\n\t\t\t\tif (this.dynamicPosition !== 'auto') addPositioning(el, 'dynamicPosition', this.dynamicPosition);\n\t\t\t\tif (this.chordPosition !== 'auto') addPositioning(el, 'chordPosition', this.chordPosition);\n\t\t\t\tif (this.ornamentPosition !== 'auto') addPositioning(el, 'ornamentPosition', this.ornamentPosition);\n\t\t\t\tif (this.volumePosition !== 'auto') addPositioning(el, 'volumePosition', this.volumePosition);\n\t\t\t\tif (this.differentFont(\"annotationfont\", defaultFonts)) addFont(el, 'annotationfont', this.annotationfont);\n\t\t\t\tif (this.differentFont(\"gchordfont\", defaultFonts)) addFont(el, 'gchordfont', this.gchordfont);\n\t\t\t\tif (this.differentFont(\"vocalfont\", defaultFonts)) addFont(el, 'vocalfont', this.vocalfont);\n\t\t\t\tif (this.differentFont(\"tripletfont\", defaultFonts)) addFont(el, 'tripletfont', this.tripletfont);\n\t\t\t} else if (elType === 'bar') {\n\t\t\t\tif (this.dynamicPosition !== 'auto') addPositioning(el, 'dynamicPosition', this.dynamicPosition);\n\t\t\t\tif (this.chordPosition !== 'auto') addPositioning(el, 'chordPosition', this.chordPosition);\n\t\t\t\tif (this.ornamentPosition !== 'auto') addPositioning(el, 'ornamentPosition', this.ornamentPosition);\n\t\t\t\tif (this.volumePosition !== 'auto') addPositioning(el, 'volumePosition', this.volumePosition);\n\t\t\t\tif (this.differentFont(\"measurefont\", defaultFonts)) addFont(el, 'measurefont', this.measurefont);\n\t\t\t\tif (this.differentFont(\"repeatfont\", defaultFonts)) addFont(el, 'repeatfont', this.repeatfont);\n\t\t\t}\n\t\t},\n\t\tduplicateStartEndingHoldOvers: function() {\n\t\t\tthis.endingHoldOver = {\n\t\t\t\tinTie: [],\n\t\t\t\tinTieChord: {}\n\t\t\t};\n\t\t\tfor (var i = 0; i < this.inTie.length; i++) {\n\t\t\t\tthis.endingHoldOver.inTie.push([]);\n\t\t\t\tif (this.inTie[i]) { // if a voice is suppressed there might be a gap in the array.\n\t\t\t\t\tfor (var j = 0; j < this.inTie[i].length; j++) {\n\t\t\t\t\t\tthis.endingHoldOver.inTie[i].push(this.inTie[i][j]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var key in this.inTieChord) {\n\t\t\t\tif (this.inTieChord.hasOwnProperty(key))\n\t\t\t\t\tthis.endingHoldOver.inTieChord[key] = this.inTieChord[key];\n\t\t\t}\n\t\t},\n\t\trestoreStartEndingHoldOvers: function() {\n\t\t\tif (!this.endingHoldOver.inTie)\n\t\t\t\treturn;\n\t\t\tthis.inTie = [];\n\t\t\tthis.inTieChord = {};\n\t\t\tfor (var i = 0; i < this.endingHoldOver.inTie.length; i++) {\n\t\t\t\tthis.inTie.push([]);\n\t\t\t\tfor (var j = 0; j < this.endingHoldOver.inTie[i].length; j++) {\n\t\t\t\t\tthis.inTie[i].push(this.endingHoldOver.inTie[i][j]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var key in this.endingHoldOver.inTieChord) {\n\t\t\t\tif (this.endingHoldOver.inTieChord.hasOwnProperty(key))\n\t\t\t\t\tthis.inTieChord[key] = this.endingHoldOver.inTieChord[key];\n\t\t\t}\n\t\t},\n\t};\n\n\tvar addWarning = function(str) {\n\t\tif (!multilineVars.warnings)\n\t\t\tmultilineVars.warnings = [];\n\t\tmultilineVars.warnings.push(str);\n\t};\n\n\tvar addWarningObject = function(warningObject) {\n\t\tif (!multilineVars.warningObjects)\n\t\t\tmultilineVars.warningObjects = [];\n\t\tmultilineVars.warningObjects.push(warningObject);\n\t};\n\n\tvar encode = function(str) {\n\t\tvar ret = str.replace(/\\x12/g, ' ');\n\t\tret = ret.replace(/&/g, '&');\n\t\tret = ret.replace(//g, '>');\n\t};\n\n\tvar warn = function(str, line, col_num) {\n\t\tif (!line) line = \" \";\n\t\tvar bad_char = line[col_num];\n\t\tif (bad_char === ' ' || !bad_char)\n\t\t\tbad_char = \"SPACE\";\n\t\tvar clean_line = encode(line.substring(col_num - 64, col_num)) + '' + bad_char + '' + encode(line.substring(col_num + 1).substring(0,64));\n\t\taddWarning(\"Music Line:\" + tokenizer.lineIndex + \":\" + (col_num+1) + ': ' + str + \": \" + clean_line);\n\t\taddWarningObject({message:str, line:line, startChar: multilineVars.iChar + col_num, column: col_num});\n\t};\n\n\tvar header;\n\tvar music;\n\n\tthis.getWarnings = function() {\n\t\treturn multilineVars.warnings;\n\t};\n\tthis.getWarningObjects = function() {\n\t\treturn multilineVars.warningObjects;\n\t};\n\n\tvar addWords = function(line, words) {\n\t\tif (words.indexOf('\\x12') >= 0) {\n\t\t\twordsContinuation += words\n\t\t\treturn\n\t\t}\n\t\twords = wordsContinuation + words\n\t\twordsContinuation = ''\n\n\t\tif (!line) { warn(\"Can't add words before the first line of music\", line, 0); return; }\n\t\twords = parseCommon.strip(words);\n\t\tif (words[words.length-1] !== '-')\n\t\t\twords = words + ' ';\t// Just makes it easier to parse below, since every word has a divider after it.\n\t\tvar word_list = [];\n\t\t// first make a list of words from the string we are passed. A word is divided on either a space or dash.\n\t\tvar last_divider = 0;\n\t\tvar replace = false;\n\t\tvar addWord = function(i) {\n\t\t\tvar word = parseCommon.strip(words.substring(last_divider, i));\n\t\t\tword = word.replace(/\\\\([-_*|~])/g, '$1')\n\t\t\tlast_divider = i+1;\n\t\t\tif (word.length > 0) {\n\t\t\t\tif (replace)\n\t\t\t\t\tword = word.replace(/~/g, ' ');\n\t\t\t\tvar div = words[i];\n\t\t\t\tif (div !== '_' && div !== '-')\n\t\t\t\t\tdiv = ' ';\n\t\t\t\tword_list.push({syllable: tokenizer.translateString(word), divider: div});\n\t\t\t\treplace = false;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t\tvar escNext = false;\n\t\tfor (var i = 0; i < words.length; i++) {\n\t\t\tswitch (words[i]) {\n\t\t\t\tcase ' ':\n\t\t\t\tcase '\\x12':\n\t\t\t\t\taddWord(i);\n\t\t\t\t\tbreak;\n\t\t\t\tcase '-':\n\t\t\t\t\tif (!escNext && !addWord(i) && word_list.length > 0) {\n\t\t\t\t\t\tparseCommon.last(word_list).divider = '-';\n\t\t\t\t\t\tword_list.push({skip: true, to: 'next'});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '_':\n\t\t\t\t\tif (!escNext) {\n\t\t\t\t\t\taddWord(i);\n\t\t\t\t\t\tword_list.push({skip: true, to: 'slur'});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '*':\n\t\t\t\t\tif (!escNext) {\n\t\t\t\t\t\taddWord(i);\n\t\t\t\t\t\tword_list.push({skip: true, to: 'next'});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '|':\n\t\t\t\t\tif (!escNext) {\n\t\t\t\t\t\taddWord(i);\n\t\t\t\t\t\tword_list.push({skip: true, to: 'bar'});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '~':\n\t\t\t\t\tif (!escNext) {\n\t\t\t\t\t\treplace = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tescNext = words[i] === '\\\\'\n\t\t}\n\n\t\tvar inSlur = false;\n\t\tline.forEach(function(el) {\n\t\t\tif (word_list.length !== 0) {\n\t\t\t\tif (word_list[0].skip) {\n\t\t\t\t\tswitch (word_list[0].to) {\n\t\t\t\t\t\tcase 'next': if (el.el_type === 'note' && el.pitches !== null && !inSlur) word_list.shift(); break;\n\t\t\t\t\t\tcase 'slur': if (el.el_type === 'note' && el.pitches !== null) word_list.shift(); break;\n\t\t\t\t\t\tcase 'bar': if (el.el_type === 'bar') word_list.shift(); break;\n\t\t\t\t\t}\n\t\t\t\t\tif (el.el_type !== 'bar') {\n\t\t\t\t\t\tif (el.lyric === undefined)\n\t\t\t\t\t\t\tel.lyric = [{syllable: \"\", divider: \" \"}];\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tel.lyric.push({syllable: \"\", divider: \" \"});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (el.el_type === 'note' && el.rest === undefined && !inSlur) {\n\t\t\t\t\t\tvar lyric = word_list.shift();\n\t\t\t\t\t\tif (lyric.syllable)\n\t\t\t\t\t\t\tlyric.syllable = lyric.syllable.replace(/ +/g,'\\xA0');\n\t\t\t\t\t\tif (el.lyric === undefined)\n\t\t\t\t\t\t\tel.lyric = [ lyric ];\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tel.lyric.push(lyric);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\n\tvar addSymbols = function(line, words) {\n\t\tif (words.indexOf('\\x12') >= 0) {\n\t\t\tsymbolContinuation += words\n\t\t\treturn\n\t\t}\n\t\twords = symbolContinuation + words\n\t\tsymbolContinuation = ''\n\n\t\t// TODO-PER: Currently copied from w: line. This needs to be read as symbols instead.\n\t\tif (!line) { warn(\"Can't add symbols before the first line of music\", line, 0); return; }\n\t\twords = parseCommon.strip(words);\n\t\tif (words[words.length-1] !== '-')\n\t\t\twords = words + ' ';\t// Just makes it easier to parse below, since every word has a divider after it.\n\t\tvar word_list = [];\n\t\t// first make a list of words from the string we are passed. A word is divided on either a space or dash.\n\t\tvar last_divider = 0;\n\t\tvar replace = false;\n\t\tvar addWord = function(i) {\n\t\t\tvar word = parseCommon.strip(words.substring(last_divider, i));\n\t\t\tlast_divider = i+1;\n\t\t\tif (word.length > 0) {\n\t\t\t\tif (replace)\n\t\t\t\t\tword = word.replace(/~/g, ' ');\n\t\t\t\tvar div = words[i];\n\t\t\t\tif (div !== '_' && div !== '-')\n\t\t\t\t\tdiv = ' ';\n\t\t\t\tword_list.push({syllable: tokenizer.translateString(word), divider: div});\n\t\t\t\treplace = false;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t\tfor (var i = 0; i < words.length; i++) {\n\t\t\tswitch (words[i]) {\n\t\t\t\tcase ' ':\n\t\t\t\tcase '\\x12':\n\t\t\t\t\taddWord(i);\n\t\t\t\t\tbreak;\n\t\t\t\tcase '-':\n\t\t\t\t\tif (!addWord(i) && word_list.length > 0) {\n\t\t\t\t\t\tparseCommon.last(word_list).divider = '-';\n\t\t\t\t\t\tword_list.push({skip: true, to: 'next'});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '_':\n\t\t\t\t\taddWord(i);\n\t\t\t\t\tword_list.push({skip: true, to: 'slur'});\n\t\t\t\t\tbreak;\n\t\t\t\tcase '*':\n\t\t\t\t\taddWord(i);\n\t\t\t\t\tword_list.push({skip: true, to: 'next'});\n\t\t\t\t\tbreak;\n\t\t\t\tcase '|':\n\t\t\t\t\taddWord(i);\n\t\t\t\t\tword_list.push({skip: true, to: 'bar'});\n\t\t\t\t\tbreak;\n\t\t\t\tcase '~':\n\t\t\t\t\treplace = true;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tvar inSlur = false;\n\t\tline.forEach(function(el) {\n\t\t\tif (word_list.length !== 0) {\n\t\t\t\tif (word_list[0].skip) {\n\t\t\t\t\tswitch (word_list[0].to) {\n\t\t\t\t\t\tcase 'next': if (el.el_type === 'note' && el.pitches !== null && !inSlur) word_list.shift(); break;\n\t\t\t\t\t\tcase 'slur': if (el.el_type === 'note' && el.pitches !== null) word_list.shift(); break;\n\t\t\t\t\t\tcase 'bar': if (el.el_type === 'bar') word_list.shift(); break;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (el.el_type === 'note' && el.rest === undefined && !inSlur) {\n\t\t\t\t\t\tvar lyric = word_list.shift();\n\t\t\t\t\t\tif (el.lyric === undefined)\n\t\t\t\t\t\t\tel.lyric = [ lyric ];\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tel.lyric.push(lyric);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\n\tvar parseLine = function(line) {\n\t\tif (parseCommon.startsWith(line, '%%')) {\n\t\t\tvar err = parseDirective.addDirective(line.substring(2));\n\t\t\tif (err) warn(err, line, 2);\n\t\t\treturn;\n\t\t}\n\n\t\tvar i = line.indexOf('%');\n\t\tif (i >= 0)\n\t\t\tline = line.substring(0, i);\n\t\tline = line.replace(/\\s+$/, '');\n\n\t\tif (line.length === 0)\n\t\t\treturn;\n\n\t\tif (wordsContinuation) {\n\t\t\taddWords(tuneBuilder.getCurrentVoice(), line.substring(2));\n\t\t\treturn\n\t\t}\n\t\tif (symbolContinuation) {\n\t\t\taddSymbols(tuneBuilder.getCurrentVoice(), line.substring(2));\n\t\t\treturn\n\t\t}\n\t\tif (line.length < 2 || line[1] !== ':' || music.lineContinuation) {\n\t\t\tmusic.parseMusic(line);\n\t\t\treturn\n\t\t}\n\n\t\tvar ret = header.parseHeader(line);\n\t\tif (ret.regular)\n\t\t\tmusic.parseMusic(line);\n\t\tif (ret.newline)\n\t\t\tmusic.startNewLine();\n\t\tif (ret.words)\n\t\t\taddWords(tuneBuilder.getCurrentVoice(), line.substring(2));\n\t\tif (ret.symbols)\n\t\t\taddSymbols(tuneBuilder.getCurrentVoice(), line.substring(2));\n\t};\n\n\tfunction appendLastMeasure(voice, nextVoice) {\n\t\tvoice.push({\n\t\t\tel_type: 'hint'\n\t\t});\n\t\tfor (var i = 0; i < nextVoice.length; i++) {\n\t\t\tvar element = nextVoice[i];\n\t\t\tvar hint = parseCommon.clone(element);\n\t\t\tvoice.push(hint);\n\t\t\tif (element.el_type === 'bar')\n\t\t\t\t\treturn;\n\t\t}\n\t}\n\n\tfunction addHintMeasure(staff, nextStaff) {\n\t\tfor (var i = 0; i < staff.length; i++) {\n\t\t\tvar stave = staff[i];\n\t\t\tvar nextStave = nextStaff[i];\n\t\t\tif (nextStave) { // Be sure there is the same number of staves on the next line.\n\t\t\t\tfor (var j = 0; j < nextStave.voices.length; j++) {\n\t\t\t\t\tvar nextVoice = nextStave.voices[j];\n\t\t\t\t\tvar voice = stave.voices[j];\n\t\t\t\t\tif (voice) { // Be sure there are the same number of voices on the previous line.\n\t\t\t\t\t\tappendLastMeasure(voice, nextVoice);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction addHintMeasures() {\n\t\tfor (var i = 0; i < tune.lines.length; i++) {\n\t\t\tvar line = tune.lines[i].staff;\n\t\t\tif (line) {\n\t\t\t\tvar j = i+1;\n\t\t\t\twhile (j < tune.lines.length && tune.lines[j].staff === undefined)\n\t\t\t\t\tj++;\n\t\t\t\tif (j < tune.lines.length) {\n\t\t\t\t\tvar nextLine = tune.lines[j].staff;\n\t\t\t\t\taddHintMeasure(line, nextLine);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tthis.parse = function(strTune, switches, startPos) {\n\t\t// the switches are optional and cause a difference in the way the tune is parsed.\n\t\t// switches.header_only : stop parsing when the header is finished\n\t\t// switches.stop_on_warning : stop at the first warning encountered.\n\t\t// switches.print: format for the page instead of the browser.\n\t\t// switches.format: a hash of the desired formatting commands.\n\t\t// switches.hint_measures: put the next measure at the end of the current line.\n\t\t// switches.transpose: change the key signature, chords, and notes by a number of half-steps.\n\t\tif (!switches) switches = {};\n\t\tif (!startPos) startPos = 0;\n\t\ttune.reset();\n\n\t\t// Take care of whatever line endings come our way\n\t\t// Tack on newline temporarily to make the last line continuation work\n\t\tstrTune = strTune.replace(/\\r\\n?/g, '\\n') + '\\n';\n\n\t\t// get rid of latex commands. If a line starts with a backslash, then it is replaced by spaces to keep the character count the same.\n\t\tvar arr = strTune.split(\"\\n\\\\\");\n\t\tif (arr.length > 1) {\n\t\t\tfor (var i2 = 1; i2 < arr.length; i2++) {\n\t\t\t\twhile (arr[i2].length > 0 && arr[i2][0] !== \"\\n\") {\n\t\t\t\t\tarr[i2] = arr[i2].substr(1);\n\t\t\t\t\tarr[i2-1] += ' ';\n\t\t\t\t}\n\t\t\t}\n\t\t\tstrTune = arr.join(\" \"); //. the split removed two characters, so this puts them back\n\t\t}\n\t\t// take care of line continuations right away, but keep the same number of characters\n\t\tstrTune = strTune.replace(/\\\\([ \\t]*)(%.*)*\\n/g, function(all, backslash, comment){\n\t\t\tvar padding = comment ? Array(comment.length +1).join(' ') : \"\";\n\t\t\treturn backslash + \"\\x12\" + padding + '\\n';\n\t\t});\n\t\tvar lines = strTune.split('\\n')\n\t\tif (parseCommon.last(lines).length === 0)\t// remove the blank line we added above.\n\t\t\tlines.pop();\n\t\ttokenizer = new Tokenizer(lines, multilineVars);\n\t\theader = new ParseHeader(tokenizer, warn, multilineVars, tune, tuneBuilder);\n\t\tmusic = new ParseMusic(tokenizer, warn, multilineVars, tune, tuneBuilder, header);\n\n\t\tif (switches.print)\n\t\t\ttune.media = 'print';\n\t\tmultilineVars.reset();\n\t\tmultilineVars.iChar = startPos;\n\t\tif (switches.visualTranspose) {\n\t\t\tmultilineVars.globalTranspose = parseInt(switches.visualTranspose);\n\t\t\tif (multilineVars.globalTranspose === 0)\n\t\t\t\tmultilineVars.globalTranspose = undefined;\n\t\t\telse\n\t\t\t\ttuneBuilder.setVisualTranspose(switches.visualTranspose);\n\t\t} else\n\t\t\tmultilineVars.globalTranspose = undefined;\n\t\tif (switches.lineBreaks) {\n\t\t\t// The line break numbers are 0-based and they reflect the last measure of the current line.\n\t\t\tmultilineVars.lineBreaks = switches.lineBreaks;\n\t\t\t//multilineVars.continueall = true;\n\t\t}\n\t\theader.reset(tokenizer, warn, multilineVars, tune);\n\n\t\ttry {\n\t\t\tif (switches.format) {\n\t\t\t\tparseDirective.globalFormatting(switches.format);\n\t\t\t}\n\t\t\tvar line = tokenizer.nextLine();\n\t\t\twhile (line) {\n\t\t\t\tif (switches.header_only && multilineVars.is_in_header === false)\n\t\t\t\t\tthrow \"normal_abort\";\n\t\t\t\tif (switches.stop_on_warning && multilineVars.warnings)\n\t\t\t\t\tthrow \"normal_abort\";\n\n\t\t\t\tvar wasInHeader = multilineVars.is_in_header;\n\t\t\t\tparseLine(line);\n\t\t\t\tif (wasInHeader && !multilineVars.is_in_header) {\n\t\t\t\t\ttuneBuilder.setRunningFont(\"annotationfont\", multilineVars.annotationfont);\n\t\t\t\t\ttuneBuilder.setRunningFont(\"gchordfont\", multilineVars.gchordfont);\n\t\t\t\t\ttuneBuilder.setRunningFont(\"tripletfont\", multilineVars.tripletfont);\n\t\t\t\t\ttuneBuilder.setRunningFont(\"vocalfont\", multilineVars.vocalfont);\n\t\t\t\t}\n\t\t\t\tline = tokenizer.nextLine();\n\t\t\t}\n\n\t\t\tif (wordsContinuation) {\n\t\t\t\taddWords(tuneBuilder.getCurrentVoice(), '');\n\t\t\t}\n\t\t\tif (symbolContinuation) {\n\t\t\t\taddSymbols(tuneBuilder.getCurrentVoice(), '');\n\t\t\t}\n\t\t\tmultilineVars.openSlurs = tuneBuilder.cleanUp(multilineVars.barsperstaff, multilineVars.staffnonote, multilineVars.openSlurs);\n\n\t\t} catch (err) {\n\t\t\tif (err !== \"normal_abort\")\n\t\t\t\tthrow err;\n\t\t}\n\n\t\tvar ph = 11*72;\n\t\tvar pl = 8.5*72;\n\t\tswitch (multilineVars.papersize) {\n\t\t\t//case \"letter\": ph = 11*72; pl = 8.5*72; break;\n\t\t\tcase \"legal\": ph = 14*72; pl = 8.5*72; break;\n\t\t\tcase \"A4\": ph = 11.7*72; pl = 8.3*72; break;\n\t\t}\n\t\tif (multilineVars.landscape) {\n\t\t\tvar x = ph;\n\t\t\tph = pl;\n\t\t\tpl = x;\n\t\t}\n\t\tif (!tune.formatting.pagewidth)\n\t\t\ttune.formatting.pagewidth = pl;\n\t\tif (!tune.formatting.pageheight)\n\t\t\ttune.formatting.pageheight = ph;\n\n\t\tif (switches.hint_measures) {\n\t\t\taddHintMeasures();\n\t\t}\n\n\t\twrap.wrapLines(tune, multilineVars.lineBreaks, multilineVars.barNumbers);\n\t};\n};\n\nmodule.exports = Parse;\n","// abc_parse_book.js: parses a string representing ABC Music Notation into a usable internal structure.\n\nvar parseCommon = require('./abc_common');\n\nvar bookParser = function(book) {\n\t\"use strict\";\n\n\tvar directives = \"\";\n\tvar initialWhiteSpace = book.match(/(\\s*)/)\n\tbook = parseCommon.strip(book);\n\tvar tuneStrings = book.split(\"\\nX:\");\n\t// Put back the X: that we lost when splitting the tunes.\n\tfor (var i = 1; i < tuneStrings.length; i++)\n\t\ttuneStrings[i] = \"X:\" + tuneStrings[i];\n\t// Keep track of the character position each tune starts with. If the string starts with white space, count that, too.\n\tvar pos = initialWhiteSpace ? initialWhiteSpace[0].length : 0;\n\tvar tunes = [];\n\ttuneStrings.forEach(function(tune) {\n\t\ttunes.push({ abc: tune, startPos: pos});\n\t\tpos += tune.length + 1; // We also lost a newline when splitting, so count that.\n\t});\n\tif (tunes.length > 1 && !parseCommon.startsWith(tunes[0].abc, 'X:')) {\t// If there is only one tune, the X: might be missing, otherwise assume the top of the file is \"intertune\"\n\t\t// There could be file-wide directives in this, if so, we need to insert it into each tune. We can probably get away with\n\t\t// just looking for file-wide directives here (before the first tune) and inserting them at the bottom of each tune, since\n\t\t// the tune is parsed all at once. The directives will be seen before the engraver begins processing.\n\t\tvar dir = tunes.shift();\n\t\tvar arrDir = dir.abc.split('\\n');\n\t\tarrDir.forEach(function(line) {\n\t\t\tif (parseCommon.startsWith(line, '%%'))\n\t\t\t\tdirectives += line + '\\n';\n\t\t});\n\t}\n\tvar header = directives;\n\n\t// Now, the tune ends at a blank line, so truncate it if needed. There may be \"intertune\" stuff.\n\ttunes.forEach(function(tune) {\n\t\tvar end = tune.abc.indexOf('\\n\\n');\n\t\tif (end > 0)\n\t\t\ttune.abc = tune.abc.substring(0, end);\n\t\ttune.pure = tune.abc;\n\t\ttune.abc = directives + tune.abc;\n\n\t\t// for the user's convenience, parse and store the title separately. The title is between the first T: and the next \\n\n\t\ttune.title = \"\";\n\t\tvar title = tune.pure.split(\"T:\");\n\t\tif (title.length > 1) {\n\t\t\ttitle = title[1].split(\"\\n\");\n\t\t\ttune.title = parseCommon.strip(title[0]);\n\t\t}\n\n\t\t// for the user's convenience, parse and store the id separately. The id is between the first X: and the next \\n\n\t\tvar id = tune.pure.substring(2, tune.pure.indexOf(\"\\n\"));\n\t\ttune.id = parseCommon.strip(id);\n\t});\n\n\treturn {\n\t\theader: header,\n\t\ttunes: tunes\n\t};\n};\n\nmodule.exports = bookParser;\n\n","var parseCommon = require('./abc_common');\n\nvar parseDirective = {};\n\n(function() {\n\t\"use strict\";\n\tvar tokenizer;\n\tvar warn;\n\tvar multilineVars;\n\tvar tune;\n\tvar tuneBuilder;\n\tparseDirective.initialize = function(tokenizer_, warn_, multilineVars_, tune_, tuneBuilder_) {\n\t\ttokenizer = tokenizer_;\n\t\twarn = warn_;\n\t\tmultilineVars = multilineVars_;\n\t\ttune = tune_;\n\t\ttuneBuilder = tuneBuilder_;\n\t\tinitializeFonts();\n\t};\n\n\tfunction initializeFonts() {\n\t\tmultilineVars.annotationfont = { face: \"Helvetica\", size: 12, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\tmultilineVars.gchordfont = { face: \"Helvetica\", size: 12, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\tmultilineVars.historyfont = { face: \"\\\"Times New Roman\\\"\", size: 16, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\tmultilineVars.infofont = { face: \"\\\"Times New Roman\\\"\", size: 14, weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\tmultilineVars.measurefont = { face: \"\\\"Times New Roman\\\"\", size: 14, weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\tmultilineVars.partsfont = { face: \"\\\"Times New Roman\\\"\", size: 15, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\tmultilineVars.repeatfont = { face: \"\\\"Times New Roman\\\"\", size: 13, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\tmultilineVars.textfont = { face: \"\\\"Times New Roman\\\"\", size: 16, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\tmultilineVars.tripletfont = {face: \"Times\", size: 11, weight: \"normal\", style: \"italic\", decoration: \"none\"};\n\t\tmultilineVars.vocalfont = { face: \"\\\"Times New Roman\\\"\", size: 13, weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\tmultilineVars.wordsfont = { face: \"\\\"Times New Roman\\\"\", size: 16, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\n\t\t// These fonts are global for the entire tune.\n\t\ttune.formatting.composerfont = { face: \"\\\"Times New Roman\\\"\", size: 14, weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\ttune.formatting.subtitlefont = { face: \"\\\"Times New Roman\\\"\", size: 16, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.tempofont = { face: \"\\\"Times New Roman\\\"\", size: 15, weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.titlefont = { face: \"\\\"Times New Roman\\\"\", size: 20, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.footerfont = { face: \"\\\"Times New Roman\\\"\", size: 12, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.headerfont = { face: \"\\\"Times New Roman\\\"\", size: 12, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.voicefont = { face: \"\\\"Times New Roman\\\"\", size: 13, weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.tablabelfont = { face: \"\\\"Trebuchet MS\\\"\", size: 16, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.tabnumberfont = { face: \"\\\"Arial\\\"\", size: 11, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.tabgracefont = { face: \"\\\"Arial\\\"\", size: 8, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\n\t\t// these are the default fonts for these element types. In the printer, these fonts might change as the tune progresses.\n\t\ttune.formatting.annotationfont = multilineVars.annotationfont;\n\t\ttune.formatting.gchordfont = multilineVars.gchordfont;\n\t\ttune.formatting.historyfont = multilineVars.historyfont;\n\t\ttune.formatting.infofont = multilineVars.infofont;\n\t\ttune.formatting.measurefont = multilineVars.measurefont;\n\t\ttune.formatting.partsfont = multilineVars.partsfont;\n\t\ttune.formatting.repeatfont = multilineVars.repeatfont;\n\t\ttune.formatting.textfont = multilineVars.textfont;\n\t\ttune.formatting.tripletfont = multilineVars.tripletfont;\n\t\ttune.formatting.vocalfont = multilineVars.vocalfont;\n\t\ttune.formatting.wordsfont = multilineVars.wordsfont;\n\t}\n\n\tvar fontTypeCanHaveBox = { gchordfont: true, measurefont: true, partsfont: true, annotationfont: true, composerfont: true, historyfont: true, infofont: true, subtitlefont: true, textfont: true, titlefont: true, voicefont: true };\n\n\tvar fontTranslation = function(fontFace) {\n\t\t// This translates Postscript fonts for a web alternative.\n\t\t// Note that the postscript fonts contain italic and bold info in them, so what is returned is a hash.\n\n\t\tswitch (fontFace) {\n\t\t\tcase \"Arial-Italic\":\n\t\t\t\treturn { face: \"Arial\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Arial-Bold\":\n\t\t\t\treturn { face: \"Arial\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Bookman-Demi\":\n\t\t\t\treturn { face: \"Bookman,serif\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Bookman-DemiItalic\":\n\t\t\t\treturn { face: \"Bookman,serif\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Bookman-Light\":\n\t\t\t\treturn { face: \"Bookman,serif\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Bookman-LightItalic\":\n\t\t\t\treturn { face: \"Bookman,serif\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Courier\":\n\t\t\t\treturn { face: \"\\\"Courier New\\\"\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Courier-Oblique\":\n\t\t\t\treturn { face: \"\\\"Courier New\\\"\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Courier-Bold\":\n\t\t\t\treturn { face: \"\\\"Courier New\\\"\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Courier-BoldOblique\":\n\t\t\t\treturn { face: \"\\\"Courier New\\\"\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"AvantGarde-Book\":\n\t\t\t\treturn { face: \"AvantGarde,Arial\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"AvantGarde-BookOblique\":\n\t\t\t\treturn { face: \"AvantGarde,Arial\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"AvantGarde-Demi\":\n\t\t\tcase \"Avant-Garde-Demi\":\n\t\t\t\treturn { face: \"AvantGarde,Arial\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"AvantGarde-DemiOblique\":\n\t\t\t\treturn { face: \"AvantGarde,Arial\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Helvetica-Oblique\":\n\t\t\t\treturn { face: \"Helvetica\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Helvetica-Bold\":\n\t\t\t\treturn { face: \"Helvetica\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Helvetica-BoldOblique\":\n\t\t\t\treturn { face: \"Helvetica\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Helvetica-Narrow\":\n\t\t\t\treturn { face: \"\\\"Helvetica Narrow\\\",Helvetica\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Helvetica-Narrow-Oblique\":\n\t\t\t\treturn { face: \"\\\"Helvetica Narrow\\\",Helvetica\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Helvetica-Narrow-Bold\":\n\t\t\t\treturn { face: \"\\\"Helvetica Narrow\\\",Helvetica\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Helvetica-Narrow-BoldOblique\":\n\t\t\t\treturn { face: \"\\\"Helvetica Narrow\\\",Helvetica\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Palatino-Roman\":\n\t\t\t\treturn { face: \"Palatino\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Palatino-Italic\":\n\t\t\t\treturn { face: \"Palatino\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Palatino-Bold\":\n\t\t\t\treturn { face: \"Palatino\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Palatino-BoldItalic\":\n\t\t\t\treturn { face: \"Palatino\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"NewCenturySchlbk-Roman\":\n\t\t\t\treturn { face: \"\\\"New Century\\\",serif\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"NewCenturySchlbk-Italic\":\n\t\t\t\treturn { face: \"\\\"New Century\\\",serif\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"NewCenturySchlbk-Bold\":\n\t\t\t\treturn { face: \"\\\"New Century\\\",serif\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"NewCenturySchlbk-BoldItalic\":\n\t\t\t\treturn { face: \"\\\"New Century\\\",serif\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Times\":\n\t\t\tcase \"Times-Roman\":\n\t\t\tcase \"Times-Narrow\":\n\t\t\tcase \"Times-Courier\":\n\t\t\tcase \"Times-New-Roman\":\n\t\t\t\treturn { face: \"\\\"Times New Roman\\\"\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Times-Italic\":\n\t\t\tcase \"Times-Italics\":\n\t\t\t\treturn { face: \"\\\"Times New Roman\\\"\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Times-Bold\":\n\t\t\t\treturn { face: \"\\\"Times New Roman\\\"\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Times-BoldItalic\":\n\t\t\t\treturn { face: \"\\\"Times New Roman\\\"\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"ZapfChancery-MediumItalic\":\n\t\t\t\treturn { face: \"\\\"Zapf Chancery\\\",cursive,serif\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tdefault:\n\t\t\t\treturn null;\n\t\t}\n\t};\n\n\tvar getFontParameter = function(tokens, currentSetting, str, position, cmd) {\n\t\t// Every font parameter has the following format:\n\t\t// \n\t\t// Where:\n\t\t// face: either a standard web font name, or a postscript font, enumerated in fontTranslation. This could also be an * or be missing if the face shouldn't change.\n\t\t// utf8: This is optional, and specifies utf8. That's all that is supported so the field is just silently ignored.\n\t\t// size: The size, in pixels. This may be omitted if the size is not changing.\n\t\t// modifiers: zero or more of \"bold\", \"italic\", \"underline\"\n\t\t// box: Only applies to the measure numbers, gchords, and the parts. If present, then a box is drawn around the characters.\n\t\t// If face is present, then all the modifiers are cleared. If face is absent, then the modifiers are illegal.\n\t\t// The face can be a single word, a set of words separated by hyphens, or a quoted string.\n\t\t//\n\t\t// So, in practicality, there are three types of font definitions: a number only, an asterisk and a number only, or the full definition (with an optional size).\n\t\tfunction processNumberOnly() {\n\t\t\tvar size = parseInt(tokens[0].token);\n\t\t\ttokens.shift();\n\t\t\tif (!currentSetting) {\n\t\t\t\twarn(\"Can't set just the size of the font since there is no default value.\", str, position);\n\t\t\t\treturn { face: \"\\\"Times New Roman\\\"\", weight: \"normal\", style: \"normal\", decoration: \"none\", size: size};\n\t\t\t}\n\t\t\tif (tokens.length === 0) {\n\t\t\t\treturn { face: currentSetting.face, weight: currentSetting.weight, style: currentSetting.style, decoration: currentSetting.decoration, size: size};\n\t\t\t}\n\t\t\tif (tokens.length === 1 && tokens[0].token === \"box\" && fontTypeCanHaveBox[cmd])\n\t\t\t\treturn { face: currentSetting.face, weight: currentSetting.weight, style: currentSetting.style, decoration: currentSetting.decoration, size: size, box: true};\n\t\t\twarn(\"Extra parameters in font definition.\", str, position);\n\t\t\treturn { face: currentSetting.face, weight: currentSetting.weight, style: currentSetting.style, decoration: currentSetting.decoration, size: size};\n\t\t}\n\n\t\t// format 1: asterisk and number only\n\t\tif (tokens[0].token === '*') {\n\t\t\ttokens.shift();\n\t\t\tif (tokens[0].type === 'number')\n\t\t\t\treturn processNumberOnly();\n\t\t\telse {\n\t\t\t\twarn(\"Expected font size number after *.\", str, position);\n\t\t\t}\n\t\t}\n\n\t\t// format 2: number only\n\t\tif (tokens[0].type === 'number') {\n\t\t\treturn processNumberOnly();\n\t\t}\n\n\t\t// format 3: whole definition\n\t\tvar face = [];\n\t\tvar size;\n\t\tvar weight = \"normal\";\n\t\tvar style = \"normal\";\n\t\tvar decoration = \"none\";\n\t\tvar box = false;\n\t\tvar state = 'face';\n\t\tvar hyphenLast = false;\n\t\twhile (tokens.length) {\n\t\t\tvar currToken = tokens.shift();\n\t\t\tvar word = currToken.token.toLowerCase();\n\t\t\tswitch (state) {\n\t\t\t\tcase 'face':\n\t\t\t\t\tif (hyphenLast || (word !== 'utf' && currToken.type !== 'number' && word !== \"bold\" && word !== \"italic\" && word !== \"underline\" && word !== \"box\")) {\n\t\t\t\t\t\tif (face.length > 0 && currToken.token === '-') {\n\t\t\t\t\t\t\thyphenLast = true;\n\t\t\t\t\t\t\tface[face.length-1] = face[face.length-1] + currToken.token;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif (hyphenLast) {\n\t\t\t\t\t\t\t\thyphenLast = false;\n\t\t\t\t\t\t\t\tface[face.length-1] = face[face.length-1] + currToken.token;\n\t\t\t\t\t\t\t} else\n\t\t\t\t\t\t\t\tface.push(currToken.token);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (currToken.type === 'number') {\n\t\t\t\t\t\t\tif (size) {\n\t\t\t\t\t\t\t\twarn(\"Font size specified twice in font definition.\", str, position);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsize = currToken.token;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstate = 'modifier';\n\t\t\t\t\t\t} else if (word === \"bold\")\n\t\t\t\t\t\t\tweight = \"bold\";\n\t\t\t\t\t\telse if (word === \"italic\")\n\t\t\t\t\t\t\tstyle = \"italic\";\n\t\t\t\t\t\telse if (word === \"underline\")\n\t\t\t\t\t\t\tdecoration = \"underline\";\n\t\t\t\t\t\telse if (word === \"box\") {\n\t\t\t\t\t\t\tif (fontTypeCanHaveBox[cmd])\n\t\t\t\t\t\t\t\tbox = true;\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\twarn(\"This font style doesn't support \\\"box\\\"\", str, position);\n\t\t\t\t\t\t\tstate = \"finished\";\n\t\t\t\t\t\t} else if (word === \"utf\") {\n\t\t\t\t\t\t\tcurrToken = tokens.shift(); // this gets rid of the \"8\" after \"utf\"\n\t\t\t\t\t\t\tstate = \"size\";\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\twarn(\"Unknown parameter \" + currToken.token + \" in font definition.\", str, position);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"size\":\n\t\t\t\t\tif (currToken.type === 'number') {\n\t\t\t\t\t\tif (size) {\n\t\t\t\t\t\t\twarn(\"Font size specified twice in font definition.\", str, position);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsize = currToken.token;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\twarn(\"Expected font size in font definition.\", str, position);\n\t\t\t\t\t}\n\t\t\t\t\tstate = 'modifier';\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"modifier\":\n\t\t\t\t\tif (word === \"bold\")\n\t\t\t\t\t\tweight = \"bold\";\n\t\t\t\t\telse if (word === \"italic\")\n\t\t\t\t\t\tstyle = \"italic\";\n\t\t\t\t\telse if (word === \"underline\")\n\t\t\t\t\t\tdecoration = \"underline\";\n\t\t\t\t\telse if (word === \"box\") {\n\t\t\t\t\t\tif (fontTypeCanHaveBox[cmd])\n\t\t\t\t\t\t\tbox = true;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\twarn(\"This font style doesn't support \\\"box\\\"\", str, position);\n\t\t\t\t\t\tstate = \"finished\";\n\t\t\t\t\t} else\n\t\t\t\t\t\twarn(\"Unknown parameter \" + currToken.token + \" in font definition.\", str, position);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"finished\":\n\t\t\t\t\twarn(\"Extra characters found after \\\"box\\\" in font definition.\", str, position);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (size === undefined) {\n\t\t\tif (!currentSetting) {\n\t\t\t\twarn(\"Must specify the size of the font since there is no default value.\", str, position);\n\t\t\t\tsize = 12;\n\t\t\t} else\n\t\t\t\tsize = currentSetting.size;\n\t\t} else\n\t\t\tsize = parseFloat(size);\n\n\t\tface = face.join(' ');\n\t\tif (face === '') {\n\t\t\tif (!currentSetting) {\n\t\t\t\twarn(\"Must specify the name of the font since there is no default value.\", str, position);\n\t\t\t\tface = \"sans-serif\";\n\t\t\t} else\n\t\t\t\tface = currentSetting.face;\n\t\t}\n\t\tvar psFont = fontTranslation(face);\n\t\tvar font = {};\n\t\tif (psFont) {\n\t\t\tfont.face = psFont.face;\n\t\t\tfont.weight = psFont.weight;\n\t\t\tfont.style = psFont.style;\n\t\t\tfont.decoration = psFont.decoration;\n\t\t\tfont.size = size;\n\t\t\tif (box)\n\t\t\t\tfont.box = true;\n\t\t\treturn font;\n\t\t}\n\t\tfont.face = face;\n\t\tfont.weight = weight;\n\t\tfont.style = style;\n\t\tfont.decoration = decoration;\n\t\tfont.size = size;\n\t\tif (box)\n\t\t\tfont.box = true;\n\t\treturn font;\n\t};\n\n\tvar getChangingFont = function(cmd, tokens, str) {\n\t\tif (tokens.length === 0)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires a font as a parameter.\";\n\t\tmultilineVars[cmd] = getFontParameter(tokens, multilineVars[cmd], str, 0, cmd);\n\t\tif (multilineVars.is_in_header) // If the font appears in the header, then it becomes the default font.\n\t\t\ttune.formatting[cmd] = multilineVars[cmd];\n\t\treturn null;\n\t};\n\tvar getGlobalFont = function(cmd, tokens, str) {\n\t\tif (tokens.length === 0)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires a font as a parameter.\";\n\t\ttune.formatting[cmd] = getFontParameter(tokens, tune.formatting[cmd], str, 0, cmd);\n\t\treturn null;\n\t};\n\n\tvar setScale = function(cmd, tokens) {\n\t\tvar scratch = \"\";\n\t\ttokens.forEach(function(tok) {\n\t\t\tscratch += tok.token;\n\t\t});\n\t\tvar num = parseFloat(scratch);\n\t\tif (isNaN(num) || num === 0)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires a number as a parameter.\";\n\t\ttune.formatting.scale = num;\n\n\t};\n\t// starts at 35\n\tvar drumNames = [\n\t\t\"acoustic-bass-drum\",\n\t\t\"bass-drum-1\",\n\t\t\"side-stick\",\n\t\t\"acoustic-snare\",\n\t\t\"hand-clap\",\n\t\t\"electric-snare\",\n\t\t\"low-floor-tom\",\n\t\t\"closed-hi-hat\",\n\t\t\"high-floor-tom\",\n\t\t\"pedal-hi-hat\",\n\t\t\"low-tom\",\n\t\t\"open-hi-hat\",\n\t\t\"low-mid-tom\",\n\t\t\"hi-mid-tom\",\n\t\t\"crash-cymbal-1\",\n\t\t\"high-tom\",\n\t\t\"ride-cymbal-1\",\n\t\t\"chinese-cymbal\",\n\t\t\"ride-bell\",\n\t\t\"tambourine\",\n\t\t\"splash-cymbal\",\n\t\t\"cowbell\",\n\t\t\"crash-cymbal-2\",\n\t\t\"vibraslap\",\n\t\t\"ride-cymbal-2\",\n\t\t\"hi-bongo\",\n\t\t\"low-bongo\",\n\t\t\"mute-hi-conga\",\n\t\t\"open-hi-conga\",\n\t\t\"low-conga\",\n\t\t\"high-timbale\",\n\t\t\"low-timbale\",\n\t\t\"high-agogo\",\n\t\t\"low-agogo\",\n\t\t\"cabasa\",\n\t\t\"maracas\",\n\t\t\"short-whistle\",\n\t\t\"long-whistle\",\n\t\t\"short-guiro\",\n\t\t\"long-guiro\",\n\t\t\"claves\",\n\t\t\"hi-wood-block\",\n\t\t\"low-wood-block\",\n\t\t\"mute-cuica\",\n\t\t\"open-cuica\",\n\t\t\"mute-triangle\",\n\t\t\"open-triangle\",\n\t];\n\n\tvar interpretPercMap = function(restOfString) {\n\t\tvar tokens = restOfString.split(/\\s+/); // Allow multiple spaces.\n\t\tif (tokens.length !== 2 && tokens.length !== 3)\n\t\t\treturn { error: 'Expected parameters \"abc-note\", \"drum-sound\", and optionally \"note-head\"'};\n\t\tvar key = tokens[0];\n\t\t// The percussion sound can either be a MIDI number or a drum name. If it is not a number then check for a name.\n\t\tvar pitch = parseInt(tokens[1], 10);\n\t\tif ((isNaN(pitch) || pitch < 35 || pitch > 81) && tokens[1]) {\n\t\t\tpitch = drumNames.indexOf(tokens[1].toLowerCase()) + 35;\n\t\t}\n\t\tif ((isNaN(pitch) || pitch < 35 || pitch > 81))\n\t\t\treturn { error: 'Expected drum name, received \"' + tokens[1] + '\"' };\n\t\tvar value = { sound: pitch };\n\t\tif (tokens.length === 3)\n\t\t\tvalue.noteHead = tokens[2];\n\t\treturn { key: key, value: value };\n\t};\n\n\tvar getRequiredMeasurement = function(cmd, tokens) {\n\t\tvar points = tokenizer.getMeasurement(tokens);\n\t\tif (points.used === 0 || tokens.length !== 0)\n\t\t\treturn { error: \"Directive \\\"\" + cmd + \"\\\" requires a measurement as a parameter.\"};\n\t\treturn points.value;\n\t};\n\tvar oneParameterMeasurement = function(cmd, tokens) {\n\t\tvar points = tokenizer.getMeasurement(tokens);\n\t\tif (points.used === 0 || tokens.length !== 0)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires a measurement as a parameter.\";\n\t\ttune.formatting[cmd] = points.value;\n\t\treturn null;\n\t};\n\n\tvar addMultilineVar = function(key, cmd, tokens, min, max) {\n\t\tif (tokens.length !== 1 || tokens[0].type !== 'number')\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires a number as a parameter.\";\n\t\tvar i = tokens[0].intt;\n\t\tif (min !== undefined && i < min)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires a number greater than or equal to \" + min + \" as a parameter.\";\n\t\tif (max !== undefined && i > max)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires a number less than or equal to \" + max + \" as a parameter.\";\n\t\tmultilineVars[key] = i;\n\t\treturn null;\n\t};\n\n\tvar addMultilineVarBool = function(key, cmd, tokens) {\n\t\tif (tokens.length === 1 && (tokens[0].token === 'true' || tokens[0].token === 'false')) {\n\t\t\tmultilineVars[key] = tokens[0].token === 'true';\n\t\t\treturn null;\n\t\t}\n\t\tvar str = addMultilineVar(key, cmd, tokens, 0, 1);\n\t\tif (str !== null) return str;\n\t\tmultilineVars[key] = (multilineVars[key] === 1);\n\t\treturn null;\n\t};\n\n\tvar addMultilineVarOneParamChoice = function(key, cmd, tokens, choices) {\n\t\tif (tokens.length !== 1)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires one of [ \" + choices.join(\", \") + \" ] as a parameter.\";\n\t\tvar choice = tokens[0].token;\n\t\tvar found = false;\n\t\tfor (var i = 0; !found && i < choices.length; i++) {\n\t\t\tif (choices[i] === choice)\n\t\t\t\tfound = true;\n\t\t}\n\t\tif (!found)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires one of [ \" + choices.join(\", \") + \" ] as a parameter.\";\n\t\tmultilineVars[key] = choice;\n\t\treturn null;\n\t};\n\n\tvar midiCmdParam0 = [\n\t\t\"nobarlines\",\n\t\t\"barlines\",\n\t\t\"beataccents\",\n\t\t\"nobeataccents\",\n\t\t\"droneon\",\n\t\t\"droneoff\",\n\t\t\"drumon\",\n\t\t\"drumoff\",\n\t\t\"fermatafixed\",\n\t\t\"fermataproportional\",\n\t\t\"gchordon\",\n\t\t\"gchordoff\",\n\t\t\"controlcombo\",\n\t\t\"temperamentnormal\",\n\t\t\"noportamento\"\n\t];\n\tvar midiCmdParam1String = [\n\t\t\"gchord\",\n\t\t\"ptstress\",\n\t\t\"beatstring\"\n\t];\n\tvar midiCmdParam1Integer = [\n\t\t\"bassvol\",\n\t\t\"chordvol\",\n\t\t\"bassprog\",\n\t\t\"chordprog\",\n\t\t\"c\",\n\t\t\"channel\",\n\t\t\"beatmod\",\n\t\t\"deltaloudness\",\n\t\t\"drumbars\",\n\t\t\"gracedivider\",\n\t\t\"makechordchannels\",\n\t\t\"randomchordattack\",\n\t\t\"chordattack\",\n\t\t\"stressmodel\",\n\t\t\"transpose\",\n\t\t\"rtranspose\",\n\t\t\"vol\",\n\t\t\"volinc\"\n\t];\n\tvar midiCmdParam1Integer1OptionalInteger = [\n\t\t\"program\"\n\t];\n\tvar midiCmdParam2Integer = [\n\t\t\"ratio\",\n\t\t\"snt\",\n\t\t\"bendvelocity\",\n\t\t\"pitchbend\",\n\t\t\"control\",\n\t\t\"temperamentlinear\"\n\t];\n\tvar midiCmdParam4Integer = [\n\t\t\"beat\"\n\t];\n\tvar midiCmdParam5Integer = [\n\t\t\"drone\"\n\t];\n\tvar midiCmdParam1String1Integer = [\n\t\t\"portamento\"\n\t];\n\tvar midiCmdParamFraction = [\n\t\t\"expand\",\n\t\t\"grace\",\n\t\t\"trim\"\n\t];\n\tvar midiCmdParam1StringVariableIntegers = [\n\t\t\"drum\",\n\t\t\"chordname\"\n\t];\n\n\tvar parseMidiCommand = function(midi, tune, restOfString) {\n\t\tvar midi_cmd = midi.shift().token;\n\t\tvar midi_params = [];\n\t\tif (midiCmdParam0.indexOf(midi_cmd) >= 0) {\n\t\t\t// NO PARAMETERS\n\t\t\tif (midi.length !== 0)\n\t\t\t\twarn(\"Unexpected parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t} else if (midiCmdParam1String.indexOf(midi_cmd) >= 0) {\n\t\t\t// ONE STRING PARAMETER\n\t\t\tif (midi.length !== 1)\n\t\t\t\twarn(\"Expected one parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse\n\t\t\t\tmidi_params.push(midi[0].token);\n\t\t} else if (midiCmdParam1Integer.indexOf(midi_cmd) >= 0) {\n\t\t\t// ONE INT PARAMETER\n\t\t\tif (midi.length !== 1)\n\t\t\t\twarn(\"Expected one parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"number\")\n\t\t\t\twarn(\"Expected one integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse\n\t\t\t\tmidi_params.push(midi[0].intt);\n\t\t} else if (midiCmdParam1Integer1OptionalInteger.indexOf(midi_cmd) >= 0) {\n\t\t\t// ONE INT PARAMETER, ONE OPTIONAL PARAMETER\n\t\t\tif (midi.length !== 1 && midi.length !== 2)\n\t\t\t\twarn(\"Expected one or two parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"number\")\n\t\t\t\twarn(\"Expected integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi.length === 2 && midi[1].type !== \"number\")\n\t\t\t\twarn(\"Expected integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse {\n\t\t\t\tmidi_params.push(midi[0].intt);\n\t\t\t\tif (midi.length === 2)\n\t\t\t\t\tmidi_params.push(midi[1].intt);\n\t\t\t}\n\t\t} else if (midiCmdParam2Integer.indexOf(midi_cmd) >= 0) {\n\t\t\t// TWO INT PARAMETERS\n\t\t\tif (midi.length !== 2)\n\t\t\t\twarn(\"Expected two parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"number\" || midi[1].type !== \"number\")\n\t\t\t\twarn(\"Expected two integer parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse {\n\t\t\t\tmidi_params.push(midi[0].intt);\n\t\t\t\tmidi_params.push(midi[1].intt);\n\t\t\t}\n\t\t} else if (midiCmdParam1String1Integer.indexOf(midi_cmd) >= 0) {\n\t\t\t// ONE STRING PARAMETER, ONE INT PARAMETER\n\t\t\tif (midi.length !== 2)\n\t\t\t\twarn(\"Expected two parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"alpha\" || midi[1].type !== \"number\")\n\t\t\t\twarn(\"Expected one string and one integer parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse {\n\t\t\t\tmidi_params.push(midi[0].token);\n\t\t\t\tmidi_params.push(midi[1].intt);\n\t\t\t}\n\t\t} else if (midi_cmd === 'drummap') {\n\t\t\t// BUILD AN OBJECT OF ABC NOTE => MIDI NOTE\n\t\t\tif (midi.length === 2 && midi[0].type === 'alpha' && midi[1].type === 'number') {\n\t\t\t\tif (!tune.formatting) tune.formatting = {};\n\t\t\t\tif (!tune.formatting.midi) tune.formatting.midi = {};\n\t\t\t\tif (!tune.formatting.midi.drummap) tune.formatting.midi.drummap = {};\n\t\t\t\ttune.formatting.midi.drummap[midi[0].token] = midi[1].intt;\n\t\t\t\tmidi_params = tune.formatting.midi.drummap;\n\t\t\t} else if (midi.length === 3 && midi[0].type === 'punct' && midi[1].type === 'alpha' && midi[2].type === 'number') {\n\t\t\t\tif (!tune.formatting) tune.formatting = {};\n\t\t\t\tif (!tune.formatting.midi) tune.formatting.midi = {};\n\t\t\t\tif (!tune.formatting.midi.drummap) tune.formatting.midi.drummap = {};\n\t\t\t\ttune.formatting.midi.drummap[midi[0].token+midi[1].token] = midi[2].intt;\n\t\t\t\tmidi_params = tune.formatting.midi.drummap;\n\t\t\t} else {\n\t\t\t\twarn(\"Expected one note name and one integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\t}\n\t\t} else if (midiCmdParamFraction.indexOf(midi_cmd) >= 0) {\n\t\t\t// ONE FRACTION PARAMETER\n\t\t\tif (midi.length !== 3)\n\t\t\t\twarn(\"Expected fraction parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"number\" || midi[1].token !== \"/\" || midi[2].type !== \"number\")\n\t\t\t\twarn(\"Expected fraction parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse {\n\t\t\t\tmidi_params.push(midi[0].intt);\n\t\t\t\tmidi_params.push(midi[2].intt);\n\t\t\t}\n\t\t} else if (midiCmdParam4Integer.indexOf(midi_cmd) >= 0) {\n\t\t\t// FOUR INT PARAMETERS\n\t\t\tif (midi.length !== 4)\n\t\t\t\twarn(\"Expected four parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"number\" || midi[1].type !== \"number\" || midi[2].type !== \"number\" || midi[3].type !== \"number\")\n\t\t\t\twarn(\"Expected four integer parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse {\n\t\t\t\tmidi_params.push(midi[0].intt);\n\t\t\t\tmidi_params.push(midi[1].intt);\n\t\t\t\tmidi_params.push(midi[2].intt);\n\t\t\t\tmidi_params.push(midi[3].intt);\n\t\t\t}\n\t\t} else if (midiCmdParam5Integer.indexOf(midi_cmd) >= 0) {\n\t\t\t// FIVE INT PARAMETERS\n\t\t\tif (midi.length !== 5)\n\t\t\t\twarn(\"Expected five parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"number\" || midi[1].type !== \"number\" || midi[2].type !== \"number\" || midi[3].type !== \"number\" || midi[4].type !== \"number\")\n\t\t\t\twarn(\"Expected five integer parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse {\n\t\t\t\tmidi_params.push(midi[0].intt);\n\t\t\t\tmidi_params.push(midi[1].intt);\n\t\t\t\tmidi_params.push(midi[2].intt);\n\t\t\t\tmidi_params.push(midi[3].intt);\n\t\t\t\tmidi_params.push(midi[4].intt);\n\t\t\t}\n\t\t} else if (midiCmdParam1Integer1OptionalInteger.indexOf(midi_cmd) >= 0) {\n\t\t\t// ONE INT PARAMETER, ONE OPTIONAL OCTAVE PARAMETER\n\t\t\tif (midi.length !== 1 || midi.length !== 4)\n\t\t\t\twarn(\"Expected one or two parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"number\")\n\t\t\t\twarn(\"Expected integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi.length === 4) {\n\t\t\t\tif (midi[1].token !== \"octave\")\n\t\t\t\t\twarn(\"Expected octave parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\t\tif (midi[2].token !== \"=\")\n\t\t\t\t\twarn(\"Expected octave parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\t\tif (midi[3].type !== \"number\")\n\t\t\t\t\twarn(\"Expected integer parameter for octave in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\t} else {\n\t\t\t\tmidi_params.push(midi[0].intt);\n\t\t\t\tif (midi.length === 4)\n\t\t\t\t\tmidi_params.push(midi[3].intt);\n\t\t\t}\n\t\t} else if (midiCmdParam1StringVariableIntegers.indexOf(midi_cmd) >= 0) {\n\t\t\t// ONE STRING, VARIABLE INT PARAMETERS\n\t\t\tif (midi.length < 2)\n\t\t\t\twarn(\"Expected string parameter and at least one integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"alpha\")\n\t\t\t\twarn(\"Expected string parameter and at least one integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse {\n\t\t\t\tvar p = midi.shift();\n\t\t\t\tmidi_params.push(p.token);\n\t\t\t\twhile (midi.length > 0) {\n\t\t\t\t\tp = midi.shift();\n\t\t\t\t\tif (p.type !== \"number\")\n\t\t\t\t\t\twarn(\"Expected integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\t\t\tmidi_params.push(p.intt);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (tuneBuilder.hasBeginMusic())\n\t\t\ttuneBuilder.appendElement('midi', -1, -1, { cmd: midi_cmd, params: midi_params });\n\t\telse {\n\t\t\tif (tune.formatting['midi'] === undefined)\n\t\t\t\ttune.formatting['midi'] = {};\n\t\t\ttune.formatting['midi'][midi_cmd] = midi_params;\n\t\t}\n\t};\n\n\tparseDirective.parseFontChangeLine = function(textstr) {\n\t\t// We don't want to match two dollar signs, so change those temporarily\n\t\ttextstr = textstr.replace(/\\$\\$/g,\"\\x03\")\n\t\tvar textParts = textstr.split('$');\n\t\tif (textParts.length > 1 && multilineVars.setfont) {\n\t\t\tvar textarr = [ ];\n\t\t\tif (textParts[0] !== '') // did the original string start with `$`?\n\t\t\t\ttextarr.push({ text: textParts[0] })\n\t\t\tfor (var i = 1; i < textParts.length; i++) {\n\t\t\t\tif (textParts[i][0] === '0')\n\t\t\t\t\ttextarr.push({ text: textParts[i].substring(1).replace(/\\x03/g,\"$$\") });\n\t\t\t\telse {\n\t\t\t\t\tvar whichFont = parseInt(textParts[i][0],10)\n\t\t\t\t\tif (multilineVars.setfont[whichFont])\n\t\t\t\t\t\ttextarr.push({font: multilineVars.setfont[whichFont], text: textParts[i].substring(1).replace(/\\x03/g,\"$$\") });\n\t\t\t\t\telse\n\t\t\t\t\t\ttextarr[textarr.length-1].text += '$' + textParts[i].replace(/\\x03/g,\"$$\");\n\t\t\t\t}\t\t\t\t\n\t\t\t}\n\t\t\treturn textarr;\n\t\t}\n\t\treturn textstr.replace(/\\x03/g,\"$$\");\n\t};\n\n\tvar positionChoices = [ 'auto', 'above', 'below', 'hidden' ];\n\tparseDirective.addDirective = function(str) {\n\t\tvar tokens = tokenizer.tokenize(str, 0, str.length);\t// 3 or more % in a row, or just spaces after %% is just a comment\n\t\tif (tokens.length === 0 || tokens[0].type !== 'alpha') return null;\n\t\tvar restOfString = str.substring(str.indexOf(tokens[0].token)+tokens[0].token.length);\n\t\trestOfString = tokenizer.stripComment(restOfString);\n\t\tvar cmd = tokens.shift().token.toLowerCase();\n\t\tvar scratch = \"\";\n\t\tvar line;\n\t\tswitch (cmd)\n\t\t{\n\t\t\t// The following directives were added to abc_parser_lint, but haven't been implemented here.\n\t\t\t// Most of them are direct translations from the directives that will be parsed in. See abcm2ps's format.txt for info on each of these.\n\t\t\t//\t\t\t\t\talignbars: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\taligncomposer: { type: \"string\", Enum: [ 'left', 'center','right' ], optional: true },\n\t\t\t//\t\t\t\t\tbstemdown: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\tcontinueall: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\tdynalign: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\texprabove: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\texprbelow: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\tgchordbox: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\tgracespacebefore: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tgracespaceinside: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tgracespaceafter: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tinfospace: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tlineskipfac: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tmaxshrink: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tmaxstaffsep: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tmaxsysstaffsep: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tnotespacingfactor: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tparskipfac: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tslurheight: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tsplittune: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\tsquarebreve: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\tstemheight: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tstraightflags: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\tstretchstaff: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\ttitleformat: { type: \"string\", optional: true },\n\t\t\tcase \"bagpipes\":tune.formatting.bagpipes = true;break;\n\t\t\tcase \"flatbeams\":tune.formatting.flatbeams = true;break;\n\t\t\tcase \"jazzchords\":tune.formatting.jazzchords = true;break;\n\t\t\tcase \"accentAbove\":tune.formatting.accentAbove = true;break;\n\t\t\tcase \"germanAlphabet\":tune.formatting.germanAlphabet = true;break;\n\t\t\tcase \"landscape\":multilineVars.landscape = true;break;\n\t\t\tcase \"papersize\":multilineVars.papersize = restOfString;break;\n\t\t\tcase \"graceslurs\":\n\t\t\t\tif (tokens.length !== 1)\n\t\t\t\t\treturn \"Directive graceslurs requires one parameter: 0 or 1\";\n\t\t\t\tif (tokens[0].token === '0' || tokens[0].token === 'false')\n\t\t\t\t\ttune.formatting.graceSlurs = false;\n\t\t\t\telse if (tokens[0].token === '1' || tokens[0].token === 'true')\n\t\t\t\t\ttune.formatting.graceSlurs = true;\n\t\t\t\telse\n\t\t\t\t\treturn \"Directive graceslurs requires one parameter: 0 or 1 (received \" + tokens[0].token + ')';\n\t\t\t\tbreak;\n\t\t\tcase \"lineThickness\":\n\t\t\t\tvar lt = parseStretchLast(tokens);\n\t\t\t\tif (lt.value !== undefined)\n\t\t\t\t\ttune.formatting.lineThickness = lt.value;\n\t\t\t\tif (lt.error)\n\t\t\t\t\treturn lt.error;\n\t\t\t\tbreak;\n\t\t\tcase \"stretchlast\":\n\t\t\t\tvar sl = parseStretchLast(tokens);\n\t\t\t\tif (sl.value !== undefined)\n\t\t\t\t\ttune.formatting.stretchlast = sl.value;\n\t\t\t\tif (sl.error)\n\t\t\t\t\treturn sl.error;\n\t\t\t\tbreak;\n\t\t\tcase \"titlecaps\":multilineVars.titlecaps = true;break;\n\t\t\tcase \"titleleft\":tune.formatting.titleleft = true;break;\n\t\t\tcase \"measurebox\":tune.formatting.measurebox = true;break;\n\n\t\t\tcase \"vocal\": return addMultilineVarOneParamChoice(\"vocalPosition\", cmd, tokens, positionChoices);\n\t\t\tcase \"dynamic\": return addMultilineVarOneParamChoice(\"dynamicPosition\", cmd, tokens, positionChoices);\n\t\t\tcase \"gchord\": return addMultilineVarOneParamChoice(\"chordPosition\", cmd, tokens, positionChoices);\n\t\t\tcase \"ornament\": return addMultilineVarOneParamChoice(\"ornamentPosition\", cmd, tokens, positionChoices);\n\t\t\tcase \"volume\": return addMultilineVarOneParamChoice(\"volumePosition\", cmd, tokens, positionChoices);\n\n\t\t\tcase \"botmargin\":\n\t\t\tcase \"botspace\":\n\t\t\tcase \"composerspace\":\n\t\t\tcase \"indent\":\n\t\t\tcase \"leftmargin\":\n\t\t\tcase \"linesep\":\n\t\t\tcase \"musicspace\":\n\t\t\tcase \"partsspace\":\n\t\t\tcase \"pageheight\":\n\t\t\tcase \"pagewidth\":\n\t\t\tcase \"rightmargin\":\n\t\t\tcase \"stafftopmargin\":\n\t\t\tcase \"staffsep\":\n\t\t\tcase \"staffwidth\":\n\t\t\tcase \"subtitlespace\":\n\t\t\tcase \"sysstaffsep\":\n\t\t\tcase \"systemsep\":\n\t\t\tcase \"textspace\":\n\t\t\tcase \"titlespace\":\n\t\t\tcase \"topmargin\":\n\t\t\tcase \"topspace\":\n\t\t\tcase \"vocalspace\":\n\t\t\tcase \"wordsspace\":\n\t\t\t\treturn oneParameterMeasurement(cmd, tokens);\n\t\t\tcase \"voicescale\":\n\t\t\t\tif (tokens.length !== 1 || tokens[0].type !== 'number')\n\t\t\t\t\treturn \"voicescale requires one float as a parameter\";\n\t\t\t\tvar voiceScale = tokens.shift();\n\t\t\t\tif (multilineVars.currentVoice) {\n\t\t\t\t\tmultilineVars.currentVoice.scale = voiceScale.floatt;\n\t\t\t\t\ttuneBuilder.changeVoiceScale(multilineVars.currentVoice.scale);\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\tcase \"voicecolor\":\n\t\t\t\tif (tokens.length !== 1) // this could either be of type alpha or quote, but it's ok if it is a number\n\t\t\t\t\treturn \"voicecolor requires one string as a parameter\";\n\t\t\t\tvar voiceColor = tokens.shift();\n\t\t\t\tif (multilineVars.currentVoice) {\n\t\t\t\t\tmultilineVars.currentVoice.color = voiceColor.token;\n\t\t\t\t\ttuneBuilder.changeVoiceColor(multilineVars.currentVoice.color);\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\tcase \"vskip\":\n\t\t\t\tvar vskip = Math.round(getRequiredMeasurement(cmd, tokens));\n\t\t\t\tif (vskip.error)\n\t\t\t\t\treturn vskip.error;\n\t\t\t\ttuneBuilder.addSpacing(vskip);\n\t\t\t\treturn null;\n\t\t\tcase \"scale\":\n\t\t\t\tsetScale(cmd, tokens);\n\t\t\t\tbreak;\n\t\t\tcase \"sep\":\n\t\t\t\tif (tokens.length === 0)\n\t\t\t\t\ttuneBuilder.addSeparator(14,14,85, { startChar: multilineVars.iChar, endChar: multilineVars.iChar+5}); // If no parameters are given, then there is a default size.\n\t\t\t\telse {\n\t\t\t\t\tvar points = tokenizer.getMeasurement(tokens);\n\t\t\t\t\tif (points.used === 0)\n\t\t\t\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires 3 numbers: space above, space below, length of line\";\n\t\t\t\t\tvar spaceAbove = points.value;\n\n\t\t\t\t\tpoints = tokenizer.getMeasurement(tokens);\n\t\t\t\t\tif (points.used === 0)\n\t\t\t\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires 3 numbers: space above, space below, length of line\";\n\t\t\t\t\tvar spaceBelow = points.value;\n\n\t\t\t\t\tpoints = tokenizer.getMeasurement(tokens);\n\t\t\t\t\tif (points.used === 0 || tokens.length !== 0)\n\t\t\t\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires 3 numbers: space above, space below, length of line\";\n\t\t\t\t\tvar lenLine = points.value;\n\t\t\t\t\ttuneBuilder.addSeparator(spaceAbove, spaceBelow, lenLine, { startChar: multilineVars.iChar, endChar: multilineVars.iChar+restOfString.length});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"barsperstaff\":\n\t\t\t\tscratch = addMultilineVar('barsperstaff', cmd, tokens);\n\t\t\t\tif (scratch !== null) return scratch;\n\t\t\t\tbreak;\n\t\t\tcase \"staffnonote\":\n\t\t\t\t// The sense of the boolean is opposite here. \"0\" means true.\n\t\t\t\tif (tokens.length !== 1)\n\t\t\t\t\treturn \"Directive staffnonote requires one parameter: 0 or 1\";\n\t\t\t\tif (tokens[0].token === '0')\n\t\t\t\t\tmultilineVars.staffnonote = true;\n\t\t\t\telse if (tokens[0].token === '1')\n\t\t\t\t\tmultilineVars.staffnonote = false;\n\t\t\t\telse\n\t\t\t\t\treturn \"Directive staffnonote requires one parameter: 0 or 1 (received \" + tokens[0].token + ')';\n\t\t\t\tbreak;\n\t\t\tcase \"printtempo\":\n\t\t\t\tscratch = addMultilineVarBool('printTempo', cmd, tokens);\n\t\t\t\tif (scratch !== null) return scratch;\n\t\t\t\tbreak;\n\t\t\tcase \"partsbox\":\n\t\t\t\tscratch = addMultilineVarBool('partsBox', cmd, tokens);\n\t\t\t\tif (scratch !== null) return scratch;\n\t\t\t\tmultilineVars.partsfont.box = multilineVars.partsBox;\n\t\t\t\tbreak;\n\t\t\tcase \"freegchord\":\n\t\t\t\tscratch = addMultilineVarBool('freegchord', cmd, tokens);\n\t\t\t\tif (scratch !== null) return scratch;\n\t\t\t\tbreak;\n\t\t\tcase \"measurenb\":\n\t\t\tcase \"barnumbers\":\n\t\t\t\tscratch = addMultilineVar('barNumbers', cmd, tokens);\n\t\t\t\tif (scratch !== null) return scratch;\n\t\t\t\tbreak;\n\t\t\tcase \"setbarnb\":\n\t\t\t\tif (tokens.length !== 1 || tokens[0].type !== 'number') {\n\t\t\t\t\treturn 'Directive setbarnb requires a number as a parameter.';\n\t\t\t\t}\n\t\t\t\tmultilineVars.currBarNumber = tuneBuilder.setBarNumberImmediate(tokens[0].intt);\n\t\t\t\tbreak;\n\t\t\tcase \"begintext\":\n\t\t\t\tvar textBlock = '';\n\t\t\t\tline = tokenizer.nextLine();\n\t\t\t\twhile(line && line.indexOf('%%endtext') !== 0) {\n\t\t\t\t\tif (parseCommon.startsWith(line, \"%%\"))\n\t\t\t\t\t\ttextBlock += line.substring(2) + \"\\n\";\n\t\t\t\t\telse\n\t\t\t\t\t\ttextBlock += line + \"\\n\";\n\t\t\t\t\tline = tokenizer.nextLine();\n\t\t\t\t}\n\t\t\t\ttuneBuilder.addText(textBlock, { startChar: multilineVars.iChar, endChar: multilineVars.iChar+textBlock.length+7});\n\t\t\t\tbreak;\n\t\t\tcase \"continueall\":\n\t\t\t\tmultilineVars.continueall = true;\n\t\t\t\tbreak;\n\t\t\tcase \"beginps\":\n\t\t\t\tline = tokenizer.nextLine();\n\t\t\t\twhile(line && line.indexOf('%%endps') !== 0) {\n\t\t\t\t\ttokenizer.nextLine();\n\t\t\t\t}\n\t\t\t\twarn(\"Postscript ignored\", str, 0);\n\t\t\t\tbreak;\n\t\t\tcase \"deco\":\n\t\t\t\tif (restOfString.length > 0)\n\t\t\t\t\tmultilineVars.ignoredDecorations.push(restOfString.substring(0, restOfString.indexOf(' ')));\n\t\t\t\twarn(\"Decoration redefinition ignored\", str, 0);\n\t\t\t\tbreak;\n\t\t\tcase \"text\":\n\t\t\t\tvar textstr = tokenizer.translateString(restOfString);\n\t\t\t\ttuneBuilder.addText(parseDirective.parseFontChangeLine(textstr), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+restOfString.length+7});\n\t\t\t\tbreak;\n\t\t\tcase \"center\":\n\t\t\t\tvar centerstr = tokenizer.translateString(restOfString);\n\t\t\t\ttuneBuilder.addCentered(parseDirective.parseFontChangeLine(centerstr));\n\t\t\t\tbreak;\n\t\t\tcase \"font\":\n\t\t\t\t// don't need to do anything for this; it is a useless directive\n\t\t\t\tbreak;\n\t\t\tcase \"setfont\":\n\t\t\t\tvar sfTokens = tokenizer.tokenize(restOfString, 0, restOfString.length);\n//\t\t\t\tvar sfDone = false;\n\t\t\t\tif (sfTokens.length >= 4) {\n\t\t\t\t\tif (sfTokens[0].token === '-' && sfTokens[1].type === 'number') {\n\t\t\t\t\t\tvar sfNum = parseInt(sfTokens[1].token);\n\t\t\t\t\t\tif (sfNum >= 1 && sfNum <= 9) {\n\t\t\t\t\t\t\tif (!multilineVars.setfont)\n\t\t\t\t\t\t\t\tmultilineVars.setfont = [];\n\t\t\t\t\t\t\tsfTokens.shift();\n\t\t\t\t\t\t\tsfTokens.shift();\n\t\t\t\t\t\t\tmultilineVars.setfont[sfNum] = getFontParameter(sfTokens, multilineVars.setfont[sfNum], str, 0, 'setfont');\n//\t\t\t\t\t\t\tvar sfSize = sfTokens.pop();\n//\t\t\t\t\t\t\tif (sfSize.type === 'number') {\n//\t\t\t\t\t\t\t\tsfSize = parseInt(sfSize.token);\n//\t\t\t\t\t\t\t\tvar sfFontName = '';\n//\t\t\t\t\t\t\t\tfor (var sfi = 2; sfi < sfTokens.length; sfi++)\n//\t\t\t\t\t\t\t\t\tsfFontName += sfTokens[sfi].token;\n//\t\t\t\t\t\t\t\tmultilineVars.setfont[sfNum] = { face: sfFontName, size: sfSize };\n//\t\t\t\t\t\t\t\tsfDone = true;\n//\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n//\t\t\t\tif (!sfDone)\n//\t\t\t\t\treturn \"Bad parameters: \" + cmd;\n\t\t\t\tbreak;\n\t\t\tcase \"gchordfont\":\n\t\t\tcase \"partsfont\":\n\t\t\tcase \"tripletfont\":\n\t\t\tcase \"vocalfont\":\n\t\t\tcase \"textfont\":\n\t\t\tcase \"annotationfont\":\n\t\t\tcase \"historyfont\":\n\t\t\tcase \"infofont\":\n\t\t\tcase \"measurefont\":\n\t\t\tcase \"repeatfont\":\n\t\t\tcase \"wordsfont\":\n\t\t\t\treturn getChangingFont(cmd, tokens, str);\n\t\t\tcase \"composerfont\":\n\t\t\tcase \"subtitlefont\":\n\t\t\tcase \"tempofont\":\n\t\t\tcase \"titlefont\":\n\t\t\tcase \"voicefont\":\n\t\t\tcase \"footerfont\":\n\t\t\tcase \"headerfont\":\n\t\t\t\treturn getGlobalFont(cmd, tokens, str);\n\t\t\tcase \"barlabelfont\":\n\t\t\tcase \"barnumberfont\":\n\t\t\tcase \"barnumfont\":\n\t\t\t\treturn getChangingFont(\"measurefont\", tokens, str);\n\t\t\tcase \"staves\":\n\t\t\tcase \"score\":\n\t\t\t\tmultilineVars.score_is_present = true;\n\t\t\t\tvar addVoice = function(id, newStaff, bracket, brace, continueBar) {\n\t\t\t\t\tif (newStaff || multilineVars.staves.length === 0) {\n\t\t\t\t\t\tmultilineVars.staves.push({index: multilineVars.staves.length, numVoices: 0});\n\t\t\t\t\t}\n\t\t\t\t\tvar staff = parseCommon.last(multilineVars.staves);\n\t\t\t\t\tif (bracket !== undefined && staff.bracket === undefined) staff.bracket = bracket;\n\t\t\t\t\tif (brace !== undefined && staff.brace === undefined) staff.brace = brace;\n\t\t\t\t\tif (continueBar) staff.connectBarLines = 'end';\n\t\t\t\t\tif (multilineVars.voices[id] === undefined) {\n\t\t\t\t\t\tmultilineVars.voices[id] = {staffNum: staff.index, index: staff.numVoices};\n\t\t\t\t\t\tstaff.numVoices++;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tvar openParen = false;\n\t\t\t\tvar openBracket = false;\n\t\t\t\tvar openBrace = false;\n\t\t\t\tvar justOpenParen = false;\n\t\t\t\tvar justOpenBracket = false;\n\t\t\t\tvar justOpenBrace = false;\n\t\t\t\tvar continueBar = false;\n\t\t\t\tvar lastVoice;\n\t\t\t\tvar addContinueBar = function() {\n\t\t\t\t\tcontinueBar = true;\n\t\t\t\t\tif (lastVoice) {\n\t\t\t\t\t\tvar ty = 'start';\n\t\t\t\t\t\tif (lastVoice.staffNum > 0) {\n\t\t\t\t\t\t\tif (multilineVars.staves[lastVoice.staffNum-1].connectBarLines === 'start' ||\n\t\t\t\t\t\t\t\tmultilineVars.staves[lastVoice.staffNum-1].connectBarLines === 'continue')\n\t\t\t\t\t\t\t\tty = 'continue';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmultilineVars.staves[lastVoice.staffNum].connectBarLines = ty;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\twhile (tokens.length) {\n\t\t\t\t\tvar t = tokens.shift();\n\t\t\t\t\tswitch (t.token) {\n\t\t\t\t\t\tcase '(':\n\t\t\t\t\t\t\tif (openParen) warn(\"Can't nest parenthesis in %%score\", str, t.start);\n\t\t\t\t\t\t\telse {openParen = true;justOpenParen = true;}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase ')':\n\t\t\t\t\t\t\tif (!openParen || justOpenParen) warn(\"Unexpected close parenthesis in %%score\", str, t.start);\n\t\t\t\t\t\t\telse openParen = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase '[':\n\t\t\t\t\t\t\tif (openBracket) warn(\"Can't nest brackets in %%score\", str, t.start);\n\t\t\t\t\t\t\telse {openBracket = true;justOpenBracket = true;}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase ']':\n\t\t\t\t\t\t\tif (!openBracket || justOpenBracket) warn(\"Unexpected close bracket in %%score\", str, t.start);\n\t\t\t\t\t\t\telse {openBracket = false;multilineVars.staves[lastVoice.staffNum].bracket = 'end';}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase '{':\n\t\t\t\t\t\t\tif (openBrace ) warn(\"Can't nest braces in %%score\", str, t.start);\n\t\t\t\t\t\t\telse {openBrace = true;justOpenBrace = true;}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase '}':\n\t\t\t\t\t\t\tif (!openBrace || justOpenBrace) warn(\"Unexpected close brace in %%score\", str, t.start);\n\t\t\t\t\t\t\telse {openBrace = false;multilineVars.staves[lastVoice.staffNum].brace = 'end';}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase '|':\n\t\t\t\t\t\t\taddContinueBar();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tvar vc = \"\";\n\t\t\t\t\t\t\twhile (t.type === 'alpha' || t.type === 'number') {\n\t\t\t\t\t\t\t\tvc += t.token;\n\t\t\t\t\t\t\t\tif (t.continueId)\n\t\t\t\t\t\t\t\t\tt = tokens.shift();\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvar newStaff = !openParen || justOpenParen;\n\t\t\t\t\t\t\tvar bracket = justOpenBracket ? 'start' : openBracket ? 'continue' : undefined;\n\t\t\t\t\t\t\tvar brace = justOpenBrace ? 'start' : openBrace ? 'continue' : undefined;\n\t\t\t\t\t\t\taddVoice(vc, newStaff, bracket, brace, continueBar);\n\t\t\t\t\t\t\tjustOpenParen = false;\n\t\t\t\t\t\t\tjustOpenBracket = false;\n\t\t\t\t\t\t\tjustOpenBrace = false;\n\t\t\t\t\t\t\tcontinueBar = false;\n\t\t\t\t\t\t\tlastVoice = multilineVars.voices[vc];\n\t\t\t\t\t\t\tif (cmd === 'staves')\n\t\t\t\t\t\t\t\taddContinueBar();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"newpage\":\n\t\t\t\tvar pgNum = tokenizer.getInt(restOfString);\n\t\t\t\ttuneBuilder.addNewPage(pgNum.digits === 0 ? -1 : pgNum.value);\n\t\t\t\tbreak;\n\n\t\t\tcase \"abc\":\n\t\t\t\tvar arr = restOfString.split(' ');\n\t\t\t\tswitch (arr[0]) {\n\t\t\t\t\tcase \"-copyright\":\n\t\t\t\t\tcase \"-creator\":\n\t\t\t\t\tcase \"-edited-by\":\n\t\t\t\t\tcase \"-version\":\n\t\t\t\t\tcase \"-charset\":\n\t\t\t\t\t\tvar subCmd = arr.shift();\n\t\t\t\t\t\ttuneBuilder.addMetaText(cmd+subCmd, arr.join(' '), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+restOfString.length+5});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn \"Unknown directive: \" + cmd+arr[0];\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"header\":\n\t\t\tcase \"footer\":\n\t\t\t\tvar footerStr = tokenizer.getMeat(restOfString, 0, restOfString.length);\n\t\t\t\tfooterStr = restOfString.substring(footerStr.start, footerStr.end);\n\t\t\t\tif (footerStr[0] === '\"' && footerStr[footerStr.length-1] === '\"' )\n\t\t\t\t\tfooterStr = footerStr.substring(1, footerStr.length-1);\n\t\t\t\tvar footerArr = footerStr.split('\\t');\n\t\t\t\tvar footer = {};\n\t\t\t\tif (footerArr.length === 1)\n\t\t\t\t\tfooter = { left: \"\", center: footerArr[0], right: \"\" };\n\t\t\t\telse if (footerArr.length === 2)\n\t\t\t\t\tfooter = { left: footerArr[0], center: footerArr[1], right: \"\" };\n\t\t\t\telse\n\t\t\t\t\tfooter = { left: footerArr[0], center: footerArr[1], right: footerArr[2] };\n\t\t\t\tif (footerArr.length > 3)\n\t\t\t\t\twarn(\"Too many tabs in \" + cmd + \": \" + footerArr.length + \" found.\", restOfString, 0);\n\n\t\t\t\ttuneBuilder.addMetaTextObj(cmd, footer, { startChar: multilineVars.iChar, endChar: multilineVars.iChar+str.length});\n\t\t\t\tbreak;\n\n\t\t\tcase \"midi\":\n\t\t\t\tvar midi = tokenizer.tokenize(restOfString, 0, restOfString.length, true);\n\t\t\t\tif (midi.length > 0 && midi[0].token === '=')\n\t\t\t\t\tmidi.shift();\n\t\t\t\tif (midi.length === 0)\n\t\t\t\t\twarn(\"Expected midi command\", restOfString, 0);\n\t\t\t\telse\n\t\t\t\t\tparseMidiCommand(midi, tune, restOfString);\n\t\t\t\tbreak;\n\t\t\tcase \"percmap\":\n\t\t\t\tvar percmap = interpretPercMap(restOfString);\n\t\t\t\tif (percmap.error)\n\t\t\t\t\twarn(percmap.error, str, 8);\n\t\t\t\telse {\n\t\t\t\t\tif (!tune.formatting.percmap)\n\t\t\t\t\t\ttune.formatting.percmap = {};\n\t\t\t\t\ttune.formatting.percmap[percmap.key] = percmap.value;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"map\":\n\t\t\tcase \"playtempo\":\n\t\t\tcase \"auquality\":\n\t\t\tcase \"continuous\":\n\t\t\tcase \"nobarcheck\":\n\t\t\t\t// TODO-PER: Actually handle the parameters of these\n\t\t\t\ttune.formatting[cmd] = restOfString;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn \"Unknown directive: \" + cmd;\n\t\t}\n\t\treturn null;\n\t};\n\tparseDirective.globalFormatting = function(formatHash) {\n\t\tfor (var cmd in formatHash) {\n\t\t\tif (formatHash.hasOwnProperty(cmd)) {\n\t\t\t\tvar value = ''+formatHash[cmd];\n\t\t\t\tvar tokens = tokenizer.tokenize(value, 0, value.length);\n\t\t\t\tvar scratch;\n\t\t\t\tswitch (cmd) {\n\t\t\t\t\tcase \"titlefont\":\n\t\t\t\t\tcase \"gchordfont\":\n\t\t\t\t\tcase \"composerfont\":\n\t\t\t\t\tcase \"footerfont\":\n\t\t\t\t\tcase \"headerfont\":\n\t\t\t\t\tcase \"historyfont\":\n\t\t\t\t\tcase \"infofont\":\n\t\t\t\t\tcase \"measurefont\":\n\t\t\t\t\tcase \"partsfont\":\n\t\t\t\t\tcase \"repeatfont\":\n\t\t\t\t\tcase \"subtitlefont\":\n\t\t\t\t\tcase \"tempofont\":\n\t\t\t\t\tcase \"textfont\":\n\t\t\t\t\tcase \"voicefont\":\n\t\t\t\t\tcase \"tripletfont\":\n\t\t\t\t\tcase \"vocalfont\":\n\t\t\t\t\tcase \"wordsfont\":\n\t\t\t\t\tcase \"annotationfont\":\n\t\t\t\t\tcase \"tablabelfont\":\n\t\t\t\t\tcase \"tabnumberfont\":\n\t\t\t\t\tcase \"tabgracefont\":\n\t\t\t\t\t\tgetChangingFont(cmd, tokens, value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"scale\":\n\t\t\t\t\t\tsetScale(cmd, tokens);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"partsbox\":\n\t\t\t\t\t\tscratch = addMultilineVarBool('partsBox', cmd, tokens);\n\t\t\t\t\t\tif (scratch !== null) warn(scratch);\n\t\t\t\t\t\tmultilineVars.partsfont.box = multilineVars.partsBox;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"freegchord\":\n\t\t\t\t\t\tscratch = addMultilineVarBool('freegchord', cmd, tokens);\n\t\t\t\t\t\tif (scratch !== null) warn(scratch);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"fontboxpadding\":\n\t\t\t\t\t\tif (tokens.length !== 1 || tokens[0].type !== 'number')\n\t\t\t\t\t\t\twarn(\"Directive \\\"\" + cmd + \"\\\" requires a number as a parameter.\");\n\t\t\t\t\t\ttune.formatting.fontboxpadding = tokens[0].floatt;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"stafftopmargin\":\n\t\t\t\t\t\tif (tokens.length !== 1 || tokens[0].type !== 'number')\n\t\t\t\t\t\t\twarn(\"Directive \\\"\" + cmd + \"\\\" requires a number as a parameter.\");\n\t\t\t\t\t\ttune.formatting.stafftopmargin = tokens[0].floatt;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"stretchlast\":\n\t\t\t\t\t\tvar sl = parseStretchLast(tokens);\n\t\t\t\t\t\tif (sl.value !== undefined)\n\t\t\t\t\t\t\ttune.formatting.stretchlast = sl.value;\n\t\t\t\t\t\tif (sl.error)\n\t\t\t\t\t\t\treturn sl.error;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\twarn(\"Formatting directive unrecognized: \", cmd, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tfunction parseStretchLast(tokens) {\n\t\tif (tokens.length === 0)\n\t\t\treturn { value: 1 }; // if there is no value then the presence of this is the same as \"true\"\n\t\telse if (tokens.length === 1) {\n\t\t\tif (tokens[0].type === \"number\") {\n\t\t\t\tif (tokens[0].floatt >= 0 || tokens[0].floatt <= 1)\n\t\t\t\t\treturn {value: tokens[0].floatt};\n\t\t\t} else if (tokens[0].token === 'false') {\n\t\t\t\treturn { value: 0 };\n\t\t\t} else if (tokens[0].token === 'true') {\n\t\t\t\treturn {value: 1};\n\t\t\t}\n\t\t}\n\t\treturn { error: \"Directive stretchlast requires zero or one parameter: false, true, or number between 0 and 1 (received \" + tokens[0].token + ')' };\n\t}\n})();\n\nmodule.exports = parseDirective;\n","// abc_parse_header.js: parses a the header fields from a string representing ABC Music Notation into a usable internal structure.\n\nvar parseCommon = require('./abc_common');\nvar parseDirective = require('./abc_parse_directive');\nvar parseKeyVoice = require('./abc_parse_key_voice');\n\nvar ParseHeader = function(tokenizer, warn, multilineVars, tune, tuneBuilder) {\n\tthis.reset = function(tokenizer, warn, multilineVars, tune) {\n\t\tparseKeyVoice.initialize(tokenizer, warn, multilineVars, tune, tuneBuilder);\n\t\tparseDirective.initialize(tokenizer, warn, multilineVars, tune, tuneBuilder);\n\t};\n\tthis.reset(tokenizer, warn, multilineVars, tune);\n\n\tthis.setTitle = function(title, origSize) {\n\t\tif (multilineVars.hasMainTitle)\n\t\t\ttuneBuilder.addSubtitle(title, { startChar: multilineVars.iChar, endChar: multilineVars.iChar+origSize+2});\t// display secondary title\n\t\telse\n\t\t{\n\t\t\ttuneBuilder.addMetaText(\"title\", title, { startChar: multilineVars.iChar, endChar: multilineVars.iChar+origSize+2});\n\t\t\tmultilineVars.hasMainTitle = true;\n\t\t}\n\t};\n\n\tthis.setMeter = function(line) {\n\t\tline = tokenizer.stripComment(line);\n\t\tif (line === 'C') {\n\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\tmultilineVars.default_length = 0.125;\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t\treturn {type: 'common_time'};\n\t\t} else if (line === 'C|') {\n\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\tmultilineVars.default_length = 0.125;\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t\treturn {type: 'cut_time'};\n\t\t} else if (line === 'o') {\n\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\tmultilineVars.default_length = 0.125;\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t\treturn {type: 'tempus_perfectum'};\n\t\t} else if (line === 'c') {\n\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\tmultilineVars.default_length = 0.125;\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t\treturn {type: 'tempus_imperfectum'};\n\t\t} else if (line === 'o.') {\n\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\tmultilineVars.default_length = 0.125;\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t\treturn {type: 'tempus_perfectum_prolatio'};\n\t\t} else if (line === 'c.') {\n\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\tmultilineVars.default_length = 0.125;\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t\treturn {type: 'tempus_imperfectum_prolatio'};\n\t\t} else if (line.length === 0 || line.toLowerCase() === 'none') {\n\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\tmultilineVars.default_length = 0.125;\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar tokens = tokenizer.tokenize(line, 0, line.length);\n\t\t\t// the form is [open_paren] decimal [ plus|dot decimal ]... [close_paren] slash decimal [plus same_as_before]\n\t\t\ttry {\n\t\t\t\tvar parseNum = function() {\n\t\t\t\t\t// handles this much: [open_paren] decimal [ plus|dot decimal ]... [close_paren]\n\t\t\t\t\tvar ret = {value: 0, num: \"\"};\n\n\t\t\t\t\tvar tok = tokens.shift();\n\t\t\t\t\tif (tok.token === '(')\n\t\t\t\t\t\ttok = tokens.shift();\n\t\t\t\t\twhile (1) {\n\t\t\t\t\t\tif (tok.type !== 'number') throw \"Expected top number of meter\";\n\t\t\t\t\t\tret.value += parseInt(tok.token);\n\t\t\t\t\t\tret.num += tok.token;\n\t\t\t\t\t\tif (tokens.length === 0 || tokens[0].token === '/') return ret;\n\t\t\t\t\t\ttok = tokens.shift();\n\t\t\t\t\t\tif (tok.token === ')') {\n\t\t\t\t\t\t\tif (tokens.length === 0 || tokens[0].token === '/') return ret;\n\t\t\t\t\t\t\tthrow \"Unexpected paren in meter\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tok.token !== '.' && tok.token !== '+') throw \"Expected top number of meter\";\n\t\t\t\t\t\tret.num += tok.token;\n\t\t\t\t\t\tif (tokens.length === 0) throw \"Expected top number of meter\";\n\t\t\t\t\t\ttok = tokens.shift();\n\t\t\t\t\t}\n\t\t\t\t\treturn ret;\t// just to suppress warning\n\t\t\t\t};\n\n\t\t\t\tvar parseFraction = function() {\n\t\t\t\t\t// handles this much: parseNum slash decimal\n\t\t\t\t\tvar ret = parseNum();\n\t\t\t\t\tif (tokens.length === 0) return ret;\n\t\t\t\t\tvar tok = tokens.shift();\n\t\t\t\t\tif (tok.token !== '/') throw \"Expected slash in meter\";\n\t\t\t\t\ttok = tokens.shift();\n\t\t\t\t\tif (tok.type !== 'number') throw \"Expected bottom number of meter\";\n\t\t\t\t\tret.den = tok.token;\n\t\t\t\t\tret.value = ret.value / parseInt(ret.den);\n\t\t\t\t\treturn ret;\n\t\t\t\t};\n\n\t\t\t\tif (tokens.length === 0) throw \"Expected meter definition in M: line\";\n\t\t\t\tvar meter = {type: 'specified', value: [ ]};\n\t\t\t\tvar totalLength = 0;\n\t\t\t\twhile (1) {\n\t\t\t\t\tvar ret = parseFraction();\n\t\t\t\t\ttotalLength += ret.value;\n\t\t\t\t\tvar mv = { num: ret.num };\n\t\t\t\t\tif (ret.den !== undefined)\n\t\t\t\t\t\tmv.den = ret.den;\n\t\t\t\t\tmeter.value.push(mv);\n\t\t\t\t\tif (tokens.length === 0) break;\n\t\t\t\t\t//var tok = tokens.shift();\n\t\t\t\t\t//if (tok.token !== '+') throw \"Extra characters in M: line\";\n\t\t\t\t}\n\n\t\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\t\tmultilineVars.default_length = totalLength < 0.75 ? 0.0625 : 0.125;\n\t\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t\t}\n\t\t\t\treturn meter;\n\t\t\t} catch (e) {\n\t\t\t\twarn(e, line, 0);\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\n\tthis.calcTempo = function(relTempo) {\n\t\tvar dur = 1/4;\n\t\tif (multilineVars.meter && multilineVars.meter.type === 'specified') {\n\t\t\tdur = 1 / parseInt(multilineVars.meter.value[0].den);\n\t\t} else if (multilineVars.origMeter && multilineVars.origMeter.type === 'specified') {\n\t\t\tdur = 1 / parseInt(multilineVars.origMeter.value[0].den);\n\t\t}\n\t\t//var dur = multilineVars.default_length ? multilineVars.default_length : 1;\n\t\tfor (var i = 0; i < relTempo.duration; i++)\n\t\t\trelTempo.duration[i] = dur * relTempo.duration[i];\n\t\treturn relTempo;\n\t};\n\n\tthis.resolveTempo = function() {\n\t\tif (multilineVars.tempo) {\t// If there's a tempo waiting to be resolved\n\t\t\tthis.calcTempo(multilineVars.tempo);\n\t\t\ttune.metaText.tempo = multilineVars.tempo;\n\t\t\tdelete multilineVars.tempo;\n\t\t}\n\t};\n\n\tthis.addUserDefinition = function(line, start, end) {\n\t\tvar equals = line.indexOf('=', start);\n\t\tif (equals === -1) {\n\t\t\twarn(\"Need an = in a macro definition\", line, start);\n\t\t\treturn;\n\t\t}\n\n\t\tvar before = parseCommon.strip(line.substring(start, equals));\n\t\tvar after = parseCommon.strip(line.substring(equals+1));\n\n\t\tif (before.length !== 1) {\n\t\t\twarn(\"Macro definitions can only be one character\", line, start);\n\t\t\treturn;\n\t\t}\n\t\tvar legalChars = \"HIJKLMNOPQRSTUVWXYhijklmnopqrstuvw~\";\n\t\tif (legalChars.indexOf(before) === -1) {\n\t\t\twarn(\"Macro definitions must be H-Y, h-w, or tilde\", line, start);\n\t\t\treturn;\n\t\t}\n\t\tif (after.length === 0) {\n\t\t\twarn(\"Missing macro definition\", line, start);\n\t\t\treturn;\n\t\t}\n\t\tif (multilineVars.macros === undefined)\n\t\t\tmultilineVars.macros = {};\n\t\tmultilineVars.macros[before] = after;\n\t};\n\n\tthis.setDefaultLength = function(line, start, end) {\n\t\tvar len = line.substring(start, end).replace(/ /g, \"\");\n\t\tvar len_arr = len.split('/');\n\t\tif (len_arr.length === 2) {\n\t\t\tvar n = parseInt(len_arr[0]);\n\t\t\tvar d = parseInt(len_arr[1]);\n\t\t\tif (d > 0) {\n\t\t\t\tmultilineVars.default_length = n / d;\t// a whole note is 1\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t} else if (len_arr.length === 1 && len_arr[0] === '1') {\n\t\t\tmultilineVars.default_length = 1;\n\t\t\tmultilineVars.havent_set_length = false;\n\t\t}\n\t};\n\n\n\tvar tempoString = {\n\n\t\tlarghissimo: 20,\n\t\tadagissimo: 24,\n\t\tsostenuto: 28,\n\t\tgrave: 32,\n\t\tlargo: 40,\n\t\tlento: 50,\n\t\tlarghetto: 60,\n\t\tadagio: 68,\n\t\tadagietto: 74,\n\t\tandante: 80,\n\t\tandantino: 88,\n\t\t\"marcia moderato\": 84,\n\t\t\"andante moderato\": 100,\n\t\tmoderato: 112,\n\t\tallegretto: 116,\n\t\t\"allegro moderato\": 120,\n\t\tallegro: 126,\n\t\tanimato: 132,\n\t\tagitato: 140,\n\t\tveloce: 148,\n\t\t\"mosso vivo\": 156,\n\t\tvivace: 164,\n\t\tvivacissimo: 172,\n\t\tallegrissimo: 176,\n\t\tpresto: 184,\n\t\tprestissimo: 210,\n\t};\n\n\tthis.setTempo = function(line, start, end, iChar) {\n\t\t//Q - tempo; can be used to specify the notes per minute, e.g. If\n\t\t//the meter denominator is a 4 note then Q:120 or Q:C=120\n\t\t//is 120 quarter notes per minute. Similarly Q:C3=40 would be 40\n\t\t//dotted half notes per minute. An absolute tempo may also be\n\t\t//set, e.g. Q:1/8=120 is 120 eighth notes per minute,\n\t\t//irrespective of the meter's denominator.\n\t\t//\n\t\t// This is either a number, \"C=number\", \"Cnumber=number\", or fraction [fraction...]=number\n\t\t// It depends on the M: field, which may either not be present, or may appear after this.\n\t\t// If M: is not present, an eighth note is used.\n\t\t// That means that this field can't be calculated until the end, if it is the first three types, since we don't know if we'll see an M: field.\n\t\t// So, if it is the fourth type, set it here, otherwise, save the info in the multilineVars.\n\t\t// The temporary variables we keep are the duration and the bpm. In the first two forms, the duration is 1.\n\t\t// In addition, a quoted string may both precede and follow. If a quoted string is present, then the duration part is optional.\n\t\ttry {\n\t\t\tvar tokens = tokenizer.tokenize(line, start, end);\n\n\t\t\tif (tokens.length === 0) throw \"Missing parameter in Q: field\";\n\n\t\t\tvar tempo = { startChar: iChar+start-2, endChar: iChar+end };\n\t\t\tvar delaySet = true;\n\t\t\tvar token = tokens.shift();\n\t\t\tif (token.type === 'quote') {\n\t\t\t\ttempo.preString = token.token;\n\t\t\t\ttoken = tokens.shift();\n\t\t\t\tif (tokens.length === 0) {\t// It's ok to just get a string for the tempo\n\t\t\t\t\t// If the string is a well-known tempo, put in the bpm\n\t\t\t\t\tif (tempoString[tempo.preString.toLowerCase()]) {\n\t\t\t\t\t\ttempo.bpm = tempoString[tempo.preString.toLowerCase()];\n\t\t\t\t\t\ttempo.suppressBpm = true;\n\t\t\t\t\t}\n\t\t\t\t\treturn {type: 'immediate', tempo: tempo};\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (token.type === 'alpha' && token.token === 'C')\t { // either type 2 or type 3\n\t\t\t\tif (tokens.length === 0) throw \"Missing tempo after C in Q: field\";\n\t\t\t\ttoken = tokens.shift();\n\t\t\t\tif (token.type === 'punct' && token.token === '=') {\n\t\t\t\t\t// This is a type 2 format. The duration is an implied 1\n\t\t\t\t\tif (tokens.length === 0) throw \"Missing tempo after = in Q: field\";\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.type !== 'number') throw \"Expected number after = in Q: field\";\n\t\t\t\t\ttempo.duration = [1];\n\t\t\t\t\ttempo.bpm = parseInt(token.token);\n\t\t\t\t} else if (token.type === 'number') {\n\t\t\t\t\t// This is a type 3 format.\n\t\t\t\t\ttempo.duration = [parseInt(token.token)];\n\t\t\t\t\tif (tokens.length === 0) throw \"Missing = after duration in Q: field\";\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.type !== 'punct' || token.token !== '=') throw \"Expected = after duration in Q: field\";\n\t\t\t\t\tif (tokens.length === 0) throw \"Missing tempo after = in Q: field\";\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.type !== 'number') throw \"Expected number after = in Q: field\";\n\t\t\t\t\ttempo.bpm = parseInt(token.token);\n\t\t\t\t} else throw \"Expected number or equal after C in Q: field\";\n\n\t\t\t} else if (token.type === 'number') {\t// either type 1 or type 4\n\t\t\t\tvar num = parseInt(token.token);\n\t\t\t\tif (tokens.length === 0 || tokens[0].type === 'quote') {\n\t\t\t\t\t// This is type 1\n\t\t\t\t\ttempo.duration = [1];\n\t\t\t\t\ttempo.bpm = num;\n\t\t\t\t} else {\t// This is type 4\n\t\t\t\t\tdelaySet = false;\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.type !== 'punct' && token.token !== '/') throw \"Expected fraction in Q: field\";\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.type !== 'number') throw \"Expected fraction in Q: field\";\n\t\t\t\t\tvar den = parseInt(token.token);\n\t\t\t\t\ttempo.duration = [num/den];\n\t\t\t\t\t// We got the first fraction, keep getting more as long as we find them.\n\t\t\t\t\twhile (tokens.length > 0 && tokens[0].token !== '=' && tokens[0].type !== 'quote') {\n\t\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\t\tif (token.type !== 'number') throw \"Expected fraction in Q: field\";\n\t\t\t\t\t\tnum = parseInt(token.token);\n\t\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\t\tif (token.type !== 'punct' && token.token !== '/') throw \"Expected fraction in Q: field\";\n\t\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\t\tif (token.type !== 'number') throw \"Expected fraction in Q: field\";\n\t\t\t\t\t\tden = parseInt(token.token);\n\t\t\t\t\t\ttempo.duration.push(num/den);\n\t\t\t\t\t}\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.type !== 'punct' && token.token !== '=') throw \"Expected = in Q: field\";\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.type !== 'number') throw \"Expected tempo in Q: field\";\n\t\t\t\t\ttempo.bpm = parseInt(token.token);\n\t\t\t\t}\n\t\t\t} else throw \"Unknown value in Q: field\";\n\t\t\tif (tokens.length !== 0) {\n\t\t\t\ttoken = tokens.shift();\n\t\t\t\tif (token.type === 'quote') {\n\t\t\t\t\ttempo.postString = token.token;\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t}\n\t\t\t\tif (tokens.length !== 0) throw \"Unexpected string at end of Q: field\";\n\t\t\t}\n\t\t\tif (multilineVars.printTempo === false)\n\t\t\t\ttempo.suppress = true;\n\t\t\treturn {type: delaySet?'delaySet':'immediate', tempo: tempo};\n\t\t} catch (msg) {\n\t\t\twarn(msg, line, start);\n\t\t\treturn {type: 'none'};\n\t\t}\n\t};\n\n\tthis.letter_to_inline_header = function(line, i, startLine)\n\t{\n\t\tvar ws = tokenizer.eatWhiteSpace(line, i);\n\t\ti +=ws;\n\t\tif (line.length >= i+5 && line[i] === '[' && line[i+2] === ':') {\n\t\t\tvar e = line.indexOf(']', i);\n\t\t\tvar startChar = multilineVars.iChar + i;\n\t\t\tvar endChar = multilineVars.iChar + e + 1;\n\t\t\tswitch(line.substring(i, i+3))\n\t\t\t{\n\t\t\t\tcase \"[I:\":\n\t\t\t\t\tvar err = parseDirective.addDirective(line.substring(i+3, e));\n\t\t\t\t\tif (err) warn(err, line, i);\n\t\t\t\t\treturn [ e-i+1+ws ];\n\t\t\t\tcase \"[M:\":\n\t\t\t\t\tvar meter = this.setMeter(line.substring(i+3, e));\n\t\t\t\t\tif (tuneBuilder.hasBeginMusic() && meter)\n\t\t\t\t\t\ttuneBuilder.appendStartingElement('meter', startChar, endChar, meter);\n\t\t\t\t\telse\n\t\t\t\t\t\tmultilineVars.meter = meter;\n\t\t\t\t\treturn [ e-i+1+ws ];\n\t\t\t\tcase \"[K:\":\n\t\t\t\t\tvar result = parseKeyVoice.parseKey(line.substring(i+3, e), true);\n\t\t\t\t\tif (result.foundClef && tuneBuilder.hasBeginMusic())\n\t\t\t\t\t\ttuneBuilder.appendStartingElement('clef', startChar, endChar, multilineVars.clef);\n\t\t\t\t\tif (result.foundKey && tuneBuilder.hasBeginMusic())\n\t\t\t\t\t\ttuneBuilder.appendStartingElement('key', startChar, endChar, parseKeyVoice.fixKey(multilineVars.clef, multilineVars.key));\n\t\t\t\t\treturn [ e-i+1+ws ];\n\t\t\t\tcase \"[P:\":\n\t\t\t\t\tvar part = parseDirective.parseFontChangeLine(line.substring(i+3, e))\n\t\t\t\t\tif (startLine || tune.lines.length <= tune.lineNum)\n\t\t\t\t\t\tmultilineVars.partForNextLine = { title: part, startChar: startChar, endChar: endChar };\n\t\t\t\t\telse\n\t\t\t\t\t\ttuneBuilder.appendElement('part', startChar, endChar, {title: part});\n\t\t\t\t\treturn [ e-i+1+ws ];\n\t\t\t\tcase \"[L:\":\n\t\t\t\t\tthis.setDefaultLength(line, i+3, e);\n\t\t\t\t\treturn [ e-i+1+ws ];\n\t\t\t\tcase \"[Q:\":\n\t\t\t\t\tif (e > 0) {\n\t\t\t\t\t\tvar tempo = this.setTempo(line, i+3, e, multilineVars.iChar);\n\t\t\t\t\t\tif (tempo.type === 'delaySet') {\n\t\t\t\t\t\t\tif (tuneBuilder.hasBeginMusic())\n\t\t\t\t\t\t\t\ttuneBuilder.appendElement('tempo', startChar, endChar, this.calcTempo(tempo.tempo));\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tmultilineVars.tempoForNextLine = ['tempo', startChar, endChar, this.calcTempo(tempo.tempo)]\n\t\t\t\t\t\t} else if (tempo.type === 'immediate') {\n\t\t\t\t\t\t\tif (!startLine && tuneBuilder.hasBeginMusic())\n\t\t\t\t\t\t\t\ttuneBuilder.appendElement('tempo', startChar, endChar, tempo.tempo);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tmultilineVars.tempoForNextLine = ['tempo', startChar, endChar, tempo.tempo]\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn [ e-i+1+ws, line[i+1], line.substring(i+3, e)];\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"[V:\":\n\t\t\t\t\tif (e > 0) {\n\t\t\t\t\t\tparseKeyVoice.parseVoice(line, i+3, e);\n\t\t\t\t\t\t//startNewLine();\n\t\t\t\t\t\treturn [ e-i+1+ws, line[i+1], line.substring(i+3, e)];\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"[r:\":\n\t\t\t\t\treturn [ e-i+1+ws ];\n\n\t\t\t\tdefault:\n\t\t\t\t\t// TODO: complain about unhandled header\n\t\t\t}\n\t\t}\n\t\treturn [ 0 ];\n\t};\n\n\tthis.letter_to_body_header = function(line, i)\n\t{\n\t\tif (line.length >= i+3) {\n\t\t\tswitch(line.substring(i, i+2))\n\t\t\t{\n\t\t\t\tcase \"I:\":\n\t\t\t\t\tvar err = parseDirective.addDirective(line.substring(i+2));\n\t\t\t\t\tif (err) warn(err, line, i);\n\t\t\t\t\treturn [ line.length ];\n\t\t\t\tcase \"M:\":\n\t\t\t\t\tvar meter = this.setMeter(line.substring(i+2));\n\t\t\t\t\tif (tuneBuilder.hasBeginMusic() && meter)\n\t\t\t\t\t\ttuneBuilder.appendStartingElement('meter', multilineVars.iChar + i, multilineVars.iChar + line.length, meter);\n\t\t\t\t\treturn [ line.length ];\n\t\t\t\tcase \"K:\":\n\t\t\t\t\tvar result = parseKeyVoice.parseKey(line.substring(i+2), tuneBuilder.hasBeginMusic());\n\t\t\t\t\tif (result.foundClef && tuneBuilder.hasBeginMusic())\n\t\t\t\t\t\ttuneBuilder.appendStartingElement('clef', multilineVars.iChar + i, multilineVars.iChar + line.length, multilineVars.clef);\n\t\t\t\t\tif (result.foundKey && tuneBuilder.hasBeginMusic())\n\t\t\t\t\t\ttuneBuilder.appendStartingElement('key', multilineVars.iChar + i, multilineVars.iChar + line.length, parseKeyVoice.fixKey(multilineVars.clef, multilineVars.key));\n\t\t\t\t\treturn [ line.length ];\n\t\t\t\tcase \"P:\":\n\t\t\t\t\tif (tuneBuilder.hasBeginMusic())\n\t\t\t\t\t\ttuneBuilder.appendElement('part', multilineVars.iChar + i, multilineVars.iChar + line.length, {title: line.substring(i+2)});\n\t\t\t\t\treturn [ line.length ];\n\t\t\t\tcase \"L:\":\n\t\t\t\t\tthis.setDefaultLength(line, i+2, line.length);\n\t\t\t\t\treturn [ line.length ];\n\t\t\t\tcase \"Q:\":\n\t\t\t\t\tvar e = line.indexOf('\\x12', i+2);\n\t\t\t\t\tif (e === -1) e = line.length;\n\t\t\t\t\tvar tempo = this.setTempo(line, i+2, e, multilineVars.iChar);\n\t\t\t\t\tif (tempo.type === 'delaySet') tuneBuilder.appendElement('tempo', multilineVars.iChar + i, multilineVars.iChar + line.length, this.calcTempo(tempo.tempo));\n\t\t\t\t\telse if (tempo.type === 'immediate') tuneBuilder.appendElement('tempo', multilineVars.iChar + i, multilineVars.iChar + line.length, tempo.tempo);\n\t\t\t\treturn [ e, line[i], parseCommon.strip(line.substring(i+2))];\n\t\t\t\tcase \"V:\":\n\t\t\t\t\tparseKeyVoice.parseVoice(line, i+2, line.length);\n//\t\t\t\t\t\tstartNewLine();\n\t\t\t\t\treturn [ line.length, line[i], parseCommon.strip(line.substring(i+2))];\n\t\t\t\tdefault:\n\t\t\t\t\t// TODO: complain about unhandled header\n\t\t\t}\n\t\t}\n\t\treturn [ 0 ];\n\t};\n\n\tvar metaTextHeaders = {\n\t\tA: 'author',\n\t\tB: 'book',\n\t\tC: 'composer',\n\t\tD: 'discography',\n\t\tF: 'url',\n\t\tG: 'group',\n\t\tI: 'instruction',\n\t\tN: 'notes',\n\t\tO: 'origin',\n\t\tR: 'rhythm',\n\t\tS: 'source',\n\t\tW: 'unalignedWords',\n\t\tZ: 'transcription'\n\t};\n\n\tthis.parseHeader = function(line) {\n\t\tvar field = metaTextHeaders[line[0]];\n\t\tvar origSize = line.length-2\n\t\tvar restOfLine = tokenizer.translateString(tokenizer.stripComment(line.substring(2)))\n\t\tif (field === 'unalignedWords' || field === 'notes') {\n\t\t\t// These fields can be multi-line\n\t\t\ttuneBuilder.addMetaTextArray(field, parseDirective.parseFontChangeLine(restOfLine), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+line.length});\n\t\t} else if (field !== undefined) {\n\t\t\t// these fields are single line\n\t\t\ttuneBuilder.addMetaText(field, parseDirective.parseFontChangeLine(restOfLine), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+line.length});\n\t\t} else {\n\t\t\tvar startChar = multilineVars.iChar;\n\t\t\tvar endChar = startChar + line.length;\n\t\t\tswitch(line[0])\n\t\t\t{\n\t\t\t\tcase 'H':\n\t\t\t\t\t// History is a little different because once it starts it continues until another header field is encountered\n\t\t\t\t\ttuneBuilder.addMetaTextArray(\"history\", parseDirective.parseFontChangeLine(restOfLine), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+line.length});\n\t\t\t\t\tline = tokenizer.peekLine()\n\t\t\t\t\twhile (line && line[1] !== ':') {\n\t\t\t\t\t\ttokenizer.nextLine()\n\t\t\t\t\t\ttuneBuilder.addMetaTextArray(\"history\", parseDirective.parseFontChangeLine(tokenizer.translateString(tokenizer.stripComment(line))), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+line.length});\n\t\t\t\t\t\tline = tokenizer.peekLine()\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'K':\n\t\t\t\t\t// since the key is the last thing that can happen in the header, we can resolve the tempo now\n\t\t\t\t\tthis.resolveTempo();\n\t\t\t\t\tvar result = parseKeyVoice.parseKey(line.substring(2), false);\n\t\t\t\t\tif (!multilineVars.is_in_header && tuneBuilder.hasBeginMusic()) {\n\t\t\t\t\t\tif (result.foundClef)\n\t\t\t\t\t\t\ttuneBuilder.appendStartingElement('clef', startChar, endChar, multilineVars.clef);\n\t\t\t\t\t\tif (result.foundKey)\n\t\t\t\t\t\t\ttuneBuilder.appendStartingElement('key', startChar, endChar, parseKeyVoice.fixKey(multilineVars.clef, multilineVars.key));\n\t\t\t\t\t}\n\t\t\t\t\tmultilineVars.is_in_header = false;\t// The first key signifies the end of the header.\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'L':\n\t\t\t\t\tthis.setDefaultLength(line, 2, line.length);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'M':\n\t\t\t\t\tmultilineVars.origMeter = multilineVars.meter = this.setMeter(line.substring(2));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'P':\n\t\t\t\t\t// TODO-PER: There is more to do with parts, but the writer doesn't care.\n\t\t\t\t\tif (multilineVars.is_in_header)\n\t\t\t\t\t\ttuneBuilder.addMetaText(\"partOrder\", parseDirective.parseFontChangeLine(restOfLine), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+line.length});\n\t\t\t\t\telse\n\t\t\t\t\t\tmultilineVars.partForNextLine = { title: restOfLine, startChar: startChar, endChar: endChar};\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Q':\n\t\t\t\t\tvar tempo = this.setTempo(line, 2, line.length, multilineVars.iChar);\n\t\t\t\t\tif (tempo.type === 'delaySet') multilineVars.tempo = tempo.tempo;\n\t\t\t\t\telse if (tempo.type === 'immediate') {\n\t\t\t\t\t\tif (!tune.metaText.tempo)\n\t\t\t\t\t\t\ttune.metaText.tempo = tempo.tempo;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tmultilineVars.tempoForNextLine = ['tempo', startChar, endChar, tempo.tempo]\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'T':\n\t\t\t\t\tif (multilineVars.titlecaps)\n\t\t\t\t\t\trestOfLine = restOfLine.toUpperCase();\t\t\n\t\t\t\t\tthis.setTitle(parseDirective.parseFontChangeLine(tokenizer.theReverser(restOfLine)), origSize);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'U':\n\t\t\t\t\tthis.addUserDefinition(line, 2, line.length);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'V':\n\t\t\t\t\tparseKeyVoice.parseVoice(line, 2, line.length);\n\t\t\t\t\tif (!multilineVars.is_in_header)\n\t\t\t\t\t\treturn {newline: true};\n\t\t\t\t\tbreak;\n\t\t\t\tcase 's':\n\t\t\t\t\treturn {symbols: true};\n\t\t\t\tcase 'w':\n\t\t\t\t\treturn {words: true};\n\t\t\t\tcase 'X':\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'E':\n\t\t\t\tcase 'm':\n\t\t\t\t\twarn(\"Ignored header\", line, 0);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn {regular: true};\n\t\t\t}\n\t\t}\n\t\treturn {};\n\t};\n};\n\nmodule.exports = ParseHeader;\n","var parseCommon = require('./abc_common');\nvar parseDirective = require('./abc_parse_directive');\nvar transpose = require('./abc_transpose');\n\nvar parseKeyVoice = {};\n\n(function() {\n\tvar tokenizer;\n\tvar warn;\n\tvar multilineVars;\n\tvar tune;\n\tvar tuneBuilder;\n\tparseKeyVoice.initialize = function(tokenizer_, warn_, multilineVars_, tune_, tuneBuilder_) {\n\t\ttokenizer = tokenizer_;\n\t\twarn = warn_;\n\t\tmultilineVars = multilineVars_;\n\t\ttune = tune_;\n\t\ttuneBuilder = tuneBuilder_;\n\t};\n\n\tparseKeyVoice.standardKey = function(keyName, root, acc, localTranspose) {\n\t\treturn transpose.keySignature(multilineVars, keyName, root, acc, localTranspose);\n\t};\n\n\tvar clefLines = {\n\t\t'treble': { clef: 'treble', pitch: 4, mid: 0 },\n\t\t'treble+8': { clef: 'treble+8', pitch: 4, mid: 0 },\n\t\t'treble-8': { clef: 'treble-8', pitch: 4, mid: 0 },\n\t\t'treble^8': { clef: 'treble+8', pitch: 4, mid: 0 },\n\t\t'treble_8': { clef: 'treble-8', pitch: 4, mid: 0 },\n\t\t'treble1': { clef: 'treble', pitch: 2, mid: 2 },\n\t\t'treble2': { clef: 'treble', pitch: 4, mid: 0 },\n\t\t'treble3': { clef: 'treble', pitch: 6, mid: -2 },\n\t\t'treble4': { clef: 'treble', pitch: 8, mid: -4 },\n\t\t'treble5': { clef: 'treble', pitch: 10, mid: -6 },\n\t\t'perc': { clef: 'perc', pitch: 6, mid: 0 },\n\t\t'none': { clef: 'none', mid: 0 },\n\t\t'bass': { clef: 'bass', pitch: 8, mid: -12 },\n\t\t'bass+8': { clef: 'bass+8', pitch: 8, mid: -12 },\n\t\t'bass-8': { clef: 'bass-8', pitch: 8, mid: -12 },\n\t\t'bass^8': { clef: 'bass+8', pitch: 8, mid: -12 },\n\t\t'bass_8': { clef: 'bass-8', pitch: 8, mid: -12 },\n\t\t'bass+16': { clef: 'bass', pitch: 8, mid: -12 },\n\t\t'bass-16': { clef: 'bass', pitch: 8, mid: -12 },\n\t\t'bass^16': { clef: 'bass', pitch: 8, mid: -12 },\n\t\t'bass_16': { clef: 'bass', pitch: 8, mid: -12 },\n\t\t'bass1': { clef: 'bass', pitch: 2, mid: -6 },\n\t\t'bass2': { clef: 'bass', pitch: 4, mid: -8 },\n\t\t'bass3': { clef: 'bass', pitch: 6, mid: -10 },\n\t\t'bass4': { clef: 'bass', pitch: 8, mid: -12 },\n\t\t'bass5': { clef: 'bass', pitch: 10, mid: -14 },\n\t\t'tenor': { clef: 'alto', pitch: 8, mid: -8 },\n\t\t'tenor1': { clef: 'alto', pitch: 2, mid: -2 },\n\t\t'tenor2': { clef: 'alto', pitch: 4, mid: -4 },\n\t\t'tenor3': { clef: 'alto', pitch: 6, mid: -6 },\n\t\t'tenor4': { clef: 'alto', pitch: 8, mid: -8 },\n\t\t'tenor5': { clef: 'alto', pitch: 10, mid: -10 },\n\t\t'alto': { clef: 'alto', pitch: 6, mid: -6 },\n\t\t'alto1': { clef: 'alto', pitch: 2, mid: -2 },\n\t\t'alto2': { clef: 'alto', pitch: 4, mid: -4 },\n\t\t'alto3': { clef: 'alto', pitch: 6, mid: -6 },\n\t\t'alto4': { clef: 'alto', pitch: 8, mid: -8 },\n\t\t'alto5': { clef: 'alto', pitch: 10, mid: -10 },\n\t\t'alto+8': { clef: 'alto+8', pitch: 6, mid: -6 },\n\t\t'alto-8': { clef: 'alto-8', pitch: 6, mid: -6 },\n\t\t'alto^8': { clef: 'alto+8', pitch: 6, mid: -6 },\n\t\t'alto_8': { clef: 'alto-8', pitch: 6, mid: -6 }\n\t};\n\n\tvar calcMiddle = function(clef, oct) {\n\t\tvar value = clefLines[clef];\n\t\tvar mid = value ? value.mid : 0;\n\t\treturn mid+oct;\n\t};\n\n\tparseKeyVoice.fixClef = function(clef) {\n\t\tvar value = clefLines[clef.type];\n\t\tif (value) {\n\t\t\tclef.clefPos = value.pitch;\n\t\t\tclef.type = value.clef;\n\t\t}\n\t};\n\n\tparseKeyVoice.deepCopyKey = function(key) {\n\t\tvar ret = { accidentals: [], root: key.root, acc: key.acc, mode: key.mode };\n\t\tkey.accidentals.forEach(function(k) {\n\t\tret.accidentals.push(parseCommon.clone(k));\n\t\t});\n\t\treturn ret;\n\t};\n\n\tvar pitches = {A: 5, B: 6, C: 0, D: 1, E: 2, F: 3, G: 4, a: 12, b: 13, c: 7, d: 8, e: 9, f: 10, g: 11};\n\n\tparseKeyVoice.addPosToKey = function(clef, key) {\n\t\t// Shift the key signature from the treble positions to whatever position is needed for the clef.\n\t\t// This may put the key signature unnaturally high or low, so if it does, then shift it.\n\t\tvar mid = clef.verticalPos;\n\t\tkey.accidentals.forEach(function(acc) {\n\t\t\tvar pitch = pitches[acc.note];\n\t\t\tpitch = pitch - mid;\n\t\t\tacc.verticalPos = pitch;\n\t\t});\n\t\tif (key.impliedNaturals)\n\t\t\tkey.impliedNaturals.forEach(function(acc) {\n\t\t\t\tvar pitch = pitches[acc.note];\n\t\t\t\tpitch = pitch - mid;\n\t\t\t\tacc.verticalPos = pitch;\n\t\t\t});\n\n\t\tif (mid < -10) {\n\t\t\tkey.accidentals.forEach(function(acc) {\n\t\t\t\tacc.verticalPos -= 7;\n\t\t\t\tif (acc.verticalPos >= 11 || (acc.verticalPos === 10 && acc.acc === 'flat'))\n\t\t\t\t\tacc.verticalPos -= 7;\n\t\t\t\tif (acc.note === 'A' && acc.acc === 'sharp' )\n\t\t\t\t\tacc.verticalPos -=7;\n\t\t\t\tif ((acc.note === 'G' || acc.note === 'F') && acc.acc === 'flat' )\n\t\t\t\t\tacc.verticalPos -=7;\n\t\t\t});\n\t\t\tif (key.impliedNaturals)\n\t\t\t\tkey.impliedNaturals.forEach(function(acc) {\n\t\t\t\t\tacc.verticalPos -= 7;\n\t\t\t\t\tif (acc.verticalPos >= 11 || (acc.verticalPos === 10 && acc.acc === 'flat'))\n\t\t\t\t\t\tacc.verticalPos -= 7;\n\t\t\t\t\tif (acc.note === 'A' && acc.acc === 'sharp' )\n\t\t\t\t\t\tacc.verticalPos -=7;\n\t\t\t\t\tif ((acc.note === 'G' || acc.note === 'F') && acc.acc === 'flat' )\n\t\t\t\t\t\tacc.verticalPos -=7;\n\t\t\t\t});\n\t\t} else if (mid < -4) {\n\t\t\tkey.accidentals.forEach(function(acc) {\n\t\t\t\tacc.verticalPos -= 7;\n\t\t\t\tif (mid === -8 && (acc.note === 'f' || acc.note === 'g') && acc.acc === 'sharp' )\n\t\t\t\t\tacc.verticalPos -=7;\n\t\t\t});\n\t\t\tif (key.impliedNaturals)\n\t\t\t\tkey.impliedNaturals.forEach(function(acc) {\n\t\t\t\t\tacc.verticalPos -= 7;\n\t\t\t\t\tif (mid === -8 && (acc.note === 'f' || acc.note === 'g') && acc.acc === 'sharp' )\n\t\t\t\t\t\tacc.verticalPos -=7;\n\t\t\t\t});\n\t\t} else if (mid >= 7) {\n\t\t\tkey.accidentals.forEach(function(acc) {\n\t\t\t\tacc.verticalPos += 7;\n\t\t\t});\n\t\t\tif (key.impliedNaturals)\n\t\t\t\tkey.impliedNaturals.forEach(function(acc) {\n\t\t\t\t\tacc.verticalPos += 7;\n\t\t\t\t});\n\t\t}\n\t};\n\n\tparseKeyVoice.fixKey = function(clef, key) {\n\t\tvar fixedKey = parseCommon.clone(key);\n\t\tparseKeyVoice.addPosToKey(clef, fixedKey);\n\t\treturn fixedKey;\n\t};\n\n\tvar parseMiddle = function(str) {\n\t\tvar i = 0;\n\t\tvar p = str[i++];\n\t\tif (p === '^' || p === '_')\n\t\t\tp = str[i++];\n\t var mid = pitches[p];\n\t\tif (mid === undefined)\n\t\t\tmid = 6; // If a legal middle note wasn't received, just ignore it.\n\t\tfor ( ; i < str.length; i++) {\n\t\t\tif (str[i] === ',') mid -= 7;\n\t\t\telse if (str[i] === \"'\") mid += 7;\n\t\t\telse break;\n\t\t}\n\t\treturn { mid: mid - 6, str: str.substring(i) };\t// We get the note in the middle of the staff. We want the note that appears as the first ledger line below the staff.\n\t};\n\n\tvar normalizeAccidentals = function(accs) {\n\t\tfor (var i = 0; i < accs.length; i++) {\n\t\t\tif (accs[i].note === 'b')\n\t\t\t\taccs[i].note = 'B';\n\t\t\telse if (accs[i].note === 'a')\n\t\t\t\taccs[i].note = 'A';\n\t\t\telse if (accs[i].note === 'F')\n\t\t\t\taccs[i].note = 'f';\n\t\t\telse if (accs[i].note === 'E')\n\t\t\t\taccs[i].note = 'e';\n\t\t\telse if (accs[i].note === 'D')\n\t\t\t\taccs[i].note = 'd';\n\t\t\telse if (accs[i].note === 'C')\n\t\t\t\taccs[i].note = 'c';\n\t\t\telse if (accs[i].note === 'G' && accs[i].acc === 'sharp')\n\t\t\t\taccs[i].note = 'g';\n\t\t\telse if (accs[i].note === 'g' && accs[i].acc === 'flat')\n\t\t\t\taccs[i].note = 'G';\n\t\t}\n\t};\n\n\tparseKeyVoice.parseKey = function(str, isInline)\t// (and clef)\n\t{\n\t\t// returns:\n\t\t//\t\t{ foundClef: true, foundKey: true }\n\t\t// Side effects:\n\t\t//\t\tcalls warn() when there is a syntax error\n\t\t//\t\tsets these members of multilineVars:\n\t\t//\t\t\tclef\n\t\t//\t\t\tkey\n\t\t//\t\t\tstyle\n\t\t//\n\t\t// The format is:\n\t\t// K: [⟨key⟩] [⟨modifiers⟩*]\n\t\t// modifiers are any of the following in any order:\n\t\t// [⟨clef⟩] [middle=⟨pitch⟩] [transpose=[-]⟨number⟩] [stafflines=⟨number⟩] [staffscale=⟨number⟩][style=⟨style⟩]\n\t\t// key is none|HP|Hp|⟨specified_key⟩\n\t\t// clef is [clef=] [⟨clef type⟩] [⟨line number⟩] [+8|-8]\n\t\t// specified_key is ⟨pitch⟩[#|b][mode(first three chars are significant)][accidentals*]\n\t\tif (str.length === 0) {\n\t\t\t// an empty K: field is the same as K:none\n\t\t\tstr = 'none';\n\t\t}\n\t\tvar tokens = tokenizer.tokenize(str, 0, str.length);\n\t\tvar ret = {};\n\n\t\t// Be sure that a key was passed in\n\t\tif (tokens.length === 0) {\n\t\t\twarn(\"Must pass in key signature.\", str, 0);\n\t\t\treturn ret;\n\t\t}\n\n\t\t// first the key\n\t\tswitch (tokens[0].token) {\n\t\t\tcase 'HP':\n\t\t\t\tparseDirective.addDirective(\"bagpipes\");\n\t\t\t\tmultilineVars.key = { root: \"HP\", accidentals: [], acc: \"\", mode: \"\" };\n\t\t\t\tret.foundKey = true;\n\t\t\t\ttokens.shift();\n\t\t\t\tbreak;\n\t\t\tcase 'Hp':\n\t\t\t\tparseDirective.addDirective(\"bagpipes\");\n\t\t\t\tmultilineVars.key = { root: \"Hp\", accidentals: [{acc: 'natural', note: 'g'}, {acc: 'sharp', note: 'f'}, {acc: 'sharp', note: 'c'}], acc: \"\", mode: \"\" };\n\t\t\t\tret.foundKey = true;\n\t\t\t\ttokens.shift();\n\t\t\t\tbreak;\n\t\t\tcase 'none':\n\t\t\t\t// we got the none key - that's the same as C to us\n\t\t\t\tmultilineVars.key = { root: \"none\", accidentals: [], acc: \"\", mode: \"\" };\n\t\t\t\tret.foundKey = true;\n\t\t\t\ttokens.shift();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tvar retPitch = tokenizer.getKeyPitch(tokens[0].token);\n\t\t\t\tif (retPitch.len > 0) {\n\t\t\t\t\tret.foundKey = true;\n\t\t\t\t\tvar acc = \"\";\n\t\t\t\t\tvar mode = \"\";\n\t\t\t\t\t// The accidental and mode might be attached to the pitch, so we might want to just remove the first character.\n\t\t\t\t\tif (tokens[0].token.length > 1)\n\t\t\t\t\t\ttokens[0].token = tokens[0].token.substring(1);\n\t\t\t\t\telse\n\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\tvar key = retPitch.token;\n\t\t\t\t\t// We got a pitch to start with, so we might also have an accidental and a mode\n\t\t\t\t\tif (tokens.length > 0) {\n\t\t\t\t\t\tvar retAcc = tokenizer.getSharpFlat(tokens[0].token);\n\t\t\t\t\t\tif (retAcc.len > 0) {\n\t\t\t\t\t\t\tif (tokens[0].token.length > 1)\n\t\t\t\t\t\t\t\ttokens[0].token = tokens[0].token.substring(1);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\t\t\tkey += retAcc.token;\n\t\t\t\t\t\t\tacc = retAcc.token;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tokens.length > 0) {\n\t\t\t\t\t\t\tvar retMode = tokenizer.getMode(tokens[0].token);\n\t\t\t\t\t\t\tif (retMode.len > 0) {\n\t\t\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\t\t\t\tkey += retMode.token;\n\t\t\t\t\t\t\t\tmode = retMode.token;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Be sure that the key specified is in the list: not all keys are physically possible, like Cbmin.\n\t\t\t\t\t\tif (parseKeyVoice.standardKey(key, retPitch.token, acc, 0) === undefined) {\n\t\t\t\t\t\t\twarn(\"Unsupported key signature: \" + key, str, 0);\n\t\t\t\t\t\t\treturn ret;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// We need to do a deep copy because we are going to modify it\n\t\t\t\t\tvar oldKey = parseKeyVoice.deepCopyKey(multilineVars.key);\n\t\t\t\t\t//TODO-PER: HACK! To get the local transpose to work, the transposition is done for each line. This caused the global transposition variable to be factored in twice, so, instead of rewriting that right now, I'm just subtracting one of them here.\n\t\t\t\t\tvar keyCompensate = !isInline && multilineVars.globalTranspose ? -multilineVars.globalTranspose : 0;\n\t\t\t\t\t//console.log(\"parse\", JSON.stringify(multilineVars), isInline)\n\t\t\t\t\tvar savedOrigKey;\n\t\t\t\t\tif (isInline)\n\t\t\t\t\t\tsavedOrigKey = multilineVars.globalTransposeOrigKeySig\n\t\t\t\t\tmultilineVars.key = parseKeyVoice.deepCopyKey(parseKeyVoice.standardKey(key, retPitch.token, acc, keyCompensate));\n\t\t\t\t\tif (isInline)\n\t\t\t\t\t\tmultilineVars.globalTransposeOrigKeySig = savedOrigKey\n\t\t\t\t\tmultilineVars.key.mode = mode;\n\t\t\t\t\tif (oldKey) {\n\t\t\t\t\t\t// Add natural in all places that the old key had an accidental.\n\t\t\t\t\t\tvar kk;\n\t\t\t\t\t\tfor (var k = 0; k < multilineVars.key.accidentals.length; k++) {\n\t\t\t\t\t\t\tfor (kk = 0; kk < oldKey.accidentals.length; kk++) {\n\t\t\t\t\t\t\t\tif (oldKey.accidentals[kk].note && multilineVars.key.accidentals[k].note.toLowerCase() === oldKey.accidentals[kk].note.toLowerCase())\n\t\t\t\t\t\t\t\t\toldKey.accidentals[kk].note = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (kk = 0; kk < oldKey.accidentals.length; kk++) {\n\t\t\t\t\t\t\tif (oldKey.accidentals[kk].note) {\n\t\t\t\t\t\t\t\tif (!multilineVars.key.impliedNaturals)\n\t\t\t\t\t\t\t\t\tmultilineVars.key.impliedNaturals = [];\n\t\t\t\t\t\t\t\tmultilineVars.key.impliedNaturals.push({ acc: 'natural', note: oldKey.accidentals[kk].note });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// There are two special cases of deprecated syntax. Ignore them if they occur\n\t\tif (tokens.length === 0) return ret;\n\t\tif (tokens[0].token === 'exp') tokens.shift();\n\t\tif (tokens.length === 0) return ret;\n\t\tif (tokens[0].token === 'oct') tokens.shift();\n\n\t\t// now see if there are extra accidentals\n\t\tif (tokens.length === 0) return ret;\n\t\tvar accs = tokenizer.getKeyAccidentals2(tokens);\n\t\tif (accs.warn)\n\t\t\twarn(accs.warn, str, 0);\n\t\t// If we have extra accidentals, first replace ones that are of the same pitch before adding them to the end.\n\t\tif (accs.accs) {\n\t\t\tif (!ret.foundKey) {\t\t// if there are only extra accidentals, make sure this is set.\n\t\t\t\tret.foundKey = true;\n\t\t\t\tmultilineVars.key = { root: \"none\", acc: \"\", mode: \"\", accidentals: [] };\n\t\t\t}\n\t\t\tnormalizeAccidentals(accs.accs);\n\t\t\tfor (var i = 0; i < accs.accs.length; i++) {\n\t\t\t\tvar found = false;\n\t\t\t\tfor (var j = 0; j < multilineVars.key.accidentals.length && !found; j++) {\n\t\t\t\t\tif (multilineVars.key.accidentals[j].note === accs.accs[i].note) {\n\t\t\t\t\t\tfound = true;\n\t\t\t\t\t\tif (multilineVars.key.accidentals[j].acc !== accs.accs[i].acc) {\n\t\t\t\t\t\t\t// If the accidental is different, then replace it. If it is the same, then the declaration was redundant, so just ignore it.\n\t\t\t\t\t\t\tmultilineVars.key.accidentals[j].acc = accs.accs[i].acc;\n\t\t\t\t\t\t\tif (!multilineVars.key.explicitAccidentals)\n\t\t\t\t\t\t\t\tmultilineVars.key.explicitAccidentals = [];\n\t\t\t\t\t\t\tmultilineVars.key.explicitAccidentals.push(accs.accs[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!found) {\n\t\t\t\t\tif (!multilineVars.key.explicitAccidentals)\n\t\t\t\t\t\tmultilineVars.key.explicitAccidentals = [];\n\t\t\t\t\tmultilineVars.key.explicitAccidentals.push(accs.accs[i]);\n\t\t\t\t\tmultilineVars.key.accidentals.push(accs.accs[i]);\n\t\t\t\t\tif (multilineVars.key.impliedNaturals) {\n\t\t\t\t\t\tfor (var kkk = 0; kkk < multilineVars.key.impliedNaturals.length; kkk++) {\n\t\t\t\t\t\t\tif (multilineVars.key.impliedNaturals[kkk].note === accs.accs[i].note)\n\t\t\t\t\t\t\t\tmultilineVars.key.impliedNaturals.splice(kkk, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Now see if any optional parameters are present. They have the form \"key=value\", except that \"clef=\" is optional\n\t\tvar token;\n\t\twhile (tokens.length > 0) {\n\t\t\tswitch (tokens[0].token) {\n\t\t\t\tcase \"m\":\n\t\t\t\tcase \"middle\":\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected = after middle\", str, 0); return ret; }\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.token !== \"=\") { warn(\"Expected = after middle\", str, token.start); break; }\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected parameter after middle=\", str, 0); return ret; }\n\t\t\t\t\tvar pitch = tokenizer.getPitchFromTokens(tokens);\n\t\t\t\t\tif (pitch.warn)\n\t\t\t\t\t\twarn(pitch.warn, str, 0);\n\t\t\t\t\tif (pitch.position)\n\t\t\t\t\t\tmultilineVars.clef.verticalPos = pitch.position - 6;\t// we get the position from the middle line, but want to offset it to the first ledger line.\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"transpose\":\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected = after transpose\", str, 0); return ret; }\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.token !== \"=\") { warn(\"Expected = after transpose\", str, token.start); break; }\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected parameter after transpose=\", str, 0); return ret; }\n\t\t\t\t\tif (tokens[0].type !== 'number') { warn(\"Expected number after transpose\", str, tokens[0].start); break; }\n\t\t\t\t\tmultilineVars.clef.transpose = tokens[0].intt;\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"stafflines\":\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected = after stafflines\", str, 0); return ret; }\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.token !== \"=\") { warn(\"Expected = after stafflines\", str, token.start); break; }\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected parameter after stafflines=\", str, 0); return ret; }\n\t\t\t\t\tif (tokens[0].type !== 'number') { warn(\"Expected number after stafflines\", str, tokens[0].start); break; }\n\t\t\t\t\tmultilineVars.clef.stafflines = tokens[0].intt;\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"staffscale\":\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected = after staffscale\", str, 0); return ret; }\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.token !== \"=\") { warn(\"Expected = after staffscale\", str, token.start); break; }\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected parameter after staffscale=\", str, 0); return ret; }\n\t\t\t\t\tif (tokens[0].type !== 'number') { warn(\"Expected number after staffscale\", str, tokens[0].start); break; }\n\t\t\t\t\tmultilineVars.clef.staffscale = tokens[0].floatt;\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"octave\":\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected = after octave\", str, 0); return ret; }\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.token !== \"=\") { warn(\"Expected = after octave\", str, token.start); break; }\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected parameter after octave=\", str, 0); return ret; }\n\t\t\t\t\tif (tokens[0].type !== 'number') { warn(\"Expected number after octave\", str, tokens[0].start); break; }\n\t\t\t\t\tmultilineVars.octave = tokens[0].intt;\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"style\":\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected = after style\", str, 0); return ret; }\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.token !== \"=\") { warn(\"Expected = after style\", str, token.start); break; }\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected parameter after style=\", str, 0); return ret; }\n\t\t\t\t\tswitch (tokens[0].token) {\n\t\t\t\t\t\tcase \"normal\":\n\t\t\t\t\t\tcase \"harmonic\":\n\t\t\t\t\t\tcase \"rhythm\":\n\t\t\t\t\t\tcase \"x\":\n\t\t\t\t\t\tcase \"triangle\":\n\t\t\t\t\t\t\tmultilineVars.style = tokens[0].token;\n\t\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\twarn(\"error parsing style element: \" + tokens[0].token, str, tokens[0].start);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"clef\":\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected = after clef\", str, 0); return ret; }\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.token !== \"=\") { warn(\"Expected = after clef\", str, token.start); break; }\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected parameter after clef=\", str, 0); return ret; }\n\t\t\t\t\t//break; yes, we want to fall through. That allows \"clef=\" to be optional.\n\t\t\t\tcase \"treble\":\n\t\t\t\tcase \"bass\":\n\t\t\t\tcase \"alto\":\n\t\t\t\tcase \"tenor\":\n\t\t\t\tcase \"perc\":\n\t\t\t\tcase \"none\":\n\t\t\t\t\t// clef is [clef=] [⟨clef type⟩] [⟨line number⟩] [+8|-8]\n\t\t\t\t\tvar clef = tokens.shift();\n\t\t\t\t\tswitch (clef.token) {\n\t\t\t\t\t\tcase 'treble':\n\t\t\t\t\t\tcase 'tenor':\n\t\t\t\t\t\tcase 'alto':\n\t\t\t\t\t\tcase 'bass':\n\t\t\t\t\t\tcase 'perc':\n\t\t\t\t\t\tcase 'none':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'C': clef.token = 'alto'; break;\n\t\t\t\t\t\tcase 'F': clef.token = 'bass'; break;\n\t\t\t\t\t\tcase 'G': clef.token = 'treble'; break;\n\t\t\t\t\t\tcase 'c': clef.token = 'alto'; break;\n\t\t\t\t\t\tcase 'f': clef.token = 'bass'; break;\n\t\t\t\t\t\tcase 'g': clef.token = 'treble'; break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\twarn(\"Expected clef name. Found \" + clef.token, str, clef.start);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (tokens.length > 0 && tokens[0].type === 'number') {\n\t\t\t\t\t\tclef.token += tokens[0].token;\n\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\t}\n\t\t\t\t\tif (tokens.length > 1 && (tokens[0].token === '-' || tokens[0].token === '+' || tokens[0].token === '^' || tokens[0].token === '_') && tokens[1].token === '8') {\n\t\t\t\t\t\tclef.token += tokens[0].token + tokens[1].token;\n\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\t}\n\t\t\t\t\tmultilineVars.clef = {type: clef.token, verticalPos: calcMiddle(clef.token, 0)};\n\t\t\t\t\tif (multilineVars.currentVoice && multilineVars.currentVoice.transpose !== undefined)\n\t\t\t\t\t\tmultilineVars.clef.transpose = multilineVars.currentVoice.transpose;\n\t\t\t\t\tret.foundClef = true;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\twarn(\"Unknown parameter: \" + tokens[0].token, str, tokens[0].start);\n\t\t\t\t\ttokens.shift();\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t};\n\n\tvar setCurrentVoice = function(id) {\n\t\tmultilineVars.currentVoice = multilineVars.voices[id];\n\t\ttuneBuilder.setCurrentVoice(multilineVars.currentVoice.staffNum, multilineVars.currentVoice.index);\n\t};\n\n\tparseKeyVoice.parseVoice = function(line, i, e) {\n\t\t//First truncate the string to the first non-space character after V: through either the\n\t\t//end of the line or a % character. Then remove trailing spaces, too.\n\t\tvar ret = tokenizer.getMeat(line, i, e);\n\t\tvar start = ret.start;\n\t\tvar end = ret.end;\n\t\t//The first thing on the line is the ID. It can be any non-space string and terminates at the\n\t\t//first space.\n\t\tvar id = tokenizer.getToken(line, start, end);\n\t\tif (id.length === 0) {\n\t\t\twarn(\"Expected a voice id\", line, start);\n\t\t\treturn;\n\t\t}\n\t\tvar isNew = false;\n\t\tif (multilineVars.voices[id] === undefined) {\n\t\t\tmultilineVars.voices[id] = {};\n\t\t\tisNew = true;\n\t\t\tif (multilineVars.score_is_present)\n\t\t\t\twarn(\"Can't have an unknown V: id when the %score directive is present\", line, start);\n\t\t}\n\t\tstart += id.length;\n\t\tstart += tokenizer.eatWhiteSpace(line, start);\n\n\t\tvar staffInfo = {startStaff: isNew};\n\t\tvar addNextTokenToStaffInfo = function(name) {\n\t\t\tvar attr = tokenizer.getVoiceToken(line, start, end);\n\t\t\tif (attr.warn !== undefined)\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice: \" + attr.warn, line, start);\n\t\t\telse if (attr.err !== undefined)\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice: \" + attr.err, line, start);\n\t\t\telse if (attr.token.length === 0 && line[start] !== '\"')\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice\", line, start);\n\t\t\telse\n\t\t\t\tstaffInfo[name] = attr.token;\n\t\t\tstart += attr.len;\n\t\t};\n\t\tvar addNextTokenToVoiceInfo = function(id, name, type) {\n\t\t\tvar attr = tokenizer.getVoiceToken(line, start, end);\n\t\t\tif (attr.warn !== undefined)\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice: \" + attr.warn, line, start);\n\t\t\telse if (attr.err !== undefined)\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice: \" + attr.err, line, start);\n\t\t\telse if (attr.token.length === 0 && line[start] !== '\"')\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice\", line, start);\n\t\t\telse {\n\t\t\t\tif (type === 'number')\n\t\t\t\t\tattr.token = parseFloat(attr.token);\n\t\t\t\tmultilineVars.voices[id][name] = attr.token;\n\t\t\t}\n\t\t\tstart += attr.len;\n\t\t};\n\t\tvar getNextToken = function(name, type) {\n\t\t\tvar attr = tokenizer.getVoiceToken(line, start, end);\n\t\t\tif (attr.warn !== undefined)\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice: \" + attr.warn, line, start);\n\t\t\telse if (attr.err !== undefined)\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice: \" + attr.err, line, start);\n\t\t\telse if (attr.token.length === 0 && line[start] !== '\"')\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice\", line, start);\n\t\t\telse {\n\t\t\t\tif (type === 'number')\n\t\t\t\t\tattr.token = parseFloat(attr.token);\n\t\t\t\treturn attr.token;\n\t\t\t}\n\t\t\tstart += attr.len;\n\t\t};\n\t\tvar addNextNoteTokenToVoiceInfo = function(id, name) {\n\t\t\tvar noteToTransposition = {\n\t\t\t\t\"_B\": 2,\n\t\t\t\t\"_E\": 9,\n\t\t\t\t\"_b\": -10,\n\t\t\t\t\"_e\": -3\n\t\t\t};\n\t\t\tvar attr = tokenizer.getVoiceToken(line, start, end);\n\t\t\tif (attr.warn !== undefined)\n\t\t\t\twarn(\"Expected one of (_B, _E, _b, _e) for \" + name + \" in voice: \" + attr.warn, line, start);\n\t\t\telse if (attr.token.length === 0 && line[start] !== '\"')\n\t\t\t\twarn(\"Expected one of (_B, _E, _b, _e) for \" + name + \" in voice\", line, start);\n\t\t\telse {\n\t\t\t\tvar t = noteToTransposition[attr.token];\n\t\t\t\tif (!t)\n\t\t\t\t\twarn(\"Expected one of (_B, _E, _b, _e) for \" + name + \" in voice\", line, start);\n\t\t\t\telse\n\t\t\t\t\tmultilineVars.voices[id][name] = t;\n\t\t\t}\n\t\t\tstart += attr.len;\n\t\t};\n\n\t\t//Then the following items can occur in any order:\n\t\twhile (start < end) {\n\t\t\tvar token = tokenizer.getVoiceToken(line, start, end);\n\t\t\tstart += token.len;\n\n\t\t\tif (token.warn) {\n\t\t\t\twarn(\"Error parsing voice: \" + token.warn, line, start);\n\t\t\t} else {\n\t\t\t\tvar attr = null;\n\t\t\t\tswitch (token.token) {\n\t\t\t\t\tcase 'clef':\n\t\t\t\t\tcase 'cl':\n\t\t\t\t\t\taddNextTokenToStaffInfo('clef');\n\t\t\t\t\t\t// TODO-PER: check for a legal clef; do octavizing\n\t\t\t\t\t\tvar oct = 0;\n\t//\t\t\t\t\t\t\tfor (var ii = 0; ii < staffInfo.clef.length; ii++) {\n\t//\t\t\t\t\t\t\t\tif (staffInfo.clef[ii] === ',') oct -= 7;\n\t//\t\t\t\t\t\t\t\telse if (staffInfo.clef[ii] === \"'\") oct += 7;\n\t//\t\t\t\t\t\t\t}\n\t\t\t\t\t\tif (staffInfo.clef !== undefined) {\n\t\t\t\t\t\t staffInfo.clef = staffInfo.clef.replace(/[',]/g, \"\"); //'//comment for emacs formatting of regexp\n\t\t\t\t\t\t\tif (staffInfo.clef.indexOf('+16') !== -1) {\n\t\t\t\t\t\t\t\toct += 14;\n\t\t\t\t\t\t\t\tstaffInfo.clef = staffInfo.clef.replace('+16', '');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstaffInfo.verticalPos = calcMiddle(staffInfo.clef, oct);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'treble':\n\t\t\t\t\tcase 'bass':\n\t\t\t\t\tcase 'tenor':\n\t\t\t\t\tcase 'alto':\n\t\t\t\t\tcase 'perc':\n\t\t\t\t\tcase 'none':\n\t\t\t\t\tcase 'treble\\'':\n\t\t\t\t\tcase 'bass\\'':\n\t\t\t\t\tcase 'tenor\\'':\n\t\t\t\t\tcase 'alto\\'':\n\t\t\t\t\tcase 'none\\'':\n\t\t\t\t\tcase 'treble\\'\\'':\n\t\t\t\t\tcase 'bass\\'\\'':\n\t\t\t\t\tcase 'tenor\\'\\'':\n\t\t\t\t\tcase 'alto\\'\\'':\n\t\t\t\t\tcase 'none\\'\\'':\n\t\t\t\t\tcase 'treble,':\n\t\t\t\t\tcase 'bass,':\n\t\t\t\t\tcase 'tenor,':\n\t\t\t\t\tcase 'alto,':\n\t\t\t\t\tcase 'none,':\n\t\t\t\t\tcase 'treble,,':\n\t\t\t\t\tcase 'bass,,':\n\t\t\t\t\tcase 'tenor,,':\n\t\t\t\t\tcase 'alto,,':\n\t\t\t\t\tcase 'none,,':\n\t\t\t\t\t\t// TODO-PER: handle the octave indicators on the clef by changing the middle property\n\t\t\t\t\t\tvar oct2 = 0;\n\t//\t\t\t\t\t\t\tfor (var iii = 0; iii < token.token.length; iii++) {\n\t//\t\t\t\t\t\t\t\tif (token.token[iii] === ',') oct2 -= 7;\n\t//\t\t\t\t\t\t\t\telse if (token.token[iii] === \"'\") oct2 += 7;\n\t//\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t staffInfo.clef = token.token.replace(/[',]/g, \"\"); //'//comment for emacs formatting of regexp\n\t\t\t\t\t\tstaffInfo.verticalPos = calcMiddle(staffInfo.clef, oct2);\n\t\t\t\t\t\tmultilineVars.voices[id].clef = token.token;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'staves':\n\t\t\t\t\tcase 'stave':\n\t\t\t\t\tcase 'stv':\n\t\t\t\t\t\taddNextTokenToStaffInfo('staves');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'brace':\n\t\t\t\t\tcase 'brc':\n\t\t\t\t\t\taddNextTokenToStaffInfo('brace');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'bracket':\n\t\t\t\t\tcase 'brk':\n\t\t\t\t\t\taddNextTokenToStaffInfo('bracket');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'name':\n\t\t\t\t\tcase 'nm':\n\t\t\t\t\t\taddNextTokenToStaffInfo('name');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'subname':\n\t\t\t\t\tcase 'sname':\n\t\t\t\t\tcase 'snm':\n\t\t\t\t\t\taddNextTokenToStaffInfo('subname');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'merge':\n\t\t\t\t\t\tstaffInfo.startStaff = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'stem':\n\t\t\t\t\tcase 'stems':\n\t\t\t\t\t\tattr = tokenizer.getVoiceToken(line, start, end);\n\t\t\t\t\t\tif (attr.warn !== undefined)\n\t\t\t\t\t\t\twarn(\"Expected value for stems in voice: \" + attr.warn, line, start);\n\t\t\t\t\t\telse if (attr.err !== undefined)\n\t\t\t\t\t\t\twarn(\"Expected value for stems in voice: \" + attr.err, line, start);\n\t\t\t\t\t\telse if (attr.token === 'up' || attr.token === 'down')\n\t\t\t\t\t\t\tmultilineVars.voices[id].stem = attr.token;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\twarn(\"Expected up or down for voice stem\", line, start);\n\t\t\t\t\t\tstart += attr.len;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'up':\n\t\t\t\t\tcase 'down':\n\t\t\t\t\t\tmultilineVars.voices[id].stem = token.token;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'middle':\n\t\t\t\t\tcase 'm':\n\t\t\t\t\t\taddNextTokenToStaffInfo('verticalPos');\n\t\t\t\t\t\tstaffInfo.verticalPos = parseMiddle(staffInfo.verticalPos).mid;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'gchords':\n\t\t\t\t\tcase 'gch':\n\t\t\t\t\t\tmultilineVars.voices[id].suppressChords = true;\n\t\t\t\t\t\t// gchords can stand on its own, or it could be gchords=0.\n\t\t\t\t\t\tattr = tokenizer.getVoiceToken(line, start, end);\n\t\t\t\t\t\tif (attr.token === \"0\")\n\t\t\t\t\t\t\tstart = start + attr.len;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'space':\n\t\t\t\t\tcase 'spc':\n\t\t\t\t\t\taddNextTokenToStaffInfo('spacing');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\taddNextTokenToVoiceInfo(id, 'scale', 'number');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'score':\n\t\t\t\t\t\taddNextNoteTokenToVoiceInfo(id, 'scoreTranspose');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'transpose':\n\t\t\t\t\t\taddNextTokenToVoiceInfo(id, 'transpose', 'number');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'stafflines':\n\t\t\t\t\t\taddNextTokenToVoiceInfo(id, 'stafflines', 'number');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'staffscale':\n\t\t\t\t\t\t// TODO-PER: This is passed to the engraver, but the engraver ignores it.\n\t\t\t\t\t\taddNextTokenToVoiceInfo(id, 'staffscale', 'number');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'octave':\n\t\t\t\t\t\taddNextTokenToVoiceInfo(id, 'octave', 'number');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'volume':\n\t\t\t\t\t\t// TODO-PER: This is accepted, but not implemented, yet.\n\t\t\t\t\t\taddNextTokenToVoiceInfo(id, 'volume', 'number');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'cue':\n\t\t\t\t\t\t// TODO-PER: This is accepted, but not implemented, yet.\n\t\t\t\t\t\tvar cue = getNextToken('cue', 'string');\n\t\t\t\t\t\tif (cue === 'on')\n\t\t\t\t\t\t\tmultilineVars.voices[id].scale = 0.6;\n\t\t\t\t\t\telse multilineVars.voices[id].scale = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"style\":\n\t\t\t\t\t\tattr = tokenizer.getVoiceToken(line, start, end);\n\t\t\t\t\t\tif (attr.warn !== undefined)\n\t\t\t\t\t\t\twarn(\"Expected value for style in voice: \" + attr.warn, line, start);\n\t\t\t\t\t\telse if (attr.err !== undefined)\n\t\t\t\t\t\t\twarn(\"Expected value for style in voice: \" + attr.err, line, start);\n\t\t\t\t\t\telse if (attr.token === 'normal' || attr.token === 'harmonic' || attr.token === 'rhythm' || attr.token === 'x' || attr.token === 'triangle')\n\t\t\t\t\t\t\tmultilineVars.voices[id].style = attr.token;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\twarn(\"Expected one of [normal, harmonic, rhythm, x, triangle] for voice style\", line, start);\n\t\t\t\t\t\tstart += attr.len;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t// default:\n\t\t\t\t\t// Use this to find V: usages that aren't handled.\n\t\t\t\t\t// \tconsole.log(\"parse voice\", token, tune.metaText.title);\n\t\t\t\t}\n\t\t\t}\n\t\t\tstart += tokenizer.eatWhiteSpace(line, start);\n\t\t}\n\n\t\t// now we've filled up staffInfo, figure out what to do with this voice\n\t\t// TODO-PER: It is unclear from the standard and the examples what to do with brace, bracket, and staves, so they are ignored for now.\n\t\tif (staffInfo.startStaff || multilineVars.staves.length === 0) {\n\t\t\tmultilineVars.staves.push({index: multilineVars.staves.length, meter: multilineVars.origMeter});\n\t\t\tif (!multilineVars.score_is_present)\n\t\t\t\tmultilineVars.staves[multilineVars.staves.length-1].numVoices = 0;\n\t\t}\n\t\tif (multilineVars.voices[id].staffNum === undefined) {\n\t\t\t// store where to write this for quick access later.\n\t\t\tmultilineVars.voices[id].staffNum = multilineVars.staves.length-1;\n\t\t\tvar vi = 0;\n\t\t\tfor(var v in multilineVars.voices) {\n\t\t\t\tif(multilineVars.voices.hasOwnProperty(v)) {\n\t\t\t\t\tif (multilineVars.voices[v].staffNum === multilineVars.voices[id].staffNum)\n\t\t\t\t\t\tvi++;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmultilineVars.voices[id].index = vi-1;\n\t\t}\n\t\tvar s = multilineVars.staves[multilineVars.voices[id].staffNum];\n\t\tif (!multilineVars.score_is_present)\n\t\t\ts.numVoices++;\n\t\tif (staffInfo.clef) s.clef = {type: staffInfo.clef, verticalPos: staffInfo.verticalPos};\n\t\tif (staffInfo.spacing) s.spacing_below_offset = staffInfo.spacing;\n\t\tif (staffInfo.verticalPos) s.verticalPos = staffInfo.verticalPos;\n\n\t\tif (staffInfo.name) {if (s.name) s.name.push(staffInfo.name); else s.name = [ staffInfo.name ];}\n\t\tif (staffInfo.subname) {if (s.subname) s.subname.push(staffInfo.subname); else s.subname = [ staffInfo.subname ];}\n\n\t\tsetCurrentVoice(id);\n\t};\n\n})();\n\nmodule.exports = parseKeyVoice;\n","var parseCommon = require('./abc_common');\nvar parseKeyVoice = require('./abc_parse_key_voice');\nvar transpose = require('./abc_transpose');\n\nvar tokenizer;\nvar warn;\nvar multilineVars;\nvar tune;\nvar tuneBuilder;\nvar header;\n\nvar {\n legalAccents,\n volumeDecorations,\n dynamicDecorations,\n accentPseudonyms,\n accentDynamicPseudonyms,\n nonDecorations,\n durations,\n pitches,\n rests,\n accMap,\n tripletQ\n} = require('./abc_parse_settings')\n\nvar MusicParser = function(_tokenizer, _warn, _multilineVars, _tune, _tuneBuilder, _header) {\n\ttokenizer = _tokenizer;\n\twarn = _warn;\n\tmultilineVars = _multilineVars;\n\ttune = _tune;\n\ttuneBuilder = _tuneBuilder;\n\theader = _header;\n\tthis.lineContinuation = false;\n}\n\n//\n// Parse line of music\n//\n// This is a stream of <(bar-marking|header|note-group)...> in any order, with optional spaces between each element\n// core-note is with no spaces within that\n// chord is with no spaces within that\n// grace-notes is spaces are allowed\n// note-group is spaces are allowed between items\n// bar-marking is or spaces allowed\n// header is spaces can occur between the colon, in the field, and before the close bracket\n// header can also be the only thing on a line. This is true even if it is a continuation line. In this case the brackets are not required.\n// a space is a back-tick, a space, or a tab. If it is a back-tick, then there is no end-beam.\n\n// Line preprocessing: anything after a % is ignored (the double %% should have been taken care of before this)\n// Then, all leading and trailing spaces are ignored.\n// If there was a line continuation, the \\n was replaced by a \\r and the \\ was replaced by a space. This allows the construct\n// of having a header mid-line conceptually, but actually be at the start of the line. This is equivolent to putting the header in [ ].\n\n// TODO-PER: How to handle ! for line break?\n// TODO-PER: dots before bar, dots before slur\n// TODO-PER: U: redefinable symbols.\n\n// Ambiguous symbols:\n// \"[\" can be the start of a chord, the start of a header element or part of a bar line.\n// --- if it is immediately followed by \"|\", it is a bar line\n// --- if it is immediately followed by K: L: M: V: it is a header (note: there are other headers mentioned in the standard, but I'm not sure how they would be used.)\n// --- otherwise it is the beginning of a chord\n// \"(\" can be the start of a slur or a triplet\n// --- if it is followed by a number from 2-9, then it is a triplet\n// --- otherwise it is a slur\n// \"]\"\n// --- if there is a chord open, then this is the close\n// --- if it is after a [|, then it is an invisible bar line\n// --- otherwise, it is par of a bar\n// \".\" can be a bar modifier or a slur modifier, or a decoration\n// --- if it comes immediately before a bar, it is a bar modifier\n// --- if it comes immediately before a slur, it is a slur modifier\n// --- otherwise it is a decoration for the next note.\n// number:\n// --- if it is after a bar, with no space, it is an ending marker\n// --- if it is after a ( with no space, it is a triplet count\n// --- if it is after a pitch or octave or slash, then it is a duration\n\n// Unambiguous symbols (except inside quoted strings):\n// vertical-bar, colon: part of a bar\n// ABCDEFGabcdefg: pitch\n// xyzZ: rest\n// comma, prime: octave\n// close-paren: end-slur\n// hyphen: tie\n// tilde, v, u, bang, plus, THLMPSO: decoration\n// carat, underscore, equal: accidental\n// ampersand: time reset\n// open-curly, close-curly: grace notes\n// double-quote: chord symbol\n// less-than, greater-than, slash: duration\n// back-tick, space, tab: space\n\nvar isInTie = function(multilineVars, overlayLevel, el) {\n\tif (multilineVars.inTie[overlayLevel] === undefined)\n\t\treturn false;\n\t// If this is single voice music then the voice index isn't set, so we use the first voice.\n\tvar voiceIndex = multilineVars.currentVoice ? multilineVars.currentVoice.staffNum * 100 + multilineVars.currentVoice.index : 0;\n\tif (multilineVars.inTie[overlayLevel][voiceIndex]) {\n\t\tif (el.pitches !== undefined || el.rest.type !== 'spacer')\n\t\t\treturn true;\n\t}\n\treturn false;\n};\n\nvar el = { };\nMusicParser.prototype.parseMusic = function(line) {\n\theader.resolveTempo();\n\t//multilineVars.havent_set_length = false;\t// To late to set this now.\n\tmultilineVars.is_in_header = false;\t// We should have gotten a key header by now, but just in case, this is definitely out of the header.\n\tvar i = 0;\n\tvar startOfLine = multilineVars.iChar;\n\t// see if there is nothing but a comment on this line. If so, just ignore it. A full line comment is optional white space followed by %\n\twhile (tokenizer.isWhiteSpace(line[i]) && i < line.length)\n\t\ti++;\n\tif (i === line.length || line[i] === '%')\n\t\treturn;\n\n\t// Start with the standard staff, clef and key symbols on each line\n\tvar delayStartNewLine = multilineVars.start_new_line;\n\tif (multilineVars.continueall === undefined)\n\t\tmultilineVars.start_new_line = true;\n\telse\n\t\tmultilineVars.start_new_line = false;\n\tvar tripletNotesLeft = 0;\n\n\t// See if the line starts with a header field\n\tvar retHeader = header.letter_to_body_header(line, i);\n\tif (retHeader[0] > 0) {\n\t\ti += retHeader[0];\n\t\t// fixes bug on this: c[V:2]d\n\t\tif (retHeader[1] === 'V')\n\t\t\tthis.startNewLine();\n\t\t\t// delayStartNewLine = true;\n\t\t// TODO-PER: Handle inline headers\n\t}\n\n\tvar overlayLevel = 0;\n\twhile (i < line.length)\n\t{\n\t\tvar startI = i;\n\t\tif (line[i] === '%')\n\t\t\tbreak;\n\n\t\tvar retInlineHeader = header.letter_to_inline_header(line, i, delayStartNewLine);\n\t\tif (retInlineHeader[0] > 0) {\n\t\t\ti += retInlineHeader[0];\n\t\t\tif (retInlineHeader[1] === 'V')\n\t\t\t\tdelayStartNewLine = true; // fixes bug on this: c[V:2]d\n\t\t\t// TODO-PER: Handle inline headers\n\t\t\t//multilineVars.start_new_line = false;\n\t\t} else {\n\t\t\t// Wait until here to actually start the line because we know we're past the inline statements.\n\t\t\tif (!tuneBuilder.hasBeginMusic() || (delayStartNewLine && !this.lineContinuation)) {\n\t\t\t\tthis.startNewLine();\n\t\t\t\tdelayStartNewLine = false;\n\t\t\t}\n\n\t\t\t// We need to decide if the following characters are a bar-marking or a note-group.\n\t\t\t// Unfortunately, that is ambiguous. Both can contain chord symbols and decorations.\n\t\t\t// If there is a grace note either before or after the chord symbols and decorations, then it is definitely a note-group.\n\t\t\t// If there is a bar marker, it is definitely a bar-marking.\n\t\t\t// If there is either a core-note or chord, it is definitely a note-group.\n\t\t\t// So, loop while we find grace-notes, chords-symbols, or decorations. [It is an error to have more than one grace-note group in a row; the others can be multiple]\n\t\t\t// Then, if there is a grace-note, we know where to go.\n\t\t\t// Else see if we have a chord, core-note, slur, triplet, or bar.\n\n\t\t\tvar ret;\n\t\t\twhile (1) {\n\t\t\t\tret = tokenizer.eatWhiteSpace(line, i);\n\t\t\t\tif (ret > 0) {\n\t\t\t\t\ti += ret;\n\t\t\t\t}\n\t\t\t\tif (i > 0 && line[i-1] === '\\x12') {\n\t\t\t\t\t// there is one case where a line continuation isn't the same as being on the same line, and that is if the next character after it is a header.\n\t\t\t\t\tret = header.letter_to_body_header(line, i);\n\t\t\t\t\tif (ret[0] > 0) {\n\t\t\t\t\t\tif (ret[1] === 'V')\n\t\t\t\t\t\t\tthis.startNewLine(); // fixes bug on this: c\\\\nV:2]\\\\nd\n\t\t\t\t\t\t// TODO: insert header here\n\t\t\t\t\t\ti = ret[0];\n\t\t\t\t\t\tmultilineVars.start_new_line = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// gather all the grace notes, chord symbols and decorations\n\t\t\t\tret = letter_to_spacer(line, i);\n\t\t\t\tif (ret[0] > 0) {\n\t\t\t\t\ti += ret[0];\n\t\t\t\t}\n\n\t\t\t\tret = letter_to_chord(line, i);\n\t\t\t\tif (ret[0] > 0) {\n\t\t\t\t\t// There could be more than one chord here if they have different positions.\n\t\t\t\t\t// If two chords have the same position, then connect them with newline.\n\t\t\t\t\tif (!el.chord)\n\t\t\t\t\t\tel.chord = [];\n\t\t\t\t\tvar chordName = tokenizer.translateString(ret[1]);\n\t\t\t\t\tchordName = chordName.replace(/;/g, \"\\n\");\n\t\t\t\t\tvar addedChord = false;\n\t\t\t\t\tfor (var ci = 0; ci < el.chord.length; ci++) {\n\t\t\t\t\t\tif (el.chord[ci].position === ret[2]) {\n\t\t\t\t\t\t\taddedChord = true;\n\t\t\t\t\t\t\tel.chord[ci].name += \"\\n\" + chordName;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (addedChord === false) {\n\t\t\t\t\t\tif (ret[2] === null && ret[3])\n\t\t\t\t\t\t\tel.chord.push({name: chordName, rel_position: ret[3]});\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tel.chord.push({name: chordName, position: ret[2]});\n\t\t\t\t\t}\n\n\t\t\t\t\ti += ret[0];\n\t\t\t\t\tvar ii = tokenizer.skipWhiteSpace(line.substring(i));\n\t\t\t\t\tif (ii > 0)\n\t\t\t\t\t\tel.force_end_beam_last = true;\n\t\t\t\t\ti += ii;\n\t\t\t\t} else {\n\t\t\t\t\tif (nonDecorations.indexOf(line[i]) === -1)\n\t\t\t\t\t\tret = letter_to_accent(line, i);\n\t\t\t\t\telse ret = [ 0 ];\n\t\t\t\t\tif (ret[0] > 0) {\n\t\t\t\t\t\tif (ret[1] === null) {\n\t\t\t\t\t\t\tif (i + 1 < line.length)\n\t\t\t\t\t\t\t\tthis.startNewLine();\t// There was a ! in the middle of the line. Start a new line if there is anything after it.\n\t\t\t\t\t\t} else if (ret[1].length > 0) {\n\t\t\t\t\t\t\tif (ret[1].indexOf(\"style=\") === 0) {\n\t\t\t\t\t\t\t\tel.style = ret[1].substr(6);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (el.decoration === undefined)\n\t\t\t\t\t\t\t\t\tel.decoration = [];\n\t\t\t\t\t\t\t\tif (ret[1] === 'beambr1')\n\t\t\t\t\t\t\t\t\tel.beambr = 1;\n\t\t\t\t\t\t\t\telse if (ret[1] === \"beambr2\")\n\t\t\t\t\t\t\t\t\tel.beambr = 2;\n\t\t\t\t\t\t\t\telse el.decoration.push(ret[1]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ti += ret[0];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tret = letter_to_grace(line, i);\n\t\t\t\t\t\t// TODO-PER: Be sure there aren't already grace notes defined. That is an error.\n\t\t\t\t\t\tif (ret[0] > 0) {\n\t\t\t\t\t\t\tel.gracenotes = ret[1];\n\t\t\t\t\t\t\ti += ret[0];\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tret = letter_to_bar(line, i);\n\t\t\tif (ret[0] > 0) {\n\t\t\t\t// This is definitely a bar\n\t\t\t\toverlayLevel = 0;\n\t\t\t\tif (el.gracenotes !== undefined) {\n\t\t\t\t\t// Attach the grace note to an invisible note\n\t\t\t\t\tel.rest = { type: 'spacer' };\n\t\t\t\t\tel.duration = 0.125; // TODO-PER: I don't think the duration of this matters much, but figure out if it does.\n\t\t\t\t\tmultilineVars.addFormattingOptions(el, tune.formatting, 'note');\n\t\t\t\t\ttuneBuilder.appendElement('note', startOfLine+i, startOfLine+i+ret[0], el);\n\t\t\t\t\tmultilineVars.measureNotEmpty = true;\n\t\t\t\t\tel = {};\n\t\t\t\t}\n\t\t\t\tvar bar = {type: ret[1]};\n\t\t\t\tif (bar.type.length === 0)\n\t\t\t\t\twarn(\"Unknown bar type\", line, i);\n\t\t\t\telse {\n\t\t\t\t\tif (multilineVars.inEnding && bar.type !== 'bar_thin') {\n\t\t\t\t\t\tbar.endEnding = true;\n\t\t\t\t\t\tmultilineVars.inEnding = false;\n\t\t\t\t\t}\n\t\t\t\t\tif (ret[2]) {\n\t\t\t\t\t\tbar.startEnding = ret[2];\n\t\t\t\t\t\tif (multilineVars.inEnding)\n\t\t\t\t\t\t\tbar.endEnding = true;\n\t\t\t\t\t\tmultilineVars.inEnding = true;\n\t\t\t\t\t\tif (ret[1] === \"bar_right_repeat\") {\n\t\t\t\t\t\t\t// restore the tie and slur state from the start repeat\n\t\t\t\t\t\t\tmultilineVars.restoreStartEndingHoldOvers();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// save inTie, inTieChord\n\t\t\t\t\t\t\tmultilineVars.duplicateStartEndingHoldOvers();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (el.decoration !== undefined)\n\t\t\t\t\t\tbar.decoration = el.decoration;\n\t\t\t\t\tif (el.chord !== undefined)\n\t\t\t\t\t\tbar.chord = el.chord;\n\t\t\t\t\tif (bar.startEnding && multilineVars.barFirstEndingNum === undefined)\n\t\t\t\t\t\tmultilineVars.barFirstEndingNum = multilineVars.currBarNumber;\n\t\t\t\t\telse if (bar.startEnding && bar.endEnding && multilineVars.barFirstEndingNum)\n\t\t\t\t\t\tmultilineVars.currBarNumber = multilineVars.barFirstEndingNum;\n\t\t\t\t\telse if (bar.endEnding)\n\t\t\t\t\t\tmultilineVars.barFirstEndingNum = undefined;\n\t\t\t\t\tif (bar.type !== 'bar_invisible' && multilineVars.measureNotEmpty) {\n\t\t\t\t\t\tvar isFirstVoice = multilineVars.currentVoice === undefined || (multilineVars.currentVoice.staffNum === 0 && multilineVars.currentVoice.index === 0);\n\t\t\t\t\t\tif (isFirstVoice) {\n\t\t\t\t\t\t\tmultilineVars.currBarNumber++;\n\t\t\t\t\t\t\tif (multilineVars.barNumbers && multilineVars.currBarNumber % multilineVars.barNumbers === 0)\n\t\t\t\t\t\t\t\tbar.barNumber = multilineVars.currBarNumber;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tmultilineVars.addFormattingOptions(el, tune.formatting, 'bar');\n\t\t\t\t\ttuneBuilder.appendElement('bar', startOfLine+startI, startOfLine+i+ret[0], bar);\n\t\t\t\t\tmultilineVars.measureNotEmpty = false;\n\t\t\t\t\tel = {};\n\t\t\t\t}\n\t\t\t\ti += ret[0];\n\t\t\t} else if (line[i] === '&') {\t// backtrack to beginning of measure\n\t\t\t\tret = letter_to_overlay(line, i);\n\t\t\t\tif (ret[0] > 0) {\n\t\t\t\t\ttuneBuilder.appendElement('overlay', startOfLine, startOfLine+1, {});\n\t\t\t\t\ti += 1;\n\t\t\t\t\toverlayLevel++;\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\t// This is definitely a note group\n\t\t\t\t//\n\t\t\t\t// Look for as many open slurs and triplets as there are. (Note: only the first triplet is valid.)\n\t\t\t\tret = letter_to_open_slurs_and_triplets(line, i);\n\t\t\t\tif (ret.consumed > 0) {\n\t\t\t\t\tif (ret.startSlur !== undefined)\n\t\t\t\t\t\tel.startSlur = ret.startSlur;\n\t\t\t\t\tif (ret.dottedSlur)\n\t\t\t\t\t\tel.dottedSlur = true;\n\t\t\t\t\tif (ret.triplet !== undefined) {\n\t\t\t\t\t\tif (tripletNotesLeft > 0)\n\t\t\t\t\t\t\twarn(\"Can't nest triplets\", line, i);\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tel.startTriplet = ret.triplet;\n\t\t\t\t\t\t\tel.tripletMultiplier = ret.tripletQ / ret.triplet;\n\t\t\t\t\t\t\tel.tripletR = ret.num_notes;\n\t\t\t\t\t\t\ttripletNotesLeft = ret.num_notes === undefined ? ret.triplet : ret.num_notes;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ti += ret.consumed;\n\t\t\t\t}\n\n\t\t\t\t// handle chords.\n\t\t\t\tif (line[i] === '[') {\n\t\t\t\t\tvar chordStartChar = i;\n\t\t\t\t\ti++;\n\t\t\t\t\tvar chordDuration = null;\n\t\t\t\t\tvar rememberEndBeam = false;\n\n\t\t\t\t\tvar done = false;\n\t\t\t\t\twhile (!done) {\n\t\t\t\t\t\tvar accent = letter_to_accent(line, i);\n\t\t\t\t\t\tif (accent[0] > 0) {\n\t\t\t\t\t\t\ti += accent[0];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar chordNote = getCoreNote(line, i, {}, false);\n\t\t\t\t\t\tif (chordNote !== null && chordNote.pitch !== undefined) {\n\t\t\t\t\t\t\tif (accent[0] > 0) { // If we found a decoration above, it modifies the entire chord. \"style\" is handled below.\n\t\t\t\t\t\t\t\tif (accent[1].indexOf(\"style=\") !== 0) {\n\t\t\t\t\t\t\t\t\tif (el.decoration === undefined)\n\t\t\t\t\t\t\t\t\t\tel.decoration = [];\n\t\t\t\t\t\t\t\t\tel.decoration.push(accent[1]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (chordNote.end_beam) {\n\t\t\t\t\t\t\t\tel.end_beam = true;\n\t\t\t\t\t\t\t\tdelete chordNote.end_beam;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (el.pitches === undefined) {\n\t\t\t\t\t\t\t\tel.duration = chordNote.duration;\n\t\t\t\t\t\t\t\tel.pitches = [ chordNote ];\n\t\t\t\t\t\t\t} else\t// Just ignore the note lengths of all but the first note. The standard isn't clear here, but this seems less confusing.\n\t\t\t\t\t\t\t\tel.pitches.push(chordNote);\n\t\t\t\t\t\t\tdelete chordNote.duration;\n\t\t\t\t\t\t\tif (accent[0] > 0) { // If we found a style above, it modifies the individual pitch, not the entire chord.\n\t\t\t\t\t\t\t\tif (accent[1].indexOf(\"style=\") === 0) {\n\t\t\t\t\t\t\t\t\tel.pitches[el.pitches.length-1].style = accent[1].substr(6);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (multilineVars.inTieChord[el.pitches.length]) {\n\t\t\t\t\t\t\t\tchordNote.endTie = true;\n\t\t\t\t\t\t\t\tmultilineVars.inTieChord[el.pitches.length] = undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (chordNote.startTie)\n\t\t\t\t\t\t\t\tmultilineVars.inTieChord[el.pitches.length] = true;\n\n\t\t\t\t\t\t\ti = chordNote.endChar;\n\t\t\t\t\t\t\tdelete chordNote.endChar;\n\t\t\t\t\t\t} else if (line[i] === ' ') {\n\t\t\t\t\t\t\t// Spaces are not allowed in chords, but we can recover from it by ignoring it.\n\t\t\t\t\t\t\twarn(\"Spaces are not allowed in chords\", line, i);\n\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (i < line.length && line[i] === ']') {\n\t\t\t\t\t\t\t\t// consume the close bracket\n\t\t\t\t\t\t\t\ti++;\n\n\t\t\t\t\t\t\t\tif (multilineVars.next_note_duration !== 0) {\n\t\t\t\t\t\t\t\t\tel.duration = el.duration * multilineVars.next_note_duration;\n\t\t\t\t\t\t\t\t\tmultilineVars.next_note_duration = 0;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (isInTie(multilineVars, overlayLevel, el)) {\n\t\t\t\t\t\t\t\t\tel.pitches.forEach(function(pitch) { pitch.endTie = true; });\n\t\t\t\t\t\t\t\t\tsetIsInTie(multilineVars, overlayLevel, false);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (tripletNotesLeft > 0 && !(el.rest && el.rest.type === \"spacer\")) {\n\t\t\t\t\t\t\t\t\ttripletNotesLeft--;\n\t\t\t\t\t\t\t\t\tif (tripletNotesLeft === 0) {\n\t\t\t\t\t\t\t\t\t\tel.endTriplet = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tvar postChordDone = false;\n\t\t\t\t\t\t\t\twhile (i < line.length && !postChordDone) {\n\t\t\t\t\t\t\t\t\tswitch (line[i]) {\n\t\t\t\t\t\t\t\t\t\tcase ' ':\n\t\t\t\t\t\t\t\t\t\tcase '\\t':\n\t\t\t\t\t\t\t\t\t\t\taddEndBeam(el);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase ')':\n\t\t\t\t\t\t\t\t\t\t\tif (el.endSlur === undefined) el.endSlur = 1; else el.endSlur++;\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase '-':\n\t\t\t\t\t\t\t\t\t\t\tel.pitches.forEach(function(pitch) { pitch.startTie = {}; });\n\t\t\t\t\t\t\t\t\t\t\tsetIsInTie(multilineVars, overlayLevel, true);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase '>':\n\t\t\t\t\t\t\t\t\t\tcase '<':\n\t\t\t\t\t\t\t\t\t\t\tvar br2 = getBrokenRhythm(line, i);\n\t\t\t\t\t\t\t\t\t\t\ti += br2[0] - 1;\t// index gets incremented below, so we'll let that happen\n\t\t\t\t\t\t\t\t\t\t\tmultilineVars.next_note_duration = br2[2];\n\t\t\t\t\t\t\t\t\t\t\tif (chordDuration)\n\t\t\t\t\t\t\t\t\t\t\t\tchordDuration = chordDuration * br2[1];\n\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t\tchordDuration = br2[1];\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase '1':\n\t\t\t\t\t\t\t\t\t\tcase '2':\n\t\t\t\t\t\t\t\t\t\tcase '3':\n\t\t\t\t\t\t\t\t\t\tcase '4':\n\t\t\t\t\t\t\t\t\t\tcase '5':\n\t\t\t\t\t\t\t\t\t\tcase '6':\n\t\t\t\t\t\t\t\t\t\tcase '7':\n\t\t\t\t\t\t\t\t\t\tcase '8':\n\t\t\t\t\t\t\t\t\t\tcase '9':\n\t\t\t\t\t\t\t\t\t\tcase '/':\n\t\t\t\t\t\t\t\t\t\t\tvar fraction = tokenizer.getFraction(line, i);\n\t\t\t\t\t\t\t\t\t\t\tchordDuration = fraction.value;\n\t\t\t\t\t\t\t\t\t\t\ti = fraction.index;\n\t\t\t\t\t\t\t\t\t\t\tvar ch = line[i]\n\t\t\t\t\t\t\t\t\t\t\tif (ch === ' ')\n\t\t\t\t\t\t\t\t\t\t\t\trememberEndBeam = true;\n\t\t\t\t\t\t\t\t\t\t\tif (ch === '-' || ch === ')' || ch === ' ' || ch === '<' || ch === '>')\n\t\t\t\t\t\t\t\t\t\t\t\ti--; // Subtracting one because one is automatically added below\n\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t\tpostChordDone = true;\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\t\tpostChordDone = true;\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (!postChordDone) {\n\t\t\t\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else\n\t\t\t\t\t\t\t\twarn(\"Expected ']' to end the chords\", line, i);\n\n\t\t\t\t\t\t\tif (el.pitches !== undefined) {\n\t\t\t\t\t\t\t\tif (chordDuration !== null) {\n\t\t\t\t\t\t\t\t\tel.duration = el.duration * chordDuration;\n\t\t\t\t\t\t\t\t\tif (rememberEndBeam)\n\t\t\t\t\t\t\t\t\t\taddEndBeam(el);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tmultilineVars.addFormattingOptions(el, tune.formatting, 'note');\n\t\t\t\t\t\t\t\ttuneBuilder.appendElement('note', startOfLine+startI, startOfLine+i, el);\n\t\t\t\t\t\t\t\tmultilineVars.measureNotEmpty = true;\n\t\t\t\t\t\t\t\tel = {};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdone = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\t// Single pitch\n\t\t\t\t\tvar el2 = {};\n\t\t\t\t\tvar core = getCoreNote(line, i, el2, true);\n\t\t\t\t\tif (el2.endTie !== undefined) setIsInTie(multilineVars, overlayLevel, true);\n\t\t\t\t\tif (core !== null) {\n\t\t\t\t\t\tif (core.pitch !== undefined) {\n\t\t\t\t\t\t\tel.pitches = [ { } ];\n\t\t\t\t\t\t\t// TODO-PER: straighten this out so there is not so much copying: getCoreNote shouldn't change e'\n\t\t\t\t\t\t\tif (core.accidental !== undefined) el.pitches[0].accidental = core.accidental;\n\t\t\t\t\t\t\tel.pitches[0].pitch = core.pitch;\n\t\t\t\t\t\t\tel.pitches[0].name = core.name;\n\t\t\t\t\t\t\tif (core.midipitch || core.midipitch === 0)\n\t\t\t\t\t\t\t\tel.pitches[0].midipitch = core.midipitch;\n\t\t\t\t\t\t\tif (core.endSlur !== undefined) el.pitches[0].endSlur = core.endSlur;\n\t\t\t\t\t\t\tif (core.endTie !== undefined) el.pitches[0].endTie = core.endTie;\n\t\t\t\t\t\t\tif (core.startSlur !== undefined) el.pitches[0].startSlur = core.startSlur;\n\t\t\t\t\t\t\tif (el.startSlur !== undefined) el.pitches[0].startSlur = el.startSlur;\n\t\t\t\t\t\t\tif (el.dottedSlur !== undefined) el.pitches[0].dottedSlur = true;\n\t\t\t\t\t\t\tif (core.startTie !== undefined) el.pitches[0].startTie = core.startTie;\n\t\t\t\t\t\t\tif (el.startTie !== undefined) el.pitches[0].startTie = el.startTie;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tel.rest = core.rest;\n\t\t\t\t\t\t\tif (core.endSlur !== undefined) el.endSlur = core.endSlur;\n\t\t\t\t\t\t\tif (core.endTie !== undefined) el.rest.endTie = core.endTie;\n\t\t\t\t\t\t\tif (core.startSlur !== undefined) el.startSlur = core.startSlur;\n\t\t\t\t\t\t\tif (core.startTie !== undefined) el.rest.startTie = core.startTie;\n\t\t\t\t\t\t\tif (el.startTie !== undefined) el.rest.startTie = el.startTie;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (core.chord !== undefined) el.chord = core.chord;\n\t\t\t\t\t\tif (core.duration !== undefined) el.duration = core.duration;\n\t\t\t\t\t\tif (core.decoration !== undefined) el.decoration = core.decoration;\n\t\t\t\t\t\tif (core.graceNotes !== undefined) el.graceNotes = core.graceNotes;\n\t\t\t\t\t\tdelete el.startSlur;\n\t\t\t\t\t\tdelete el.dottedSlur;\n\t\t\t\t\t\tif (isInTie(multilineVars, overlayLevel, el)) {\n\t\t\t\t\t\t\tif (el.pitches !== undefined) {\n\t\t\t\t\t\t\t\tel.pitches[0].endTie = true;\n\t\t\t\t\t\t\t} else if (el.rest.type !== 'spacer') {\n\t\t\t\t\t\t\t\tel.rest.endTie = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsetIsInTie(multilineVars, overlayLevel, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (core.startTie || el.startTie)\n\t\t\t\t\t\t\tsetIsInTie(multilineVars, overlayLevel, true);\n\t\t\t\t\t\ti = core.endChar;\n\n\t\t\t\t\t\tif (tripletNotesLeft > 0 && !(core.rest && core.rest.type === \"spacer\")) {\n\t\t\t\t\t\t\ttripletNotesLeft--;\n\t\t\t\t\t\t\tif (tripletNotesLeft === 0) {\n\t\t\t\t\t\t\t\tel.endTriplet = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (core.end_beam)\n\t\t\t\t\t\t\taddEndBeam(el);\n\n\t\t\t\t\t\t// If there is a whole rest, then it should be the duration of the measure, not it's own duration. We need to special case it.\n\t\t\t\t\t\t// If the time signature length is greater than 4/4, though, then a whole rest has no special treatment.\n\t\t\t\t\t\tif (el.rest && el.rest.type === 'rest' && el.duration === 1 && durationOfMeasure(multilineVars) <= 1) {\n\t\t\t\t\t\t\tel.rest.type = 'whole';\n\n\t\t\t\t\t\t\tel.duration = durationOfMeasure(multilineVars);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Create a warning if this is not a displayable duration.\n\t\t\t\t\t\t// The first item on a line is a regular note value, each item after that represents a dot placed after the previous note.\n\t\t\t\t\t\t// Only durations less than a whole note are tested because whole note durations have some tricky rules.\n\n if (el.duration < 1 && durations.indexOf(el.duration) === -1 && el.duration !== 0) {\n\t\t\t\t\t\t\tif (!el.rest || el.rest.type !== 'spacer')\n\t\t\t\t\t\t\t\twarn(\"Duration not representable: \" + line.substring(startI, i), line, i);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmultilineVars.addFormattingOptions(el, tune.formatting, 'note');\n\t\t\t\t\t\ttuneBuilder.appendElement('note', startOfLine+startI, startOfLine+i, el);\n\t\t\t\t\t\tmultilineVars.measureNotEmpty = true;\n\t\t\t\t\t\tel = {};\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (i === startI) {\t// don't know what this is, so ignore it.\n\t\t\t\t\tif (line[i] !== ' ' && line[i] !== '`')\n\t\t\t\t\t\twarn(\"Unknown character ignored\", line, i);\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tthis.lineContinuation = line.indexOf('\\x12') >= 0 || (retHeader[0] > 0)\n\tif (!this.lineContinuation) { el = { } }\n};\n\nvar setIsInTie =function(multilineVars, overlayLevel, value) {\n\t// If this is single voice music then the voice index isn't set, so we use the first voice.\n\tvar voiceIndex = multilineVars.currentVoice ? multilineVars.currentVoice.staffNum * 100 + multilineVars.currentVoice.index : 0;\n\tif (multilineVars.inTie[overlayLevel] === undefined)\n\t\tmultilineVars.inTie[overlayLevel] = [];\n\tmultilineVars.inTie[overlayLevel][voiceIndex] = value;\n};\n\nvar letter_to_chord = function(line, i) {\n\tif (line[i] === '\"')\n\t{\n\t\tvar chord = tokenizer.getBrackettedSubstring(line, i, 5);\n\t\tif (!chord[2])\n\t\t\twarn(\"Missing the closing quote while parsing the chord symbol\", line , i);\n\t\t// If it starts with ^, then the chord appears above.\n\t\t// If it starts with _ then the chord appears below.\n\t\t// (note that the 2.0 draft standard defines them as not chords, but annotations and also defines @.)\n\t\tif (chord[0] > 0 && chord[1].length > 0 && chord[1][0] === '^') {\n\t\t\tchord[1] = chord[1].substring(1);\n\t\t\tchord[2] = 'above';\n\t\t} else if (chord[0] > 0 && chord[1].length > 0 && chord[1][0] === '_') {\n\t\t\tchord[1] = chord[1].substring(1);\n\t\t\tchord[2] = 'below';\n\t\t} else if (chord[0] > 0 && chord[1].length > 0 && chord[1][0] === '<') {\n\t\t\tchord[1] = chord[1].substring(1);\n\t\t\tchord[2] = 'left';\n\t\t} else if (chord[0] > 0 && chord[1].length > 0 && chord[1][0] === '>') {\n\t\t\tchord[1] = chord[1].substring(1);\n\t\t\tchord[2] = 'right';\n\t\t} else if (chord[0] > 0 && chord[1].length > 0 && chord[1][0] === '@') {\n\t\t\t// @-15,5.7\n\t\t\tchord[1] = chord[1].substring(1);\n\t\t\tvar x = tokenizer.getFloat(chord[1]);\n\t\t\tif (x.digits === 0)\n\t\t\t\twarn(\"Missing first position in absolutely positioned annotation.\", line , i);\n\t\t\tchord[1] = chord[1].substring(x.digits);\n\t\t\tif (chord[1][0] !== ',')\n\t\t\t\twarn(\"Missing comma absolutely positioned annotation.\", line , i);\n\t\t\tchord[1] = chord[1].substring(1);\n\t\t\tvar y = tokenizer.getFloat(chord[1]);\n\t\t\tif (y.digits === 0)\n\t\t\t\twarn(\"Missing second position in absolutely positioned annotation.\", line , i);\n\t\t\tchord[1] = chord[1].substring(y.digits);\n\t\t\tvar ws = tokenizer.skipWhiteSpace(chord[1]);\n\t\t\tchord[1] = chord[1].substring(ws);\n\t\t\tchord[2] = null;\n\t\t\tchord[3] = { x: x.value, y: y.value };\n\t\t} else {\n\t\t\tif (multilineVars.freegchord !== true) {\n\t\t\t\tchord[1] = chord[1].replace(/([ABCDEFG0-9])b/g, \"$1♭\");\n\t\t\t\tchord[1] = chord[1].replace(/([ABCDEFG0-9])#/g, \"$1♯\");\n\t\t\t\tchord[1] = chord[1].replace(/^([ABCDEFG])([♯♭]?)o([^A-Za-z])/g, \"$1$2°$3\");\n\t\t\t\tchord[1] = chord[1].replace(/^([ABCDEFG])([♯♭]?)o$/g, \"$1$2°\");\n\t\t\t\tchord[1] = chord[1].replace(/^([ABCDEFG])([♯♭]?)0([^A-Za-z])/g, \"$1$2ø$3\");\n\t\t\t\tchord[1] = chord[1].replace(/^([ABCDEFG])([♯♭]?)\\^([^A-Za-z])/g, \"$1$2∆$3\");\n\t\t\t}\n\t\t\tchord[2] = 'default';\n\t\t\tchord[1] = transpose.chordName(multilineVars, chord[1]);\n\t\t}\n\t\treturn chord;\n\t}\n\treturn [0, \"\"];\n};\n\nvar letter_to_grace = function(line, i) {\n\t// Grace notes are an array of: startslur, note, endslur, space; where note is accidental, pitch, duration\n\tif (line[i] === '{') {\n\t\t// fetch the gracenotes string and consume that into the array\n\t\tvar gra = tokenizer.getBrackettedSubstring(line, i, 1, '}');\n\t\tif (!gra[2])\n\t\t\twarn(\"Missing the closing '}' while parsing grace note\", line, i);\n\t\t// If there is a slur after the grace construction, then move it to the last note inside the grace construction\n\t\tif (line[i+gra[0]] === ')') {\n\t\t\tgra[0]++;\n\t\t\tgra[1] += ')';\n\t\t}\n\n\t\tvar gracenotes = [];\n\t\tvar ii = 0;\n\t\tvar inTie = false;\n\t\twhile (ii < gra[1].length) {\n\t\t\tvar acciaccatura = false;\n\t\t\tif (gra[1][ii] === '/') {\n\t\t\t\tacciaccatura = true;\n\t\t\t\tii++;\n\t\t\t}\n\t\t\tvar note = getCoreNote(gra[1], ii, {}, false);\n\t\t\tif (note !== null) {\n\t\t\t\t// The grace note durations should not be affected by the default length: they should be based on 1/16, so if that isn't the default, then multiply here.\n\t\t\t\tnote.duration = note.duration / (multilineVars.default_length * 8);\n\t\t\t\tif (acciaccatura)\n\t\t\t\t\tnote.acciaccatura = true;\n\t\t\t\tgracenotes.push(note);\n\n\t\t\t\tif (inTie) {\n\t\t\t\t\tnote.endTie = true;\n\t\t\t\t\tinTie = false;\n\t\t\t\t}\n\t\t\t\tif (note.startTie)\n\t\t\t\t\tinTie = true;\n\n\t\t\t\tii = note.endChar;\n\t\t\t\tdelete note.endChar;\n\n\t\t\t\tif (note.end_beam) {\n\t\t\t\t\tnote.endBeam = true;\n\t\t\t\t\tdelete note.end_beam;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// We shouldn't get anything but notes or a space here, so report an error\n\t\t\t\tif (gra[1][ii] === ' ') {\n\t\t\t\t\tif (gracenotes.length > 0)\n\t\t\t\t\t\tgracenotes[gracenotes.length-1].endBeam = true;\n\t\t\t\t} else\n\t\t\t\t\twarn(\"Unknown character '\" + gra[1][ii] + \"' while parsing grace note\", line, i);\n\t\t\t\tii++;\n\t\t\t}\n\t\t}\n\t\tif (gracenotes.length)\n\t\t\treturn [gra[0], gracenotes];\n\t}\n\treturn [ 0 ];\n};\n\nfunction letter_to_overlay(line, i) {\n\tif (line[i] === '&') {\n\t\tvar start = i;\n\t\twhile (line[i] && line[i] !== ':' && line[i] !== '|')\n\t\t\ti++;\n\t\treturn [ i-start, line.substring(start+1, i) ];\n\t}\n\treturn [ 0 ];\n}\n\nfunction durationOfMeasure(multilineVars) {\n\t// TODO-PER: This could be more complicated if one of the unusual measures is used.\n\tvar meter = multilineVars.origMeter;\n\tif (!meter || meter.type !== 'specified')\n\t\treturn 1;\n\tif (!meter.value || meter.value.length === 0)\n\t\treturn 1;\n\treturn parseInt(meter.value[0].num, 10) / parseInt(meter.value[0].den, 10);\n}\n\n\n\n\nvar letter_to_accent = function(line, i) {\n\tvar macro = multilineVars.macros[line[i]];\n\n\tif (macro !== undefined) {\n\t\tif (macro[0] === '!' || macro[0] === '+')\n\t\t\tmacro = macro.substring(1);\n\t\tif (macro[macro.length-1] === '!' || macro[macro.length-1] === '+')\n\t\t\tmacro = macro.substring(0, macro.length-1);\n\t\tif (legalAccents.includes(macro))\n\t\t\treturn [ 1, macro ];\n\t\telse if (volumeDecorations.includes(macro)) {\n\t\t\tif (multilineVars.volumePosition === 'hidden')\n\t\t\t\tmacro = \"\";\n\t\t\treturn [1, macro];\n\t\t} else if (dynamicDecorations.includes(macro)) {\n\t\t\tif (multilineVars.dynamicPosition === 'hidden')\n\t\t\t\tmacro = \"\";\n\t\t\treturn [1, macro];\n\t\t} else {\n\t\t\tif (!multilineVars.ignoredDecorations.includes(macro))\n\t\t\t\twarn(\"Unknown macro: \" + macro, line, i);\n\t\t\treturn [1, '' ];\n\t\t}\n\t}\n\tswitch (line[i])\n\t{\n\t\tcase '.':\n\t\t\tif (line[i+1] === '(' || line[i+1] === '-') // a dot then open paren is a dotted slur; likewise dot dash is dotted tie.\n\t\t\t\tbreak;\n\t\t\treturn [1, 'staccato'];\n\t\tcase 'u':return [1, 'upbow'];\n\t\tcase 'v':return [1, 'downbow'];\n\t\tcase '~':return [1, 'irishroll'];\n\t\tcase '!':\n\t\tcase '+':\n\t\t\tvar ret = tokenizer.getBrackettedSubstring(line, i, 5);\n\t\t\t// Be sure that the accent is recognizable.\n\t\t\tif (ret[1].length > 1 && (ret[1][0] === '^' || ret[1][0] ==='_'))\n\t\t\t\tret[1] = ret[1].substring(1);\t// TODO-PER: The test files have indicators forcing the ornament to the top or bottom, but that isn't in the standard. We'll just ignore them.\n\t\t\tif (legalAccents.includes(ret[1]))\n\t\t\t\treturn ret;\n\t\t\tif (volumeDecorations.includes(ret[1])) {\n\t\t\t\tif (multilineVars.volumePosition === 'hidden' )\n\t\t\t\t\tret[1] = '';\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t\tif (dynamicDecorations.includes(ret[1])) {\n\t\t\t\tif (multilineVars.dynamicPosition === 'hidden' )\n\t\t\t\t\tret[1] = '';\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tvar ind = accentPseudonyms.findIndex(function (acc) { return ret[1] === acc[0]})\n\t\t\tif (ind >= 0) {\n\t\t\t\tret[1] = accentPseudonyms[ind][1];\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tind = accentDynamicPseudonyms.findIndex(function (acc) { return ret[1] === acc[0]})\n\t\t\tif (ind >= 0) {\n\t\t\t\tret[1] = accentDynamicPseudonyms[ind][1];\n\t\t\t\tif (multilineVars.dynamicPosition === 'hidden' )\n\t\t\t\t\tret[1] = '';\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// We didn't find the accent in the list, so consume the space, but don't return an accent.\n\t\t\t// Although it is possible that ! was used as a line break, so accept that.\n\t\t\tif (line[i] === '!' && (ret[0] === 1 || line[i+ret[0]-1] !== '!'))\n\t\t\t\treturn [1, null ];\n\t\t\twarn(\"Unknown decoration: \" + ret[1], line, i);\n\t\t\tret[1] = \"\";\n\t\t\treturn ret;\n\t\tcase 'H':return [1, 'fermata'];\n\t\tcase 'J':return [1, 'slide'];\n\t\tcase 'L':return [1, 'accent'];\n\t\tcase 'M':return [1, 'mordent'];\n\t\tcase 'O':return[1, 'coda'];\n\t\tcase 'P':return[1, 'pralltriller'];\n\t\tcase 'R':return [1, 'roll'];\n\t\tcase 'S':return [1, 'segno'];\n\t\tcase 'T':return [1, 'trill'];\n\t}\n\treturn [0, 0];\n};\n\nvar letter_to_spacer = function(line, i) {\n\tvar start = i;\n\twhile (tokenizer.isWhiteSpace(line[i]))\n\t\ti++;\n\treturn [ i-start ];\n};\n\n// returns the class of the bar line\n// the number of the repeat\n// and the number of characters used up\n// if 0 is returned, then the next element was not a bar line\nvar letter_to_bar = function(line, curr_pos) {\n\tvar ret = tokenizer.getBarLine(line, curr_pos);\n\tif (ret.len === 0)\n\t\treturn [0,\"\"];\n\tif (ret.warn) {\n\t\twarn(ret.warn, line, curr_pos);\n\t\treturn [ret.len,\"\"];\n\t}\n\n\t// Now see if this is a repeated ending\n\t// A repeated ending is all of the characters 1,2,3,4,5,6,7,8,9,0,-, and comma\n\t// It can also optionally start with '[', which is ignored.\n\t// Also, it can have white space before the '['.\n\tfor (var ws = 0; ws < line.length; ws++)\n\t\tif (line[curr_pos + ret.len + ws] !== ' ')\n\t\t\tbreak;\n\tvar orig_bar_len = ret.len;\n\tif (line[curr_pos+ret.len+ws] === '[') {\n\t\tret.len += ws + 1;\n\t}\n\n\t// It can also be a quoted string. It is unclear whether that construct requires '[', but it seems like it would. otherwise it would be confused with a regular chord.\n\tif (line[curr_pos+ret.len] === '\"' && line[curr_pos+ret.len-1] === '[') {\n\t\tvar ending = tokenizer.getBrackettedSubstring(line, curr_pos+ret.len, 5);\n\t\treturn [ret.len+ending[0], ret.token, ending[1]];\n\t}\n\tvar retRep = tokenizer.getTokenOf(line.substring(curr_pos+ret.len), \"1234567890-,\");\n\tif (retRep.len === 0 || retRep.token[0] === '-')\n\t\treturn [orig_bar_len, ret.token];\n\n\treturn [ret.len+retRep.len, ret.token, retRep.token];\n};\n\nvar letter_to_open_slurs_and_triplets = function(line, i) {\n\t// consume spaces, and look for all the open parens. If there is a number after the open paren,\n\t// that is a triplet. Otherwise that is a slur. Collect all the slurs and the first triplet.\n\tvar ret = {};\n\tvar start = i;\n\tif (line[i] === '.' && line[i+1] === '(') {\n\t\tret.dottedSlur = true;\n\t\ti++;\n\t}\n\twhile (line[i] === '(' || tokenizer.isWhiteSpace(line[i])) {\n\t\tif (line[i] === '(') {\n\t\t\tif (i+1 < line.length && (line[i+1] >= '2' && line[i+1] <= '9')) {\n\t\t\t\tif (ret.triplet !== undefined)\n\t\t\t\t\twarn(\"Can't nest triplets\", line, i);\n\t\t\t\telse {\n\t\t\t\t\tret.triplet = line[i+1] - '0';\n\t\t\t\t\tret.tripletQ = tripletQ[ret.triplet];\n\t\t\t\t\tret.num_notes = ret.triplet;\n\t\t\t\t\tif (i+2 < line.length && line[i+2] === ':') {\n\t\t\t\t\t\t// We are expecting \"(p:q:r\" or \"(p:q\" or \"(p::r\"\n\t\t\t\t\t\t// That is: \"put p notes into the time of q for the next r notes\"\n\t\t\t\t\t\t// if r is missing, then it is equal to p.\n\t\t\t\t\t\t// if q is missing, it is determined from this table:\n\t\t\t\t\t\t// (2 notes in the time of 3\n\t\t\t\t\t\t// (3 notes in the time of 2\n\t\t\t\t\t\t// (4 notes in the time of 3\n\t\t\t\t\t\t// (5 notes in the time of n | if time sig is (6/8, 9/8, 12/8), n=3, else n=2\n\t\t\t\t\t\t// (6 notes in the time of 2\n\t\t\t\t\t\t// (7 notes in the time of n\n\t\t\t\t\t\t// (8 notes in the time of 3\n\t\t\t\t\t\t// (9 notes in the time of n\n\t\t\t\t\t\tif (i+3 < line.length && line[i+3] === ':') {\n\t\t\t\t\t\t\t// The second number, 'q', is not present.\n\t\t\t\t\t\t\tif (i+4 < line.length && (line[i+4] >= '1' && line[i+4] <= '9')) {\n\t\t\t\t\t\t\t\tret.num_notes = line[i+4] - '0';\n\t\t\t\t\t\t\t\ti += 3;\n\t\t\t\t\t\t\t} else\n\t\t\t\t\t\t\t\twarn(\"expected number after the two colons after the triplet to mark the duration\", line, i);\n\t\t\t\t\t\t} else if (i+3 < line.length && (line[i+3] >= '1' && line[i+3] <= '9')) {\n\t\t\t\t\t\t\tret.tripletQ = line[i+3] - '0';\n\t\t\t\t\t\t\tif (i+4 < line.length && line[i+4] === ':') {\n\t\t\t\t\t\t\t\tif (i+5 < line.length && (line[i+5] >= '1' && line[i+5] <= '9')) {\n\t\t\t\t\t\t\t\t\tret.num_notes = line[i+5] - '0';\n\t\t\t\t\t\t\t\t\ti += 4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ti += 2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\twarn(\"expected number after the triplet to mark the duration\", line, i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ti++;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (ret.startSlur === undefined)\n\t\t\t\t\tret.startSlur = 1;\n\t\t\t\telse\n\t\t\t\t\tret.startSlur++;\n\t\t\t}\n\t\t}\n\t\ti++;\n\t}\n\tret.consumed = i-start;\n\treturn ret;\n};\n\nMusicParser.prototype.startNewLine = function() {\n\tvar params = { startChar: -1, endChar: -1};\n\tif (multilineVars.partForNextLine.title)\n\t\tparams.part = multilineVars.partForNextLine;\n\tparams.clef = multilineVars.currentVoice && multilineVars.staves[multilineVars.currentVoice.staffNum].clef !== undefined ? parseCommon.clone(multilineVars.staves[multilineVars.currentVoice.staffNum].clef) : parseCommon.clone(multilineVars.clef);\n\tvar scoreTranspose = multilineVars.currentVoice ? multilineVars.currentVoice.scoreTranspose : 0;\n\tparams.key = parseKeyVoice.standardKey(multilineVars.key.root+multilineVars.key.acc+multilineVars.key.mode, multilineVars.key.root, multilineVars.key.acc, scoreTranspose);\n\tparams.key.mode = multilineVars.key.mode;\n\tif (multilineVars.key.impliedNaturals)\n\t\tparams.key.impliedNaturals = multilineVars.key.impliedNaturals;\n\tif (multilineVars.key.explicitAccidentals) {\n\t\tfor (var i = 0; i < multilineVars.key.explicitAccidentals.length; i++) {\n\t\t\tvar found = false;\n\t\t\tfor (var j = 0; j < params.key.accidentals.length; j++) {\n\t\t\t\tif (params.key.accidentals[j].note === multilineVars.key.explicitAccidentals[i].note) {\n\t\t\t\t\t// If the note is already in the list, override it with the new value\n\t\t\t\t\tparams.key.accidentals[j].acc = multilineVars.key.explicitAccidentals[i].acc;\n\t\t\t\t\tfound = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!found)\n\t\t\t\tparams.key.accidentals.push(multilineVars.key.explicitAccidentals[i]);\n\t\t}\n\t}\n\tmultilineVars.targetKey = params.key;\n\tif (params.key.explicitAccidentals)\n\t\tdelete params.key.explicitAccidentals;\n\tparseKeyVoice.addPosToKey(params.clef, params.key);\n\tif (multilineVars.meter !== null) {\n\t\tif (multilineVars.currentVoice) {\n\t\t\tmultilineVars.staves.forEach(function(st) {\n\t\t\t\tst.meter = multilineVars.meter;\n\t\t\t});\n\t\t\tparams.meter = multilineVars.staves[multilineVars.currentVoice.staffNum].meter;\n\t\t\tmultilineVars.staves[multilineVars.currentVoice.staffNum].meter = null;\n\t\t} else\n\t\t\tparams.meter = multilineVars.meter;\n\t\tmultilineVars.meter = null;\n\t} else if (multilineVars.currentVoice && multilineVars.staves[multilineVars.currentVoice.staffNum].meter) {\n\t\t// Make sure that each voice gets the meter marking.\n\t\tparams.meter = multilineVars.staves[multilineVars.currentVoice.staffNum].meter;\n\t\tmultilineVars.staves[multilineVars.currentVoice.staffNum].meter = null;\n\t}\n\tif (multilineVars.currentVoice && multilineVars.currentVoice.name)\n\t\tparams.name = multilineVars.currentVoice.name;\n\tif (multilineVars.vocalfont)\n\t\tparams.vocalfont = multilineVars.vocalfont;\n\tif (multilineVars.tripletfont)\n\t\tparams.tripletfont = multilineVars.tripletfont;\n\tif (multilineVars.gchordfont)\n\t\tparams.gchordfont = multilineVars.gchordfont;\n\tif (multilineVars.style)\n\t\tparams.style = multilineVars.style;\n\tif (multilineVars.currentVoice) {\n\t\tvar staff = multilineVars.staves[multilineVars.currentVoice.staffNum];\n\t\tif (staff.brace) params.brace = staff.brace;\n\t\tif (staff.bracket) params.bracket = staff.bracket;\n\t\tif (staff.connectBarLines) params.connectBarLines = staff.connectBarLines;\n\t\tif (staff.name) params.name = staff.name[multilineVars.currentVoice.index];\n\t\tif (staff.subname) params.subname = staff.subname[multilineVars.currentVoice.index];\n\t\tif (multilineVars.currentVoice.stem)\n\t\t\tparams.stem = multilineVars.currentVoice.stem;\n\t\tif (multilineVars.currentVoice.stafflines)\n\t\t\tparams.stafflines = multilineVars.currentVoice.stafflines;\n\t\tif (multilineVars.currentVoice.staffscale)\n\t\t\tparams.staffscale = multilineVars.currentVoice.staffscale;\n\t\tif (multilineVars.currentVoice.scale)\n\t\t\tparams.scale = multilineVars.currentVoice.scale;\n\t\tif (multilineVars.currentVoice.color)\n\t\t\tparams.color = multilineVars.currentVoice.color;\n\t\tif (multilineVars.currentVoice.style)\n\t\t\tparams.style = multilineVars.currentVoice.style;\n\t\tif (multilineVars.currentVoice.transpose)\n\t\t\tparams.clef.transpose = multilineVars.currentVoice.transpose;\n\t}\n\tvar isFirstVoice = multilineVars.currentVoice === undefined || (multilineVars.currentVoice.staffNum === 0 && multilineVars.currentVoice.index === 0);\n\tif (multilineVars.barNumbers === 0 && isFirstVoice && multilineVars.currBarNumber !== 1)\n\t\tparams.barNumber = multilineVars.currBarNumber;\n\ttuneBuilder.startNewLine(params);\n\tif (multilineVars.key.impliedNaturals)\n\t\tdelete multilineVars.key.impliedNaturals;\n\n\tmultilineVars.partForNextLine = {};\n\tif (multilineVars.tempoForNextLine.length === 4)\n\t\ttuneBuilder.appendElement(multilineVars.tempoForNextLine[0],multilineVars.tempoForNextLine[1],multilineVars.tempoForNextLine[2],multilineVars.tempoForNextLine[3]);\n\tmultilineVars.tempoForNextLine = [];\n}\n\n// TODO-PER: make this a method in el.\nvar addEndBeam = function(el) {\n\tif (el.duration !== undefined && el.duration < 0.25)\n\t\tel.end_beam = true;\n\treturn el;\n};\n\nvar getCoreNote = function(line, index, el, canHaveBrokenRhythm) {\n\t//var el = { startChar: index };\n\tvar isComplete = function(state) {\n\t\treturn (state === 'octave' || state === 'duration' || state === 'Zduration' || state === 'broken_rhythm' || state === 'end_slur');\n\t};\n\tvar dottedTie;\n\tif (line[index] === '.' && line[index+1] === '-') {\n\t\tdottedTie = true;\n\t\tindex++;\n\t}\n\tvar state = 'startSlur';\n\tvar durationSetByPreviousNote = false;\n\twhile (1) {\n\t\tswitch(line[index]) {\n\t\t\tcase '(':\n\t\t\t\tif (state === 'startSlur') {\n\t\t\t\t\tif (el.startSlur === undefined) el.startSlur = 1; else el.startSlur++;\n\t\t\t\t} else if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase ')':\n\t\t\t\tif (isComplete(state)) {\n\t\t\t\t\tif (el.endSlur === undefined) el.endSlur = 1; else el.endSlur++;\n\t\t\t\t} else return null;\n\t\t\t\tbreak;\n\t\t\tcase '^':\n\t\t\t\tif (state === 'startSlur') {el.accidental = 'sharp';state = 'sharp2';}\n\t\t\t\telse if (state === 'sharp2') {el.accidental = 'dblsharp';state = 'pitch';}\n\t\t\t\telse if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase '_':\n\t\t\t\tif (state === 'startSlur') {el.accidental = 'flat';state = 'flat2';}\n\t\t\t\telse if (state === 'flat2') {el.accidental = 'dblflat';state = 'pitch';}\n\t\t\t\telse if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase '=':\n\t\t\t\tif (state === 'startSlur') {el.accidental = 'natural';state = 'pitch';}\n\t\t\t\telse if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase 'A':\n\t\t\tcase 'B':\n\t\t\tcase 'C':\n\t\t\tcase 'D':\n\t\t\tcase 'E':\n\t\t\tcase 'F':\n\t\t\tcase 'G':\n\t\t\tcase 'a':\n\t\t\tcase 'b':\n\t\t\tcase 'c':\n\t\t\tcase 'd':\n\t\t\tcase 'e':\n\t\t\tcase 'f':\n\t\t\tcase 'g':\n\t\t\t\tif (state === 'startSlur' || state === 'sharp2' || state === 'flat2' || state === 'pitch') {\n\t\t\t\t\tel.pitch = pitches[line[index]];\n\t\t\t\t\tel.pitch += 7 * (multilineVars.currentVoice && multilineVars.currentVoice.octave !== undefined ? multilineVars.currentVoice.octave : multilineVars.octave);\n\t\t\t\t\tel.name = line[index];\n\t\t\t\t\tif (el.accidental)\n\t\t\t\t\t\tel.name = accMap[el.accidental] + el.name;\n\t\t\t\t\ttranspose.note(multilineVars, el);\n\t\t\t\t\tstate = 'octave';\n\t\t\t\t\t// At this point we have a valid note. The rest is optional. Set the duration in case we don't get one below\n\t\t\t\t\tif (canHaveBrokenRhythm && multilineVars.next_note_duration !== 0) {\n\t\t\t\t\t\tel.duration = multilineVars.default_length * multilineVars.next_note_duration;\n\t\t\t\t\t\tmultilineVars.next_note_duration = 0;\n\t\t\t\t\t\tdurationSetByPreviousNote = true;\n\t\t\t\t\t} else\n\t\t\t\t\t\tel.duration = multilineVars.default_length;\n\t\t\t\t\t// If the clef is percussion, there is probably some translation of the pitch to a particular drum kit item.\n\t\t\t\t\tif ((multilineVars.clef && multilineVars.clef.type === \"perc\") ||\n\t\t\t\t\t\t(multilineVars.currentVoice && multilineVars.currentVoice.clef === \"perc\")) {\n\t\t\t\t\t\tvar key = line[index];\n\t\t\t\t\t\tif (el.accidental) {\n\t\t\t\t\t\t\tkey = accMap[el.accidental] + key;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tune.formatting && tune.formatting.midi && tune.formatting.midi.drummap)\n\t\t\t\t\t\tel.midipitch = tune.formatting.midi.drummap[key];\n\t\t\t\t\t}\n\t\t\t\t} else if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase ',':\n\t\t\t\tif (state === 'octave') {el.pitch -= 7; el.name += ','; }\n\t\t\t\telse if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase '\\'':\n\t\t\t\tif (state === 'octave') {el.pitch += 7; el.name += \"'\"; }\n\t\t\t\telse if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase 'x':\n\t\t\tcase 'X':\n\t\t\tcase 'y':\n\t\t\tcase 'z':\n\t\t\tcase 'Z':\n\t\t\t\tif (state === 'startSlur') {\n\t\t\t\t\tel.rest = { type: rests[line[index]] };\n\t\t\t\t\t// There shouldn't be some of the properties that notes have. If some sneak in due to bad syntax in the abc file,\n\t\t\t\t\t// just nix them here.\n\t\t\t\t\tdelete el.accidental;\n\t\t\t\t\tdelete el.startSlur;\n\t\t\t\t\tdelete el.startTie;\n\t\t\t\t\tdelete el.endSlur;\n\t\t\t\t\tdelete el.endTie;\n\t\t\t\t\tdelete el.end_beam;\n\t\t\t\t\tdelete el.grace_notes;\n\t\t\t\t\t// At this point we have a valid note. The rest is optional. Set the duration in case we don't get one below\n\t\t\t\t\tif (el.rest.type.indexOf('multimeasure') >= 0) {\n\t\t\t\t\t\tel.duration = tune.getBarLength();\n\t\t\t\t\t\tel.rest.text = 1;\n\t\t\t\t\t\tstate = 'Zduration';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (canHaveBrokenRhythm && multilineVars.next_note_duration !== 0) {\n\t\t\t\t\t\t\tel.duration = multilineVars.default_length * multilineVars.next_note_duration;\n\t\t\t\t\t\t\tmultilineVars.next_note_duration = 0;\n\t\t\t\t\t\t\tdurationSetByPreviousNote = true;\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\tel.duration = multilineVars.default_length;\n\t\t\t\t\t\tstate = 'duration';\n\t\t\t\t\t}\n\t\t\t\t} else if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase '1':\n\t\t\tcase '2':\n\t\t\tcase '3':\n\t\t\tcase '4':\n\t\t\tcase '5':\n\t\t\tcase '6':\n\t\t\tcase '7':\n\t\t\tcase '8':\n\t\t\tcase '9':\n\t\t\tcase '0':\n\t\t\tcase '/':\n\t\t\t\tif (state === 'octave' || state === 'duration') {\n\t\t\t\t\tvar fraction = tokenizer.getFraction(line, index);\n\t\t\t\t\t//if (!durationSetByPreviousNote)\n\t\t\t\t\tel.duration = el.duration * fraction.value;\n\t\t\t\t\t// TODO-PER: We can test the returned duration here and give a warning if it isn't the one expected.\n\t\t\t\t\tel.endChar = fraction.index;\n\t\t\t\t\twhile (fraction.index < line.length && (tokenizer.isWhiteSpace(line[fraction.index]) || line[fraction.index] === '-')) {\n\t\t\t\t\t\tif (line[fraction.index] === '-')\n\t\t\t\t\t\t\tel.startTie = {};\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tel = addEndBeam(el);\n\t\t\t\t\t\tfraction.index++;\n\t\t\t\t\t}\n\t\t\t\t\tindex = fraction.index-1;\n\t\t\t\t\tstate = 'broken_rhythm';\n\t\t\t\t} else if (state === 'sharp2') {\n\t\t\t\t\tel.accidental = 'quartersharp';state = 'pitch';\n\t\t\t\t} else if (state === 'flat2') {\n\t\t\t\t\tel.accidental = 'quarterflat';state = 'pitch';\n\t\t\t\t} else if (state === 'Zduration') {\n\t\t\t\t\tvar num = tokenizer.getNumber(line, index);\n\t\t\t\t\tel.duration = num.num * tune.getBarLength();\n\t\t\t\t\tel.rest.text = num.num;\n\t\t\t\t\tel.endChar = num.index;\n\t\t\t\t\treturn el;\n\t\t\t\t} else return null;\n\t\t\t\tbreak;\n\t\t\tcase '-':\n\t\t\t\tif (state === 'startSlur') {\n\t\t\t\t\t// This is the first character, so it must have been meant for the previous note. Correct that here.\n\t\t\t\t\ttuneBuilder.addTieToLastNote(dottedTie);\n\t\t\t\t\tel.endTie = true;\n\t\t\t\t} else if (state === 'octave' || state === 'duration' || state === 'end_slur') {\n\t\t\t\t\tel.startTie = {};\n\t\t\t\t\tif (!durationSetByPreviousNote && canHaveBrokenRhythm)\n\t\t\t\t\t\tstate = 'broken_rhythm';\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Peek ahead to the next character. If it is a space, then we have an end beam.\n\t\t\t\t\t\tif (tokenizer.isWhiteSpace(line[index + 1]))\n\t\t\t\t\t\t\taddEndBeam(el);\n\t\t\t\t\t\tel.endChar = index+1;\n\t\t\t\t\t\treturn el;\n\t\t\t\t\t}\n\t\t\t\t} else if (state === 'broken_rhythm') {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase ' ':\n\t\t\tcase '\\t':\n\t\t\t\tif (isComplete(state)) {\n\t\t\t\t\tel.end_beam = true;\n\t\t\t\t\t// look ahead to see if there is a tie\n\t\t\t\t\tdottedTie = false;\n\t\t\t\t\tdo {\n\t\t\t\t\t\tif (line[index] === '.' && line[index+1] === '-') {\n\t\t\t\t\t\t\tdottedTie = true;\n\t\t\t\t\t\t\tindex++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (line[index] === '-') {\n\t\t\t\t\t\t\tel.startTie = {};\n\t\t\t\t\t\t\tif (dottedTie)\n\t\t\t\t\t\t\t\tel.startTie.style = \"dotted\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t} while (index < line.length &&\n\t\t\t\t\t\t(tokenizer.isWhiteSpace(line[index]) || line[index] === '-') ||\n\t\t\t\t\t\t(line[index] === '.' && line[index+1] === '-'));\n\t\t\t\t\tel.endChar = index;\n\t\t\t\t\tif (!durationSetByPreviousNote && canHaveBrokenRhythm && (line[index] === '<' || line[index] === '>')) {\t// TODO-PER: Don't need the test for < and >, but that makes the endChar work out for the regression test.\n\t\t\t\t\t\tindex--;\n\t\t\t\t\t\tstate = 'broken_rhythm';\n\t\t\t\t\t} else\n\t\t\t\t\t\treturn el;\n\t\t\t\t}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase '>':\n\t\t\tcase '<':\n\t\t\t\tif (isComplete(state)) {\n\t\t\t\t\tif (canHaveBrokenRhythm) {\n\t\t\t\t\t\tvar br2 = getBrokenRhythm(line, index);\n\t\t\t\t\t\tindex += br2[0] - 1;\t// index gets incremented below, so we'll let that happen\n\t\t\t\t\t\tmultilineVars.next_note_duration = br2[2];\n\t\t\t\t\t\tel.duration = br2[1]*el.duration;\n\t\t\t\t\t\tstate = 'end_slur';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tel.endChar = index;\n\t\t\t\t\t\treturn el;\n\t\t\t\t\t}\n\t\t\t\t} else\n\t\t\t\t\treturn null;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tif (isComplete(state)) {\n\t\t\t\t\tel.endChar = index;\n\t\t\t\t\treturn el;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t}\n\t\tindex++;\n\t\tif (index === line.length) {\n\t\t\tif (isComplete(state)) {el.endChar = index;return el;}\n\t\t\telse return null;\n\t\t}\n\t}\n\treturn null;\n};\n\nvar getBrokenRhythm = function(line, index) {\n\tswitch (line[index]) {\n\t\tcase '>':\n\t\t\tif (index < line.length - 2 && line[index + 1] === '>' && line[index + 2] === '>')\t// triple >>>\n\t\t\t\treturn [3, 1.875, 0.125];\n\t\t\telse if (index < line.length - 1 && line[index + 1] === '>')\t// double >>\n\t\t\t\treturn [2, 1.75, 0.25];\n\t\t\telse\n\t\t\t\treturn [1, 1.5, 0.5];\n\t\tcase '<':\n\t\t\tif (index < line.length - 2 && line[index + 1] === '<' && line[index + 2] === '<')\t// triple <<<\n\t\t\t\treturn [3, 0.125, 1.875];\n\t\t\telse if (index < line.length - 1 && line[index + 1] === '<')\t// double <<\n\t\t\t\treturn [2, 0.25, 1.75];\n\t\t\telse\n\t\t\t\treturn [1, 0.5, 1.5];\n\t}\n\treturn null;\n};\n\nmodule.exports = MusicParser;\n","module.exports.legalAccents = [\n 'trill',\n 'lowermordent',\n 'uppermordent',\n 'mordent',\n 'pralltriller',\n 'accent',\n 'fermata',\n 'invertedfermata',\n 'tenuto',\n '0',\n '1',\n '2',\n '3',\n '4',\n '5',\n '+',\n 'wedge',\n 'open',\n 'thumb',\n 'snap',\n 'turn',\n 'roll',\n 'breath',\n 'shortphrase',\n 'mediumphrase',\n 'longphrase',\n 'segno',\n 'coda',\n 'D.S.',\n 'D.C.',\n 'fine',\n 'beambr1',\n 'beambr2',\n 'slide',\n 'marcato',\n 'upbow',\n 'downbow',\n '/',\n '//',\n '///',\n '////',\n 'trem1',\n 'trem2',\n 'trem3',\n 'trem4',\n 'turnx',\n 'invertedturn',\n 'invertedturnx',\n 'trill(',\n 'trill)',\n 'arpeggio',\n 'xstem',\n 'mark',\n 'umarcato',\n 'style=normal',\n 'style=harmonic',\n 'style=rhythm',\n 'style=x',\n 'style=triangle',\n 'D.C.alcoda',\n 'D.C.alfine',\n 'D.S.alcoda',\n 'D.S.alfine',\n 'editorial',\n 'courtesy'\n];\n\nmodule.exports.volumeDecorations = [\n 'p',\n 'pp',\n 'f',\n 'ff',\n 'mf',\n 'mp',\n 'ppp',\n 'pppp',\n 'fff',\n 'ffff',\n 'sfz'\n];\n\nmodule.exports.dynamicDecorations = [\n 'crescendo(',\n 'crescendo)',\n 'diminuendo(',\n 'diminuendo)',\n 'glissando(',\n 'glissando)',\n '~(',\n '~)'\n];\n\nmodule.exports.accentPseudonyms = [\n ['<', 'accent'],\n ['>', 'accent'],\n ['tr', 'trill'],\n ['plus', '+'],\n ['emphasis', 'accent'],\n ['^', 'umarcato'],\n ['marcato', 'umarcato']\n];\n\nmodule.exports.accentDynamicPseudonyms = [\n ['<(', 'crescendo('],\n ['<)', 'crescendo)'],\n ['>(', 'diminuendo('],\n ['>)', 'diminuendo)']\n];\n\nmodule.exports.nonDecorations = 'ABCDEFGabcdefgxyzZ[]|^_{'; // use this to prescreen so we don't have to look for a decoration at every note.\n\nmodule.exports.durations = [\n 0.5, 0.75, 0.875, 0.9375, 0.96875, 0.984375, 0.25, 0.375, 0.4375, 0.46875,\n 0.484375, 0.4921875, 0.125, 0.1875, 0.21875, 0.234375, 0.2421875, 0.24609375,\n 0.0625, 0.09375, 0.109375, 0.1171875, 0.12109375, 0.123046875, 0.03125,\n 0.046875, 0.0546875, 0.05859375, 0.060546875, 0.0615234375, 0.015625,\n 0.0234375, 0.02734375, 0.029296875, 0.0302734375, 0.03076171875\n];\n\nmodule.exports.pitches = {\n A: 5,\n B: 6,\n C: 0,\n D: 1,\n E: 2,\n F: 3,\n G: 4,\n a: 12,\n b: 13,\n c: 7,\n d: 8,\n e: 9,\n f: 10,\n g: 11\n};\n\nmodule.exports.rests = {\n x: 'invisible',\n X: 'invisible-multimeasure',\n y: 'spacer',\n z: 'rest',\n Z: 'multimeasure'\n};\n\nmodule.exports.accMap = {\n dblflat: '__',\n flat: '_',\n natural: '=',\n sharp: '^',\n dblsharp: '^^',\n quarterflat: '_/',\n quartersharp: '^/'\n};\n\nmodule.exports.tripletQ = {\n 2: 3,\n 3: 2,\n 4: 3,\n 5: 2, // TODO-PER: not handling 6/8 rhythm yet\n 6: 2,\n 7: 2, // TODO-PER: not handling 6/8 rhythm yet\n 8: 3,\n 9: 2 // TODO-PER: not handling 6/8 rhythm yet\n};\n","// abc_tokenizer.js: tokenizes an ABC Music Notation string to support abc_parse.\n\nvar parseCommon = require('./abc_common');\n\n// this is a series of functions that get a particular element out of the passed stream.\n// the return is the number of characters consumed, so 0 means that the element wasn't found.\n// also returned is the element found. This may be a different length because spaces may be consumed that aren't part of the string.\n// The return structure for most calls is { len: num_chars_consumed, token: str }\nvar Tokenizer = function(lines, multilineVars) {\n\tthis.lineIndex = 0\n\tthis.lines = lines\n\tthis.multilineVars = multilineVars;\n\n\tthis.skipWhiteSpace = function(str) {\n\t\tfor (var i = 0; i < str.length; i++) {\n\t\t if (!this.isWhiteSpace(str[i]))\n\t\t\t\treturn i;\n\t\t}\n\t\treturn str.length;\t// It must have been all white space\n\t};\n\tvar finished = function(str, i) {\n\t\treturn i >= str.length;\n\t};\n\tthis.eatWhiteSpace = function(line, index) {\n\t\tfor (var i = index; i < line.length; i++) {\n\t\t if (!this.isWhiteSpace(line[i]))\n\t\t\t\treturn i-index;\n\t\t}\n\t\treturn i-index;\n\t};\n\n\t// This just gets the basic pitch letter, ignoring leading spaces, and normalizing it to a capital\n\tthis.getKeyPitch = function(str) {\n\t\tvar i = this.skipWhiteSpace(str);\n\t\tif (finished(str, i))\n\t\t\treturn {len: 0};\n\t\tswitch (str[i]) {\n\t\t\tcase 'A':return {len: i+1, token: 'A'};\n\t\t\tcase 'B':return {len: i+1, token: 'B'};\n\t\t\tcase 'C':return {len: i+1, token: 'C'};\n\t\t\tcase 'D':return {len: i+1, token: 'D'};\n\t\t\tcase 'E':return {len: i+1, token: 'E'};\n\t\t\tcase 'F':return {len: i+1, token: 'F'};\n\t\t\tcase 'G':return {len: i+1, token: 'G'};\n//\t\t\tcase 'a':return {len: i+1, token: 'A'};\n//\t\t\tcase 'b':return {len: i+1, token: 'B'};\n//\t\t\tcase 'c':return {len: i+1, token: 'C'};\n//\t\t\tcase 'd':return {len: i+1, token: 'D'};\n//\t\t\tcase 'e':return {len: i+1, token: 'E'};\n//\t\t\tcase 'f':return {len: i+1, token: 'F'};\n//\t\t\tcase 'g':return {len: i+1, token: 'G'};\n\t\t}\n\t\treturn {len: 0};\n\t};\n\n\t// This just gets the basic accidental, ignoring leading spaces, and only the ones that appear in a key\n\tthis.getSharpFlat = function(str) {\n\t\tif (str === 'bass')\n\t\t\treturn {len: 0};\n\t\tswitch (str[0]) {\n\t\t\tcase '#':return {len: 1, token: '#'};\n\t\t\tcase 'b':return {len: 1, token: 'b'};\n\t\t}\n\t\treturn {len: 0};\n\t};\n\n\tthis.getMode = function(str) {\n\t\tvar skipAlpha = function(str, start) {\n\t\t\t// This returns the index of the next non-alphabetic char, or the entire length of the string if not found.\n\t\t while (start < str.length && ((str[start] >= 'a' && str[start] <= 'z') || (str[start] >= 'A' && str[start] <= 'Z')))\n\t\t\t\tstart++;\n\t\t\treturn start;\n\t\t};\n\n\t\tvar i = this.skipWhiteSpace(str);\n\t\tif (finished(str, i))\n\t\t\treturn {len: 0};\n\t\tvar firstThree = str.substring(i,i+3).toLowerCase();\n\t\tif (firstThree.length > 1 && firstThree[1] === ' ' || firstThree[1] === '^' || firstThree[1] === '_' || firstThree[1] === '=') firstThree = firstThree[0];\t// This will handle the case of 'm'\n\t\tswitch (firstThree) {\n\t\t\tcase 'mix':return {len: skipAlpha(str, i), token: 'Mix'};\n\t\t\tcase 'dor':return {len: skipAlpha(str, i), token: 'Dor'};\n\t\t\tcase 'phr':return {len: skipAlpha(str, i), token: 'Phr'};\n\t\t\tcase 'lyd':return {len: skipAlpha(str, i), token: 'Lyd'};\n\t\t\tcase 'loc':return {len: skipAlpha(str, i), token: 'Loc'};\n\t\t\tcase 'aeo':return {len: skipAlpha(str, i), token: 'm'};\n\t\t\tcase 'maj':return {len: skipAlpha(str, i), token: ''};\n\t\t\tcase 'ion':return {len: skipAlpha(str, i), token: ''};\n\t\t\tcase 'min':return {len: skipAlpha(str, i), token: 'm'};\n\t\t\tcase 'm':return {len: skipAlpha(str, i), token: 'm'};\n\t\t}\n\t\treturn {len: 0};\n\t};\n\n\tthis.getClef = function(str, bExplicitOnly) {\n\t\tvar strOrig = str;\n\t\tvar i = this.skipWhiteSpace(str);\n\t\tif (finished(str, i))\n\t\t\treturn {len: 0};\n\t\t// The word 'clef' is optional, but if it appears, a clef MUST appear\n\t\tvar needsClef = false;\n\t\tvar strClef = str.substring(i);\n\t\tif (parseCommon.startsWith(strClef, 'clef=')) {\n\t\t\tneedsClef = true;\n\t\t\tstrClef = strClef.substring(5);\n\t\t\ti += 5;\n\t\t}\n\t\tif (strClef.length === 0 && needsClef)\n\t\t\treturn {len: i+5, warn: \"No clef specified: \" + strOrig};\n\n\t\tvar j = this.skipWhiteSpace(strClef);\n\t\tif (finished(strClef, j))\n\t\t\treturn {len: 0};\n\t\tif (j > 0) {\n\t\t\ti += j;\n\t\t\tstrClef = strClef.substring(j);\n\t\t}\n\t\tvar name = null;\n\t\tif (parseCommon.startsWith(strClef, 'treble'))\n\t\t\tname = 'treble';\n\t\telse if (parseCommon.startsWith(strClef, 'bass3'))\n\t\t\tname = 'bass3';\n\t\telse if (parseCommon.startsWith(strClef, 'bass'))\n\t\t\tname = 'bass';\n\t\telse if (parseCommon.startsWith(strClef, 'tenor'))\n\t\t\tname = 'tenor';\n\t\telse if (parseCommon.startsWith(strClef, 'alto2'))\n\t\t\tname = 'alto2';\n\t\telse if (parseCommon.startsWith(strClef, 'alto1'))\n\t\t\tname = 'alto1';\n\t\telse if (parseCommon.startsWith(strClef, 'alto'))\n\t\t\tname = 'alto';\n\t\telse if (!bExplicitOnly && (needsClef && parseCommon.startsWith(strClef, 'none')))\n\t\t\tname = 'none';\n\t\telse if (parseCommon.startsWith(strClef, 'perc'))\n\t\t\tname = 'perc';\n\t\telse if (!bExplicitOnly && (needsClef && parseCommon.startsWith(strClef, 'C')))\n\t\t\tname = 'tenor';\n\t\telse if (!bExplicitOnly && (needsClef && parseCommon.startsWith(strClef, 'F')))\n\t\t\tname = 'bass';\n\t\telse if (!bExplicitOnly && (needsClef && parseCommon.startsWith(strClef, 'G')))\n\t\t\tname = 'treble';\n\t\telse\n\t\t\treturn {len: i+5, warn: \"Unknown clef specified: \" + strOrig};\n\n\t\tstrClef = strClef.substring(name.length);\n\t\tj = this.isMatch(strClef, '+8');\n\t\tif (j > 0)\n\t\t\tname += \"+8\";\n\t\telse {\n\t\t\tj = this.isMatch(strClef, '-8');\n\t\t\tif (j > 0)\n\t\t\t\tname += \"-8\";\n\t\t}\n\t\treturn {len: i+name.length, token: name, explicit: needsClef};\n\t};\n\n\t// This returns one of the legal bar lines\n\t// This is called alot and there is no obvious tokenable items, so this is broken apart.\n\tthis.getBarLine = function(line, i) {\n\t\tswitch (line[i]) {\n\t\t\tcase ']':\n\t\t\t\t++i;\n\t\t\t\tswitch (line[i]) {\n\t\t\t\t\tcase '|': return {len: 2, token: \"bar_thick_thin\"};\n\t\t\t\t\tcase '[':\n\t\t\t\t\t\t++i;\n\t\t\t\t\t\tif ((line[i] >= '1' && line[i] <= '9') || line[i] === '\"')\n\t\t\t\t\t\t\treturn {len: 2, token: \"bar_invisible\"};\n\t\t\t\t\t\treturn {len: 1, warn: \"Unknown bar symbol\"};\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn {len: 1, token: \"bar_invisible\"};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ':':\n\t\t\t\t++i;\n\t\t\t\tswitch (line[i]) {\n\t\t\t\t\tcase ':': return {len: 2, token: \"bar_dbl_repeat\"};\n\t\t\t\t\tcase '|':\t// :|\n\t\t\t\t\t\t++i;\n\t\t\t\t\t\tswitch (line[i]) {\n\t\t\t\t\t\t\tcase ']':\t// :|]\n\t\t\t\t\t\t\t\t++i;\n\t\t\t\t\t\t\t\tswitch (line[i]) {\n\t\t\t\t\t\t\t\t\tcase '|':\t// :|]|\n\t\t\t\t\t\t\t\t\t\t++i;\n\t\t\t\t\t\t\t\t\t\tif (line[i] === ':') return {len: 5, token: \"bar_dbl_repeat\"};\n\t\t\t\t\t\t\t\t\t\treturn {len: 3, token: \"bar_right_repeat\"};\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\treturn {len: 3, token: \"bar_right_repeat\"};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase '|':\t// :||\n\t\t\t\t\t\t\t\t++i;\n\t\t\t\t\t\t\t\tif (line[i] === ':') return {len: 4, token: \"bar_dbl_repeat\"};\n\t\t\t\t\t\t\t\treturn {len: 3, token: \"bar_right_repeat\"};\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\treturn {len: 2, token: \"bar_right_repeat\"};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn {len: 1, warn: \"Unknown bar symbol\"};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase '[':\t// [\n\t\t\t\t++i;\n\t\t\t\tif (line[i] === '|') {\t// [|\n\t\t\t\t\t++i;\n\t\t\t\t\tswitch (line[i]) {\n\t\t\t\t\t\tcase ':': return {len: 3, token: \"bar_left_repeat\"};\n\t\t\t\t\t\tcase ']': return {len: 3, token: \"bar_invisible\"};\n\t\t\t\t\t\tdefault: return {len: 2, token: \"bar_thick_thin\"};\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif ((line[i] >= '1' && line[i] <= '9') || line[i] === '\"')\n\t\t\t\t\t\treturn {len: 1, token: \"bar_invisible\"};\n\t\t\t\t\treturn {len: 0};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase '|':\t// |\n\t\t\t\t++i;\n\t\t\t\tswitch (line[i]) {\n\t\t\t\t\tcase ']': return {len: 2, token: \"bar_thin_thick\"};\n\t\t\t\t\tcase '|': // ||\n\t\t\t\t\t\t++i;\n\t\t\t\t\t\tif (line[i] === ':') return {len: 3, token: \"bar_left_repeat\"};\n\t\t\t\t\t\treturn {len: 2, token: \"bar_thin_thin\"};\n\t\t\t\t\tcase ':':\t// |:\n\t\t\t\t\t\tvar colons = 0;\n\t\t\t\t\t\twhile (line[i+colons] === ':') colons++;\n\t\t\t\t\t\treturn { len: 1+colons, token: \"bar_left_repeat\"};\n\t\t\t\t\tdefault: return {len: 1, token: \"bar_thin\"};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t\treturn {len: 0};\n\t};\n\n\t// this returns all the characters in the string that match one of the characters in the legalChars string\n\tthis.getTokenOf = function(str, legalChars) {\n\t\tfor (var i = 0; i < str.length; i++) {\n\t\t\tif (legalChars.indexOf(str[i]) < 0)\n\t\t\t\treturn {len: i, token: str.substring(0, i)};\n\t\t}\n\t\treturn {len: i, token: str};\n\t};\n\n\tthis.getToken = function(str, start, end) {\n\t\t// This returns the next set of chars that doesn't contain spaces\n\t\tvar i = start;\n\t\twhile (i < end && !this.isWhiteSpace(str[i]))\n\t\t\ti++;\n\t\treturn str.substring(start, i);\n\t};\n\n\t// This just sees if the next token is the word passed in, with possible leading spaces\n\tthis.isMatch = function(str, match) {\n\t\tvar i = this.skipWhiteSpace(str);\n\t\tif (finished(str, i))\n\t\t\treturn 0;\n\t\tif (parseCommon.startsWith(str.substring(i), match))\n\t\t\treturn i+match.length;\n\t\treturn 0;\n\t};\n\n\tthis.getPitchFromTokens = function(tokens) {\n\t\tvar ret = { };\n\t\tvar pitches = {A: 5, B: 6, C: 0, D: 1, E: 2, F: 3, G: 4, a: 12, b: 13, c: 7, d: 8, e: 9, f: 10, g: 11};\n\t\tret.position = pitches[tokens[0].token];\n\t\tif (ret.position === undefined)\n\t\t\treturn { warn: \"Pitch expected. Found: \" + tokens[0].token };\n\t\ttokens.shift();\n\t\twhile (tokens.length) {\n\t\t\tswitch (tokens[0].token) {\n\t\t\t\tcase ',': ret.position -= 7; tokens.shift(); break;\n\t\t\t\tcase '\\'': ret.position += 7; tokens.shift(); break;\n\t\t\t\tdefault: return ret;\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t};\n\n\tthis.getKeyAccidentals2 = function(tokens) {\n\t\tvar accs;\n\t\t// find and strip off all accidentals in the token list\n\t\twhile (tokens.length > 0) {\n\t\t\tvar acc;\n\t\t\tif (tokens[0].token === '^') {\n\t\t\t\tacc = 'sharp';\n\t\t\t\ttokens.shift();\n\t\t\t\tif (tokens.length === 0) return {accs: accs, warn: 'Expected note name after ' + acc};\n\t\t\t\tswitch (tokens[0].token) {\n\t\t\t\t\tcase '^': acc = 'dblsharp'; tokens.shift(); break;\n\t\t\t\t\tcase '/': acc = 'quartersharp'; tokens.shift(); break;\n\t\t\t\t}\n\t\t\t} else if (tokens[0].token === '=') {\n\t\t\t\tacc = 'natural';\n\t\t\t\ttokens.shift();\n\t\t\t} else if (tokens[0].token === '_') {\n\t\t\t\tacc = 'flat';\n\t\t\t\ttokens.shift();\n\t\t\t\tif (tokens.length === 0) return {accs: accs, warn: 'Expected note name after ' + acc};\n\t\t\t\tswitch (tokens[0].token) {\n\t\t\t\t\tcase '_': acc = 'dblflat'; tokens.shift(); break;\n\t\t\t\t\tcase '/': acc = 'quarterflat'; tokens.shift(); break;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Not an accidental, we'll assume that a later parse will recognize it.\n\t\t\t\treturn { accs: accs };\n\t\t\t}\n\t\t\tif (tokens.length === 0) return {accs: accs, warn: 'Expected note name after ' + acc};\n\t\t\tswitch (tokens[0].token[0])\n\t\t\t{\n\t\t\t\tcase 'a':\n\t\t\t\tcase 'b':\n\t\t\t\tcase 'c':\n\t\t\t\tcase 'd':\n\t\t\t\tcase 'e':\n\t\t\t\tcase 'f':\n\t\t\t\tcase 'g':\n\t\t\t\tcase 'A':\n\t\t\t\tcase 'B':\n\t\t\t\tcase 'C':\n\t\t\t\tcase 'D':\n\t\t\t\tcase 'E':\n\t\t\t\tcase 'F':\n\t\t\t\tcase 'G':\n\t\t\t\t\tif (accs === undefined)\n\t\t\t\t\t\taccs = [];\n\t\t\t\t\taccs.push({ acc: acc, note: tokens[0].token[0] });\n\t\t\t\t\tif (tokens[0].token.length === 1)\n\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\telse\n\t\t\t\t\t\ttokens[0].token = tokens[0].token.substring(1);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn {accs: accs, warn: 'Expected note name after ' + acc + ' Found: ' + tokens[0].token };\n\t\t\t}\n\t\t}\n\t\treturn { accs: accs };\n\t};\n\n\t// This gets an accidental marking for the key signature. It has the accidental then the pitch letter.\n\tthis.getKeyAccidental = function(str) {\n\t\tvar accTranslation = {\n\t\t\t'^': 'sharp',\n\t\t\t'^^': 'dblsharp',\n\t\t\t'=': 'natural',\n\t\t\t'_': 'flat',\n\t\t\t'__': 'dblflat',\n\t\t\t'_/': 'quarterflat',\n\t\t\t'^/': 'quartersharp'\n\t\t};\n\t\tvar i = this.skipWhiteSpace(str);\n\t\tif (finished(str, i))\n\t\t\treturn {len: 0};\n\t\tvar acc = null;\n\t\tswitch (str[i])\n\t\t{\n\t\t\tcase '^':\n\t\t\tcase '_':\n\t\t\tcase '=':\n\t\t\t\tacc = str[i];\n\t\t\t\tbreak;\n\t\t\tdefault:return {len: 0};\n\t\t}\n\t\ti++;\n\t\tif (finished(str, i))\n\t\t\treturn {len: 1, warn: 'Expected note name after accidental'};\n\t\tswitch (str[i])\n\t\t{\n\t\t\tcase 'a':\n\t\t\tcase 'b':\n\t\t\tcase 'c':\n\t\t\tcase 'd':\n\t\t\tcase 'e':\n\t\t\tcase 'f':\n\t\t\tcase 'g':\n\t\t\tcase 'A':\n\t\t\tcase 'B':\n\t\t\tcase 'C':\n\t\t\tcase 'D':\n\t\t\tcase 'E':\n\t\t\tcase 'F':\n\t\t\tcase 'G':\n\t\t\t\treturn {len: i+1, token: {acc: accTranslation[acc], note: str[i]}};\n\t\t\tcase '^':\n\t\t\tcase '_':\n\t\t\tcase '/':\n\t\t\t\tacc += str[i];\n\t\t\t\ti++;\n\t\t\t\tif (finished(str, i))\n\t\t\t\t\treturn {len: 2, warn: 'Expected note name after accidental'};\n\t\t\t\tswitch (str[i])\n\t\t\t\t{\n\t\t\t\t\tcase 'a':\n\t\t\t\t\tcase 'b':\n\t\t\t\t\tcase 'c':\n\t\t\t\t\tcase 'd':\n\t\t\t\t\tcase 'e':\n\t\t\t\t\tcase 'f':\n\t\t\t\t\tcase 'g':\n\t\t\t\t\tcase 'A':\n\t\t\t\t\tcase 'B':\n\t\t\t\t\tcase 'C':\n\t\t\t\t\tcase 'D':\n\t\t\t\t\tcase 'E':\n\t\t\t\t\tcase 'F':\n\t\t\t\t\tcase 'G':\n\t\t\t\t\t\treturn {len: i+1, token: {acc: accTranslation[acc], note: str[i]}};\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn {len: 2, warn: 'Expected note name after accidental'};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn {len: 1, warn: 'Expected note name after accidental'};\n\t\t}\n\t};\n\n\tthis.isWhiteSpace = function(ch) {\n\t\treturn ch === ' ' || ch === '\\t' || ch === '\\x12';\n\t};\n\n\tthis.getMeat = function(line, start, end) {\n\t\t// This removes any comments starting with '%' and trims the ends of the string so that there are no leading or trailing spaces.\n\t\t// it returns just the start and end characters that contain the meat.\n\t\tvar comment = line.indexOf('%', start);\n\t\tif (comment >= 0 && comment < end)\n\t\t\tend = comment;\n\t\twhile (start < end && (line[start] === ' ' || line[start] === '\\t' || line[start] === '\\x12'))\n\t\t\tstart++;\n\t\twhile (start < end && (line[end-1] === ' ' || line[end-1] === '\\t' || line[end-1] === '\\x12'))\n\t\t\tend--;\n\t\treturn {start: start, end: end};\n\t};\n\n\tvar isLetter = function(ch) {\n\t\treturn (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z');\n\t};\n\n\tvar isNumber = function(ch) {\n\t\treturn (ch >= '0' && ch <= '9');\n\t};\n\n\tthis.tokenize = function(line, start, end, alphaUntilWhiteSpace) {\n\t\t// this returns all the tokens inside the passed string. A token is a punctuation mark, a string of digits, a string of letters.\n\t\t// Quoted strings are one token.\n\t\t// If there is a minus sign next to a number, then it is included in the number.\n\t\t// If there is a period immediately after a number, with a number immediately following, then a float is returned.\n\t\t// The type of token is returned: quote, alpha, number, punct\n\t\t// If alphaUntilWhiteSpace is true, then the behavior of the alpha token changes.\n\n\t\tvar ret = this.getMeat(line, start, end);\n\t\tstart = ret.start;\n\t\tend = ret.end;\n\t\tvar tokens = [];\n\t\tvar i;\n\t\twhile (start < end) {\n\t\t\tif (line[start] === '\"') {\n\t\t\t\ti = start+1;\n\t\t\t\twhile (i < end && line[i] !== '\"') i++;\n\t\t\t\ttokens.push({ type: 'quote', token: line.substring(start+1, i), start: start+1, end: i});\n\t\t\t\ti++;\n\t\t\t} else if (isLetter(line[start])) {\n\t\t\t\ti = start+1;\n\t\t\t\tif (alphaUntilWhiteSpace)\n\t\t\t\t\twhile (i < end && !this.isWhiteSpace(line[i])) i++;\n\t\t\t\telse\n\t\t\t\t\twhile (i < end && isLetter(line[i])) i++;\n\t\t\t\ttokens.push({ type: 'alpha', token: line.substring(start, i), continueId: isNumber(line[i]), start: start, end: i});\n\t\t\t\tstart = i + 1;\n\t\t\t} else if (line[start] === '.' && isNumber(line[i+1])) {\n\t\t\t\ti = start+1;\n\t\t\t\tvar int2 = null;\n\t\t\t\tvar float2 = null;\n\t\t\t\twhile (i < end && isNumber(line[i])) i++;\n\n\t\t\t\tfloat2 = parseFloat(line.substring(start, i));\n\t\t\t\ttokens.push({ type: 'number', token: line.substring(start, i), intt: int2, floatt: float2, continueId: isLetter(line[i]), start: start, end: i});\n\t\t\t\tstart = i + 1;\n\t\t\t} else if (isNumber(line[start]) || (line[start] === '-' && isNumber(line[i+1]))) {\n\t\t\t\ti = start+1;\n\t\t\t\tvar intt = null;\n\t\t\t\tvar floatt = null;\n\t\t\t\twhile (i < end && isNumber(line[i])) i++;\n\t\t\t\tif (line[i] === '.' && isNumber(line[i+1])) {\n\t\t\t\t\ti++;\n\t\t\t\t\twhile (i < end && isNumber(line[i])) i++;\n\t\t\t\t} else\n\t\t\t\t\tintt = parseInt(line.substring(start, i));\n\n\t\t\t\tfloatt = parseFloat(line.substring(start, i));\n\t\t\t\ttokens.push({ type: 'number', token: line.substring(start, i), intt: intt, floatt: floatt, continueId: isLetter(line[i]), start: start, end: i});\n\t\t\t\tstart = i + 1;\n\t\t\t} else if (line[start] === ' ' || line[start] === '\\t') {\n\t\t\t\ti = start+1;\n\t\t\t} else {\n\t\t\t\ttokens.push({ type: 'punct', token: line[start], start: start, end: start+1});\n\t\t\t\ti = start+1;\n\t\t\t}\n\t\t\tstart = i;\n\t\t}\n\t\treturn tokens;\n\t};\n\n\tthis.getVoiceToken = function(line, start, end) {\n\t\t// This finds the next token. A token is delimited by a space or an equal sign. If it starts with a quote, then the portion between the quotes is returned.\n\t\tvar i = start;\n\t\twhile (i < end && this.isWhiteSpace(line[i]) || line[i] === '=')\n\t\t\ti++;\n\n\t\tif (line[i] === '\"') {\n\t\t\tvar close = line.indexOf('\"', i+1);\n\t\t\tif (close === -1 || close >= end)\n\t\t\t\treturn {len: 1, err: \"Missing close quote\"};\n\t\t\treturn {len: close-start+1, token: this.translateString(line.substring(i+1, close))};\n\t\t} else {\n\t\t\tvar ii = i;\n\t\t\twhile (ii < end && !this.isWhiteSpace(line[ii]) && line[ii] !== '=')\n\t\t\t\tii++;\n\t\t\treturn {len: ii-start+1, token: line.substring(i, ii)};\n\t\t}\n\t};\n\n\tvar charMap = {\n\t\t\"`a\": 'à', \"'a\": \"á\", \"^a\": \"â\", \"~a\": \"ã\", \"\\\"a\": \"ä\", \"oa\": \"å\", \"aa\": \"å\", \"=a\": \"ā\", \"ua\": \"ă\", \";a\": \"ą\",\n\t\t\"`e\": 'è', \"'e\": \"é\", \"^e\": \"ê\", \"\\\"e\": \"ë\", \"=e\": \"ē\", \"ue\": \"ĕ\", \";e\": \"ę\", \".e\": \"ė\",\n\t\t\"`i\": 'ì', \"'i\": \"í\", \"^i\": \"î\", \"\\\"i\": \"ï\", \"=i\": \"ī\", \"ui\": \"ĭ\", \";i\": \"į\",\n\t\t\"`o\": 'ò', \"'o\": \"ó\", \"^o\": \"ô\", \"~o\": \"õ\", \"\\\"o\": \"ö\", \"=o\": \"ō\", \"uo\": \"ŏ\", \"/o\": \"ø\",\n\t\t\"`u\": 'ù', \"'u\": \"ú\", \"^u\": \"û\", \"~u\": \"ũ\", \"\\\"u\": \"ü\", \"ou\": \"ů\", \"=u\": \"ū\", \"uu\": \"ŭ\", \";u\": \"ų\",\n\t\t\"`A\": 'À', \"'A\": \"Á\", \"^A\": \"Â\", \"~A\": \"Ã\", \"\\\"A\": \"Ä\", \"oA\": \"Å\", \"AA\": \"Å\", \"=A\": \"Ā\", \"uA\": \"Ă\", \";A\": \"Ą\",\n\t\t\"`E\": 'È', \"'E\": \"É\", \"^E\": \"Ê\", \"\\\"E\": \"Ë\", \"=E\": \"Ē\", \"uE\": \"Ĕ\", \";E\": \"Ę\", \".E\": \"Ė\",\n\t\t\"`I\": 'Ì', \"'I\": \"Í\", \"^I\": \"Î\", \"~I\": \"Ĩ\", \"\\\"I\": \"Ï\", \"=I\": \"Ī\", \"uI\": \"Ĭ\", \";I\": \"Į\", \".I\": \"İ\",\n\t\t\"`O\": 'Ò', \"'O\": \"Ó\", \"^O\": \"Ô\", \"~O\": \"Õ\", \"\\\"O\": \"Ö\", \"=O\": \"Ō\", \"uO\": \"Ŏ\", \"/O\": \"Ø\",\n\t\t\"`U\": 'Ù', \"'U\": \"Ú\", \"^U\": \"Û\", \"~U\": \"Ũ\", \"\\\"U\": \"Ü\", \"oU\": \"Ů\", \"=U\": \"Ū\", \"uU\": \"Ŭ\", \";U\": \"Ų\",\n\t\t\"ae\": \"æ\", \"AE\": \"Æ\", \"oe\": \"œ\", \"OE\": \"Œ\", \"ss\": \"ß\",\n\t\t\"'c\": \"ć\", \"^c\": \"ĉ\", \"uc\": \"č\", \"cc\": \"ç\", \".c\": \"ċ\", \"cC\": \"Ç\", \"'C\": \"Ć\", \"^C\": \"Ĉ\", \"uC\": \"Č\", \".C\": \"Ċ\",\n\t\t\"~N\": \"Ñ\", \"~n\": \"ñ\",\n\t\t\"=s\": \"š\", \"vs\": \"š\",\n\t\t\"DH\": \"Ð\", \"dh\": \"ð\",\n\t\t\"HO\": \"Ő\", \"Ho\": \"ő\", \"HU\": \"Ű\", \"Hu\": \"ű\",\n\t\t\"'Y\": \"Ý\", \"'y\": \"ý\", \"^Y\": \"Ŷ\", \"^y\": \"ŷ\", \"\\\"Y\": \"Ÿ\", \"\\\"y\": \"ÿ\",\n\t\t\"vS\": \"Š\", \"vZ\": \"Ž\", \"vz\": 'ž'\n\n// More chars: IJ ij Ď ď Đ đ Ĝ ĝ Ğ ğ Ġ ġ Ģ ģ Ĥ ĥ Ħ ħ Ĵ ĵ Ķ ķ ĸ Ĺ ĺ Ļ ļ Ľ ľ Ŀ ŀ Ł ł Ń ń Ņ ņ Ň ň ʼn Ŋ ŋ Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ŝ ŝ Ş ş Š Ţ ţ Ť ť Ŧ ŧ Ŵ ŵ Ź ź Ż ż Ž\n\t};\n\tvar charMap1 = {\n\t\t\"#\": \"♯\",\n\t\t\"b\": \"♭\",\n\t\t\"=\": \"♮\"\n\t};\n\tvar charMap2 = {\n\t\t\"201\": \"♯\",\n\t\t\"202\": \"♭\",\n\t\t\"203\": \"♮\",\n\t\t\"241\": \"¡\",\n\t\t\"242\": \"¢\", \"252\": \"a\", \"262\": \"2\", \"272\": \"o\", \"302\": \"Â\", \"312\": \"Ê\", \"322\": \"Ò\", \"332\": \"Ú\", \"342\": \"â\", \"352\": \"ê\", \"362\": \"ò\", \"372\": \"ú\",\n\t\t\"243\": \"£\", \"253\": \"«\", \"263\": \"3\", \"273\": \"»\", \"303\": \"Ã\", \"313\": \"Ë\", \"323\": \"Ó\", \"333\": \"Û\", \"343\": \"ã\", \"353\": \"ë\", \"363\": \"ó\", \"373\": \"û\",\n\t\t\"244\": \"¤\", \"254\": \"¬\", \"264\": \" ́\", \"274\": \"1⁄4\", \"304\": \"Ä\", \"314\": \"Ì\", \"324\": \"Ô\", \"334\": \"Ü\", \"344\": \"ä\", \"354\": \"ì\", \"364\": \"ô\", \"374\": \"ü\",\n\t\t\"245\": \"¥\", \"255\": \"-\", \"265\": \"μ\", \"275\": \"1⁄2\", \"305\": \"Å\", \"315\": \"Í\", \"325\": \"Õ\", \"335\": \"Ý\", \"345\": \"å\", \"355\": \"í\", \"365\": \"õ\", \"375\": \"ý\",\n\t\t\"246\": \"¦\", \"256\": \"®\", \"266\": \"¶\", \"276\": \"3⁄4\", \"306\": \"Æ\", \"316\": \"Î\", \"326\": \"Ö\", \"336\": \"Þ\", \"346\": \"æ\", \"356\": \"î\", \"366\": \"ö\", \"376\": \"þ\",\n\t\t\"247\": \"§\", \"257\": \" ̄\", \"267\": \"·\", \"277\": \"¿\", \"307\": \"Ç\", \"317\": \"Ï\", \"327\": \"×\", \"337\": \"ß\", \"347\": \"ç\", \"357\": \"ï\", \"367\": \"÷\", \"377\": \"ÿ\",\n\t\t\"250\": \" ̈\", \"260\": \"°\", \"270\": \" ̧\", \"300\": \"À\", \"310\": \"È\", \"320\": \"Ð\", \"330\": \"Ø\", \"340\": \"à\", \"350\": \"è\", \"360\": \"ð\", \"370\": \"ø\",\n\t\t\"251\": \"©\", \"261\": \"±\", \"271\": \"1\", \"301\": \"Á\", \"311\": \"É\", \"321\": \"Ñ\", \"331\": \"Ù\", \"341\": \"á\", \"351\": \"é\", \"361\": \"ñ\", \"371\": \"ù\" };\n\tthis.translateString = function(str) {\n\t\tvar arr = str.split('\\\\');\n\t\tif (arr.length === 1) return str;\n\t\tvar out = null;\n\t\tarr.forEach(function(s) {\n\t\t\tif (out === null)\n\t\t\t\tout = s;\n\t\t\telse {\n\t\t\t\tvar c = charMap[s.substring(0, 2)];\n\t\t\t\tif (c !== undefined)\n\t\t\t\t\tout += c + s.substring(2);\n\t\t\t\telse {\n\t\t\t\t\tc = charMap2[s.substring(0, 3)];\n\t\t\t\t\tif (c !== undefined)\n\t\t\t\t\t\tout += c + s.substring(3);\n\t\t\t\t\telse {\n\t\t\t\t\t\tc = charMap1[s.substring(0, 1)];\n\t\t\t\t\t\tif (c !== undefined)\n\t\t\t\t\t\t\tout += c + s.substring(1);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tout += \"\\\\\" + s;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn out;\n\t};\n\tthis.getNumber = function(line, index) {\n\t\tvar num = 0;\n\t\twhile (index < line.length) {\n\t\t\tswitch (line[index]) {\n\t\t\t\tcase '0':num = num*10;index++;break;\n\t\t\t\tcase '1':num = num*10+1;index++;break;\n\t\t\t\tcase '2':num = num*10+2;index++;break;\n\t\t\t\tcase '3':num = num*10+3;index++;break;\n\t\t\t\tcase '4':num = num*10+4;index++;break;\n\t\t\t\tcase '5':num = num*10+5;index++;break;\n\t\t\t\tcase '6':num = num*10+6;index++;break;\n\t\t\t\tcase '7':num = num*10+7;index++;break;\n\t\t\t\tcase '8':num = num*10+8;index++;break;\n\t\t\t\tcase '9':num = num*10+9;index++;break;\n\t\t\t\tdefault:\n\t\t\t\t\treturn {num: num, index: index};\n\t\t\t}\n\t\t}\n\t\treturn {num: num, index: index};\n\t};\n\n\tthis.getFraction = function(line, index) {\n\t\tvar num = 1;\n\t\tvar den = 1;\n\t\tif (line[index] !== '/') {\n\t\t\tvar ret = this.getNumber(line, index);\n\t\t\tnum = ret.num;\n\t\t\tindex = ret.index;\n\t\t}\n\t\tif (line[index] === '/') {\n\t\t\tindex++;\n\t\t\tif (line[index] === '/') {\n\t\t\t\tvar div = 0.5;\n\t\t\t\twhile (line[index++] === '/')\n\t\t\t\t\tdiv = div /2;\n\t\t\t\treturn {value: num * div, index: index-1};\n\t\t\t} else {\n\t\t\t\tvar iSave = index;\n\t\t\t\tvar ret2 = this.getNumber(line, index);\n\t\t\t\tif (ret2.num === 0 && iSave === index)\t// If we didn't use any characters, it is an implied 2\n\t\t\t\t\tret2.num = 2;\n\t\t\t\tif (ret2.num !== 0)\n\t\t\t\t\tden = ret2.num;\n\t\t\t\tindex = ret2.index;\n\t\t\t}\n\t\t}\n\n\t\treturn {value: num/den, index: index};\n\t};\n\n//\n// MAE 10 Jan 2023 - For better handling of tunes that have tune numbers in front of them.\n//\n// Previous version would take:\n// 21. Woman of the House, The\n// and return:\n// The 21. Woman of the House\n// \n// This fix results in:\n// 21. The Woman of the House\n//\n// Also added additional checks and handlers for lower case \", the\" and \", a\" since I found several tune collections with those tune name constructs\n//\n// Find an optional title number at the start of a tune title\nfunction getTitleNumber(str){\n\n const regex = /^(\\d+)\\./;\n\n // Use the exec method to search for the pattern in the string\n const match = regex.exec(str);\n\n // Check if a match is found\n if (match) {\n\n\t// The matched number is captured in the first group (index 1)\n\tconst foundNumber = match[1];\n\treturn foundNumber;\n\n } else {\n\n\t// Return null if no match is found\n\treturn null;\n\t\n }\n\n}\n\nvar thePatterns = [\n\t{ match: /,\\s*[Tt]he$/, replace: \"The \" },\n\t{ match: /,\\s*[Aa]$/, replace: \"A \" },\n\t{ match: /,\\s*[Aa]n$/, replace: \"An \" },\n]\n\nthis.theReverser = function (str) {\n\n for (var i = 0; i < thePatterns.length; i++) {\n\t\tvar thisPattern = thePatterns[i]\n\t\tvar match = str.match(thisPattern.match)\n\t\tif (match) {\n\t\t\tvar theTitleNumber = getTitleNumber(str);\n\t\t\tif (theTitleNumber){\n\t\t\n\t\t\t //console.log(\"theReverser The titlenumber:\"+theTitleNumber); \n\t\t\n\t\t\t str = str.replace(theTitleNumber+\".\",\"\");\n\t\t\t str = str.trim();\n\t\t\t}\n\t\t\tvar len = match[0].length\n\t\t\tvar result = thisPattern.replace + str.substring(0, str.length - len);\n\t\t\n\t\t\tif (theTitleNumber){\n\t\t\t result = theTitleNumber+\". \"+result;\n\t\t\t}\n\t\t\t\n\t\t\treturn result;\n\n\t\t}\n\t}\n\n return str;\n\n };\n\n\tthis.stripComment = function(str) {\n\t\tvar i = str.indexOf('%');\n\t\tif (i >= 0)\n\t\t\treturn parseCommon.strip(str.substring(0, i));\n\t\treturn parseCommon.strip(str);\n\t};\n\n\tthis.getInt = function(str) {\n\t\t// This parses the beginning of the string for a number and returns { value: num, digits: num }\n\t\t// If digits is 0, then the string didn't point to a number.\n\t\tvar x = parseInt(str);\n\t\tif (isNaN(x))\n\t\t\treturn {digits: 0};\n\t\tvar s = \"\" + x;\n\t\tvar i = str.indexOf(s);\t// This is to account for leading spaces\n\t\treturn {value: x, digits: i+s.length};\n\t};\n\n\tthis.getFloat = function(str) {\n\t\t// This parses the beginning of the string for a number and returns { value: num, digits: num }\n\t\t// If digits is 0, then the string didn't point to a number.\n\t\tvar x = parseFloat(str);\n\t\tif (isNaN(x))\n\t\t\treturn {digits: 0};\n\t\tvar s = \"\" + x;\n\t\tvar i = str.indexOf(s);\t// This is to account for leading spaces\n\t\treturn {value: x, digits: i+s.length};\n\t};\n\n\tthis.getMeasurement = function(tokens) {\n\t\tif (tokens.length === 0) return { used: 0 };\n\t\tvar used = 1;\n\t\tvar num = '';\n\t\tif (tokens[0].token === '-') {\n\t\t\ttokens.shift();\n\t\t\tnum = '-';\n\t\t\tused++;\n\t\t}\n\t\telse if (tokens[0].type !== 'number') return { used: 0 };\n\t\tnum += tokens.shift().token;\n\t\tif (tokens.length === 0) return { used: 1, value: parseInt(num) };\n\t\tvar x = tokens.shift();\n\t\tif (x.token === '.') {\n\t\t\tused++;\n\t\t\tif (tokens.length === 0) return { used: used, value: parseInt(num) };\n\t\t\tif (tokens[0].type === 'number') {\n\t\t\t\tx = tokens.shift();\n\t\t\t\tnum = num + '.' + x.token;\n\t\t\t\tused++;\n\t\t\t\tif (tokens.length === 0) return { used: used, value: parseFloat(num) };\n\t\t\t}\n\t\t\tx = tokens.shift();\n\t\t}\n\t\tswitch (x.token) {\n\t\t\tcase 'pt': return { used: used+1, value: parseFloat(num) };\n\t\t\tcase 'px': return { used: used+1, value: parseFloat(num) };\n\t\t\tcase 'cm': return { used: used+1, value: parseFloat(num)/2.54*72 };\n\t\t\tcase 'in': return { used: used+1, value: parseFloat(num)*72 };\n\t\t\tdefault: tokens.unshift(x); return { used: used, value: parseFloat(num) };\n\t\t}\n\t};\n\tvar substInChord = function(str) {\n\t\tstr = str.replace(/\\\\n/g, \"\\n\");\n\t\tstr = str.replace(/\\\\\"/g, '\"');\n\t\treturn str;\n\t};\n\tthis.getBrackettedSubstring = function(line, i, maxErrorChars, _matchChar)\n\t{\n\t\t// This extracts the sub string by looking at the first character and searching for that\n\t\t// character later in the line (or search for the optional _matchChar).\n\t\t// For instance, if the first character is a quote it will look for\n\t\t// the end quote. If the end of the line is reached, then only up to the default number\n\t\t// of characters are returned, so that a missing end quote won't eat up the entire line.\n\t\t// It returns the substring and the number of characters consumed.\n\t\t// The number of characters consumed is normally two more than the size of the substring,\n\t\t// but in the error case it might not be.\n\t\tvar matchChar = _matchChar || line[i];\n\t\tvar pos = i+1;\n\t\tvar esc = false;\n\t\twhile ((pos < line.length) && (esc || line[pos] !== matchChar)) {\n\t\t\tesc = line[pos] === '\\\\';\n\t\t\t++pos;\n\t\t}\n\t\tif (line[pos] === matchChar)\n\t\t\treturn [pos-i+1,substInChord(line.substring(i+1, pos)), true];\n\t\telse\t// we hit the end of line, so we'll just pick an arbitrary num of chars so the line doesn't disappear.\n\t\t{\n\t\t\tpos = i+maxErrorChars;\n\t\t\tif (pos > line.length-1)\n\t\t\t\tpos = line.length-1;\n\t\t\treturn [pos-i+1, substInChord(line.substring(i+1, pos)), false];\n\t\t}\n\t};\n};\n\nTokenizer.prototype.peekLine = function() {\n\treturn this.lines[this.lineIndex]\n}\n\nTokenizer.prototype.nextLine = function() {\n\tif (this.lineIndex > 0) {\n\t\tthis.multilineVars.iChar += this.lines[this.lineIndex-1].length + 1;\n\t}\n\tif (this.lineIndex < this.lines.length) {\n\t\tvar result = this.lines[this.lineIndex]\n\t\tthis.lineIndex++\n\t\treturn result\n\t}\n\treturn null\n}\n\nmodule.exports = Tokenizer;\n","// abc_transpose.js: Handles the automatic transposition of key signatures, chord symbols, and notes.\n\nvar allNotes = require(\"./all-notes\");\nvar transposeChordName = require(\"../parse/transpose-chord\")\nvar keyAccidentals = require('../const/key-accidentals');\nvar transpose = {};\n\nvar keyIndex = {\n\t'C': 0,\n\t'C#': 1,\n\t'Db': 1,\n\t'D': 2,\n\t'D#': 3,\n\t'Eb': 3,\n\t'E': 4,\n\t'F': 5,\n\t'F#': 6,\n\t'Gb': 6,\n\t'G': 7,\n\t'G#': 8,\n\t'Ab': 8,\n\t'A': 9,\n\t'A#': 10,\n\t'Bb': 10,\n\t'B': 11\n};\nvar newKey = ['C', 'Db', 'D', 'Eb', 'E', 'F', 'F#', 'G', 'Ab', 'A', 'Bb', 'B'];\nvar newKeyMinor = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'Bb', 'B'];\n\ntranspose.keySignature = function(multilineVars, keyName, root, acc, localTranspose) {\n\tif (multilineVars.clef.type === \"perc\" || multilineVars.clef.type === \"none\")\n\t\treturn { accidentals: keyAccidentals(keyName), root: root, acc: acc };\n\tif (!localTranspose) localTranspose = 0;\n\tmultilineVars.localTransposeVerticalMovement = 0;\n\tmultilineVars.localTransposePreferFlats = false;\n\tvar k = keyAccidentals(keyName);\n\tif (!k) return multilineVars.key; // If the key isn't in the list, it is non-standard. We won't attempt to transpose it.\n\tmultilineVars.localTranspose = (multilineVars.globalTranspose ? multilineVars.globalTranspose : 0) + localTranspose;\n\n\tif (!multilineVars.localTranspose)\n\t\treturn { accidentals: k, root: root, acc: acc };\n\tmultilineVars.globalTransposeOrigKeySig = k;\n\tif (multilineVars.localTranspose % 12 === 0) {\n\t\tmultilineVars.localTransposeVerticalMovement = (multilineVars.localTranspose / 12) * 7;\n\t\treturn { accidentals: k, root: root, acc: acc };\n\t}\n\n\tvar baseKey = keyName[0];\n\tif (keyName[1] === 'b' || keyName[1] === '#') {\n\t\tbaseKey += keyName[1];\n\t\tkeyName = keyName.substr(2);\n\t} else\n\t\tkeyName = keyName.substr(1);\n\tvar thisKeyIndex = keyIndex[baseKey]\n\tvar recognized = thisKeyIndex !== undefined\n\tif (!recognized) {\n\t\t// Either the key sig is \"none\" or we don't recognize it. Either way we don't change it, and we assume key of C for the purposes of this calculation.\n\t\tthisKeyIndex = 0\n\t\tbaseKey = \"C\"\n\t\tkeyName = \"\"\n\t}\n\tvar index = thisKeyIndex + multilineVars.localTranspose;\n\twhile (index < 0) index += 12;\n\tif (index > 11) index = index % 12;\n\tvar newKeyName = (keyName[0] === 'm' ? newKeyMinor[index] : newKey[index]);\n\tvar transposedKey = newKeyName + keyName;\n\tvar newKeySig = keyAccidentals(transposedKey);\n\tif (newKeySig.length > 0 && newKeySig[0].acc === 'flat')\n\t\tmultilineVars.localTransposePreferFlats = true;\n\tvar distance = transposedKey.charCodeAt(0) - baseKey.charCodeAt(0);\n\tif (multilineVars.localTranspose > 0) {\n\t\tif (distance < 0)\n\t\t\tdistance += 7;\n\t\telse if (distance === 0) {\n\t\t\t// There's a funny thing that happens when the key changes only an accidental's distance, for instance, from Ab to A.\n\t\t\t// If the distance is positive (we are raising pitch), and the change is higher (that is, Ab -> A), then raise an octave.\n\t\t\t// This test is easier because we know the keys are not equal (or we wouldn't get this far), so if the base key is a flat key, then\n\t\t\t// the transposed key must be higher. Likewise, if the transposed key is sharp, then the base key must be lower. And one\n\t\t\t// of those two things must be true because they are not both natural.\n\t\t\tif (baseKey[1] === '#' || transposedKey[1] === 'b')\n\t\t\t\tdistance += 7;\n\t\t}\n\t} else if (multilineVars.localTranspose < 0) {\n\t\tif (distance > 0)\n\t\t\tdistance -= 7;\n\t\telse if (distance === 0) {\n\t\t\t// There's a funny thing that happens when the key changes only an accidental's distance, for instance, from Ab to A.\n\t\t\t// If the distance is negative (we are dropping pitch), and the change is lower (that is, A -> Ab), then drop an octave.\n\t\t\tif (baseKey[1] === 'b' || transposedKey[1] === '#')\n\t\t\t\tdistance -= 7;\n\t\t}\n\t}\n\n\tif (multilineVars.localTranspose > 0)\n\t\tmultilineVars.localTransposeVerticalMovement = distance + Math.floor(multilineVars.localTranspose / 12) * 7;\n\telse\n\t\tmultilineVars.localTransposeVerticalMovement = distance + Math.ceil(multilineVars.localTranspose / 12) * 7;\n\tif (recognized)\n\t\treturn { accidentals: newKeySig, root: newKeyName[0], acc: newKeyName.length > 1 ? newKeyName[1] : \"\" };\n\telse\n\t\treturn { accidentals: [], root: root, acc: acc };\n};\n\ntranspose.chordName = function(multilineVars, chord) {\n\treturn transposeChordName(chord, multilineVars.localTranspose, multilineVars.localTransposePreferFlats, multilineVars.freegchord)\n};\n\nvar pitchToLetter = [ 'c', 'd', 'e', 'f', 'g', 'a', 'b' ];\nfunction accidentalChange(origPitch, newPitch, accidental, origKeySig, newKeySig) {\n\tvar origPitchLetter = pitchToLetter[(origPitch + 49) % 7]; // Make sure it is a positive pitch before normalizing.\n\tvar origAccidental = 0;\n\tfor (var i = 0; i < origKeySig.length; i++) {\n\t\tif (origKeySig[i].note.toLowerCase() === origPitchLetter)\n\t\t\torigAccidental = accidentals[origKeySig[i].acc];\n\t}\n\n\tvar currentAccidental = accidentals[accidental];\n\tvar delta = currentAccidental - origAccidental;\n\n\tvar newPitchLetter = pitchToLetter[(newPitch + 49) % 7]; // Make sure it is a positive pitch before normalizing.\n\tvar newAccidental = 0;\n\tfor (var j = 0; j < newKeySig.accidentals.length; j++) {\n\t\tif (newKeySig.accidentals[j].note.toLowerCase() === newPitchLetter)\n\t\t\tnewAccidental = accidentals[newKeySig.accidentals[j].acc];\n\t}\n\tvar calcAccidental = delta + newAccidental;\n\tif (calcAccidental < -2) {\n\t\tnewPitch--;\n\t\tcalcAccidental += (newPitchLetter === 'c' || newPitchLetter === 'f') ? 1 : 2;\n\t}\n\tif (calcAccidental > 2) {\n\t\tnewPitch++;\n\t\tcalcAccidental -= (newPitchLetter === 'b' || newPitchLetter === 'e') ? 1 : 2;\n\t}\n\treturn [newPitch, calcAccidental];\n}\n\nvar accidentals = {\n\tdblflat: -2,\n\tflat: -1,\n\tnatural: 0,\n\tsharp: 1,\n\tdblsharp: 2\n};\nvar accidentals2 = {\n\t\"-2\": \"dblflat\",\n\t\"-1\": \"flat\",\n\t\"0\": \"natural\",\n\t\"1\": \"sharp\",\n\t\"2\": \"dblsharp\"\n};\nvar accidentals3 = {\n\t\"-2\": \"__\",\n\t\"-1\": \"_\",\n\t\"0\": \"=\",\n\t\"1\": \"^\",\n\t\"2\": \"^^\"\n};\n//var count = 0\ntranspose.note = function(multilineVars, el) {\n\t// the \"el\" that is passed in has el.name, el.accidental, and el.pitch. \"pitch\" is the vertical position (0=middle C)\n\t// localTranspose is the number of half steps\n\t// localTransposeVerticalMovement is the vertical distance to move.\n\t//console.log(count++,multilineVars.localTranspose, el)\n\tif (!multilineVars.localTranspose || multilineVars.clef.type === \"perc\")\n\t\treturn;\n\tvar origPitch = el.pitch;\n\tif (multilineVars.localTransposeVerticalMovement) {\n\t\tel.pitch = el.pitch + multilineVars.localTransposeVerticalMovement;\n\t\tif (el.name) {\n\t\t\tvar actual = el.accidental ? el.name.substring(1) : el.name\n\t\t\tvar acc = el.accidental ? el.name[0] : ''\n\t\t\tvar p = allNotes.pitchIndex(actual)\n\t\t\tel.name = acc + allNotes.noteName(p+multilineVars.localTransposeVerticalMovement)\n\t\t}\n\t}\n\n\tif (el.accidental) {\n\t\tvar ret = accidentalChange(origPitch, el.pitch, el.accidental, multilineVars.globalTransposeOrigKeySig, multilineVars.targetKey);\n\t\tel.pitch = ret[0];\n\t\tel.accidental = accidentals2[ret[1]];\n\t\tif (el.name) {\n\t\t\tel.name = accidentals3[ret[1]] + el.name.replace(/[_^=]/g,'');\n\t\t}\n\t}\n\n};\n\nmodule.exports = transpose;\n","var allNotes = {};\n\nconst allPitches = [\n\t'C,,,', 'D,,,', 'E,,,', 'F,,,', 'G,,,', 'A,,,', 'B,,,',\n\t'C,,', 'D,,', 'E,,', 'F,,', 'G,,', 'A,,', 'B,,',\n\t'C,', 'D,', 'E,', 'F,', 'G,', 'A,', 'B,',\n\t'C', 'D', 'E', 'F', 'G', 'A', 'B',\n\t'c', 'd', 'e', 'f', 'g', 'a', 'b',\n\t\"c'\", \"d'\", \"e'\", \"f'\", \"g'\", \"a'\", \"b'\",\n\t\"c''\", \"d''\", \"e''\", \"f''\", \"g''\", \"a''\", \"b''\",\n\t\"c'''\", \"d'''\", \"e'''\", \"f'''\", \"g'''\", \"a'''\", \"b'''\",\n];\n\nallNotes.pitchIndex = function(noteName) {\n\treturn allPitches.indexOf(noteName)\n}\n\nallNotes.noteName = function(pitchIndex) {\n\treturn allPitches[pitchIndex]\n}\n\nmodule.exports = allNotes;\n","var sharpChords = ['C', 'C♯', 'D', \"D♯\", 'E', 'F', \"F♯\", 'G', 'G♯', 'A', 'A♯', 'B'];\nvar flatChords = ['C', 'D♭', 'D', 'E♭', 'E', 'F', 'G♭', 'G', 'A♭', 'A', 'B♭', 'B'];\nvar sharpChordsFree = ['C', 'C#', 'D', \"D#\", 'E', 'F', \"F#\", 'G', 'G#', 'A', 'A#', 'B'];\nvar flatChordsFree = ['C', 'Db', 'D', 'Eb', 'E', 'F', 'Gb', 'G', 'Ab', 'A', 'Bb', 'B'];\n\nfunction transposeChordName(chord, steps, preferFlats, freeGCchord) {\n\tif (!steps || (steps % 12 === 0)) // The chords are the same if it is an exact octave change.\n\t\treturn chord;\n\n\t// There are two things in the chord that might need to be transposed:\n\t// The chord will start with a letter from A-G, and might have one accidental after it.\n\t// That accidental might be an actual sharp or flat char, or it might be a pound sign or lower case \"b\".\n\t// Then there is a bunch of stuff that isn't transposed and should just be copied. That is stuff like \"7\" and more complicated chords.\n\t// But there is one other exception: right after a slash there will be a bass note and possibly an accidental. That should also be transposed.\n\n\twhile (steps < 0) steps += 12;\n\tif (steps > 11) steps = steps % 12;\n\n\t// (chord name w/accidental) (a bunch of stuff) (/) (bass note) (anything else)\n\tvar match = chord.match(/^([A-G][b#♭♯]?)([^\\/]+)?\\/?([A-G][b#♭♯]?)?(.+)?/)\n\tif (!match)\n\t\treturn chord; // We don't recognize the format of the chord, so skip it.\n\tvar name = match[1]\n\tvar extra1 = match[2]\n\tvar bass = match[3]\n\tvar extra2 = match[4]\n\tvar index = sharpChords.indexOf(name)\n\tif (index < 0)\n\t\tindex = flatChords.indexOf(name)\n\tif (index < 0)\n\t\tindex = sharpChordsFree.indexOf(name)\n\tif (index < 0)\n\t\tindex = flatChordsFree.indexOf(name)\n\tif (index < 0)\n\t\treturn chord; // This should never happen, but if we can't find the chord just bail.\t\n\n\tindex += steps\n\tindex = index % 12\n\n\tif (preferFlats) {\n\t\tif (freeGCchord) chord = flatChordsFree[index]\n\t\telse chord = flatChords[index]\n\t} else {\n\t\tif (freeGCchord) chord = sharpChordsFree[index]\n\t\telse chord = sharpChords[index]\n\t}\n\n\tif (extra1)\n\t\tchord += extra1\n\n\tif (bass) {\n\t\tvar index = sharpChords.indexOf(bass)\n\t\tif (index < 0)\n\t\t\tindex = flatChords.indexOf(bass)\n\t\tif (index < 0)\n\t\t\tindex = sharpChordsFree.indexOf(bass)\n\t\tif (index < 0)\n\t\t\tindex = flatChordsFree.indexOf(bass)\n\t\tchord += '/'\n\t\tif (index >= 0) {\n\t\t\tindex += steps\n\t\t\tindex = index % 12\n\t\t\tif (preferFlats) {\n\t\t\t\tif (freeGCchord) chord += flatChordsFree[index]\n\t\t\t\telse chord += flatChords[index]\n\t\t\t} else {\n\t\t\t\tif (freeGCchord) chord += sharpChordsFree[index]\n\t\t\t\telse chord += sharpChords[index]\n\t\t\t}\n\t\t} else\n\t\t\tchord += bass; // Don't know what to do so do nothing\n\t}\n\n\tif (extra2)\n\t\tchord += extra2\n\n\treturn chord;\n}\n\nmodule.exports = transposeChordName","var parseKeyVoice = require('../parse/abc_parse_key_voice');\nvar parseCommon = require('../parse/abc_common');\nvar parseDirective = require('./abc_parse_directive');\n\nvar TuneBuilder = function(tune) {\n\tvar self = this;\n\n\tthis.setVisualTranspose = function(visualTranspose) {\n\t\tif (visualTranspose)\n\t\t\ttune.visualTranspose = visualTranspose;\n\t};\n\n\tthis.resolveOverlays = function() {\n\t\tvar madeChanges = false;\n\t\tvar durationsPerLines = [];\n\t\tfor (var i = 0; i < tune.lines.length; i++) {\n\t\t\tvar line = tune.lines[i];\n\t\t\tif (line.staff) {\n\t\t\t\tfor (var j = 0; j < line.staff.length; j++) {\n\t\t\t\t\tvar staff = line.staff[j];\n\t\t\t\t\tvar overlayVoice = [];\n\t\t\t\t\tfor (var k = 0; k < staff.voices.length; k++) {\n\t\t\t\t\t\tvar voice = staff.voices[k];\n\t\t\t\t\t\toverlayVoice.push({ hasOverlay: false, voice: [], snip: []});\n\t\t\t\t\t\tdurationsPerLines[i] = 0;\n\t\t\t\t\t\tvar durationThisBar = 0;\n\t\t\t\t\t\tvar inOverlay = false;\n\t\t\t\t\t\tvar overlayDuration = 0;\n\t\t\t\t\t\tvar snipStart = -1;\n\t\t\t\t\t\tfor (var kk = 0; kk < voice.length; kk++) {\n\t\t\t\t\t\t\tvar event = voice[kk];\n\t\t\t\t\t\t\tif (event.el_type === \"overlay\" && !inOverlay) {\n\t\t\t\t\t\t\t\tmadeChanges = true;\n\t\t\t\t\t\t\t\tinOverlay = true;\n\t\t\t\t\t\t\t\tsnipStart = kk;\n\t\t\t\t\t\t\t\toverlayVoice[k].hasOverlay = true;\n\t\t\t\t\t\t\t\tif (overlayDuration === 0)\n\t\t\t\t\t\t\t\t\toverlayDuration = durationsPerLines[i];\n\t\t\t\t\t\t\t\t// If this isn't the first line, we also need invisible rests on the previous lines.\n\t\t\t\t\t\t\t\t// So, if the next voice doesn't appear in a previous line, create it\n\t\t\t\t\t\t\t\tfor (var ii = 0; ii < i; ii++) {\n\t\t\t\t\t\t\t\t\tif (durationsPerLines[ii] && tune.lines[ii].staff && staff.voices.length >= tune.lines[ii].staff[0].voices.length) {\n\t\t\t\t\t\t\t\t\t\ttune.lines[ii].staff[0].voices.push([{\n\t\t\t\t\t\t\t\t\t\t\tel_type: \"note\",\n\t\t\t\t\t\t\t\t\t\t\tduration: durationsPerLines[ii],\n\t\t\t\t\t\t\t\t\t\t\trest: {type: \"invisible\"},\n\t\t\t\t\t\t\t\t\t\t\tstartChar: event.startChar,\n\t\t\t\t\t\t\t\t\t\t\tendChar: event.endChar\n\t\t\t\t\t\t\t\t\t\t}]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (event.el_type === \"bar\") {\n\t\t\t\t\t\t\t\tif (inOverlay) {\n\t\t\t\t\t\t\t\t\t// delete the overlay events from this array without messing up this loop.\n\t\t\t\t\t\t\t\t\tinOverlay = false;\n\t\t\t\t\t\t\t\t\toverlayVoice[k].snip.push({ start: snipStart, len: kk - snipStart});\n\t\t\t\t\t\t\t\t\toverlayVoice[k].voice.push(event); // Also end the overlay with the barline.\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// This keeps the voices lined up: if the overlay isn't in the first measure then we need a bunch of invisible rests.\n\t\t\t\t\t\t\t\t\tif (durationThisBar > 0)\n\t\t\t\t\t\t\t\t\t\toverlayVoice[k].voice.push({ el_type: \"note\", duration: durationThisBar, rest: {type: \"invisible\"}, startChar: event.startChar, endChar: event.endChar });\n\t\t\t\t\t\t\t\t\toverlayVoice[k].voice.push(event);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdurationThisBar = 0;\n\t\t\t\t\t\t\t} else if (event.el_type === \"note\") {\n\t\t\t\t\t\t\t\tif (inOverlay) {\n\t\t\t\t\t\t\t\t\toverlayVoice[k].voice.push(event);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tdurationThisBar += event.duration;\n\t\t\t\t\t\t\t\t\tdurationsPerLines[i] += event.duration;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (event.el_type === \"scale\" || event.el_type === \"stem\" || event.el_type === \"overlay\" || event.el_type === \"style\" || event.el_type === \"transpose\" || event.el_type === \"color\") {\n\t\t\t\t\t\t\t\t// These types of events are duplicated on the overlay layer.\n\t\t\t\t\t\t\t\toverlayVoice[k].voice.push(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (overlayVoice[k].hasOverlay && overlayVoice[k].snip.length === 0) {\n\t\t\t\t\t\t\t// there was no closing bar, so we didn't set the snip amount.\n\t\t\t\t\t\t\toverlayVoice[k].snip.push({ start: snipStart, len: voice.length - snipStart});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfor (k = 0; k < overlayVoice.length; k++) {\n\t\t\t\t\t\tvar ov = overlayVoice[k];\n\t\t\t\t\t\tif (ov.hasOverlay) {\n\t\t\t\t\t\t\tov.voice.splice(0, 0, {el_type: \"stem\", direction: \"down\"})\n\t\t\t\t\t\t\tstaff.voices.push(ov.voice);\n\t\t\t\t\t\t\tfor (var kkk = ov.snip.length-1; kkk >= 0; kkk--) {\n\t\t\t\t\t\t\t\tvar snip = ov.snip[kkk];\n\t\t\t\t\t\t\t\tstaff.voices[k].splice(snip.start, snip.len);\n\t\t\t\t\t\t\t\tstaff.voices[k].splice(snip.start+1, 0, { el_type: \"stem\", direction: \"auto\" });\n\t\t\t\t\t\t\t\tvar indexOfLastBar = findLastBar(staff.voices[k], snip.start);\n\t\t\t\t\t\t\t\tstaff.voices[k].splice(indexOfLastBar, 0, { el_type: \"stem\", direction: \"up\" });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// remove ending marks from the overlay voice so they are not repeated\n\t\t\t\t\t\t\tfor (kkk = 0; kkk < staff.voices[staff.voices.length-1].length; kkk++) {\n\t\t\t\t\t\t\t\tstaff.voices[staff.voices.length-1][kkk] = parseCommon.clone(staff.voices[staff.voices.length-1][kkk]);\n\t\t\t\t\t\t\t\tvar el = staff.voices[staff.voices.length-1][kkk];\n\t\t\t\t\t\t\t\tif (el.el_type === 'bar' && el.startEnding) {\n\t\t\t\t\t\t\t\t\tdelete el.startEnding;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (el.el_type === 'bar' && el.endEnding)\n\t\t\t\t\t\t\t\t\tdelete el.endEnding;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn madeChanges;\n\t};\n\n\tfunction findLastBar(voice, start) {\n\t\tfor (var i = start-1; i > 0 && voice[i].el_type !== \"bar\"; i--) {\n\n\t\t}\n\t\treturn i;\n\t}\n\tfunction fixTitles(lines) {\n\t\t// We might have name and subname defined. We now know what line everything is on, so we can determine which to use.\n\t\tvar firstMusicLine = true;\n\t\tfor (var i = 0; i < lines.length; i++) {\n\t\t\tvar line = lines[i];\n\t\t\tif (line.staff) {\n\t\t\t\tfor (var j = 0; j < line.staff.length; j++) {\n\t\t\t\t\tvar staff = line.staff[j];\n\t\t\t\t\tif (staff.title) {\n\t\t\t\t\t\tvar hasATitle = false;\n\t\t\t\t\t\tfor (var k = 0; k < staff.title.length; k++) {\n\t\t\t\t\t\t\tif (staff.title[k]) {\n\t\t\t\t\t\t\t\tstaff.title[k] = (firstMusicLine) ? staff.title[k].name : staff.title[k].subname;\n\t\t\t\t\t\t\t\tif (staff.title[k])\n\t\t\t\t\t\t\t\t\thasATitle = true;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tstaff.title[k] = '';\n\t\t\t\t\t\t\t} else\n\t\t\t\t\t\t\t\tstaff.title[k] = '';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!hasATitle)\n\t\t\t\t\t\t\tdelete staff.title;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfirstMusicLine = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tthis.cleanUp = function(barsperstaff, staffnonote, currSlur) {\n\t\tthis.closeLine();\t// Close the last line.\n\t\tdelete tune.runningFonts;\n\n\t\tsimplifyMetaText(tune)\n\t\t//addRichTextToAnnotationsAndLyrics(tune)\n\n\t\t// If the tempo was created with a string like \"Allegro\", then the duration of a beat needs to be set at the last moment, when it is most likely known.\n\t\tif (tune.metaText.tempo && tune.metaText.tempo.bpm && !tune.metaText.tempo.duration)\n\t\t\ttune.metaText.tempo.duration = [ tune.getBeatLength() ];\n\n\t\t// Remove any blank lines\n\t\tvar anyDeleted = false;\n\t\tvar i, s, v;\n\t\tfor (i = 0; i < tune.lines.length; i++) {\n\t\t\tif (tune.lines[i].staff !== undefined) {\n\t\t\t\tvar hasAny = false;\n\t\t\t\tfor (s = 0; s < tune.lines[i].staff.length; s++) {\n\t\t\t\t\tif (tune.lines[i].staff[s] === undefined) {\n\t\t\t\t\t\tanyDeleted = true;\n\t\t\t\t\t\ttune.lines[i].staff[s] = null;\n\t\t\t\t\t\t//tune.lines[i].staff[s] = { voices: []};\t// TODO-PER: There was a part missing in the abc music. How should we recover?\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (v = 0; v < tune.lines[i].staff[s].voices.length; v++) {\n\t\t\t\t\t\t\tif (tune.lines[i].staff[s].voices[v] === undefined)\n\t\t\t\t\t\t\t\ttune.lines[i].staff[s].voices[v] = [];\t// TODO-PER: There was a part missing in the abc music. How should we recover?\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\tif (this.containsNotes(tune.lines[i].staff[s].voices[v])) hasAny = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!hasAny) {\n\t\t\t\t\ttune.lines[i] = null;\n\t\t\t\t\tanyDeleted = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (anyDeleted) {\n\t\t\ttune.lines = tune.lines.filter(function (line) { return !!line });\n\t\t\ttune.lines.forEach(function(line) {\n\t\t\t\tif (line.staff)\n\t\t\t\t\tline.staff = line.staff.filter(function (line) { return !!line });\n\t\t\t});\n\t\t}\n\n\t\t// if we exceeded the number of bars allowed on a line, then force a new line\n\t\tif (barsperstaff) {\n\t\t\twhile (wrapMusicLines(tune.lines, barsperstaff)) {\n\t\t\t\t// This will keep wrapping until the end of the piece.\n\t\t\t}\n\t\t}\n\n\t\t// If we were passed staffnonote, then we want to get rid of all staffs that contain only rests.\n\t\tif (staffnonote) {\n\t\t\tanyDeleted = false;\n\t\t\tfor (i = 0; i < tune.lines.length; i++) {\n\t\t\t\tif (tune.lines[i].staff !== undefined) {\n\t\t\t\t\tfor (s = 0; s < tune.lines[i].staff.length; s++) {\n\t\t\t\t\t\tvar keepThis = false;\n\t\t\t\t\t\tfor (v = 0; v < tune.lines[i].staff[s].voices.length; v++) {\n\t\t\t\t\t\t\tif (this.containsNotesStrict(tune.lines[i].staff[s].voices[v])) {\n\t\t\t\t\t\t\t\tkeepThis = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!keepThis) {\n\t\t\t\t\t\t\tanyDeleted = true;\n\t\t\t\t\t\t\ttune.lines[i].staff[s] = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (anyDeleted) {\n\t\t\t\ttune.lines.forEach(function(line) {\n\t\t\t\t\tif (line.staff)\n\t\t\t\t\t\tline.staff = line.staff.filter(function (staff) { return !!staff });\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tfixTitles(tune.lines);\n\n\t\t// Remove the temporary working variables\n\t\tfor (i = 0; i < tune.lines.length; i++) {\n\t\t\tif (tune.lines[i].staff) {\n\t\t\t\tfor (s = 0; s < tune.lines[i].staff.length; s++)\n\t\t\t\t\tdelete tune.lines[i].staff[s].workingClef;\n\t\t\t}\n\t\t}\n\n\t\t// If there are overlays, create new voices for them.\n\t\twhile (this.resolveOverlays()) {\n\t\t\t// keep resolving overlays as long as any are found.\n\t\t}\n\n\t\tfunction cleanUpSlursInLine(line, staffNum, voiceNum) {\n\t\t\tif (!currSlur[staffNum])\n\t\t\t\tcurrSlur[staffNum] = [];\n\t\t\tif (!currSlur[staffNum][voiceNum])\n\t\t\t\tcurrSlur[staffNum][voiceNum] = [];\n\t\t\tvar x;\n//\t\t\tvar lyr = null;\t// TODO-PER: debugging.\n\n\t\t\tvar addEndSlur = function(obj, num, chordPos) {\n\t\t\t\tif (currSlur[staffNum][voiceNum][chordPos] === undefined) {\n\t\t\t\t\t// There isn't an exact match for note position, but we'll take any other open slur.\n\t\t\t\t\tfor (x = 0; x < currSlur[staffNum][voiceNum].length; x++) {\n\t\t\t\t\t\tif (currSlur[staffNum][voiceNum][x] !== undefined) {\n\t\t\t\t\t\t\tchordPos = x;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (currSlur[staffNum][voiceNum][chordPos] === undefined) {\n\t\t\t\t\t\tvar offNum = chordPos*100+1;\n\t\t\t\t\t\tobj.endSlur.forEach(function(x) { if (offNum === x) --offNum; });\n\t\t\t\t\t\tcurrSlur[staffNum][voiceNum][chordPos] = [offNum];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvar slurNum;\n\t\t\t\tfor (var i = 0; i < num; i++) {\n\t\t\t\t\tslurNum = currSlur[staffNum][voiceNum][chordPos].pop();\n\t\t\t\t\tobj.endSlur.push(slurNum);\n//\t\t\t\t\tlyr.syllable += '<' + slurNum;\t// TODO-PER: debugging\n\t\t\t\t}\n\t\t\t\tif (currSlur[staffNum][voiceNum][chordPos].length === 0)\n\t\t\t\t\tdelete currSlur[staffNum][voiceNum][chordPos];\n\t\t\t\treturn slurNum;\n\t\t\t};\n\n\t\t\tvar addStartSlur = function(obj, num, chordPos, usedNums) {\n\t\t\t\tobj.startSlur = [];\n\t\t\t\tif (currSlur[staffNum][voiceNum][chordPos] === undefined) {\n\t\t\t\t\tcurrSlur[staffNum][voiceNum][chordPos] = [];\n\t\t\t\t}\n\t\t\t\tvar nextNum = chordPos*100+1;\n\t\t\t\tfor (var i = 0; i < num; i++) {\n\t\t\t\t\tif (usedNums) {\n\t\t\t\t\t\tusedNums.forEach(function(x) { if (nextNum === x) ++nextNum; });\n\t\t\t\t\t\tusedNums.forEach(function(x) { if (nextNum === x) ++nextNum; });\n\t\t\t\t\t\tusedNums.forEach(function(x) { if (nextNum === x) ++nextNum; });\n\t\t\t\t\t}\n\t\t\t\t\tcurrSlur[staffNum][voiceNum][chordPos].forEach(function(x) { if (nextNum === x) ++nextNum; });\n\t\t\t\t\tcurrSlur[staffNum][voiceNum][chordPos].forEach(function(x) { if (nextNum === x) ++nextNum; });\n\n\t\t\t\t\tcurrSlur[staffNum][voiceNum][chordPos].push(nextNum);\n\t\t\t\t\tobj.startSlur.push({ label: nextNum });\n\t\t\t\t\tif (obj.dottedSlur) {\n\t\t\t\t\t\tobj.startSlur[obj.startSlur.length-1].style = 'dotted';\n\t\t\t\t\t\tdelete obj.dottedSlur;\n\t\t\t\t\t}\n//\t\t\t\t\tlyr.syllable += ' ' + nextNum + '>';\t// TODO-PER:debugging\n\t\t\t\t\tnextNum++;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfor (var i = 0; i < line.length; i++) {\n\t\t\t\tvar el = line[i];\n//\t\t\t\tif (el.lyric === undefined)\t// TODO-PER: debugging\n//\t\t\t\t\tel.lyric = [{ divider: '-' }];\t// TODO-PER: debugging\n//\t\t\t\tlyr = el.lyric[0];\t// TODO-PER: debugging\n//\t\t\t\tlyr.syllable = '';\t// TODO-PER: debugging\n\t\t\t\tif (el.el_type === 'note') {\n\t\t\t\t\tif (el.gracenotes) {\n\t\t\t\t\t\tfor (var g = 0; g < el.gracenotes.length; g++) {\n\t\t\t\t\t\t\tif (el.gracenotes[g].endSlur) {\n\t\t\t\t\t\t\t\tvar gg = el.gracenotes[g].endSlur;\n\t\t\t\t\t\t\t\tel.gracenotes[g].endSlur = [];\n\t\t\t\t\t\t\t\tfor (var ggg = 0; ggg < gg; ggg++)\n\t\t\t\t\t\t\t\t\taddEndSlur(el.gracenotes[g], 1, 20);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (el.gracenotes[g].startSlur) {\n\t\t\t\t\t\t\t\tx = el.gracenotes[g].startSlur;\n\t\t\t\t\t\t\t\taddStartSlur(el.gracenotes[g], x, 20);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (el.endSlur) {\n\t\t\t\t\t\tx = el.endSlur;\n\t\t\t\t\t\tel.endSlur = [];\n\t\t\t\t\t\taddEndSlur(el, x, 0);\n\t\t\t\t\t}\n\t\t\t\t\tif (el.startSlur) {\n\t\t\t\t\t\tx = el.startSlur;\n\t\t\t\t\t\taddStartSlur(el, x, 0);\n\t\t\t\t\t}\n\t\t\t\t\tif (el.pitches) {\n\t\t\t\t\t\tvar usedNums = [];\n\t\t\t\t\t\tfor (var p = 0; p < el.pitches.length; p++) {\n\t\t\t\t\t\t\tif (el.pitches[p].endSlur) {\n\t\t\t\t\t\t\t\tvar k = el.pitches[p].endSlur;\n\t\t\t\t\t\t\t\tel.pitches[p].endSlur = [];\n\t\t\t\t\t\t\t\tfor (var j = 0; j < k; j++) {\n\t\t\t\t\t\t\t\t\tvar slurNum = addEndSlur(el.pitches[p], 1, p+1);\n\t\t\t\t\t\t\t\t\tusedNums.push(slurNum);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (p = 0; p < el.pitches.length; p++) {\n\t\t\t\t\t\t\tif (el.pitches[p].startSlur) {\n\t\t\t\t\t\t\t\tx = el.pitches[p].startSlur;\n\t\t\t\t\t\t\t\taddStartSlur(el.pitches[p], x, p+1, usedNums);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Correct for the weird gracenote case where ({g}a) should match.\n\t\t\t\t\t\t// The end slur was already assigned to the note, and needs to be moved to the first note of the graces.\n\t\t\t\t\t\tif (el.gracenotes && el.pitches[0].endSlur && el.pitches[0].endSlur[0] === 100 && el.pitches[0].startSlur) {\n\t\t\t\t\t\t\tif (el.gracenotes[0].endSlur)\n\t\t\t\t\t\t\t\tel.gracenotes[0].endSlur.push(el.pitches[0].startSlur[0].label);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tel.gracenotes[0].endSlur = [el.pitches[0].startSlur[0].label];\n\t\t\t\t\t\t\tif (el.pitches[0].endSlur.length === 1)\n\t\t\t\t\t\t\t\tdelete el.pitches[0].endSlur;\n\t\t\t\t\t\t\telse if (el.pitches[0].endSlur[0] === 100)\n\t\t\t\t\t\t\t\tel.pitches[0].endSlur.shift();\n\t\t\t\t\t\t\telse if (el.pitches[0].endSlur[el.pitches[0].endSlur.length-1] === 100)\n\t\t\t\t\t\t\t\tel.pitches[0].endSlur.pop();\n\t\t\t\t\t\t\tif (currSlur[staffNum][voiceNum][1].length === 1)\n\t\t\t\t\t\t\t\tdelete currSlur[staffNum][voiceNum][1];\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tcurrSlur[staffNum][voiceNum][1].pop();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// TODO-PER: This could be done faster as we go instead of as the last step.\n\t\tfunction fixClefPlacement(el) {\n\t\t\tparseKeyVoice.fixClef(el);\n\t\t}\n\n\t\tfunction wrapMusicLines(lines, barsperstaff) {\n\t\t\tfor (i = 0; i < lines.length; i++) {\n\t\t\t\tif (lines[i].staff !== undefined) {\n\t\t\t\t\tfor (s = 0; s < lines[i].staff.length; s++) {\n\t\t\t\t\t\tvar permanentItems = [];\n\t\t\t\t\t\tfor (v = 0; v < lines[i].staff[s].voices.length; v++) {\n\t\t\t\t\t\t\tvar voice = lines[i].staff[s].voices[v];\n\t\t\t\t\t\t\tvar barNumThisLine = 0;\n\t\t\t\t\t\t\tfor (var n = 0; n < voice.length; n++) {\n\t\t\t\t\t\t\t\tif (voice[n].el_type === 'bar') {\n\t\t\t\t\t\t\t\t\tbarNumThisLine++;\n\t\t\t\t\t\t\t\t\tif (barNumThisLine >= barsperstaff) {\n\t\t\t\t\t\t\t\t\t\t// push everything else to the next line, if there is anything else,\n\t\t\t\t\t\t\t\t\t\t// and there is a next line. If there isn't a next line, create one.\n\t\t\t\t\t\t\t\t\t\tif (n < voice.length - 1) {\n\t\t\t\t\t\t\t\t\t\t\tvar nextLine = getNextMusicLine(lines, i);\n\t\t\t\t\t\t\t\t\t\t\tif (!nextLine) {\n\t\t\t\t\t\t\t\t\t\t\t\tvar cp = JSON.parse(JSON.stringify(lines[i]));\n\t\t\t\t\t\t\t\t\t\t\t\tlines.push(parseCommon.clone(cp));\n\t\t\t\t\t\t\t\t\t\t\t\tnextLine = lines[lines.length - 1];\n\t\t\t\t\t\t\t\t\t\t\t\tfor (var ss = 0; ss < nextLine.staff.length; ss++) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor (var vv = 0; vv < nextLine.staff[ss].voices.length; vv++)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tnextLine.staff[ss].voices[vv] = [];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tvar startElement = n + 1;\n\t\t\t\t\t\t\t\t\t\t\tvar section = lines[i].staff[s].voices[v].slice(startElement);\n\t\t\t\t\t\t\t\t\t\t\tlines[i].staff[s].voices[v] = lines[i].staff[s].voices[v].slice(0, startElement);\n\t\t\t\t\t\t\t\t\t\t\tnextLine.staff[s].voices[v] = permanentItems.concat(section.concat(nextLine.staff[s].voices[v]));\n\t\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (!voice[n].duration) {\n\t\t\t\t\t\t\t\t\tpermanentItems.push(voice[n]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction getNextMusicLine(lines, currentLine) {\n\t\t\tcurrentLine++;\n\t\t\twhile (lines.length > currentLine) {\n\t\t\t\tif (lines[currentLine].staff)\n\t\t\t\t\treturn lines[currentLine];\n\t\t\t\tcurrentLine++;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\tfor (tune.lineNum = 0; tune.lineNum < tune.lines.length; tune.lineNum++) {\n\t\t\tvar staff = tune.lines[tune.lineNum].staff;\n\t\t\tif (staff) {\n\t\t\t\tfor (tune.staffNum = 0; tune.staffNum < staff.length; tune.staffNum++) {\n\t\t\t\t\tif (staff[tune.staffNum].clef)\n\t\t\t\t\t\tfixClefPlacement(staff[tune.staffNum].clef);\n\t\t\t\t\tfor (tune.voiceNum = 0; tune.voiceNum < staff[tune.staffNum].voices.length; tune.voiceNum++) {\n\t\t\t\t\t\tvar voice = staff[tune.staffNum].voices[tune.voiceNum];\n\t\t\t\t\t\tcleanUpSlursInLine(voice, tune.staffNum, tune.voiceNum);\n\t\t\t\t\t\tfor (var j = 0; j < voice.length; j++) {\n\t\t\t\t\t\t\tif (voice[j].el_type === 'clef')\n\t\t\t\t\t\t\t\tfixClefPlacement(voice[j]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (voice.length > 0 && voice[voice.length-1].barNumber) {\n\t\t\t\t\t\t\t// Don't hang a bar number on the last bar line: it should go on the next line.\n\t\t\t\t\t\t\tvar nextLine = getNextMusicLine(tune.lines, tune.lineNum);\n\t\t\t\t\t\t\tif (nextLine)\n\t\t\t\t\t\t\t\tnextLine.staff[0].barNumber = voice[voice.length-1].barNumber;\n\t\t\t\t\t\t\tdelete voice[voice.length-1].barNumber;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove temporary variables that the outside doesn't need to know about\n\t\tdelete tune.staffNum;\n\t\tdelete tune.voiceNum;\n\t\tdelete tune.lineNum;\n\t\tdelete tune.potentialStartBeam;\n\t\tdelete tune.potentialEndBeam;\n\t\tdelete tune.vskipPending;\n\n\t\treturn currSlur;\n\t};\n\n\ttune.reset();\n\n\tthis.getLastNote = function() {\n\t\tif (tune.lines[tune.lineNum] && tune.lines[tune.lineNum].staff && tune.lines[tune.lineNum].staff[tune.staffNum] &&\n\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum].voices[tune.voiceNum]) {\n\t\t\tfor (var i = tune.lines[tune.lineNum].staff[tune.staffNum].voices[tune.voiceNum].length-1; i >= 0; i--) {\n\t\t\t\tvar el = tune.lines[tune.lineNum].staff[tune.staffNum].voices[tune.voiceNum][i];\n\t\t\t\tif (el.el_type === 'note') {\n\t\t\t\t\treturn el;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\n\tthis.addTieToLastNote = function(dottedTie) {\n\t\t// TODO-PER: if this is a chord, which note?\n\t\tvar el = this.getLastNote();\n\t\tif (el && el.pitches && el.pitches.length > 0) {\n\t\t\tel.pitches[0].startTie = {};\n\t\t\tif (dottedTie)\n\t\t\t\tel.pitches[0].startTie.style = 'dotted';\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n\tthis.getDuration = function(el) {\n\t\tif (el.duration) return el.duration;\n\t\t//if (el.pitches && el.pitches.length > 0) return el.pitches[0].duration;\n\t\treturn 0;\n\t};\n\n\tthis.closeLine = function() {\n\t\tif (tune.potentialStartBeam && tune.potentialEndBeam) {\n\t\t\ttune.potentialStartBeam.startBeam = true;\n\t\t\ttune.potentialEndBeam.endBeam = true;\n\t\t}\n\t\tdelete tune.potentialStartBeam;\n\t\tdelete tune.potentialEndBeam;\n\t};\n\n\tthis.appendElement = function(type, startChar, endChar, hashParams)\n\t{\n\t\tvar This = tune;\n\t\tvar pushNote = function(hp) {\n\t\t\tvar currStaff = This.lines[This.lineNum].staff[This.staffNum];\n\t\t\tif (!currStaff) {\n\t\t\t\t// TODO-PER: This prevents a crash, but it drops the element. Need to figure out how to start a new line, or delay adding this.\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (hp.pitches !== undefined) {\n\t\t\t\tvar mid = currStaff.workingClef.verticalPos;\n\t\t\t\thp.pitches.forEach(function(p) { p.verticalPos = p.pitch - mid; });\n\t\t\t}\n\t\t\tif (hp.gracenotes !== undefined) {\n\t\t\t\tvar mid2 = currStaff.workingClef.verticalPos;\n\t\t\t\thp.gracenotes.forEach(function(p) { p.verticalPos = p.pitch - mid2; });\n\t\t\t}\n\t\t\tcurrStaff.voices[This.voiceNum].push(hp);\n\t\t};\n\t\thashParams.el_type = type;\n\t\tif (startChar !== null)\n\t\t\thashParams.startChar = startChar;\n\t\tif (endChar !== null)\n\t\t\thashParams.endChar = endChar;\n\t\tvar endBeamHere = function() {\n\t\t\tThis.potentialStartBeam.startBeam = true;\n\t\t\thashParams.endBeam = true;\n\t\t\tdelete This.potentialStartBeam;\n\t\t\tdelete This.potentialEndBeam;\n\t\t};\n\t\tvar endBeamLast = function() {\n\t\t\tif (This.potentialStartBeam !== undefined && This.potentialEndBeam !== undefined) {\t// Do we have a set of notes to beam?\n\t\t\t\tThis.potentialStartBeam.startBeam = true;\n\t\t\t\tThis.potentialEndBeam.endBeam = true;\n\t\t\t}\n\t\t\tdelete This.potentialStartBeam;\n\t\t\tdelete This.potentialEndBeam;\n\t\t};\n\t\tif (type === 'note') { // && (hashParams.rest !== undefined || hashParams.end_beam === undefined)) {\n\t\t\t// Now, add the startBeam and endBeam where it is needed.\n\t\t\t// end_beam is already set on the places where there is a forced end_beam. We'll remove that here after using that info.\n\t\t\t// this.potentialStartBeam either points to null or the start beam.\n\t\t\t// this.potentialEndBeam either points to null or the start beam.\n\t\t\t// If we have a beam break (note is longer than a quarter, or an end_beam is on this element), then set the beam if we have one.\n\t\t\t// reset the variables for the next notes.\n\t\t\tvar dur = self.getDuration(hashParams);\n\t\t\tif (dur >= 0.25) {\t// The beam ends on the note before this.\n\t\t\t\tendBeamLast();\n\t\t\t} else if (hashParams.force_end_beam_last && This.potentialStartBeam !== undefined) {\n\t\t\t\tendBeamLast();\n\t\t\t} else if (hashParams.end_beam && This.potentialStartBeam !== undefined) {\t// the beam is forced to end on this note, probably because of a space in the ABC\n\t\t\t\tif (hashParams.rest === undefined)\n\t\t\t\t\tendBeamHere();\n\t\t\t\telse\n\t\t\t\t\tendBeamLast();\n\t\t\t} else if (hashParams.rest === undefined) {\t// this a short note and we aren't about to end the beam\n\t\t\t\tif (This.potentialStartBeam === undefined) {\t// We aren't collecting notes for a beam, so start here.\n\t\t\t\t\tif (!hashParams.end_beam) {\n\t\t\t\t\t\tThis.potentialStartBeam = hashParams;\n\t\t\t\t\t\tdelete This.potentialEndBeam;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tThis.potentialEndBeam = hashParams;\t// Continue the beaming, look for the end next note.\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// end_beam goes on rests and notes which precede rests _except_ when a rest (or set of adjacent rests) has normal notes on both sides (no spaces)\n//\t\t\tif (hashParams.rest !== undefined)\n//\t\t\t{\n//\t\t\t\thashParams.end_beam = true;\n//\t\t\t\tvar el2 = this.getLastNote();\n//\t\t\t\tif (el2) el2.end_beam = true;\n//\t\t\t\t// TODO-PER: implement exception mentioned in the comment.\n//\t\t\t}\n\t\t} else {\t// It's not a note, so there definitely isn't beaming after it.\n\t\t\tendBeamLast();\n\t\t}\n\t\tdelete hashParams.end_beam;\t// We don't want this temporary variable hanging around.\n\t\tdelete hashParams.force_end_beam_last;\t// We don't want this temporary variable hanging around.\n\t\tpushNote(hashParams);\n\t};\n\n\tthis.appendStartingElement = function(type, startChar, endChar, hashParams2)\n\t{\n\t\t// If we're in the middle of beaming, then end the beam.\n\t\tthis.closeLine();\n\n\t\t// We only ever want implied naturals the first time.\n\t\tvar impliedNaturals;\n\t\tif (type === 'key') {\n\t\t\timpliedNaturals = hashParams2.impliedNaturals;\n\t\t\tdelete hashParams2.impliedNaturals;\n\t\t\tdelete hashParams2.explicitAccidentals;\n\t\t}\n\n\t\t// Clone the object because it will be sticking around for the next line and we don't want the extra fields in it.\n\t\tvar hashParams = parseCommon.clone(hashParams2);\n\n\t\tif (tune.lines[tune.lineNum] && tune.lines[tune.lineNum].staff) { // be sure that we are on a music type line before doing the following.\n\t\t\t// If tune is the first item in tune staff, then we might have to initialize the staff, first.\n\t\t\tif (tune.lines[tune.lineNum].staff.length <= tune.staffNum) {\n\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum] = {};\n\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum].clef = parseCommon.clone(tune.lines[tune.lineNum].staff[0].clef);\n\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum].key = parseCommon.clone(tune.lines[tune.lineNum].staff[0].key);\n\t\t\t\tif (tune.lines[tune.lineNum].staff[0].meter)\n\t\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum].meter = parseCommon.clone(tune.lines[tune.lineNum].staff[0].meter);\n\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum].workingClef = parseCommon.clone(tune.lines[tune.lineNum].staff[0].workingClef);\n\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum].voices = [[]];\n\t\t\t}\n\t\t\t// If tune is a clef type, then we replace the working clef on the line. This is kept separate from\n\t\t\t// the clef in case there is an inline clef field. We need to know what the current position for\n\t\t\t// the note is.\n\t\t\tif (type === 'clef') {\n\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum].workingClef = hashParams;\n\t\t\t}\n\n\t\t\t// These elements should not be added twice, so if the element exists on tune line without a note or bar before it, just replace the staff version.\n\t\t\tvar voice = tune.lines[tune.lineNum].staff[tune.staffNum].voices[tune.voiceNum];\n\t\t\tfor (var i = 0; i < voice.length; i++) {\n\t\t\t\tif (voice[i].el_type === 'note' || voice[i].el_type === 'bar') {\n\t\t\t\t\thashParams.el_type = type;\n\t\t\t\t\thashParams.startChar = startChar;\n\t\t\t\t\thashParams.endChar = endChar;\n\t\t\t\t\tif (impliedNaturals)\n\t\t\t\t\t\thashParams.accidentals = impliedNaturals.concat(hashParams.accidentals);\n\t\t\t\t\tvoice.push(hashParams);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (voice[i].el_type === type) {\n\t\t\t\t\thashParams.el_type = type;\n\t\t\t\t\thashParams.startChar = startChar;\n\t\t\t\t\thashParams.endChar = endChar;\n\t\t\t\t\tif (impliedNaturals)\n\t\t\t\t\t\thashParams.accidentals = impliedNaturals.concat(hashParams.accidentals);\n\t\t\t\t\tvoice[i] = hashParams;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// We didn't see either that type or a note, so replace the element to the staff.\n\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum][type] = hashParams2;\n\t\t}\n\t};\n\n\tthis.pushLine = function(hash) {\n\t\tif (tune.vskipPending) {\n\t\t\thash.vskip = tune.vskipPending;\n\t\t\tdelete tune.vskipPending;\n\t\t}\n\t\ttune.lines.push(hash);\n\t};\n\n\tthis.addSubtitle = function(str, info) {\n\t\tthis.pushLine({subtitle: { text: str, startChar: info.startChar, endChar: info.endChar}});\n\t};\n\n\tthis.addSpacing = function(num) {\n\t\ttune.vskipPending = num;\n\t};\n\n\tthis.addNewPage = function(num) {\n\t\tthis.pushLine({newpage: num});\n\t};\n\n\tthis.addSeparator = function(spaceAbove, spaceBelow, lineLength, info) {\n\t\tthis.pushLine({separator: {spaceAbove: Math.round(spaceAbove), spaceBelow: Math.round(spaceBelow), lineLength: Math.round(lineLength), startChar: info.startChar, endChar: info.endChar}});\n\t};\n\n\tthis.addText = function(str, info) {\n\t\tthis.pushLine({text: { text: str, startChar: info.startChar, endChar: info.endChar}});\n\t};\n\n\tthis.addCentered = function(str) {\n\t\tthis.pushLine({text: [{text: str, center: true }]});\n\t};\n\n\tthis.containsNotes = function(voice) {\n\t\tfor (var i = 0; i < voice.length; i++) {\n\t\t\tif (voice[i].el_type === 'note' || voice[i].el_type === 'bar')\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n\tthis.containsNotesStrict = function(voice) {\n\t\tfor (var i = 0; i < voice.length; i++) {\n\t\t\tif (voice[i].el_type === 'note' && (voice[i].rest === undefined || voice[i].chord !== undefined))\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n\t//\tanyVoiceContainsNotes: function(line) {\n//\t\tfor (var i = 0; i < line.staff.voices.length; i++) {\n//\t\t\tif (this.containsNotes(line.staff.voices[i]))\n//\t\t\t\treturn true;\n//\t\t}\n//\t\treturn false;\n//\t},\n\tthis.changeVoiceScale = function(scale) {\n\t\tself.appendElement('scale', null, null, { size: scale} );\n\t};\n\tthis.changeVoiceColor = function(color) {\n\t\tself.appendElement('color', null, null, { color: color} );\n\t};\n\n\tthis.startNewLine = function(params) {\n\t\t// If the pointed to line doesn't exist, just create that. If the line does exist, but doesn't have any music on it, just use it.\n\t\t// If it does exist and has music, then increment the line number. If the new element doesn't exist, create it.\n\t\tvar This = tune;\n\t\tthis.closeLine();\t// Close the previous line.\n\t\tvar createVoice = function(params) {\n\t\t\tvar thisStaff = This.lines[This.lineNum].staff[This.staffNum];\n\t\t\tthisStaff.voices[This.voiceNum] = [];\n\t\t\tif (!thisStaff.title)\n\t\t\t\tthisStaff.title = [];\n\t\t\tthisStaff.title[This.voiceNum] = { name: params.name, subname: params.subname };\n\t\t\tif (params.style)\n\t\t\t\tself.appendElement('style', null, null, {head: params.style});\n\t\t\tif (params.stem)\n\t\t\t\tself.appendElement('stem', null, null, {direction: params.stem});\n\t\t\telse if (This.voiceNum > 0) {\n\t\t\t\tif (thisStaff.voices[0]!== undefined) {\n\t\t\t\t\tvar found = false;\n\t\t\t\t\tfor (var i = 0; i < thisStaff.voices[0].length; i++) {\n\t\t\t\t\t\tif (thisStaff.voices[0].el_type === 'stem')\n\t\t\t\t\t\t\tfound = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (!found) {\n\t\t\t\t\t\tvar stem = { el_type: 'stem', direction: 'up' };\n\t\t\t\t\t\tthisStaff.voices[0].splice(0,0,stem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tself.appendElement('stem', null, null, {direction: 'down'});\n\t\t\t}\n\t\t\tif (params.scale)\n\t\t\t\tself.appendElement('scale', null, null, { size: params.scale} );\n\t\t\tif (params.color)\n\t\t\t\tself.appendElement('color', null, null, { color: params.color} );\n\t\t};\n\t\tvar createStaff = function(params) {\n\t\t\tif (params.key && params.key.impliedNaturals) {\n\t\t\t\tparams.key.accidentals = params.key.accidentals.concat(params.key.impliedNaturals);\n\t\t\t\tdelete params.key.impliedNaturals;\n\t\t\t}\n\n\t\t\tThis.lines[This.lineNum].staff[This.staffNum] = {voices: [ ], clef: params.clef, key: params.key, workingClef: params.clef };\n\t\t\tif (params.stafflines !== undefined) {\n\t\t\t\tThis.lines[This.lineNum].staff[This.staffNum].clef.stafflines = params.stafflines;\n\t\t\t\tThis.lines[This.lineNum].staff[This.staffNum].workingClef.stafflines = params.stafflines;\n\t\t\t}\n\t\t\tif (params.staffscale) {\n\t\t\t\tThis.lines[This.lineNum].staff[This.staffNum].staffscale = params.staffscale;\n\t\t\t}\n\t\t\tif (params.annotationfont) self.setLineFont(\"annotationfont\", params.annotationfont);\n\t\t\tif (params.gchordfont) self.setLineFont(\"gchordfont\", params.gchordfont);\n\t\t\tif (params.tripletfont) self.setLineFont(\"tripletfont\", params.tripletfont);\n\t\t\tif (params.vocalfont) self.setLineFont(\"vocalfont\", params.vocalfont);\n\t\t\tif (params.bracket) This.lines[This.lineNum].staff[This.staffNum].bracket = params.bracket;\n\t\t\tif (params.brace) This.lines[This.lineNum].staff[This.staffNum].brace = params.brace;\n\t\t\tif (params.connectBarLines) This.lines[This.lineNum].staff[This.staffNum].connectBarLines = params.connectBarLines;\n\t\t\tif (params.barNumber) This.lines[This.lineNum].staff[This.staffNum].barNumber = params.barNumber;\n\t\t\tcreateVoice(params);\n\t\t\t// Some stuff just happens for the first voice\n\t\t\tif (params.part)\n\t\t\t\tself.appendElement('part', params.part.startChar, params.part.endChar, {title: params.part.title});\n\t\t\tif (params.meter !== undefined) This.lines[This.lineNum].staff[This.staffNum].meter = params.meter;\n\t\t\tif (This.vskipPending) {\n\t\t\t\tThis.lines[This.lineNum].vskip = This.vskipPending;\n\t\t\t\tdelete This.vskipPending;\n\t\t\t}\n\t\t};\n\t\tvar createLine = function(params) {\n\t\t\tThis.lines[This.lineNum] = {staff: []};\n\t\t\tcreateStaff(params);\n\t\t};\n\t\tif (tune.lines[tune.lineNum] === undefined) createLine(params);\n\t\telse if (tune.lines[tune.lineNum].staff === undefined) {\n\t\t\ttune.lineNum++;\n\t\t\tthis.startNewLine(params);\n\t\t} else if (tune.lines[tune.lineNum].staff[tune.staffNum] === undefined) createStaff(params);\n\t\telse if (tune.lines[tune.lineNum].staff[tune.staffNum].voices[tune.voiceNum] === undefined) createVoice(params);\n\t\telse if (!this.containsNotes(tune.lines[tune.lineNum].staff[tune.staffNum].voices[tune.voiceNum])) {\n\t\t\t// We don't need a new line but we might need to update parts of it.\n\t\t\tif (params.part)\n\t\t\t\tself.appendElement('part', params.part.startChar, params.part.endChar, {title: params.part.title});\n\t\t} else {\n\t\t\ttune.lineNum++;\n\t\t\tthis.startNewLine(params);\n\t\t}\n\t};\n\n\tthis.setRunningFont = function(type, font) {\n\t\t// This is called at tune start to set the current default fonts so we know whether to record a change.\n\t\ttune.runningFonts[type] = font;\n\t};\n\n\tthis.setLineFont = function(type, font) {\n\t\t// If we haven't encountered the font type yet then we are using the default font so it doesn't\n\t\t// need to be noted. If we have encountered it, then only record it if it is different from the last time.\n\t\tif (tune.runningFonts[type]) {\n\t\t\tvar isDifferent = false;\n\t\t\tvar keys = Object.keys(font);\n\t\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\t\tif (tune.runningFonts[type][keys[i]] !== font[keys[i]])\n\t\t\t\t\tisDifferent = true;\n\t\t\t}\n\t\t\tif (isDifferent) {\n\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum][type] = font;\n\t\t\t}\n\t\t}\n\t\ttune.runningFonts[type] = font;\n\t}\n\n\tthis.setBarNumberImmediate = function(barNumber) {\n\t\t// If tune is called right at the beginning of a line, then correct the measure number that is already written.\n\t\t// If tune is called at the beginning of a measure, then correct the measure number that was just created.\n\t\t// If tune is called in the middle of a measure, then subtract one from it, because it will be incremented before applied.\n\t\tvar currentVoice = this.getCurrentVoice();\n\t\tif (currentVoice && currentVoice.length > 0) {\n\t\t\tvar lastElement = currentVoice[currentVoice.length-1];\n\t\t\tif (lastElement.el_type === 'bar') {\n\t\t\t\tif (lastElement.barNumber !== undefined) // the measure number might not be written for tune bar, don't override that.\n\t\t\t\t\tlastElement.barNumber = barNumber;\n\t\t\t} else\n\t\t\t\treturn barNumber-1;\n\t\t}\n\t\treturn barNumber;\n\t};\n\n\tthis.hasBeginMusic = function() {\n\t\t// return true if there exists at least one line that contains \"staff\"\n\t\tfor (var i = 0; i < tune.lines.length; i++) {\n\t\t\tif (tune.lines[i].staff)\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n\tthis.isFirstLine = function(index) {\n\t\tfor (var i = index-1; i >= 0; i--) {\n\t\t\tif (tune.lines[i].staff !== undefined) return false;\n\t\t}\n\t\treturn true;\n\t};\n\n\tthis.getCurrentVoice = function() {\n\t\tvar currLine = tune.lines[tune.lineNum];\n\t\tif (!currLine)\n\t\t\treturn null;\n\t\tvar currStaff = currLine.staff[tune.staffNum];\n\t\tif (!currStaff)\n\t\t\treturn null;\n\t\tif (currStaff.voices[tune.voiceNum] !== undefined)\n\t\t\treturn currStaff.voices[tune.voiceNum];\n\t\telse return null;\n\t};\n\n\tthis.setCurrentVoice = function(staffNum, voiceNum) {\n\t\ttune.staffNum = staffNum;\n\t\ttune.voiceNum = voiceNum;\n\t\tfor (var i = 0; i < tune.lines.length; i++) {\n\t\t\tif (tune.lines[i].staff) {\n\t\t\t\tif (tune.lines[i].staff[staffNum] === undefined || tune.lines[i].staff[staffNum].voices[voiceNum] === undefined ||\n\t\t\t\t\t!this.containsNotes(tune.lines[i].staff[staffNum].voices[voiceNum] )) {\n\t\t\t\t\ttune.lineNum = i;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\ttune.lineNum = i;\n\t};\n\n\tthis.addMetaText = function(key, value, info) {\n\t\tif (tune.metaText[key] === undefined) {\n\t\t\ttune.metaText[key] = value;\n\t\t\ttune.metaTextInfo[key] = info;\n\t\t} else {\n\t\t\tif (typeof tune.metaText[key] === 'string' && typeof value === 'string')\n\t\t\t\ttune.metaText[key] += \"\\n\" + value;\n\t\t\telse {\n\t\t\t\tif (tune.metaText[key] === 'string')\n\t\t\t\t\ttune.metaText[key] = [{text: tune.metaText[key]}]\n\t\t\t\tif (typeof value === 'string')\n\t\t\t\t\tvalue = [{text: value}]\n\t\t\t\ttune.metaText[key] =tune.metaText[key].concat(value)\n\t\t\t}\n\t\t\ttune.metaTextInfo[key].endChar = info.endChar;\n\t\t}\n\t};\n\n\tthis.addMetaTextArray = function(key, value, info) {\n\t\tif (tune.metaText[key] === undefined) {\n\t\t\ttune.metaText[key] = [value];\n\t\t\ttune.metaTextInfo[key] = info;\n\t\t} else {\n\t\t\ttune.metaText[key].push(value);\n\t\t\ttune.metaTextInfo[key].endChar = info.endChar;\n\t\t}\n\t};\n\tthis.addMetaTextObj = function(key, value, info) {\n\t\ttune.metaText[key] = value;\n\t\ttune.metaTextInfo[key] = info;\n\t};\n};\n\nfunction isArrayOfStrings(arr) {\n\tif (!arr) return false\n\tif (typeof arr === \"string\") return false\n\tvar str = ''\n\tfor (var i = 0; i < arr.length; i++) {\n\t\tif (typeof arr[i] !== 'string')\n\t\t\treturn false\n\t}\n\treturn true\n}\n\nfunction simplifyMetaText(tune) {\n\tif (isArrayOfStrings(tune.metaText.notes))\n\t\ttune.metaText.notes = tune.metaText.notes.join(\"\\n\")\n\tif (isArrayOfStrings(tune.metaText.history))\n\t\ttune.metaText.history = tune.metaText.history.join(\"\\n\")\n}\n\nfunction addRichTextToAnnotationsAndLyrics(tune) {\n\tvar lines = tune.lines\n\tfor (var i = 0; i < lines.length; i++) {\n\t\tif (lines[i].staff !== undefined) {\n\t\t\tfor (var s = 0; s < lines[i].staff.length; s++) {\n\t\t\t\tfor (var v = 0; v < lines[i].staff[s].voices.length; v++) {\n\t\t\t\t\tvar voice = lines[i].staff[s].voices[v];\n\t\t\t\t\tfor (var n = 0; n < voice.length; n++) {\n\t\t\t\t\t\tvar element = voice[n]\n\t\t\t\t\t\tif (element.chord) {\n\t\t\t\t\t\t\tfor (var c = 0; c < element.chord.length; c++) {\n\t\t\t\t\t\t\t\telement.chord[c].name = parseDirective.parseFontChangeLine(element.chord[c].name)\n\t\t\t\t\t\t\t\tconsole.log(element.chord[c].name)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (element.lyric) {\n\t\t\t\t\t\t\tfor (var l = 0; l < element.lyric.length; l++) {\n\t\t\t\t\t\t\t\telement.lyric[l].syllable = parseDirective.parseFontChangeLine(element.lyric[l].syllable)\n\t\t\t\t\t\t\t\tconsole.log(element.lyric[l].syllable)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n}\n\nmodule.exports = TuneBuilder;\n","// wrap_lines.js: does line wrap on an already parsed tune.\n\nfunction wrapLines(tune, lineBreaks, barNumbers) {\n\tif (!lineBreaks || tune.lines.length === 0)\n\t\treturn;\n\n\t// tune.lines contains nested arrays: there is an array of lines (that's the part this function rewrites),\n\t// there is an array of staffs per line (for instance, piano will have 2, orchestra will have many)\n\t// there is an array of voices per staff (for instance, 4-part harmony might have bass and tenor on a single staff)\n\tvar lines = tune.deline({lineBreaks: false});\n\tvar linesBreakElements = findLineBreaks(lines, lineBreaks);\n\t//console.log(JSON.stringify(linesBreakElements))\n\ttune.lines = addLineBreaks(lines, linesBreakElements, barNumbers);\n\ttune.lineBreaks = linesBreakElements;\n}\n\nfunction addLineBreaks(lines, linesBreakElements, barNumbers) {\n\t// linesBreakElements is an array of all of the elements that break for a new line\n\t// The objects in the array look like:\n\t// {\"ogLine\":0,\"line\":0,\"staff\":0,\"voice\":0,\"start\":0, \"end\":21}\n\t// ogLine is the original line that it came from,\n\t// line is the target line.\n\t// then copy all the elements from start to end for the staff and voice specified.\n\t// If the item doesn't contain \"staff\" then it is a non music line and should just be copied.\n\tvar outputLines = [];\n\tvar lastKeySig = []; // This is per staff - if the key changed then this will be populated.\n\tvar lastStem = [];\n\tvar currentBarNumber = 1;\n\tfor (var i = 0; i < linesBreakElements.length; i++) {\n\t\tvar action = linesBreakElements[i];\n\t\tif (lines[action.ogLine].staff) {\n\t\t\tvar inputStaff = lines[action.ogLine].staff[action.staff];\n\t\t\tif (!outputLines[action.line]) {\n\t\t\t\toutputLines[action.line] = {staff: []}\n\t\t\t}\n\t\t\tif (!outputLines[action.line].staff[action.staff]) {\n\t\t\t\toutputLines[action.line].staff[action.staff] = {voices: []};\n\t\t\t\tif (barNumbers !== undefined && action.staff === 0 && action.line > 0) {\n\t\t\t\t\toutputLines[action.line].staff[action.staff].barNumber = currentBarNumber;\n\t\t\t\t}\n\t\t\t\tvar keys = Object.keys(inputStaff)\n\t\t\t\tfor (var k = 0; k < keys.length; k++) {\n\t\t\t\t\tvar skip = keys[k] === \"voices\";\n\t\t\t\t\tif (keys[k] === \"meter\" && action.line !== 0)\n\t\t\t\t\t\tskip = true;\n\t\t\t\t\tif (!skip)\n\t\t\t\t\t\toutputLines[action.line].staff[action.staff][keys[k]] = inputStaff[keys[k]];\n\t\t\t\t}\n\t\t\t\tif (lastKeySig[action.staff])\n\t\t\t\t\toutputLines[action.line].staff[action.staff].key = lastKeySig[action.staff];\n\n\t\t\t}\n\t\t\tif (!outputLines[action.line].staff[action.staff].voices[action.voice]) {\n\t\t\t\toutputLines[action.line].staff[action.staff].voices[action.voice] = [];\n\t\t\t}\n\t\t\toutputLines[action.line].staff[action.staff].voices[action.voice] =\n\t\t\t\tlines[action.ogLine].staff[action.staff].voices[action.voice].slice(action.start, action.end+1);\n\t\t\tif (lastStem[action.staff*10+action.voice])\n\t\t\t\toutputLines[action.line].staff[action.staff].voices[action.voice].unshift({el_type: \"stem\", direction: lastStem[action.staff*10+action.voice].direction})\n\t\t\tvar currVoice = outputLines[action.line].staff[action.staff].voices[action.voice];\n\t\t\tfor (var kk = currVoice.length-1; kk >= 0; kk--) {\n\t\t\t\tif (currVoice[kk].el_type === \"key\") {\n\t\t\t\t\tlastKeySig[action.staff] = {\n\t\t\t\t\t\troot: currVoice[kk].root,\n\t\t\t\t\t\tacc: currVoice[kk].acc,\n\t\t\t\t\t\tmode: currVoice[kk].mode,\n\t\t\t\t\t\taccidentals: currVoice[kk].accidentals.filter(function (acc) { return acc.acc !== 'natural' })\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (kk = currVoice.length-1; kk >= 0; kk--) {\n\t\t\t\tif (currVoice[kk].el_type === \"stem\") {\n\t\t\t\t\tlastStem[action.staff*10+action.voice] = {\n\t\t\t\t\t\tdirection: currVoice[kk].direction,\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (barNumbers !== undefined && action.staff === 0 && action.voice === 0) {\n\t\t\t\tfor (kk = 0; kk < currVoice.length; kk++) {\n\t\t\t\t\tif (currVoice[kk].el_type === 'bar') {\n\t\t\t\t\t\tcurrentBarNumber++\n\t\t\t\t\t\tif (kk === currVoice.length-1)\n\t\t\t\t\t\t\tdelete currVoice[kk].barNumber\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tcurrVoice[kk].barNumber = currentBarNumber\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\toutputLines[action.line] = lines[action.ogLine];\n\t\t}\n\t}\n\t// There could be some missing info - if the tune passed in was incomplete or had different lengths for different voices or was missing a voice altogether - just fill in the gaps.\n\tfor (var ii = 0; ii < outputLines.length; ii++) {\n\t\tif (outputLines[ii].staff) {\n\t\t\toutputLines[ii].staff = outputLines[ii].staff.filter(function (el) {\n\t\t\t\treturn el != null;\n\t\t\t});\n\t\t}\n\t}\n\treturn outputLines;\n}\n\n\nfunction findLineBreaks(lines, lineBreakArray) {\n\t// lineBreakArray is an array of all of the sections of the tune - often there will just be one\n\t// section unless there is a subtitle or other non-music lines. Each of the elements of\n\t// Each element of lineBreakArray is an array of the zero-based last measure of the line.\n\tvar lineBreakIndexes = [];\n\tvar lbai = 0;\n\tvar lineCounter = 0;\n\tvar outputLine = 0;\n\tfor (var i = 0; i < lines.length; i++) {\n\t\tvar line = lines[i];\n\t\tif (line.staff) {\n\t\t\tvar lineStart = lineCounter;\n\t\t\tvar lineBreaks = lineBreakArray[lbai];\n\t\t\tlbai++;\n\t\t\tfor (var j = 0; j < line.staff.length; j++) {\n\t\t\t\tvar staff = line.staff[j];\n\t\t\t\tfor (var k = 0; k < staff.voices.length; k++) {\n\t\t\t\t\toutputLine = lineStart;\n\t\t\t\t\tvar measureNumber = 0;\n\t\t\t\t\tvar lbi = 0;\n\t\t\t\t\tvar voice = staff.voices[k];\n\t\t\t\t\tvar start = 0;\n\t\t\t\t\tfor (var e = 0; e < voice.length; e++) {\n\t\t\t\t\t\tvar el = voice[e];\n\n\t\t\t\t\t\tif (el.el_type === 'bar') {\n\t\t\t\t\t\t\tif (lineBreaks[lbi] === measureNumber) {\n\t\t\t\t\t\t\t\tlineBreakIndexes.push({ ogLine: i, line: outputLine, staff: j, voice: k, start: start, end: e})\n\t\t\t\t\t\t\t\tstart = e + 1;\n\t\t\t\t\t\t\t\toutputLine++;\n\t\t\t\t\t\t\t\tlineCounter = Math.max(lineCounter, outputLine)\n\t\t\t\t\t\t\t\tlbi++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmeasureNumber++;\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tlineBreakIndexes.push({ ogLine: i, line: outputLine, staff: j, voice: k, start: start, end: voice.length})\n\t\t\t\t\toutputLine++;\n\t\t\t\t\tlineCounter = Math.max(lineCounter, outputLine)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tlineBreakIndexes.push({ ogLine: i, line: outputLine })\n\t\t\toutputLine++;\n\t\t\tlineCounter = Math.max(lineCounter, outputLine)\n\t\t}\n\t}\n\treturn lineBreakIndexes;\n}\n\n\nfunction freeFormLineBreaks(widths, lineBreakPoint) {\n\tvar lineBreaks = [];\n\tvar totals = [];\n\tvar totalThisLine = 0;\n\t// run through each measure and see if the accumulation is less than the ideal.\n\t// if it passes the ideal, then see whether the last or this one is closer to the ideal.\n\tfor (var i = 0; i < widths.length; i++) {\n\t\tvar width = widths[i];\n\t\tvar attemptedWidth = totalThisLine + width;\n\t\tif (attemptedWidth < lineBreakPoint)\n\t\t\ttotalThisLine = attemptedWidth;\n\t\telse {\n\t\t\t// This just passed the ideal, so see whether the previous or the current number of measures is closer.\n\t\t\tvar oldDistance = lineBreakPoint - totalThisLine;\n\t\t\tvar newDistance = attemptedWidth - lineBreakPoint;\n\t\t\tif (oldDistance < newDistance && totalThisLine > 0) {\n\t\t\t\tlineBreaks.push(i - 1);\n\t\t\t\ttotals.push(Math.round(totalThisLine - width));\n\t\t\t\ttotalThisLine = width;\n\t\t\t} else {\n\t\t\t\tif (i < widths.length-1) {\n\t\t\t\t\tlineBreaks.push(i);\n\t\t\t\t\ttotals.push(Math.round(totalThisLine));\n\t\t\t\t\ttotalThisLine = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\ttotals.push(Math.round(totalThisLine));\n\treturn { lineBreaks: lineBreaks, totals: totals };\n}\n\nfunction clone(arr) {\n\tvar newArr = [];\n\tfor (var i = 0; i < arr.length; i++)\n\t\tnewArr.push(arr[i]);\n\treturn newArr;\n}\n\nfunction oneTry(measureWidths, idealWidths, accumulator, lineAccumulator, lineWidths, lastVariance, highestVariance, currLine, lineBreaks, startIndex, otherTries) {\n\tfor (var i = startIndex; i < measureWidths.length; i++) {\n\t\tvar measureWidth = measureWidths[i];\n\t\taccumulator += measureWidth;\n\t\tlineAccumulator += measureWidth;\n\t\tvar thisVariance = Math.abs(accumulator - idealWidths[currLine]);\n\t\tvar varianceIsClose = Math.abs(thisVariance - lastVariance) < idealWidths[0] / 10; // see if the difference is less than 10%, if so, run the test both ways.\n\t\tif (varianceIsClose) {\n\t\t\tif (thisVariance < lastVariance) {\n\t\t\t\t// Also attempt one less measure on the current line - sometimes that works out better.\n\t\t\t\tvar newWidths = clone(lineWidths);\n\t\t\t\tvar newBreaks = clone(lineBreaks);\n\t\t\t\tnewBreaks.push(i-1);\n\t\t\t\tnewWidths.push(lineAccumulator - measureWidth);\n\t\t\t\totherTries.push({\n\t\t\t\t\taccumulator: accumulator,\n\t\t\t\t\tlineAccumulator: measureWidth,\n\t\t\t\t\tlineWidths: newWidths,\n\t\t\t\t\tlastVariance: Math.abs(accumulator - idealWidths[currLine+1]),\n\t\t\t\t\thighestVariance: Math.max(highestVariance, lastVariance),\n\t\t\t\t\tcurrLine: currLine+1,\n\t\t\t\t\tlineBreaks: newBreaks,\n\t\t\t\t\tstartIndex: i+1});\n\t\t\t} else if (thisVariance > lastVariance && i < measureWidths.length-1) {\n\t\t\t\t// Also attempt one extra measure on this line.\n\t\t\t\tnewWidths = clone(lineWidths);\n\t\t\t\tnewBreaks = clone(lineBreaks);\n\t\t\t\t// newBreaks[newBreaks.length-1] = i;\n\t\t\t\t// newWidths[newWidths.length-1] = lineAccumulator;\n\t\t\t\totherTries.push({\n\t\t\t\t\taccumulator: accumulator,\n\t\t\t\t\tlineAccumulator: lineAccumulator,\n\t\t\t\t\tlineWidths: newWidths,\n\t\t\t\t\tlastVariance: thisVariance,\n\t\t\t\t\thighestVariance: Math.max(highestVariance, thisVariance),\n\t\t\t\t\tcurrLine: currLine,\n\t\t\t\t\tlineBreaks: newBreaks,\n\t\t\t\t\tstartIndex: i+1});\n\t\t\t}\n\t\t}\n\t\tif (thisVariance > lastVariance) {\n\t\t\tlineBreaks.push(i - 1);\n\t\t\tcurrLine++;\n\t\t\thighestVariance = Math.max(highestVariance, lastVariance);\n\t\t\tlastVariance = Math.abs(accumulator - idealWidths[currLine]);\n\t\t\tlineWidths.push(lineAccumulator - measureWidth);\n\t\t\tlineAccumulator = measureWidth;\n\t\t} else {\n\t\t\tlastVariance = thisVariance;\n\t\t}\n\t}\n\tlineWidths.push(lineAccumulator);\n}\n\nfunction optimizeLineWidths(widths, lineBreakPoint, lineBreaks, explanation) {\n\t//\tfigure out how many lines\n\tvar numLines = Math.ceil(widths.total / lineBreakPoint); // + 1 TODO-PER: this used to be plus one - not sure why\n\n\t//\tget the ideal width for a line (cumulative width / num lines) - approx the same as lineBreakPoint except for rounding\n\tvar idealWidth = Math.floor(widths.total / numLines);\n\n\t//\tget each ideal line width (1*ideal, 2*ideal, 3*ideal, etc)\n\tvar idealWidths = [];\n\tfor (var i = 0; i < numLines; i++)\n\t\tidealWidths.push(idealWidth*(i+1));\n\n\t//\tfrom first measure, step through accum. Widths until the abs of the ideal is greater than the last one.\n\t// This can sometimes look funny in edge cases, so when the length is within 10%, try one more or one less to see which is better.\n\t// This is better than trying all the possibilities because that would get to be a huge number for even a medium size piece.\n\t// This method seems to never generate more than about 16 tries and it is usually 4 or less.\n\tvar otherTries = [];\n\totherTries.push({\n\t\taccumulator: 0,\n\t\tlineAccumulator: 0,\n\t\tlineWidths: [],\n\t\tlastVariance: 999999,\n\t\thighestVariance: 0,\n\t\tcurrLine: 0,\n\t\tlineBreaks: [], // These are the zero-based last measure on each line\n\t\tstartIndex: 0});\n\tvar index = 0;\n\twhile (index < otherTries.length) {\n\t\toneTry(widths.measureWidths,\n\t\t\tidealWidths,\n\t\t\totherTries[index].accumulator,\n\t\t\totherTries[index].lineAccumulator,\n\t\t\totherTries[index].lineWidths,\n\t\t\totherTries[index].lastVariance,\n\t\t\totherTries[index].highestVariance,\n\t\t\totherTries[index].currLine,\n\t\t\totherTries[index].lineBreaks,\n\t\t\totherTries[index].startIndex,\n\t\t\totherTries);\n\t\tindex++;\n\t}\n\tfor (i = 0; i < otherTries.length; i++) {\n\t\tvar otherTry = otherTries[i];\n\t\totherTry.variances = [];\n\t\totherTry.aveVariance = 0;\n\t\tfor (var j = 0; j < otherTry.lineWidths.length; j++) {\n\t\t\tvar lineWidth = otherTry.lineWidths[j];\n\t\t\totherTry.variances.push(lineWidth - idealWidths[0]);\n\t\t\totherTry.aveVariance += Math.abs(lineWidth - idealWidths[0]);\n\t\t}\n\t\totherTry.aveVariance = otherTry.aveVariance / otherTry.lineWidths.length;\n\t\texplanation.attempts.push({ type: \"optimizeLineWidths\", lineBreaks: otherTry.lineBreaks, variances: otherTry.variances, aveVariance: otherTry.aveVariance, widths: widths.measureWidths });\n\t}\n\tvar smallest = 9999999;\n\tvar smallestIndex = -1;\n\tfor (i = 0; i < otherTries.length; i++) {\n\t\totherTry = otherTries[i];\n\t\tif (otherTry.aveVariance < smallest) {\n\t\t\tsmallest = otherTry.aveVariance;\n\t\t\tsmallestIndex = i;\n\t\t}\n\t}\n\treturn { failed: false, lineBreaks: otherTries[smallestIndex].lineBreaks, variance: otherTries[smallestIndex].highestVariance };\n}\n\nfunction fixedMeasureLineBreaks(widths, lineBreakPoint, preferredMeasuresPerLine) {\n\tvar lineBreaks = [];\n\tvar totals = [];\n\tvar thisWidth = 0;\n\tvar failed = false;\n\tfor (var i = 0; i < widths.length; i++) {\n\t\tthisWidth += widths[i];\n\t\tif (thisWidth > lineBreakPoint) {\n\t\t\tfailed = true;\n\t\t}\n\t\tif (i % preferredMeasuresPerLine === (preferredMeasuresPerLine-1)) {\n\t\t\tif (i !== widths.length-1) // Don't bother putting a line break for the last line - it's already a break.\n\t\t\t\tlineBreaks.push(i);\n\t\t\ttotals.push(Math.round(thisWidth));\n\t\t\tthisWidth = 0;\n\t\t}\n\t}\n\treturn { failed: failed, totals: totals, lineBreaks: lineBreaks };\n}\n\nfunction getRevisedTuneParams(lineBreaks, staffWidth, params) {\n\n\tvar revisedParams = {\n\t\tlineBreaks: lineBreaks,\n\t\tstaffwidth: staffWidth\n\t};\n\tfor (var key in params) {\n\t\tif (params.hasOwnProperty(key) && key !== 'wrap' && key !== 'staffwidth') {\n\t\t\trevisedParams[key] = params[key];\n\t\t}\n\t}\n\n\treturn { revisedParams: revisedParams };\n}\n\nfunction calcLineWraps(tune, widths, params) {\n\t// For calculating how much can go on the line, it depends on the width of the line. It is a convenience to just divide it here\n\t// by the minimum spacing instead of multiplying the min spacing later.\n\t// The scaling works differently: this is done by changing the scaling of the outer SVG, so the scaling needs to be compensated\n\t// for here, because the actual width will be different from the calculated numbers.\n\n\t// If the desired width is less than the margin, just punt and return the original tune\n\t//console.log(widths)\n\tif (widths.length === 0 || params.staffwidth < widths[0].left) {\n\t\treturn {\n\t\t\treParse: false,\n\t\t\texplanation: \"Staff width is narrower than the margin\",\n\t\t\trevisedParams: params\n\t\t};\n\t}\n\tvar scale = params.scale ? Math.max(params.scale, 0.1) : 1;\n\tvar minSpacing = params.wrap.minSpacing ? Math.max(parseFloat(params.wrap.minSpacing), 1) : 1;\n\tvar minSpacingLimit = params.wrap.minSpacingLimit ? Math.max(parseFloat(params.wrap.minSpacingLimit), 1) : minSpacing - 0.1;\n\tvar maxSpacing = params.wrap.maxSpacing ? Math.max(parseFloat(params.wrap.maxSpacing), 1) : undefined;\n\tif (params.wrap.lastLineLimit && !maxSpacing)\n\t\tmaxSpacing = Math.max(parseFloat(params.wrap.lastLineLimit), 1);\n\t// var targetHeight = params.wrap.targetHeight ? Math.max(parseInt(params.wrap.targetHeight, 10), 100) : undefined;\n\tvar preferredMeasuresPerLine = params.wrap.preferredMeasuresPerLine ? Math.max(parseInt(params.wrap.preferredMeasuresPerLine, 10), 0) : undefined;\n\n\tvar accumulatedLineBreaks = [];\n\tvar explanations = [];\n\tfor (var s = 0; s < widths.length; s++) {\n\t\tvar section = widths[s];\n\t\tvar usableWidth = params.staffwidth - section.left;\n\t\tvar lineBreakPoint = usableWidth / minSpacing / scale;\n\t\tvar minLineSize = usableWidth / maxSpacing / scale;\n\t\tvar allowableVariance = usableWidth / minSpacingLimit / scale;\n\t\tvar explanation = {\n\t\t\twidths: section,\n\t\t\tlineBreakPoint: lineBreakPoint,\n\t\t\tminLineSize: minLineSize,\n\t\t\tattempts: [],\n\t\t\tstaffWidth: params.staffwidth,\n\t\t\tminWidth: Math.round(allowableVariance)\n\t\t};\n\n\t\t// If there is a preferred number of measures per line, test that first. If none of the lines is too long, then we're finished.\n\t\tvar lineBreaks = null;\n\t\tif (preferredMeasuresPerLine) {\n\t\t\tvar f = fixedMeasureLineBreaks(section.measureWidths, lineBreakPoint, preferredMeasuresPerLine);\n\t\t\texplanation.attempts.push({\n\t\t\t\ttype: \"Fixed Measures Per Line\",\n\t\t\t\tpreferredMeasuresPerLine: preferredMeasuresPerLine,\n\t\t\t\tlineBreaks: f.lineBreaks,\n\t\t\t\tfailed: f.failed,\n\t\t\t\ttotals: f.totals\n\t\t\t});\n\t\t\tif (!f.failed)\n\t\t\t\tlineBreaks = f.lineBreaks;\n\t\t}\n\n\t\t// If we don't have lineBreaks yet, use the free form method of line breaks.\n\t\t// This will be called either if Preferred Measures is not used, or if the music is just weird - like a single measure is way too crowded.\n\t\tif (!lineBreaks) {\n\t\t\tvar ff = freeFormLineBreaks(section.measureWidths, lineBreakPoint);\n\t\t\texplanation.attempts.push({type: \"Free Form\", lineBreaks: ff.lineBreaks, totals: ff.totals});\n\t\t\tlineBreaks = ff.lineBreaks;\n\n\t\t\t// We now have an acceptable number of lines, but the measures may not be optimally distributed. See if there is a better distribution.\n\t\t\tif (lineBreaks.length > 0 && section.measureWidths.length < 25) {\n\t\t\t\t// Only do this if everything doesn't fit on one line.\n\t\t\t\t// This is an intensive operation and it is optional so just do it for shorter music.\n\t\t\t\tff = optimizeLineWidths(section, lineBreakPoint, lineBreaks, explanation);\n\t\t\t\texplanation.attempts.push({\n\t\t\t\t\ttype: \"Optimize\",\n\t\t\t\t\tfailed: ff.failed,\n\t\t\t\t\treason: ff.reason,\n\t\t\t\t\tlineBreaks: ff.lineBreaks,\n\t\t\t\t\ttotals: ff.totals\n\t\t\t\t});\n\t\t\t\tif (!ff.failed)\n\t\t\t\t\tlineBreaks = ff.lineBreaks;\n\t\t\t}\n\t\t}\n\t\taccumulatedLineBreaks.push(lineBreaks);\n\t\texplanations.push(explanation);\n\t}\n\t// If the vertical space exceeds targetHeight, remove a line and try again. If that is too crowded, then don't use it.\n\tvar staffWidth = params.staffwidth;\n\tvar ret = getRevisedTuneParams(accumulatedLineBreaks, staffWidth, params);\n\tret.explanation = explanations;\n\tret.reParse = true;\n\treturn ret;\n}\n\nmodule.exports = { wrapLines: wrapLines, calcLineWraps: calcLineWraps };\n","var keyAccidentals = require(\"../const/key-accidentals\");\nvar { relativeMajor, transposeKey, relativeMode } = require(\"../const/relative-major\");\nvar transposeChordName = require(\"../parse/transpose-chord\")\n\nvar strTranspose;\n\n(function () {\n\t\"use strict\";\n\tstrTranspose = function (abc, abcTune, steps) {\n\t\tif (abcTune === \"TEST\") // Backdoor way to get entry points for unit tests\n\t\t\treturn { keyAccidentals: keyAccidentals, relativeMajor: relativeMajor, transposeKey: transposeKey, relativeMode: relativeMode, transposeChordName: transposeChordName}\n\t\tsteps = parseInt(steps, 10)\n\t\tvar changes = [];\n\t\tvar i;\n\t\tfor (i = 0; i < abcTune.length; i++)\n\t\t\tchanges = changes.concat(transposeOneTune(abc, abcTune[i], steps))\n\n\t\t// Reverse sort so that we are replacing strings from the end to the beginning so that the indexes aren't invalidated as we go.\n\t\t// (Because voices can be written in different ways we can't count on the notes being encountered in the order they appear in the string.)\n\t\tchanges = changes.sort(function (a, b) {\n\t\t\treturn b.start - a.start\n\t\t})\n\t\tvar output = abc.split('')\n\t\tfor (i = 0; i < changes.length; i++) {\n\t\t\tvar ch = changes[i]\n\t\t\toutput.splice(ch.start, ch.end - ch.start, ch.note)\n\t\t}\n\t\treturn output.join('')\n\t}\n\n\tfunction transposeOneTune(abc, abcTune, steps) {\n\t\tvar changes = []\n\n\t\t// Don't transpose bagpipe music - that is a special case and is always a particular key\n\t\tvar key = abcTune.getKeySignature()\n\t\tif (key.root === 'Hp' || key.root === \"HP\")\n\t\t\treturn changes;\n\n\t\tchanges = changes.concat(changeAllKeySigs(abc, steps))\n\n\t\tfor (var i = 0; i < abcTune.lines.length; i++) {\n\t\t\tvar staves = abcTune.lines[i].staff\n\t\t\tif (staves) {\n\t\t\t\tfor (var j = 0; j < staves.length; j++) {\n\t\t\t\t\tvar staff = staves[j]\n\t\t\t\t\tif (staff.clef.type !== \"perc\")\n\t\t\t\t\t\tchanges = changes.concat(transposeVoices(abc, staff.voices, staff.key, steps))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn changes\n\t}\n\n\tfunction changeAllKeySigs(abc, steps) {\n\t\tvar changes = [];\n\t\tvar arr = abc.split(\"K:\")\n\t\t// now each line except the first one will start with whatever is right after \"K:\"\n\t\tvar count = arr[0].length\n\t\tfor (var i = 1; i < arr.length; i++) {\n\t\t\tvar segment = arr[i]\n\t\t\tvar match = segment.match(/^( *)([A-G])([#b]?)(\\w*)/)\n\t\t\tif (match) {\n\t\t\t\tvar start = count + 2 + match[1].length // move past the 'K:' and optional white space\n\t\t\t\tvar key = match[2] + match[3] + match[4] // key name, accidental, and mode\n\t\t\t\tvar destinationKey = newKey({ root: match[2], acc: match[3], mode: match[4] }, steps)\n\t\t\t\tvar dest = destinationKey.root + destinationKey.acc + destinationKey.mode\n\t\t\t\tchanges.push({ start: start, end: start + key.length, note: dest })\n\t\t\t}\n\t\t\tcount += segment.length + 2\n\t\t}\n\t\treturn changes\n\t}\n\n\tfunction transposeVoices(abc, voices, key, steps) {\n\t\tvar changes = [];\n\t\tvar destinationKey = newKey(key, steps)\n\t\tfor (var i = 0; i < voices.length; i++) {\n\t\t\tchanges = changes.concat(transposeVoice(abc, voices[i], key.root, createKeyAccidentals(key), destinationKey, steps))\n\t\t}\n\t\treturn changes\n\t}\n\n\tfunction createKeyAccidentals(key) {\n\t\tvar ret = {}\n\t\tfor (var i = 0; i < key.accidentals.length; i++) {\n\t\t\tvar acc = key.accidentals[i];\n\t\t\tif (acc.acc === 'flat')\n\t\t\t\tret[acc.note.toUpperCase()] = '_'\n\t\t\telse if (acc.acc === 'sharp')\n\t\t\t\tret[acc.note.toUpperCase()] = '^'\n\t\t}\n\t\treturn ret\n\t}\n\n\tfunction setLetterDistance(destinationKey, keyRoot, steps) {\n\t\tvar letterDistance = letters.indexOf(destinationKey.root) - letters.indexOf(keyRoot)\n\t\tif (keyRoot === \"none\")\n\t\t\tletterDistance = letters.indexOf(destinationKey.root)\n\t\tif (letterDistance === 0) {\n\t\t\t// This could either be a half step (like Eb => E) or almost an octave (like E => Eb)\n\t\t\tif (steps > 2) // If it is a large leap, then we are going up an octave\n\t\t\t\tletterDistance += 7\n\t\t\telse if (steps === -12) // If it is a large leap, then we are going down an octave\t\n\t\t\t \tletterDistance -= 7\n\t\t} else if (steps > 0 && letterDistance < 0) \n\t\t\tletterDistance += 7\n\t\telse if (steps < 0 && letterDistance > 0) \n\t\t\tletterDistance -= 7\n\n\t\tif (steps > 12)\n\t\t\tletterDistance += 7\n\t\telse if (steps < -12)\n\t\t\tletterDistance -= 7\n\n\t\treturn letterDistance\n\t}\n\n\tfunction transposeVoice(abc, voice, keyRoot, keyAccidentals, destinationKey, steps) {\n\t\tvar changes = []\n\t\tvar letterDistance = setLetterDistance(destinationKey, keyRoot, steps)\n\n\t\tvar measureAccidentals = {}\n\t\tvar transposedMeasureAccidentals = {}\n\t\tfor (var i = 0; i < voice.length; i++) {\n\t\t\tvar el = voice[i];\n\t\t\tif (el.chord) {\n\t\t\t\tfor (var c = 0; c < el.chord.length; c++) {\n\t\t\t\t\tvar ch = el.chord[c]\n\t\t\t\t\tif (ch.position === 'default') {\n\t\t\t\t\t\tvar prefersFlats = destinationKey.accidentals.length && destinationKey.accidentals[0].acc === 'flat'\n\t\t\t\t\t\tvar newChord = transposeChordName(ch.name, steps, prefersFlats, true)\n\t\t\t\t\t\tnewChord = newChord.replace(/♭/g, \"b\").replace(/♯/g, \"#\")\n\t\t\t\t\t\tif (newChord !== ch.name) // If we didn't recognize the chord the input is returned unchanged and there is nothing to replace\n\t\t\t\t\t\t\tchanges.push(replaceChord(abc, el.startChar, el.endChar, newChord))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (el.el_type === 'note' && el.pitches) {\n\t\t\t\tfor (var j = 0; j < el.pitches.length; j++) {\n\t\t\t\t\tvar note = parseNote(el.pitches[j].name, keyRoot, keyAccidentals, measureAccidentals)\n\t\t\t\t\tif (note.acc)\n\t\t\t\t\t\tmeasureAccidentals[note.name.toUpperCase()] = note.acc\n\t\t\t\t\tvar newPitch = transposePitch(note, destinationKey, letterDistance, transposedMeasureAccidentals)\n\t\t\t\t\tif (newPitch.acc)\n\t\t\t\t\t\ttransposedMeasureAccidentals[newPitch.upper] = newPitch.acc\n\t\t\t\t\tchanges.push(replaceNote(abc, el.startChar, el.endChar, newPitch.acc + newPitch.name, j))\n\t\t\t\t}\n\t\t\t\tif (el.gracenotes) {\n\t\t\t\t\tfor (var g = 0; g < el.gracenotes.length; g++) {\n\t\t\t\t\t\tvar grace = parseNote(el.gracenotes[g].name, keyRoot, keyAccidentals, measureAccidentals)\n\t\t\t\t\t\tif (grace.acc)\n\t\t\t\t\t\t\tmeasureAccidentals[grace.name.toUpperCase()] = grace.acc\n\t\t\t\t\t\tvar newGrace = transposePitch(grace, destinationKey, letterDistance, measureAccidentals)\n\t\t\t\t\t\tif (newGrace.acc)\n\t\t\t\t\t\t\ttransposedMeasureAccidentals[newGrace.upper] = newGrace.acc\n\t\t\t\t\t\tchanges.push(replaceGrace(abc, el.startChar, el.endChar, newGrace.acc + newGrace.name, g))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (el.el_type === \"bar\") {\n\t\t\t\tmeasureAccidentals = {}\n\t\t\t\ttransposedMeasureAccidentals = {}\n\t\t\t} else if (el.el_type === \"keySignature\") {\n\t\t\t\tkeyRoot = el.root\n\t\t\t\tkeyAccidentals = createKeyAccidentals(el)\n\t\t\t\tdestinationKey = newKey(el, steps)\n\t\t\t\tletterDistance = setLetterDistance(destinationKey, keyRoot, steps)\n\t\t\t}\n\t\t}\n\t\treturn changes\n\t}\n\n\tvar letters = \"CDEFGAB\"\n\tvar octaves = [\",,,,\", \",,,\", \",,\", \",\", \"\", \"'\", \"''\", \"'''\", \"''''\"]\n\n\tfunction newKey(key, steps) {\n\t\tif (key.root === \"none\") {\n\t\t\treturn { root: transposeKey(\"C\", steps), mode: \"\", acc: \"\", accidentals: [] }\n\t\t}\n\t\tvar major = relativeMajor(key.root + key.acc + key.mode)\n\t\tvar newMajor = transposeKey(major, steps)\n\t\tvar newMode = relativeMode(newMajor, key.mode)\n\t\tvar acc = keyAccidentals(newMajor)\n\t\treturn { root: newMode[0], mode: key.mode, acc: newMode.length > 1 ? newMode[1] : '', accidentals: acc }\n\t}\n\n\tfunction transposePitch(note, key, letterDistance, measureAccidentals) {\n\t\t// Depending on what the current note and new note are, the octave might have changed\n\t\t// The letterDistance is how far the change is to see if we passed \"C\" when transposing.\n\n\t\tvar pitch = note.pitch\n\t\tvar origDistFromC = letters.indexOf(note.name)\n\t\tvar root = letters.indexOf(key.root)\n\t\tvar index = (root + pitch) % 7\n\t\t// if the note crosses \"c\" then the octave changes, so that is true of \"B\" when going up one step, \"A\" and \"B\" when going up two steps, etc., and reverse when going down.\n\t\tvar newDistFromC = origDistFromC + letterDistance\n\t\tvar oct = note.oct\n\t\twhile (newDistFromC > 6) {\n\t\t\toct++\n\t\t\tnewDistFromC -= 7\n\t\t}\n\t\twhile (newDistFromC < 0) {\n\t\t\toct--\n\t\t\tnewDistFromC += 7\n\t\t}\n\n\t\tvar name = letters[index]\n\n\t\tvar acc = '';\n\t\tvar adj = note.adj\n\t\t// the amount of adjustment depends on the key - if there is a sharp in the key sig, then -1 is a natural, if there isn't, then -1 is a flat.\n\t\tvar keyAcc = '=';\n\t\tfor (var i = 0; i < key.accidentals.length; i++) {\n\t\t\tif (key.accidentals[i].note.toLowerCase() === name.toLowerCase()) {\n\t\t\t\tadj = adj + (key.accidentals[i].acc === 'flat' ? -1 : 1)\n\t\t\t\tkeyAcc = (key.accidentals[i].acc === 'flat' ? '_' : '^')\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tswitch (adj) {\n\t\t\tcase -2: acc = \"__\"; break;\n\t\t\tcase -1: acc = \"_\"; break;\n\t\t\tcase 0: acc = \"=\"; break;\n\t\t\tcase 1: acc = \"^\"; break;\n\t\t\tcase 2: acc = \"^^\"; break;\n\t\t\tcase -3:\n\t\t\t\t// This requires a triple flat, so bump down the pitch and try again\n\t\t\t\tvar newNote = {}\n\t\t\t\tnewNote.pitch = note.pitch - 1\n\t\t\t\tnewNote.oct = note.oct\n\t\t\t\tnewNote.name = letters[letters.indexOf(note.name) - 1]\n\t\t\t\tif (!newNote.name) {\n\t\t\t\t\tnewNote.name = \"B\"\n\t\t\t\t\tnewNote.oct--\n\t\t\t\t}\n\t\t\t\tif (newNote.name === \"B\" || newNote.name === \"E\")\n\t\t\t\t\tnewNote.adj = note.adj + 1;\n\t\t\t\telse\n\t\t\t\t\tnewNote.adj = note.adj + 2;\n\t\t\t\treturn transposePitch(newNote, key, letterDistance + 1, measureAccidentals)\n\t\t\tcase 3:\n\t\t\t\t// This requires a triple sharp, so bump up the pitch and try again\n\t\t\t\tvar newNote = {}\n\t\t\t\tnewNote.pitch = note.pitch + 1\n\t\t\t\tnewNote.oct = note.oct\n\t\t\t\tnewNote.name = letters[letters.indexOf(note.name) + 1]\n\t\t\t\tif (!newNote.name) {\n\t\t\t\t\tnewNote.name = \"C\"\n\t\t\t\t\tnewNote.oct++\n\t\t\t\t}\n\t\t\t\tif (newNote.name === \"C\" || newNote.name === \"F\")\n\t\t\t\t\tnewNote.adj = note.adj - 1;\n\t\t\t\telse\n\t\t\t\t\tnewNote.adj = note.adj - 2;\n\t\t\t\treturn transposePitch(newNote, key, letterDistance + 1, measureAccidentals)\n\t\t}\n\t\tif ((measureAccidentals[name] === acc || (!measureAccidentals[name] && acc === keyAcc)) && !note.courtesy)\n\t\t\tacc = \"\"\n\n\t\tswitch (oct) {\n\t\t\tcase 0: name = name + \",,,\"; break;\n\t\t\tcase 1: name = name + \",,\"; break;\n\t\t\tcase 2: name = name + \",\"; break;\n\t\t\t// case 3: it is already correct\n\t\t\tcase 4: name = name.toLowerCase(); break;\n\t\t\tcase 5: name = name.toLowerCase() + \"'\"; break;\n\t\t\tcase 6: name = name.toLowerCase() + \"''\"; break;\n\t\t\tcase 7: name = name.toLowerCase() + \"'''\"; break;\n\t\t\tcase 8: name = name.toLowerCase() + \"''''\"; break;\n\t\t}\n\t\tif (oct > 4)\n\t\t\tname = name.toLowerCase();\n\n\t\treturn { acc: acc, name: name, upper: name.toUpperCase() }\n\t}\n\n\tvar regPitch = /([_^=]*)([A-Ga-g])([,']*)/\n\tvar regNote = /([_^=]*[A-Ga-g][,']*)(\\d*\\/*\\d*)([\\>\\<\\-\\)\\.\\s\\\\]*)/\n\tvar regOptionalNote = /([_^=]*[A-Ga-g][,']*)?(\\d*\\/*\\d*)?([\\>\\<\\-\\)]*)?/\n\tvar regSpace = /(\\s*)$/\n\n\t// This the relationship of the note to the tonic and an octave. So what is returned is a distance in steps from the tonic and the amount of adjustment from\n\t// a normal scale. That is - in the key of D an F# is two steps from the tonic and no adjustment. A G# is three steps from the tonic and one half-step higher.\n\t// I don't think there is any adjustment needed for minor keys since the adjustment is based on the key signature and the accidentals.\n\tfunction parseNote(note, keyRoot, keyAccidentals, measureAccidentals) {\n\t\tvar root = keyRoot === \"none\" ? 0 : letters.indexOf(keyRoot)\n\t\tvar reg = note.match(regPitch)\n\t\t// reg[1] : \"__\", \"_\", \"\", \"=\", \"^\", or \"^^\"\n\t\t// reg[2] : A-G a-g\n\t\t// reg[3] : commas or apostrophes\n\t\tvar name = reg[2].toUpperCase()\n\t\tvar pos = letters.indexOf(name) - root;\n\t\tif (pos < 0) pos += 7\n\t\tvar oct = octaves.indexOf(reg[3])\n\t\tif (name === reg[2]) // See if it is a capital letter and subtract an octave if so.\n\t\t\toct--;\n\t\tvar currentAcc = measureAccidentals[name] || keyAccidentals[name] || \"=\" // use the key accidentals if they exist, but override with the measure accidentals, and if neither of them exist, use a natural.\n\t\treturn { acc: reg[1], name: name, pitch: pos, oct: oct, adj: calcAdjustment(reg[1], keyAccidentals[name], measureAccidentals[name]), courtesy: reg[1] === currentAcc }\n\t}\n\n\tfunction replaceNote(abc, start, end, newPitch, index) {\n\t\t// There may be more than just the note between the start and end - there could be spaces, there could be a chord symbol, there could be a decoration.\n\t\t// This could also be a part of a chord. If so, then the particular note needs to be teased out.\n\t\tvar note = abc.substring(start, end)\n\t\tvar match = note.match(new RegExp(regNote.source + regSpace.source), '')\n\t\tif (match) {\n\t\t\t// This will match a single note\n\t\t\tvar noteLen = match[1].length\n\t\t\tvar trailingLen = match[2].length + match[3].length + match[4].length\n\t\t\tvar leadingLen = end - start - noteLen - trailingLen\n\t\t\tstart += leadingLen\n\t\t\tend -= trailingLen\n\t\t} else {\n\t\t\t// I don't know how to capture more than one note, so I'm separating them. There is a limit of the number of notes in a chord depending on the repeats I have here, but it is unlikely to happen in real music.\n\t\t\tvar regPreBracket = /([^\\[]*)/\n\t\t\tvar regOpenBracket = /\\[/\n\t\t\tvar regCloseBracket = /\\-?](\\d*\\/*\\d*)?([\\>\\<\\-\\)]*)/\n\t\t\tmatch = note.match(new RegExp(regPreBracket.source + regOpenBracket.source + regOptionalNote.source +\n\t\t\t\tregOptionalNote.source + regOptionalNote.source + regOptionalNote.source +\n\t\t\t\tregOptionalNote.source + regOptionalNote.source + regOptionalNote.source +\n\t\t\t\tregOptionalNote.source + regCloseBracket.source + regSpace.source))\n\n\t\t\tif (match) {\n\t\t\t\t// This will match a chord\n\t\t\t\t// Get the number of chars used by the previous notes in this chord\n\t\t\t\tvar count = 1 + match[1].length // one character for the open bracket\n\t\t\t\tfor (var i = 0; i < index; i++) { // index is the iteration through the chord. This function gets called for each one.\n\t\t\t\t\tif (match[i * 3 + 2])\n\t\t\t\t\t\tcount += match[i * 3 + 2].length\n\t\t\t\t\tif (match[i * 3 + 3])\n\t\t\t\t\t\tcount += match[i * 3 + 3].length\n\t\t\t\t\tif (match[i * 3 + 4])\n\t\t\t\t\t\tcount += match[i * 3 + 4].length\n\t\t\t\t}\n\t\t\t\tstart += count\n\t\t\t\tvar endLen = match[index * 3 + 2] ? match[index * 3 + 2].length : 0\n\t\t\t\t// endLen += match[index * 3 + 3] ? match[index * 3 + 3].length : 0\n\t\t\t\t// endLen += match[index * 3 + 4] ? match[index * 3 + 4].length : 0\n\n\t\t\t\tend = start + endLen\n\t\t\t}\n\t\t}\n\t\treturn { start: start, end: end, note: newPitch }\n\t}\n\n\tfunction replaceGrace(abc, start, end, newGrace, index) {\n\t\tvar note = abc.substring(start, end)\n\t\t// I don't know how to capture more than one note, so I'm separating them. There is a limit of the number of notes in a chord depending on the repeats I have here, but it is unlikely to happen in real music.\n\t\tvar regOpenBrace = /\\{/\n\t\tvar regCloseBrace = /\\}/\n\t\tvar regPreBrace = /([^\\{]*)/\n\t\tvar regPreNote = /(\\/*)/\n\t\tvar match = note.match(new RegExp(regPreBrace.source + regOpenBrace.source + regPreNote.source + regOptionalNote.source +\n\t\t\tregPreNote.source + regOptionalNote.source + regPreNote.source + regOptionalNote.source + regPreNote.source + regOptionalNote.source +\n\t\t\tregPreNote.source + regOptionalNote.source + regPreNote.source + regOptionalNote.source + regPreNote.source + regOptionalNote.source +\n\t\t\tregPreNote.source + regOptionalNote.source + regCloseBrace.source))\n\t\tif (match) {\n\t\t\t// This will match all notes inside a grace symbol\n\t\t\t// Get the number of chars used by the previous graces\n\t\t\tvar count = 1 + match[1].length // one character for the open brace, and whatever comes before the brace\n\t\t\tfor (var i = 0; i < index; i++) { // index is the iteration through the chord. This function gets called for each one.\n\t\t\t\tif (match[i * 3 + 2])\n\t\t\t\t\tcount += match[i * 3 + 2].length\n\t\t\t\tif (match[i * 3 + 3])\n\t\t\t\t\tcount += match[i * 3 + 3].length\n\t\t\t\tif (match[i * 3 + 4])\n\t\t\t\t\tcount += match[i * 3 + 4].length\n\t\t\t\tif (match[i * 3 + 5])\n\t\t\t\t\tcount += match[i * 3 + 5].length\n\t\t\t}\n\t\t\tif (match[index * 3 + 2])\n\t\t\t\tcount += match[i * 3 + 2].length\n\t\t\tstart += count\n\t\t\tvar endLen = match[index * 3 + 3] ? match[index * 3 + 3].length : 0\n\t\t\tendLen += match[index * 3 + 4] ? match[index * 3 + 4].length : 0\n\t\t\tendLen += match[index * 3 + 5] ? match[index * 3 + 5].length : 0\n\n\t\t\tend = start + endLen\n\t\t}\n\t\treturn { start: start, end: end, note: newGrace }\n\t}\n\n\tfunction replaceChord(abc, start, end, newChord) {\n\t\t// Isolate the chord and just replace that\n\t\tvar match = abc.substring(start, end).match(/([^\"]+)?(\".+\")+/)\n\t\tif (match[1])\n\t\t\tstart += match[1].length\n\t\tend = start + match[2].length\n\t\t// leave the quote in, so skip one more\n\t\treturn { start: start + 1, end: end - 1, note: newChord }\n\t}\n\n\tfunction calcAdjustment(thisAccidental, keyAccidental, measureAccidental) {\n\t\tif (!thisAccidental && measureAccidental) {\n\t\t\t// There was no accidental on this note, but there was earlier in the measure, so we'll use that\n\t\t\tthisAccidental = measureAccidental\n\t\t}\n\t\tif (!thisAccidental)\n\t\t\treturn 0; // there is no deviation from the key.\n\n\t\tswitch (keyAccidental) {\n\t\t\tcase undefined:\n\t\t\t\tswitch (thisAccidental) {\n\t\t\t\t\tcase '__': return -2;\n\t\t\t\t\tcase '_': return -1;\n\t\t\t\t\tcase '=': return 0;\n\t\t\t\t\tcase '^': return 1;\n\t\t\t\t\tcase '^^': return 2;\n\t\t\t\t\tdefault: return 0; // this should never happen\n\t\t\t\t}\n\t\t\tcase '_':\n\t\t\t\tswitch (thisAccidental) {\n\t\t\t\t\tcase '__': return -1;\n\t\t\t\t\tcase '_': return 0;\n\t\t\t\t\tcase '=': return 1;\n\t\t\t\t\tcase '^': return 2;\n\t\t\t\t\tcase '^^': return 3;\n\t\t\t\t\tdefault: return 0; // this should never happen\n\t\t\t\t}\n\t\t\tcase '^':\n\t\t\t\tswitch (thisAccidental) {\n\t\t\t\t\tcase '__': return -3;\n\t\t\t\t\tcase '_': return -2;\n\t\t\t\t\tcase '=': return -1;\n\t\t\t\t\tcase '^': return 0;\n\t\t\t\t\tcase '^^': return 1;\n\t\t\t\t\tdefault: return 0; // this should never happen\n\t\t\t\t}\n\t\t}\n\t\treturn 0// this should never happen\n\t}\n})();\n\nmodule.exports = strTranspose;\n","// abc_midi_flattener.js: Turn a linear series of events into a series of MIDI commands.\n\n// We input a set of voices, but the notes are still complex. This pass changes the logical definitions\n// of the grace notes, decorations, ties, triplets, rests, transpositions, keys, and accidentals into actual note durations.\n// It also extracts guitar chords to a separate voice and resolves their rhythm.\n\nvar flatten;\nvar ChordTrack = require(\"./chord-track\");\nvar pitchesToPerc = require('./pitches-to-perc');\n\n(function() {\n\t\"use strict\";\n\n\tvar barAccidentals;\n\tvar accidentals;\n\tvar transpose;\n\tvar bagpipes;\n\tvar tracks;\n\tvar startingTempo;\n\tvar startingMeter;\n\tvar tempoChangeFactor = 1;\n\tvar instrument;\n\tvar currentInstrument;\n\t// var channel;\n\tvar currentTrack;\n\tvar lastNoteDurationPosition;\n\tvar currentTrackName;\n\tvar lastEventTime;\n\tvar chordTrack;\n\n\tvar meter = { num: 4, den: 4 };\n\tvar drumInstrument = 128;\n\tvar lastBarTime;\n\tvar doBeatAccents = true;\n\tvar stressBeat1 = 105;\n\tvar stressBeatDown = 95;\n\tvar stressBeatUp = 85;\n\tvar beatFraction = 0.25;\n\tvar nextVolume;\n\tvar nextVolumeDelta;\n\tvar slurCount = 0;\n\n\tvar drumTrack;\n\tvar drumTrackFinished;\n\tvar drumDefinition = {};\n\tvar drumBars;\n\n\tvar pickupLength = 0;\n\tvar percmap;\n\n\t// The gaps per beat. The first two are in seconds, the third is in fraction of a duration.\n\tvar normalBreakBetweenNotes = 0; //0.000520833333325*1.5; // for articulation (matches muse score value)\n\tvar slurredBreakBetweenNotes = -0.001; // make the slurred notes actually overlap\n\tvar staccatoBreakBetweenNotes = 0.4; // some people say staccato is half duration, some say 3/4 so this splits it\n\n\tflatten = function(voices, options, percmap_, midiOptions) {\n\t\tif (!options) options = {};\n\t\tif (!midiOptions) midiOptions = {};\n\t\tbarAccidentals = [];\n\t\taccidentals = [0,0,0,0,0,0,0];\n\t\tbagpipes = false;\n\t\ttracks = [];\n\t\tstartingTempo = options.qpm;\n\t\tstartingMeter = undefined;\n\t\ttempoChangeFactor = 1;\n\t\tinstrument = undefined;\n\t\tcurrentInstrument = undefined;\n\t\t// channel = undefined;\n\t\tcurrentTrack = undefined;\n\t\tcurrentTrackName = undefined;\n\t\tlastEventTime = 0;\n\t\tpercmap = percmap_;\n\n\t\tmeter = { num: 4, den: 4 };\n\n\t\tdoBeatAccents = true;\n\t\tstressBeat1 = 105;\n\t\tstressBeatDown = 95;\n\t\tstressBeatUp = 85;\n\t\tbeatFraction = 0.25;\n\t\tnextVolume = undefined;\n\t\tnextVolumeDelta = undefined;\n\t\tslurCount = 0;\n\n\t\t// For the drum/metronome track.\n\t\tdrumTrack = [];\n\t\tdrumTrackFinished = false;\n\t\tdrumDefinition = {};\n\t\tdrumBars = 1;\n\n\t\tif (voices.length > 0 && voices[0].length > 0)\n\t\t\tpickupLength = voices[0][0].pickupLength;\n\n\t\t// For resolving chords.\n\t\tif (options.bassprog !== undefined && !midiOptions.bassprog)\n\t\t\tmidiOptions.bassprog = [options.bassprog]\n\t\tif (options.bassvol !== undefined && !midiOptions.bassvol)\n\t\t\tmidiOptions.bassvol = [options.bassvol]\n\t\tif (options.chordprog !== undefined && !midiOptions.chordprog)\n\t\t\tmidiOptions.chordprog = [options.chordprog]\n\t\tif (options.chordvol !== undefined && !midiOptions.chordvol)\n\t\t\tmidiOptions.chordvol = [options.chordvol]\n\t\tif (options.gchord !== undefined && !midiOptions.gchord)\n\t\t\tmidiOptions.gchord = [options.gchord]\n\t\tchordTrack = new ChordTrack(voices.length, options.chordsOff, midiOptions, meter)\n\n\t\t// First adjust the input to resolve ties, set the starting time for each note, etc. That will make the rest of the logic easier\n\t\tpreProcess(voices, options);\n\n\t\tfor (var i = 0; i < voices.length; i++) {\n\t\t\ttranspose = 0;\n\t\t\tchordTrack.setTranspose(transpose)\n\t\t\tlastNoteDurationPosition = -1;\n\t\t\tvar voice = voices[i];\n\t\t\tcurrentTrack = [{ cmd: 'program', channel: i, instrument: instrument }];\n\t\t\tcurrentTrackName = undefined;\n\t\t\tlastBarTime = 0;\n\t\t\tchordTrack.setLastBarTime(0)\n\t\t\tvar voiceOff = false;\n\t\t\tif (options.voicesOff === true)\n\t\t\t\tvoiceOff = true;\n\t\t\telse if (options.voicesOff && options.voicesOff.length && options.voicesOff.indexOf(i) >= 0)\n\t\t\t\tvoiceOff = true;\n\t\t\tfor (var j = 0; j < voice.length; j++) {\n\t\t\t\tvar element = voice[j];\n\t\t\t\tswitch (element.el_type) {\n\t\t\t\t\tcase \"name\":\n\t\t\t\t\t\tcurrentTrackName = {cmd: 'text', type: \"name\", text: element.trackName };\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"note\":\n\t\t\t\t\t\twriteNote(element, voiceOff);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"key\":\n\t\t\t\t\t\taccidentals = setKeySignature(element);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"meter\":\n\t\t\t\t\t\tif (!startingMeter)\n\t\t\t\t\t\t\tstartingMeter = element;\n\t\t\t\t\t\tmeter = element;\n\t\t\t\t\t\tchordTrack.setMeter(meter)\n\t\t\t\t\t\tbeatFraction = getBeatFraction(meter);\n\t\t\t\t\t\talignDrumToMeter();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tempo\":\n\t\t\t\t\t\tif (!startingTempo)\n\t\t\t\t\t\t\tstartingTempo = element.qpm;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ttempoChangeFactor = element.qpm ? startingTempo / element.qpm : 1;\n\t\t\t\t\t\tchordTrack.setTempoChangeFactor(tempoChangeFactor)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"transpose\":\n\t\t\t\t\t\ttranspose = element.transpose;\n\t\t\t\t\t\tchordTrack.setTranspose(transpose)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"bar\":\n\t\t\t\t\t\tchordTrack.barEnd(element)\n\n\t\t\t\t\t\tbarAccidentals = [];\n\t\t\t\t\t\tif (i === 0) // Only write the drum part on the first voice so that it is not duplicated.\n\t\t\t\t\t\t\twriteDrum(voices.length+1);\n\t\t\t\t\t\t\tchordTrack.setRhythmHead(false) // decide whether there are rhythm heads each measure.\n\t\t\t\t\t\tlastBarTime = timeToRealTime(element.time);\n\t\t\t\t\t\tchordTrack.setLastBarTime(lastBarTime)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"bagpipes\":\n\t\t\t\t\t\tbagpipes = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"instrument\":\n\t\t\t\t\t\tif (instrument === undefined)\n\t\t\t\t\t\t\tinstrument = element.program;\n\t\t\t\t\t\tcurrentInstrument = element.program;\n\t\t\t\t\t\tif (currentTrack.length > 0 && currentTrack[currentTrack.length-1].cmd === 'program')\n\t\t\t\t\t\t\tcurrentTrack[currentTrack.length-1].instrument = element.program;\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvar ii;\n\t\t\t\t\t\t\tfor (ii = currentTrack.length-1; ii >= 0 && currentTrack[ii].cmd !== 'program'; ii--)\n\t\t\t\t\t\t\t\t;\n\t\t\t\t\t\t\tif (ii < 0 || currentTrack[ii].instrument !== element.program)\n\t\t\t\t\t\t\t\tcurrentTrack.push({cmd: 'program', channel: 0, instrument: element.program});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"channel\":\n\t\t\t\t\t\tsetChannel(element.channel);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"drum\":\n\t\t\t\t\t\tdrumDefinition = normalizeDrumDefinition(element.params);\n\t\t\t\t\t\talignDrumToMeter();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"gchordOn\":\n\t\t\t\t\t\tchordTrack.gChordOn(element)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"beat\":\n\t\t\t\t\t\tstressBeat1 = element.beats[0];\n\t\t\t\t\t\tstressBeatDown = element.beats[1];\n\t\t\t\t\t\tstressBeatUp = element.beats[2];\n\t\t\t\t\t\t// TODO-PER: also use the last parameter - which changes which beats are strong.\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"vol\":\n\t\t\t\t\t\tnextVolume = element.volume;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"volinc\":\n\t\t\t\t\t\tnextVolumeDelta = element.volume;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"beataccents\":\n\t\t\t\t\t\tdoBeatAccents = element.value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"gchord\":\n\t\t\t\t\tcase \"bassprog\":\n\t\t\t\t\tcase \"chordprog\":\n\t\t\t\t\tcase \"bassvol\":\n\t\t\t\t\tcase \"chordvol\":\n\t\t\t\t\t\tchordTrack.paramChange(element)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// This should never happen\n\t\t\t\t\t\tconsole.log(\"MIDI creation. Unknown el_type: \" + element.el_type + \"\\n\");// jshint ignore:line\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (currentTrack[0].instrument === undefined)\n\t\t\t\tcurrentTrack[0].instrument = instrument ? instrument : 0;\n\t\t\tif (currentTrackName)\n\t\t\t\tcurrentTrack.unshift(currentTrackName);\n\t\t\ttracks.push(currentTrack);\n\t\t\tchordTrack.finish()\n\t\t\tif (drumTrack.length > 0) // Don't do drums on more than one track, so turn off drum after we create it.\n\t\t\t\tdrumTrackFinished = true;\n\t\t}\n\t\t// See if any notes are octaves played at the same time. If so, raise the pitch of the higher one.\n\t\tif (options.detuneOctave)\n\t\t\tfindOctaves(tracks, parseInt(options.detuneOctave, 10));\n\n\t\tchordTrack.addTrack(tracks)\n\t\tif (drumTrack.length > 0)\n\t\t\ttracks.push(drumTrack);\n\n\t\treturn { tempo: startingTempo, instrument: instrument, tracks: tracks, totalDuration: lastEventTime };\n\t};\n\n\tfunction setChannel(channel) {\n\t\tfor (var i = currentTrack.length-1; i>=0; i--) {\n\t\t\tif (currentTrack[i].cmd === \"program\") {\n\t\t\t\tcurrentTrack[i].channel = channel;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction timeToRealTime(time) {\n\t\treturn time/1000000;\n\t}\n\n\tfunction durationRounded(duration) {\n\t\treturn Math.round(duration*tempoChangeFactor*1000000)/1000000;\n\t}\n\n\tfunction preProcess(voices, options) {\n\t\tfor (var i = 0; i < voices.length; i++) {\n\t\t\tvar voice = voices[i];\n\t\t\tvar ties = {};\n\t\t\tvar startingTempo = options.qpm;\n\t\t\tvar timeCounter = 0;\n\t\t\tvar tempoMultiplier = 1;\n\t\t\tfor (var j = 0; j < voice.length; j++) {\n\t\t\t\tvar element = voice[j];\n\n\t\t\t\tif (element.el_type === 'tempo') {\n\t\t\t\t\tif (!startingTempo)\n\t\t\t\t\t\tstartingTempo = element.qpm;\n\t\t\t\t\telse\n\t\t\t\t\t\ttempoMultiplier = element.qpm ? startingTempo / element.qpm : 1;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// For convenience, put the current time in each event so that it doesn't have to be calculated in the complicated stuff that follows.\n\t\t\t\telement.time = timeCounter;\n\t\t\t\tvar thisDuration = element.duration ? element.duration : 0;\n\t\t\t\ttimeCounter += Math.round(thisDuration*tempoMultiplier*1000000); // To compensate for JS rounding problems, do all intermediate calcs on integers.\n\n\t\t\t\t// If there are pitches then put the duration in the pitch object and if there are ties then change the duration of the first note in the tie.\n\t\t\t\tif (element.pitches) {\n\t\t\t\t\tfor (var k = 0; k < element.pitches.length; k++) {\n\t\t\t\t\t\tvar pitch = element.pitches[k];\n\t\t\t\t\t\tif (pitch) {\n\t\t\t\t\t\t\tpitch.duration = element.duration;\n\t\t\t\t\t\t\tif (pitch.startTie) {\n\t\t\t\t\t\t\t\t//console.log(element)\n\t\t\t\t\t\t\t\tif (ties[pitch.pitch] === undefined) // We might have three notes tied together - if so just add this duration.\n\t\t\t\t\t\t\t\t\tties[pitch.pitch] = {el: j, pitch: k};\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tvoice[ties[pitch.pitch].el].pitches[ties[pitch.pitch].pitch].duration += pitch.duration;\n\t\t\t\t\t\t\t\t\telement.pitches[k] = null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t//console.log(\">>> START\", JSON.stringify(ties));\n\t\t\t\t\t\t\t} else if (pitch.endTie) {\n\t\t\t\t\t\t\t\t//console.log(element)\n\t\t\t\t\t\t\t\tvar tie = ties[pitch.pitch];\n\t\t\t\t\t\t\t\t//console.log(\">>> END\", pitch.pitch, tie, JSON.stringify(ties));\n\t\t\t\t\t\t\t\tif (tie) {\n\t\t\t\t\t\t\t\t\tvar dur = pitch.duration;\n\t\t\t\t\t\t\t\t\tdelete voice[tie.el].pitches[tie.pitch].startTie;\n\t\t\t\t\t\t\t\t\tvoice[tie.el].pitches[tie.pitch].duration += dur;\n\t\t\t\t\t\t\t\t\telement.pitches[k] = null;\n\t\t\t\t\t\t\t\t\tdelete ties[pitch.pitch];\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tdelete pitch.endTie;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdelete element.duration;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var key in ties) {\n\t\t\t\tif (ties.hasOwnProperty(key)) {\n\t\t\t\t\tvar item = ties[key];\n\t\t\t\t\tdelete voice[item.el].pitches[item.pitch].startTie;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// voices[0].forEach(v => delete v.elem)\n\t\t\t// voices[1].forEach(v => delete v.elem)\n\t\t\t// console.log(JSON.stringify(voices))\n\t\t}\n\t}\n\n\tfunction getBeatFraction(meter) {\n\t\tswitch (parseInt(meter.den,10)) {\n\t\t\tcase 2: return 0.5;\n\t\t\tcase 4: return 0.25;\n\t\t\tcase 8:\n\t\t\t\tif (meter.num % 3 === 0)\n\t\t\t\t\treturn 0.375;\n\t\t\t\telse\n\t\t\t\t\treturn 0.125;\n\t\t\tcase 16: return 0.125;\n\t\t}\n\t\treturn 0.25;\n\t}\n\n\tfunction calcBeat(measureStart, beatLength, currTime) {\n\t\tvar distanceFromStart = currTime - measureStart;\n\t\treturn distanceFromStart / beatLength;\n\t}\n\n\tfunction processVolume(beat, voiceOff) {\n\t\tif (voiceOff)\n\t\t\treturn 0;\n\n\t\tvar volume;\n\t\tif (nextVolume) {\n\t\t\tvolume = nextVolume;\n\t\t\tnextVolume = undefined;\n\t\t} else if (!doBeatAccents) {\n\t\t\tvolume = stressBeatDown;\n\t\t} else if (pickupLength > beat) {\n\t\t\tvolume = stressBeatUp;\n\t\t} else {\n\t\t\t//var barLength = meter.num / meter.den;\n\t\t\tvar barBeat = calcBeat(lastBarTime, getBeatFraction(meter), beat);\n\t\t\tif (barBeat === 0)\n\t\t\t\tvolume = stressBeat1;\n\t\t\telse if (parseInt(barBeat,10) === barBeat)\n\t\t\t\tvolume = stressBeatDown;\n\t\t\telse\n\t\t\t\tvolume = stressBeatUp;\n\t\t}\n\t\tif (nextVolumeDelta) {\n\t\t\tvolume += nextVolumeDelta;\n\t\t\tnextVolumeDelta = undefined;\n\t\t}\n\t\tif (volume < 0)\n\t\t\tvolume = 0;\n\t\tif (volume > 127)\n\t\t\tvolume = 127;\n\t\treturn voiceOff ? 0 : volume;\n\t}\n\n\n\tfunction findNoteModifications(elem, velocity) {\n\t\tvar ret = { };\n\t\tif (elem.decoration) {\n\t\t\tfor (var d = 0; d < elem.decoration.length; d++) {\n\t\t\t\tif (elem.decoration[d] === 'staccato')\n\t\t\t\t\tret.thisBreakBetweenNotes = 'staccato';\n\t\t\t\telse if (elem.decoration[d] === 'tenuto')\n\t\t\t\t\tret.thisBreakBetweenNotes = 'tenuto';\n\t\t\t\telse if (elem.decoration[d] === 'accent')\n\t\t\t\t\tret.velocity = Math.min(127, velocity * 1.5);\n\t\t\t\telse if (elem.decoration[d] === 'trill')\n\t\t\t\t\tret.noteModification = \"trill\";\n\t\t\t\telse if (elem.decoration[d] === 'lowermordent')\n\t\t\t\t\tret.noteModification = \"lowermordent\";\n\t\t\t\telse if (elem.decoration[d] === 'uppermordent')\n\t\t\t\t\tret.noteModification = \"mordent\";\n\t\t\t\telse if (elem.decoration[d] === 'mordent')\n\t\t\t\t\tret.noteModification = \"mordent\";\n\t\t\t\telse if (elem.decoration[d] === 'turn')\n\t\t\t\t\tret.noteModification = \"turn\";\n\t\t\t\telse if (elem.decoration[d] === 'roll')\n\t\t\t\t\tret.noteModification = \"roll\";\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t}\n\n\tfunction doModifiedNotes(noteModification, p) {\n\t\tvar noteTime;\n\t\tvar numNotes;\n\t\tvar start = p.start;\n\t\tvar pp;\n\t\tvar runningDuration = p.duration;\n\t\tvar shortestNote = durationRounded(1.0 / 32);\n\n\t\tswitch (noteModification) {\n\t\t\tcase \"trill\":\n\t\t\t\tvar note = 1;\n\t\t\t\twhile (runningDuration > 0) {\n\t\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch+note, volume: p.volume, start: start, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\t\tnote = (note === 1) ? 0 : 1;\n\t\t\t\t\trunningDuration -= shortestNote;\n\t\t\t\t\tstart += shortestNote;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"mordent\":\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\trunningDuration -= shortestNote;\n\t\t\t\tstart += shortestNote;\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch+1, volume: p.volume, start: start, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\trunningDuration -= shortestNote;\n\t\t\t\tstart += shortestNote;\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start, duration: runningDuration, gap: 0, instrument: currentInstrument });\n\t\t\t\tbreak;\n\t\t\tcase \"lowermordent\":\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\trunningDuration -= shortestNote;\n\t\t\t\tstart += shortestNote;\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch-1, volume: p.volume, start: start, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\trunningDuration -= shortestNote;\n\t\t\t\tstart += shortestNote;\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start, duration: runningDuration, gap: 0, instrument: currentInstrument });\n\t\t\t\tbreak;\n\t\t\tcase \"turn\":\n\t\t\t\tshortestNote = p.duration / 5;\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch+1, volume: p.volume, start: start+shortestNote, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start+shortestNote*2, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch+1, volume: p.volume, start: start+shortestNote*3, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start+shortestNote*4, duration: shortestNote, gap: 0, instrument: currentInstrument });\n\t\t\t\tbreak;\n\t\t\tcase \"roll\":\n\t\t\t\twhile (runningDuration > 0) {\n\t\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\t\trunningDuration -= shortestNote*2;\n\t\t\t\t\tstart += shortestNote*2;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tfunction writeNote(elem, voiceOff) {\n\t\t//\n\t\t// Create a series of note events to append to the current track.\n\t\t// The output event is one of: { pitchStart: pitch_in_abc_units, volume: from_1_to_64 }\n\t\t// { pitchStop: pitch_in_abc_units }\n\t\t// { moveTime: duration_in_abc_units }\n\t\t// If there are guitar chords, then they are put in a separate track, but they have the same format.\n\t\t//\n\n\t\t//var trackStartingIndex = currentTrack.length;\n\n\t\tvar velocity = processVolume(timeToRealTime(elem.time), voiceOff);\n\t\tchordTrack.processChord(elem)\n\n\t\t// if there are grace notes, then also play them.\n\t\t// I'm not sure there is an exact rule for the length of the notes. My rule, unless I find\n\t\t// a better one is: the grace notes cannot take more than 1/2 of the main note's value.\n\t\t// A grace note (of 1/8 note duration) takes 1/8 of the main note's value.\n\t\tvar graces;\n\t\tif (elem.gracenotes && elem.pitches && elem.pitches.length > 0 && elem.pitches[0]) {\n\t\t\tgraces = processGraceNotes(elem.gracenotes, elem.pitches[0].duration);\n\t\t\tif (elem.elem)\n\t\t\t\telem.elem.midiGraceNotePitches = writeGraceNotes(graces, timeToRealTime(elem.time), velocity*2/3, currentInstrument); // make the graces a little quieter.\n\t\t}\n\n\t\t// The beat fraction is the note that gets a beat (.25 is a quarter note)\n\t\t// The tempo is in minutes and we want to get to milliseconds.\n\t\t// If the element is inside a repeat, there may be more than one value. If there is one value,\n\t\t// then just store that as a number. If there are more than one value, then change that to\n\t\t// an array and return all of them.\n\t\tif (elem.elem) {\n\t\t\tvar rt = timeToRealTime(elem.time);\n\t\t\tvar ms = rt / beatFraction / startingTempo * 60 * 1000;\n\t\t\tif (elem.elem.currentTrackMilliseconds === undefined) {\n\t\t\t\telem.elem.currentTrackMilliseconds = ms;\n\t\t\t\telem.elem.currentTrackWholeNotes = rt;\n\t\t\t} else {\n\t\t\t\tif (elem.elem.currentTrackMilliseconds.length === undefined) {\n\t\t\t\t\tif (elem.elem.currentTrackMilliseconds !== ms) {\n\t\t\t\t\t\telem.elem.currentTrackMilliseconds = [elem.elem.currentTrackMilliseconds, ms];\n\t\t\t\t\t\telem.elem.currentTrackWholeNotes = [elem.elem.currentTrackWholeNotes, rt];\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// There can be duplicates if there are multiple voices\n\t\t\t\t\tvar found = false;\n\t\t\t\t\tfor (var j = 0; j < elem.elem.currentTrackMilliseconds.length; j++) {\n\t\t\t\t\t\tif (elem.elem.currentTrackMilliseconds[j] === ms)\n\t\t\t\t\t\t\tfound = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (!found) {\n\t\t\t\t\t\telem.elem.currentTrackMilliseconds.push(ms);\n\t\t\t\t\t\telem.elem.currentTrackWholeNotes.push(rt);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t//var tieAdjustment = 0;\n\t\tif (elem.pitches) {\n\t\t\tvar thisBreakBetweenNotes = '';\n\t\t\tvar ret = findNoteModifications(elem, velocity);\n\t\t\tif (ret.thisBreakBetweenNotes)\n\t\t\t\tthisBreakBetweenNotes = ret.thisBreakBetweenNotes;\n\t\t\tif (ret.velocity)\n\t\t\t\tvelocity = ret.velocity;\n\n\t\t\t// TODO-PER: Can also make a different sound on style=x and style=harmonic\n\t\t\tvar ePitches = elem.pitches;\n\t\t\tif (elem.style === \"rhythm\") {\n\t\t\t\tePitches = chordTrack.setRhythmHead(true, elem)\n\t\t\t}\n\n\t\t\tif (elem.elem)\n\t\t\t\telem.elem.midiPitches = [];\n\t\t\tfor (var i=0; i 0)\n\t\t\t\t\t\tp.endType = 'tenuto';\n\t\t\t\t\telse if (thisBreakBetweenNotes)\n\t\t\t\t\t\tp.endType = thisBreakBetweenNotes;\n\n\t\t\t\t\tswitch (p.endType) {\n\t\t\t\t\t\tcase \"tenuto\":\n\t\t\t\t\t\t\tp.gap = slurredBreakBetweenNotes;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"staccato\":\n\t\t\t\t\t\t\tvar d = p.duration * staccatoBreakBetweenNotes;\n\t\t\t\t\t\t\tp.gap = startingTempo / 60 * d;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tp.gap = normalBreakBetweenNotes;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcurrentTrack.push(p);\n\t\t\t\t}\n\t\t\t}\n\t\t\tlastNoteDurationPosition = currentTrack.length-1;\n\n\t\t}\n\t\tvar realDur = getRealDuration(elem);\n\t\tlastEventTime = Math.max(lastEventTime, timeToRealTime(elem.time)+durationRounded(realDur));\n\t}\n\tfunction getRealDuration(elem) {\n\t\tif (elem.pitches && elem.pitches.length > 0 && elem.pitches[0])\n\t\t\treturn elem.pitches[0].duration;\n\t\tif (elem.elem)\n\t\t\treturn elem.elem.duration;\n\t\treturn elem.duration;\n\t}\n\n\tvar scale = [0,2,4,5,7,9,11];\n\tfunction adjustPitch(note) {\n\t\tif (note.midipitch !== undefined)\n\t\t\treturn note.midipitch; // The pitch might already be known, for instance if there is a drummap.\n\t\tvar pitch = note.pitch;\n\t\tif (note.accidental) {\n\t\t\tswitch(note.accidental) { // change that pitch (not other octaves) for the rest of the bar\n\t\t\t\tcase \"sharp\":\n\t\t\t\t\tbarAccidentals[pitch]=1; break;\n\t\t\t\tcase \"flat\":\n\t\t\t\t\tbarAccidentals[pitch]=-1; break;\n\t\t\t\tcase \"natural\":\n\t\t\t\t\tbarAccidentals[pitch]=0; break;\n\t\t\t\tcase \"dblsharp\":\n\t\t\t\t\tbarAccidentals[pitch]=2; break;\n\t\t\t\tcase \"dblflat\":\n\t\t\t\t\tbarAccidentals[pitch]=-2; break;\n\t\t\t\tcase \"quartersharp\":\n\t\t\t\t\tbarAccidentals[pitch]=0.25; break;\n\t\t\t\tcase \"quarterflat\":\n\t\t\t\t\tbarAccidentals[pitch]=-0.25; break;\n\t\t\t}\n\t\t}\n\n\t\tvar actualPitch = extractOctave(pitch) *12 + scale[extractNote(pitch)] + 60;\n\n\t\tif ( barAccidentals[pitch]!==undefined) {\n\t\t\t// An accidental is always taken at face value and supersedes the key signature.\n\t\t\tactualPitch += barAccidentals[pitch];\n\t\t} else { // use normal accidentals\n\t\t\tactualPitch += accidentals[extractNote(pitch)];\n\t\t}\n\t\tactualPitch += transpose;\n\t\treturn actualPitch;\n\t}\n\n\tfunction setKeySignature(elem) {\n\t\tvar accidentals = [0,0,0,0,0,0,0];\n\t\tif (!elem.accidentals) return accidentals;\n\t\tfor (var i = 0; i < elem.accidentals.length; i++) {\n\t\t\tvar acc = elem.accidentals[i];\n\t\t\tvar d;\n\t\t\tswitch (acc.acc) {\n\t\t\t\tcase \"flat\": d = -1; break;\n\t\t\t\tcase \"quarterflat\": d = -0.25; break;\n\t\t\t\tcase \"sharp\": d = 1; break;\n\t\t\t\tcase \"quartersharp\": d = 0.25; break;\n\t\t\t\tdefault: d = 0; break;\n\t\t\t}\n\n\t\t\tvar lowercase = acc.note.toLowerCase();\n\t\t\tvar note = extractNote(lowercase.charCodeAt(0)-'c'.charCodeAt(0));\n\t\t\taccidentals[note]+=d;\n\t\t}\n\t\treturn accidentals;\n\t}\n\n\tfunction processGraceNotes(graces, companionDuration) {\n\t\t// Grace notes take up half of the note value. So if there are many of them they are all real short.\n\t\tvar graceDuration = 0;\n\t\tvar ret = [];\n\t\tvar grace;\n\t\tfor (var g = 0; g < graces.length; g++) {\n\t\t\tgrace = graces[g];\n\t\t\tgraceDuration += grace.duration;\n\t\t}\n\t\tvar multiplier = companionDuration/2 / graceDuration;\n\n\t\tfor (g = 0; g < graces.length; g++) {\n\t\t\tgrace = graces[g];\n\t\t\tvar actualPitch = adjustPitch(grace);\n\t\t\tif (currentInstrument === drumInstrument && percmap) {\n\t\t\t\tvar name = pitchesToPerc(grace)\n\t\t\t\tif (name && percmap[name])\n\t\t\t\t\tactualPitch = percmap[name].sound;\n\t\t\t}\n\t\t\tvar pitch = { pitch: actualPitch, duration: grace.duration*multiplier };\n\t\t\tpitch = adjustForMicroTone(pitch);\n\t\t\tret.push(pitch);\n\t\t}\n\t\treturn ret;\n\t}\n\n\tfunction writeGraceNotes(graces, start, velocity, currentInstrument) {\n\t\tvar midiGrace = [];\n\t\tvelocity = Math.round(velocity)\n\t\tfor (var g = 0; g < graces.length; g++) {\n\t\t\tvar gp = graces[g];\n\t\t\tcurrentTrack.push({cmd: 'note', pitch: gp.pitch, volume: velocity, start: start, duration: gp.duration, gap: 0, instrument:currentInstrument, style: 'grace'});\n\t\t\tmidiGrace.push({\n\t\t\t\tpitch: gp.pitch,\n\t\t\t\tdurationInMeasures: gp.duration,\n\t\t\t\tvolume: velocity,\n\t\t\t\tinstrument: currentInstrument\n\t\t\t});\n\t\t\tstart += gp.duration;\n\t\t}\n\t\treturn midiGrace;\n\t}\n\n\tvar quarterToneFactor = 0.02930223664349;\n\tfunction adjustForMicroTone(description) {\n\t\t// if the pitch is not a whole number then make it a whole number and add a tuning factor\n\t\tvar pitch = ''+description.pitch;\n\t\tif (pitch.indexOf(\".75\") >= 0) {\n\t\t\tdescription.pitch = Math.round(description.pitch);\n\t\t\tdescription.cents = -50;\n\t\t} else if (pitch.indexOf(\".25\") >= 0) {\n\t\t\tdescription.pitch = Math.round(description.pitch);\n\t\t\tdescription.cents = 50;\n\t\t}\n\n\t\treturn description;\n\t}\n\n\tfunction extractOctave(pitch) {\n\t\treturn Math.floor(pitch/7);\n\t}\n\n\tfunction extractNote(pitch) {\n\t\tpitch = pitch%7;\n\t\tif (pitch<0) pitch+=7;\n\t\treturn pitch;\n\t}\n\n\n\tfunction normalizeDrumDefinition(params) {\n\t\t// Be very strict with the drum definition. If anything is not perfect,\n\t\t// just turn the drums off.\n\t\t// Perhaps all of this logic belongs in the parser instead.\n\t\tif (params.pattern.length === 0 || params.on === false)\n\t\t\treturn { on: false };\n\n\t\tvar str = params.pattern[0];\n\t\tvar events = [];\n\t\tvar event = \"\";\n\t\tvar totalPlay = 0;\n\t\tfor (var i = 0; i < str.length; i++) {\n\t\t\tif (str[i] === 'd')\n\t\t\t\ttotalPlay++;\n\t\t\tif (str[i] === 'd' || str[i] === 'z') {\n\t\t\t\tif (event.length !== 0) {\n\t\t\t\t\tevents.push(event);\n\t\t\t\t\tevent = str[i];\n\t\t\t\t} else\n\t\t\t\t\tevent = event + str[i];\n\t\t\t} else {\n\t\t\t\tif (event.length === 0) {\n\t\t\t\t\t// there was an error: the string should have started with d or z\n\t\t\t\t\treturn {on: false};\n\t\t\t\t}\n\t\t\t\tevent = event + str[i];\n\t\t\t}\n\t\t}\n\n\t\tif (event.length !== 0)\n\t\t\tevents.push(event);\n\n\t\t// Now the events array should have one item per event.\n\t\t// There should be two more params for each event: the volume and the pitch.\n\t\tif (params.pattern.length !== totalPlay*2 + 1)\n\t\t\treturn { on: false };\n\n\t\tvar ret = { on: true, bars: params.bars, pattern: []};\n\t\tvar beatLength = getBeatFraction(meter);\n\t\tvar playCount = 0;\n\t\tfor (var j = 0; j < events.length; j++) {\n\t\t\tevent = events[j];\n\t\t\tvar len = 1;\n\t\t\tvar div = false;\n\t\t\tvar num = 0;\n\t\t\tfor (var k = 1; k < event.length; k++) {\n\t\t\t\tswitch(event[k]) {\n\t\t\t\t\tcase \"/\":\n\t\t\t\t\t\tif (num !== 0)\n\t\t\t\t\t\t\tlen *= num;\n\t\t\t\t\t\tnum = 0;\n\t\t\t\t\t\tdiv = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"1\":\n\t\t\t\t\tcase \"2\":\n\t\t\t\t\tcase \"3\":\n\t\t\t\t\tcase \"4\":\n\t\t\t\t\tcase \"5\":\n\t\t\t\t\tcase \"6\":\n\t\t\t\t\tcase \"7\":\n\t\t\t\t\tcase \"8\":\n\t\t\t\t\tcase \"9\":\n\t\t\t\t\t\tnum = num*10 +event[k];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn { on: false };\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (div) {\n\t\t\t\tif (num === 0) num = 2; // a slash by itself is interpreted as \"/2\"\n\t\t\t\tlen /= num;\n\t\t\t} else if (num)\n\t\t\t\tlen *= num;\n\t\t\tif (event[0] === 'd') {\n\t\t\t\tret.pattern.push({ len: len * beatLength, pitch: params.pattern[1 + playCount], velocity: params.pattern[1 + playCount + totalPlay]});\n\t\t\t\tplayCount++;\n\t\t\t} else\n\t\t\t\tret.pattern.push({ len: len * beatLength, pitch: null});\n\t\t}\n\t\tdrumBars = params.bars ? params.bars : 1;\n\t\treturn ret;\n\t}\n\n\tfunction alignDrumToMeter() {\n\t\tif (!drumDefinition ||!drumDefinition.pattern) {\n\t\t\treturn;\n\t\t}\n\t\tvar ret = drumDefinition;\n\t\t// Now normalize the pattern to cover the correct number of measures. The note lengths passed are relative to each other and need to be scaled to fit a measure.\n\t\tvar totalTime = 0;\n\t\tvar measuresPerBeat = meter.num/meter.den;\n\t\tfor (var ii = 0; ii < ret.pattern.length; ii++)\n\t\t\ttotalTime += ret.pattern[ii].len;\n\t\tvar factor = totalTime / drumBars / measuresPerBeat;\n\t\tfor (ii = 0; ii < ret.pattern.length; ii++)\n\t\t\tret.pattern[ii].len = ret.pattern[ii].len / factor;\n\t\tdrumDefinition = ret;\n\t}\n\n\tfunction writeDrum(channel) {\n\t\tif (drumTrack.length === 0 && !drumDefinition.on)\n\t\t\treturn;\n\n\t\tvar measureLen = meter.num/meter.den;\n\t\tif (drumTrack.length === 0) {\n\t\t\tif (lastEventTime < measureLen)\n\t\t\t\treturn; // This is true if there are pickup notes. The drum doesn't start until the first full measure.\n\t\t\tdrumTrack.push({cmd: 'program', channel: channel, instrument: drumInstrument});\n\t\t}\n\n\t\tif (!drumDefinition.on) {\n\t\t\t// this is the case where there has been a drum track, but it was specifically turned off.\n\t\t\treturn;\n\t\t}\n\t\tvar start = lastBarTime;\n\t\tfor (var i = 0; i < drumDefinition.pattern.length; i++) {\n\t\t\tvar len = durationRounded(drumDefinition.pattern[i].len);\n\t\t\tif (drumDefinition.pattern[i].pitch) {\n\t\t\t\tdrumTrack.push({\n\t\t\t\t\tcmd: 'note',\n\t\t\t\t\tpitch: drumDefinition.pattern[i].pitch,\n\t\t\t\t\tvolume: drumDefinition.pattern[i].velocity,\n\t\t\t\t\tstart: start,\n\t\t\t\t\tduration: len,\n\t\t\t\t\tgap: 0,\n\t\t\t\t\tinstrument: drumInstrument});\n\t\t\t}\n\t\t\tstart += len;\n\t\t}\n\t}\n\n\tfunction findOctaves(tracks, detuneCents) {\n\t\tvar timing = {};\n\t\tfor (var i = 0; i < tracks.length; i++) {\n\t\t\tfor (var j = 0; j < tracks[i].length; j++) {\n\t\t\t\tvar note = tracks[i][j];\n\t\t\t\tif (note.cmd === \"note\") {\n\t\t\t\t\tif (timing[note.start] === undefined)\n\t\t\t\t\t\ttiming[note.start] = [];\n\t\t\t\t\ttiming[note.start].push({track: i, event: j, pitch: note.pitch});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tvar keys = Object.keys(timing);\n\t\tfor (i = 0; i < keys.length; i++) {\n\t\t\tvar arr = timing[keys[i]];\n\t\t\tif (arr.length > 1) {\n\t\t\t\tarr = arr.sort(function(a,b) {\n\t\t\t\t\treturn a.pitch - b.pitch;\n\t\t\t\t});\n\t\t\t\tvar topEvent = arr[arr.length-1];\n\t\t\t\tvar topNote = topEvent.pitch % 12;\n\t\t\t\tvar found = false;\n\t\t\t\tfor (j = 0; !found && j < arr.length-1; j++) {\n\t\t\t\t\tif (arr[j].pitch % 12 === topNote)\n\t\t\t\t\t\tfound = true;\n\t\t\t\t}\n\t\t\t\tif (found) {\n\t\t\t\t\tvar event = tracks[topEvent.track][topEvent.event];\n\t\t\t\t\tif (!event.cents)\n\t\t\t\t\t\tevent.cents = 0;\n\t\t\t\t\tevent.cents += detuneCents;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n})();\n\nmodule.exports = flatten;\n","// abc_midi_renderer.js: Create the actual format for the midi.\n\nvar centsToFactor = require(\"./cents-to-factor\");\nvar rendererFactory;\n\n(function() {\n\t\"use strict\";\n\tfunction setAttributes(elm, attrs) {\n\t\tfor (var attr in attrs)\n\t\t\tif (attrs.hasOwnProperty(attr))\n\t\t\t\telm.setAttribute(attr, attrs[attr]);\n\t\treturn elm;\n\t}\n\n\tfunction Midi() {\n\t\tthis.trackstrings = \"\";\n\t\tthis.trackcount = 0;\n\t\tthis.noteOnAndChannel = \"%90\";\n\t\tthis.noteOffAndChannel = \"%80\";\n\t}\n\n\tMidi.prototype.setTempo = function(qpm) {\n\t\tif (this.trackcount === 0) {\n\t\t\tthis.startTrack();\n\t\t\tthis.track += \"%00%FF%51%03\" + toHex(Math.round(60000000 / qpm), 6);\n\t\t\tthis.endTrack();\n\t\t}\n\t};\n\n\tMidi.prototype.setGlobalInfo = function(qpm, name, key, time) {\n\t\tif (this.trackcount === 0) {\n\t\t\tthis.startTrack();\n\t\t\tvar divisions = Math.round(60000000 / qpm);\n\t\t\t// Add the tempo\n\t\t\tthis.track += \"%00%FF%51%03\" + toHex(divisions, 6);\n\n\t\t\tif (key)\n\t\t\t\tthis.track += keySignature(key);\n\t\t\tif (time)\n\t\t\t\tthis.track += timeSignature(time);\n\t\t\tif (name) {\n\t\t\t\tthis.track += encodeString(name, \"%01\");\n\t\t\t}\n\t\t\tthis.endTrack();\n\t\t}\n\t};\n\n\tMidi.prototype.startTrack = function() {\n\t\tthis.noteWarped = {};\n\t\tthis.track = \"\";\n\t\tthis.trackName = \"\";\n\t\tthis.trackInstrument = \"\";\n\t\tthis.silencelength = 0;\n\t\tthis.trackcount++;\n\t\tif (this.instrument) {\n\t\t\tthis.setInstrument(this.instrument);\n\t\t}\n\t};\n\n\tMidi.prototype.endTrack = function() {\n\t\tthis.track = this.trackName + this.trackInstrument + this.track;\n\t\tvar tracklength = toHex(this.track.length / 3 + 4, 8);\n\t\tthis.track = \"MTrk\" + tracklength + // track header\n\t\t\tthis.track +\n\t\t\t'%00%FF%2F%00'; // track end\n\t\tthis.trackstrings += this.track;\n\t};\n\n\tMidi.prototype.setText = function(type, text) {\n\t\t// MIDI defines the following types of events:\n\t\t//FF 01 len text Text Event\n\t\t//FF 02 len text Copyright Notice\n\t\t//FF 03 len text Sequence/Track Name\n\t\t//FF 04 len text Instrument Name\n\t\t//FF 05 len text Lyric\n\t\t//FF 06 len text Marker\n\t\t//FF 07 len text Cue Point\n\t\tswitch(type) {\n\t\t\tcase 'name':\n\t\t\t\tthis.trackName = encodeString(text, \"%03\");\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\tMidi.prototype.setInstrument = function(number) {\n\t\tthis.trackInstrument = \"%00%C0\" + toHex(number, 2);\n\t\tthis.instrument = number;\n\t};\n\n\tMidi.prototype.setChannel = function(number, pan) {\n\t\tthis.channel = number;\n\t\tvar ccPrefix = \"%00%B\" + this.channel.toString(16);\n\t\t// Reset midi, in case it was set previously.\n\t\tthis.track += ccPrefix + \"%79%00\"; // Reset All Controllers\n\t\tthis.track += ccPrefix + \"%40%00\"; // Damper pedal\n\t\tthis.track += ccPrefix + \"%5B%30\"; // Effect 1 Depth (reverb)\n\t\t// Translate pan as -1 to 1 to 0 to 127\n\t\tif (!pan)\n\t\t\tpan = 0;\n\t\tpan = Math.round((pan + 1) * 64);\n\t\tthis.track += ccPrefix + \"%0A\" + toHex(pan, 2); // Pan\n\t\tthis.track += ccPrefix + \"%07%64\"; // Channel Volume\n\n\t\tthis.noteOnAndChannel = \"%9\" + this.channel.toString(16);\n\t\tthis.noteOffAndChannel = \"%8\" + this.channel.toString(16);\n\t};\n\n\tvar HALF_STEP = 4096; // For the pitch wheel - (i.e. the distance from C to C#)\n\tMidi.prototype.startNote = function(pitch, loudness, cents) {\n\t\tthis.track += toDurationHex(this.silencelength); // only need to shift by amount of silence (if there is any)\n\t\tthis.silencelength = 0;\n\t\tif (cents) {\n\t\t\t// the pitch is altered so send a midi pitch wheel event\n\t\t\tthis.track += \"%e\" + this.channel.toString(16);\n\t\t\tvar bend = Math.round(centsToFactor(cents)*HALF_STEP);\n\t\t\tthis.track += to7BitHex(0x2000 + bend);\n\t\t\tthis.track += toDurationHex(0); // this all happens at once so there is a zero length here\n\t\t\tthis.noteWarped[pitch] = true;\n\t\t}\n\t\tthis.track += this.noteOnAndChannel;\n\t\tthis.track += \"%\" + pitch.toString(16) + toHex(loudness, 2); //note\n\t};\n\n\tMidi.prototype.endNote = function(pitch) {\n\t\tthis.track += toDurationHex(this.silencelength); // only need to shift by amount of silence (if there is any)\n\t\tthis.silencelength = 0;\n\t\tif (this.noteWarped[pitch]) {\n\t\t\t// the pitch was altered so alter it back.\n\t\t\tthis.track += \"%e\" + this.channel.toString(16);\n\t\t\tthis.track += to7BitHex(0x2000);\n\t\t\tthis.track += toDurationHex(0); // this all happens at once so there is a zero length here\n\t\t\tthis.noteWarped[pitch] = false;\n\t\t}\n\t\tthis.track += this.noteOffAndChannel;\n\t\tthis.track += \"%\" + pitch.toString(16) + \"%00\";//end note\n\t};\n\n\tMidi.prototype.addRest = function(length) {\n\t\tthis.silencelength += length;\n\t\tif (this.silencelength < 0)\n\t\t\tthis.silencelength = 0;\n\t};\n\n\tMidi.prototype.getData = function() {\n\t\treturn \"data:audio/midi,\" +\n\t\t\t\"MThd%00%00%00%06%00%01\" + toHex(this.trackcount, 4) + \"%01%e0\" + // header\n\t\t\tthis.trackstrings;\n\t};\n\n\tMidi.prototype.embed = function(parent, noplayer) {\n\n\t\tvar data = this.getData();\n\n\t\tvar link = setAttributes(document.createElement('a'), {\n\t\t\thref: data\n\t\t});\n\t\tlink.innerHTML = \"download midi\";\n\t\tparent.insertBefore(link, parent.firstChild);\n\n\t\tif (noplayer) return;\n\n\t\tvar embed = setAttributes(document.createElement('embed'), {\n\t\t\tsrc: data,\n\t\t\ttype: 'video/quicktime',\n\t\t\tcontroller: 'true',\n\t\t\tautoplay: 'false',\n\t\t\tloop: 'false',\n\t\t\tenablejavascript: 'true',\n\t\t\tstyle: 'display:block; height: 20px;'\n\t\t});\n\t\tparent.insertBefore(embed, parent.firstChild);\n\t};\n\n\tfunction encodeString(str, cmdType) {\n\t\t// If there are multi-byte chars, we don't know how long the string will be until we create it.\n\t\tvar nameArray = \"\";\n\t\tfor (var i = 0; i < str.length; i++)\n\t\t\tnameArray += toHex(str.charCodeAt(i), 2);\n\t\treturn \"%00%FF\" + cmdType + toHex(nameArray.length/3, 2) + nameArray; // Each byte is represented by three chars \"%XX\", so divide by 3 to get the length.\n\t}\n\n\tfunction keySignature(key) {\n\t\t//00 FF 5902 03 00 - key signature\n\t\tif (!key || !key.accidentals)\n\t\t\treturn \"\";\n\t\tvar hex = \"%00%FF%59%02\";\n\t\tvar sharpCount = 0;\n\t\tvar flatCount = 256;\n\t\tfor (var i = 0; i < key.accidentals.length; i++) {\n\t\t\tif (key.accidentals[i].acc === \"sharp\") sharpCount++;\n\t\t\telse if (key.accidentals[i].acc === \"flat\") flatCount--;\n\t\t}\n\t\tvar sig = flatCount !== 256 ? toHex(flatCount, 2) : toHex(sharpCount, 2);\n\t\tvar mode = (key.mode === \"m\") ? \"%01\" : \"%00\";\n\t\treturn hex + sig + mode;\n\t}\n\n\tfunction timeSignature(time) {\n\t\t//00 FF 58 04 04 02 30 08 - time signature\n\t\tvar hex = \"%00%FF%58%04\" + toHex(time.num,2);\n\t\tvar dens = { 1: 0, 2: 1, 4: 2, 8: 3, 16: 4, 32: 5 };\n\t\tvar den = dens[time.den];\n\t\tif (!den)\n\t\t\treturn \"\"; // the denominator is not supported, so just don't include this.\n\t\thex += toHex(den, 2);\n\n\t\tvar clocks;\n\t\tswitch (time.num+\"/\"+time.den) {\n\t\t\tcase \"2/4\":\n\t\t\tcase \"3/4\":\n\t\t\tcase \"4/4\":\n\t\t\tcase \"5/4\":\n\t\t\t\tclocks = 24;\n\t\t\t\tbreak;\n\t\t\tcase \"6/4\":\n\t\t\t\tclocks = 72;\n\t\t\t\tbreak;\n\t\t\tcase \"2/2\":\n\t\t\tcase \"3/2\":\n\t\t\tcase \"4/2\":\n\t\t\t\tclocks = 48;\n\t\t\t\tbreak;\n\t\t\tcase \"3/8\":\n\t\t\tcase \"6/8\":\n\t\t\tcase \"9/8\":\n\t\t\tcase \"12/8\":\n\t\t\t\tclocks = 36;\n\t\t\t\tbreak;\n\t\t}\n\t\tif (!clocks)\n\t\t\treturn \"\"; // time sig is not supported.\n\t\thex += toHex(clocks, 2);\n\t\treturn hex + \"%08\";\n\t}\n\n\t// s is assumed to be of even length\n\tfunction encodeHex(s) {\n\t\tvar ret = \"\";\n\t\tfor (var i = 0; i < s.length; i += 2) {\n\t\t\tret += \"%\";\n\t\t\tret += s.substr(i, 2);\n\t\t}\n\t\treturn ret;\n\t}\n\n\tfunction toHex(n, padding) {\n\t\tvar s = n.toString(16);\n\t\ts = s.split(\".\")[0];\n\t\twhile (s.length < padding) {\n\t\t\ts = \"0\" + s;\n\t\t}\n\t\tif (s.length > padding)\n\t\t\ts = s.substring(0,padding)\n\t\treturn encodeHex(s);\n\t}\n\n\tfunction to7BitHex(n) {\n\t\t// this takes a number and shifts all digits from the 7th one to the left.\n\t\tn = Math.round(n);\n\t\tvar lower = n % 128;\n\t\tvar higher = n - lower;\n\t\treturn toHex(higher*2+lower, 4);\n\t}\n\n\tfunction toDurationHex(n) {\n\t\tvar res = 0;\n\t\tvar a = [];\n\n\t\t// cut up into 7 bit chunks;\n\t\tn = Math.round(n);\n\t\twhile (n !== 0) {\n\t\t\ta.push(n & 0x7F);\n\t\t\tn = n >> 7;\n\t\t}\n\n\t\t// join the 7 bit chunks together, all but last chunk get leading 1\n\t\tfor (var i = a.length - 1; i >= 0; i--) {\n\t\t\tres = res << 8;\n\t\t\tvar bits = a[i];\n\t\t\tif (i !== 0) {\n\t\t\t\tbits = bits | 0x80;\n\t\t\t}\n\t\t\tres = res | bits;\n\t\t}\n\n\t\tvar padding = res.toString(16).length;\n\t\tpadding += padding % 2;\n\n\t\treturn toHex(res, padding);\n\t}\n\n\trendererFactory = function() {\n\t\treturn new Midi();\n\t};\n})();\n\nmodule.exports = rendererFactory;\n","// abc_midi_sequencer.js: Turn parsed abc into a linear series of events.\n\nvar sequence;\nvar parseCommon = require(\"../parse/abc_common\");\n\n(function() {\n\t\"use strict\";\n\n\tvar measureLength = 1; // This should be set by the meter, but just in case that is missing, we'll take a guess.\n\t// The abc is provided to us line by line. It might have repeats in it. We want to re arrange the elements to\n\t// be an array of voices with all the repeats embedded, and no lines. Then it is trivial to go through the events\n\t// one at a time and turn it into midi.\n\n\tvar PERCUSSION_PROGRAM = 128;\n\n\tsequence = function(abctune, options) {\n\t\t// Global options\n\t\toptions = options || {};\n\t\tvar qpm;\n\t\tvar program = options.program || 0;\t// The program if there isn't a program specified.\n\t\tvar transpose = options.midiTranspose || 0;\n\t\t// If the tune has a visual transpose then that needs to be subtracted out because we are getting the visual object.\n\t\tif (abctune.visualTranspose)\n\t\t\ttranspose -= abctune.visualTranspose;\n\t\tvar channel = options.channel || 0;\n\t\tvar channelExplicitlySet = false;\n\t\tvar drumPattern = options.drum || \"\";\n\t\tvar drumBars = options.drumBars || 1;\n\t\tvar drumIntro = options.drumIntro || 0;\n\t\tvar drumOn = drumPattern !== \"\";\n\t\tvar drumOffAfterIntro = !!options.drumOff\n\t\tvar style = []; // The note head style for each voice.\n\t\tvar rhythmHeadThisBar = false; // Rhythm notation was detected.\n\t\tvar crescendoSize = 50; // how much to increase or decrease volume when crescendo/diminuendo is encountered.\n\n\t\t// All of the above overrides need to be integers\n\t\tprogram = parseInt(program, 10);\n\t\ttranspose = parseInt(transpose, 10);\n\t\tchannel = parseInt(channel, 10);\n\t\tif (channel === 10)\n\t\t\tprogram = PERCUSSION_PROGRAM;\n\t\tdrumPattern = drumPattern.split(\" \");\n\t\tdrumBars = parseInt(drumBars, 10);\n\t\tdrumIntro = parseInt(drumIntro, 10);\n\n\t\tvar bagpipes = abctune.formatting.bagpipes; // If it is bagpipes, then the gracenotes are played on top of the main note.\n\t\tif (bagpipes)\n\t\t\tprogram = 71;\n\n\t\t// %%MIDI fermatafixed\n\t\t// %%MIDI fermataproportional\n\t\t// %%MIDI deltaloudness n\n\t\t// %%MIDI gracedivider b\n\t\t// %%MIDI ratio n m\n\t\t// %%MIDI beat a b c n\n\t\t// %%MIDI grace a/b\n\t\t// %%MIDI trim x/y\n\n\t\t// %MIDI gchordon\n\t\t// %MIDI gchordoff\n\t\t// %%MIDI bassprog 45\n\t\t// %%MIDI chordprog 24\n\t\t// %%MIDI chordname name n1 n2 n3 n4 n5 n6\n\n\t\t//%%MIDI beat ⟨int1⟩ ⟨int2⟩ ⟨int3⟩ ⟨int4⟩: controls the volumes of the notes in a measure. The first note in a bar has volume ⟨int1⟩; other ‘strong’ notes have volume ⟨int2⟩ and all the rest have volume ⟨int3⟩. These values must be in the range 0–127. The parameter ⟨int4⟩ determines which notes are ‘strong’. If the time signature is x/y, then each note is given a position number k = 0, 1, 2. . . x-1 within each bar. If k is a multiple of ⟨int4⟩, then the note is ‘strong’.\n\n\t\tvar startingMidi = [];\n\t\tif (abctune.formatting.midi) {\n\t\t\t//console.log(\"MIDI Formatting:\", abctune.formatting.midi);\n\t\t\tvar globals = abctune.formatting.midi;\n\t\t\tif (globals.program && globals.program.length > 0) {\n\t\t\t\tprogram = globals.program[0];\n\t\t\t\tif (globals.program.length > 1) {\n\t\t\t\t\tprogram = globals.program[1];\n\t\t\t\t\tchannel = globals.program[0];\n\t\t\t\t}\n\t\t\t\tchannelExplicitlySet = true;\n\t\t\t}\n\t\t\tif (globals.transpose)\n\t\t\t\ttranspose = globals.transpose[0];\n\t\t\tif (globals.channel) {\n\t\t\t\tchannel = globals.channel[0];\n\t\t\t\tchannelExplicitlySet = true;\n\t\t\t}\n\t\t\tif (globals.drum)\n\t\t\t\tdrumPattern = globals.drum;\n\t\t\tif (globals.drumbars)\n\t\t\t\tdrumBars = globals.drumbars[0];\n\t\t\tif (globals.drumon)\n\t\t\t\tdrumOn = true;\n\t\t\tif (channel === 10)\n\t\t\t\tprogram = PERCUSSION_PROGRAM;\n\t\t\tif (globals.beat)\n\t\t\t\tstartingMidi.push({ el_type: 'beat', beats: globals.beat })\n\t\t\tif (globals.nobeataccents)\n\t\t\t\tstartingMidi.push({ el_type: 'beataccents', value: false });\n\n\t\t}\n\n\t\t// Specified options in abc string.\n\n\t\t// If the tempo was passed in, use that.\n\t\t// If the tempo is specified, use that.\n\t\t// If there is a default, use that.\n\t\t// Otherwise, use the default.\n\t\tif (options.qpm)\n\t\t\tqpm = parseInt(options.qpm, 10);\n\t\telse if (abctune.metaText.tempo)\n\t\t\tqpm = interpretTempo(abctune.metaText.tempo, abctune.getBeatLength());\n\t\telse if (options.defaultQpm)\n\t\t\tqpm = options.defaultQpm;\n\t\telse\n\t\t\tqpm = 180; \t// The tempo if there isn't a tempo specified.\n\n\t\tvar startVoice = [];\n\t\tif (bagpipes)\n\t\t\tstartVoice.push({ el_type: 'bagpipes' });\n\t\tstartVoice.push({ el_type: 'instrument', program: program });\n\t\tif (channel)\n\t\t\tstartVoice.push({ el_type: 'channel', channel: channel });\n\t\tif (transpose)\n\t\t\tstartVoice.push({ el_type: 'transpose', transpose: transpose });\n\t\tstartVoice.push({ el_type: 'tempo', qpm: qpm });\n\t\tfor (var ss = 0; ss < startingMidi.length;ss++)\n\t\t\tstartVoice.push(startingMidi[ss]);\n\n\t\t// the relevant part of the input structure is:\n\t\t// abctune\n\t\t//\t\tarray lines\n\t\t//\t\t\tarray staff\n\t\t//\t\t\t\tobject key\n\t\t//\t\t\t\tobject meter\n\t\t//\t\t\t\tarray voices\n\t\t//\t\t\t\t\tarray abcelem\n\n\t\t// visit each voice completely in turn\n\t\tvar voices = [];\n\t\tvar inCrescendo = [];\n\t\tvar inDiminuendo = [];\n\t\tvar durationCounter = [0];\n\t\tvar tempoChanges = {};\n\t\ttempoChanges[\"0\"] = { el_type: 'tempo', qpm: qpm, timing: 0 };\n\t\tvar currentVolume;\n\t\tvar startRepeatPlaceholder = []; // There is a place holder for each voice.\n\t\tvar skipEndingPlaceholder = []; // This is the place where the first ending starts.\n\t\tvar startingDrumSet = false;\n\t\tvar lines = abctune.lines; //abctune.deline(); TODO-PER: can switch to this, then simplify the loops below.\n\t\tfor (var i = 0; i < lines.length; i++) {\n\t\t\t// For each group of staff lines in the tune.\n\t\t\tvar line = lines[i];\n\t\t\tif (line.staff) {\n\t\t\t\tvar staves = line.staff;\n\t\t\t\tvar voiceNumber = 0;\n\t\t\t\tfor (var j = 0; j < staves.length; j++) {\n\t\t\t\t\tvar staff = staves[j];\n\t\t\t\t\tif (staff.clef && staff.clef.type === \"TAB\")\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t// For each staff line\n\t\t\t\t\tfor (var k = 0; k < staff.voices.length; k++) {\n\t\t\t\t\t\t// For each voice in a staff line\n\t\t\t\t\t\tvar voice = staff.voices[k];\n\t\t\t\t\t\tif (!voices[voiceNumber]) {\n\t\t\t\t\t\t\tvoices[voiceNumber] = [].concat(JSON.parse(JSON.stringify(startVoice)));\n\t\t\t\t\t\t\tvar voiceName = getTrackTitle(line.staff, voiceNumber);\n\t\t\t\t\t\t\tif (voiceName)\n\t\t\t\t\t\t\t\tvoices[voiceNumber].unshift({el_type: \"name\", trackName: voiceName});\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Negate any transposition for the percussion staff.\n\t\t\t\t\t\tif (transpose && staff.clef.type === \"perc\")\n\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: 0 });\n\n\t\t\t\t\t\tif (staff.clef && staff.clef.type === 'perc' && !channelExplicitlySet) {\n\t\t\t\t\t\t\tfor (var cl = 0; cl < voices[voiceNumber].length; cl++) {\n\t\t\t\t\t\t\t\tif (voices[voiceNumber][cl].el_type === 'instrument')\n\t\t\t\t\t\t\t\t\tvoices[voiceNumber][cl].program = PERCUSSION_PROGRAM;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (staff.key) {\n\t\t\t\t\t\t\taddKey(voices[voiceNumber], staff.key);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (staff.meter) {\n\t\t\t\t\t\t\taddMeter(voices[voiceNumber], staff.meter);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!startingDrumSet && drumOn) { // drum information is only needed once, so use the first line and track 0.\n\t\t\t\t\t\t\tvoices[voiceNumber].push({el_type: 'drum', params: {pattern: drumPattern, bars: drumBars, on: drumOn, intro: drumIntro}});\n\t\t\t\t\t\t\tstartingDrumSet = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (staff.clef && staff.clef.type !== \"perc\" && staff.clef.transpose) {\n\t\t\t\t\t\t\tstaff.clef.el_type = 'clef';\n\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: staff.clef.transpose });\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (staff.clef && staff.clef.type) {\n\t\t\t\t\t\t\tif (staff.clef.type.indexOf(\"-8\") >= 0)\n\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: -12 });\n\t\t\t\t\t\t\telse if (staff.clef.type.indexOf(\"+8\") >= 0)\n\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: 12 });\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (abctune.formatting.midi && abctune.formatting.midi.drumoff) {\n\t\t\t\t\t\t\t// If there is a drum off command right at the beginning it is put in the metaText instead of the stream,\n\t\t\t\t\t\t\t// so we will just insert it here.\n\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'bar' });\n\t\t\t\t\t\t\tvoices[voiceNumber].push({el_type: 'drum', params: {pattern: \"\", on: false }});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar noteEventsInBar = 0;\n\t\t\t\t\t\tvar tripletMultiplier = 0;\n\t\t\t\t\t\tvar tripletDurationTotal = 0; // try to mitigate the js rounding problems.\n\t\t\t\t\t\tvar tripletDurationCount = 0;\n\t\t\t\t\t\tcurrentVolume = [105, 95, 85, 1];\n\n\t\t\t\t\t\tfor (var v = 0; v < voice.length; v++) {\n\t\t\t\t\t\t\t// For each element in a voice\n\t\t\t\t\t\t\tvar elem = voice[v];\n\t\t\t\t\t\t\tswitch (elem.el_type) {\n\t\t\t\t\t\t\t\tcase \"note\":\n\t\t\t\t\t\t\t\t\tif (inCrescendo[k]) {\n\t\t\t\t\t\t\t\t\t\tcurrentVolume[0] += inCrescendo[k];\n\t\t\t\t\t\t\t\t\t\tcurrentVolume[1] += inCrescendo[k];\n\t\t\t\t\t\t\t\t\t\tcurrentVolume[2] += inCrescendo[k];\n\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'beat', beats: currentVolume.slice(0) });\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (inDiminuendo[k]) {\n\t\t\t\t\t\t\t\t\t\tcurrentVolume[0] += inDiminuendo[k];\n\t\t\t\t\t\t\t\t\t\tcurrentVolume[1] += inDiminuendo[k];\n\t\t\t\t\t\t\t\t\t\tcurrentVolume[2] += inDiminuendo[k];\n\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'beat', beats: currentVolume.slice(0) });\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tsetDynamics(elem);\n\n\t\t\t\t\t\t\t\t\t// regular items are just pushed.\n\t\t\t\t\t\t\t\t\tif (!elem.rest || elem.rest.type !== 'spacer') {\n\t\t\t\t\t\t\t\t\t\tvar noteElem = { elem: elem, el_type: \"note\", timing: durationCounter[voiceNumber] }; // Make a copy so that modifications aren't kept except for adding the midiPitches\n\t\t\t\t\t\t\t\t\t\tif (elem.style)\n\t\t\t\t\t\t\t\t\t\t\tnoteElem.style = elem.style;\n\t\t\t\t\t\t\t\t\t\telse if (style[voiceNumber])\n\t\t\t\t\t\t\t\t\t\t\tnoteElem.style = style[voiceNumber];\n\t\t\t\t\t\t\t\t\t\tnoteElem.duration = (elem.duration === 0) ? 0.25 : elem.duration;\n\t\t\t\t\t\t\t\t\t\tif (elem.startTriplet) {\n\t\t\t\t\t\t\t\t\t\t\ttripletMultiplier = elem.tripletMultiplier;\n\t\t\t\t\t\t\t\t\t\t\ttripletDurationTotal = elem.startTriplet * tripletMultiplier * elem.duration;\n\t\t\t\t\t\t\t\t\t\t\tif (elem.startTriplet !== elem.tripletR) { // most commonly (3:2:2\n\t\t\t\t\t\t\t\t\t\t\t\tif (v + elem.tripletR <= voice.length) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar durationTotal = 0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor (var w = v; w < v + elem.tripletR; w++) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdurationTotal += voice[w].duration;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttripletDurationTotal = tripletMultiplier * durationTotal;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tnoteElem.duration = noteElem.duration * tripletMultiplier;\n\t\t\t\t\t\t\t\t\t\t\tnoteElem.duration = Math.round(noteElem.duration*1000000)/1000000;\n\t\t\t\t\t\t\t\t\t\t\ttripletDurationCount = noteElem.duration;\n\t\t\t\t\t\t\t\t\t\t} else if (tripletMultiplier) {\n\t\t\t\t\t\t\t\t\t\t\tif (elem.endTriplet) {\n\t\t\t\t\t\t\t\t\t\t\t\ttripletMultiplier = 0;\n\t\t\t\t\t\t\t\t\t\t\t\tnoteElem.duration = Math.round((tripletDurationTotal - tripletDurationCount)*1000000)/1000000;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tnoteElem.duration = noteElem.duration * tripletMultiplier;\n\t\t\t\t\t\t\t\t\t\t\t\tnoteElem.duration = Math.round(noteElem.duration*1000000)/1000000;\n\t\t\t\t\t\t\t\t\t\t\t\ttripletDurationCount += noteElem.duration;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif (elem.rest) noteElem.rest = elem.rest;\n\t\t\t\t\t\t\t\t\t\tif (elem.decoration) noteElem.decoration = elem.decoration.slice(0);\n\t\t\t\t\t\t\t\t\t\tif (elem.pitches) noteElem.pitches = parseCommon.cloneArray(elem.pitches);\n\t\t\t\t\t\t\t\t\t\tif (elem.gracenotes) noteElem.gracenotes = parseCommon.cloneArray(elem.gracenotes);\n\t\t\t\t\t\t\t\t\t\tif (elem.chord) noteElem.chord = parseCommon.cloneArray(elem.chord);\n\n\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push(noteElem);\n\t\t\t\t\t\t\t\t\t\tif (elem.style === \"rhythm\") {\n\t\t\t\t\t\t\t\t\t\t\trhythmHeadThisBar = true;\n\t\t\t\t\t\t\t\t\t\t\tchordVoiceOffThisBar(voices)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tnoteEventsInBar++;\n\t\t\t\t\t\t\t\t\t\tdurationCounter[voiceNumber] += noteElem.duration;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"key\":\n\t\t\t\t\t\t\t\tcase \"keySignature\":\n\t\t\t\t\t\t\t\t\taddKey(voices[voiceNumber], elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"meter\":\n\t\t\t\t\t\t\t\t\taddMeter(voices[voiceNumber], elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"clef\": // need to keep this to catch the \"transpose\" element.\n\t\t\t\t\t\t\t\t\tif (elem.transpose)\n\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: elem.transpose });\n\t\t\t\t\t\t\t\t\tif (elem.type) {\n\t\t\t\t\t\t\t\t\t\tif (elem.type.indexOf(\"-8\") >= 0)\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: -12 });\n\t\t\t\t\t\t\t\t\t\telse if (elem.type.indexOf(\"+8\") >= 0)\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: 12 });\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"tempo\":\n\t\t\t\t\t\t\t\t\tqpm = interpretTempo(elem, abctune.getBeatLength());\n\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'tempo', qpm: qpm, timing: durationCounter[voiceNumber] });\n\t\t\t\t\t\t\t\t\ttempoChanges[''+durationCounter[voiceNumber]] = { el_type: 'tempo', qpm: qpm, timing: durationCounter[voiceNumber] };\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"bar\":\n\t\t\t\t\t\t\t\t\tif (noteEventsInBar > 0) // don't add two bars in a row.\n\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'bar' }); // We need the bar marking to reset the accidentals.\n\t\t\t\t\t\t\t\t\tsetDynamics(elem);\n\t\t\t\t\t\t\t\t\tnoteEventsInBar = 0;\n\t\t\t\t\t\t\t\t\t// figure out repeats and endings --\n\t\t\t\t\t\t\t\t\t// The important part is where there is a start repeat, and end repeat, or a first ending.\n\t\t\t\t\t\t\t\t\tvar endRepeat = (elem.type === \"bar_right_repeat\" || elem.type === \"bar_dbl_repeat\");\n\t\t\t\t\t\t\t\t\tvar startEnding = (elem.startEnding === '1');\n\t\t\t\t\t\t\t\t\tvar startRepeat = (elem.type === \"bar_left_repeat\" || elem.type === \"bar_dbl_repeat\" || elem.type === \"bar_right_repeat\");\n\t\t\t\t\t\t\t\t\tif (endRepeat) {\n\t\t\t\t\t\t\t\t\t\tvar s = startRepeatPlaceholder[voiceNumber];\n\t\t\t\t\t\t\t\t\t\tif (!s) s = 0; // If there wasn't a left repeat, then we repeat from the beginning.\n\t\t\t\t\t\t\t\t\t\tvar e = skipEndingPlaceholder[voiceNumber];\n\t\t\t\t\t\t\t\t\t\tif (!e) e = voices[voiceNumber].length; // If there wasn't a first ending marker, then we copy everything.\n\t\t\t\t\t\t\t\t\t\t// duplicate each of the elements - this has to be a deep copy.\n\t\t\t\t\t\t\t\t\t\tfor (var z = s; z < e; z++) {\n\t\t\t\t\t\t\t\t\t\t\tvar item = parseCommon.clone(voices[voiceNumber][z]);\n\t\t\t\t\t\t\t\t\t\t\tif (item.pitches)\n\t\t\t\t\t\t\t\t\t\t\t\titem.pitches = parseCommon.cloneArray(item.pitches);\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push(item);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// reset these in case there is a second repeat later on.\n\t\t\t\t\t\t\t\t\t\tskipEndingPlaceholder[voiceNumber] = undefined;\n\t\t\t\t\t\t\t\t\t\tstartRepeatPlaceholder[voiceNumber] = undefined;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (startEnding)\n\t\t\t\t\t\t\t\t\t\tskipEndingPlaceholder[voiceNumber] = voices[voiceNumber].length;\n\t\t\t\t\t\t\t\t\tif (startRepeat)\n\t\t\t\t\t\t\t\t\t\tstartRepeatPlaceholder[voiceNumber] = voices[voiceNumber].length;\n\t\t\t\t\t\t\t\t\trhythmHeadThisBar = false;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 'style':\n\t\t\t\t\t\t\t\t\tstyle[voiceNumber] = elem.head;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 'timeSignature':\n\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push(interpretMeter(elem));\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 'part':\n\t\t\t\t\t\t\t\t\t// TODO-PER: If there is a part section in the header, then this should probably affect the repeats.\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 'stem':\n\t\t\t\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\t\t\tcase 'break':\n\t\t\t\t\t\t\t\tcase 'font':\n\t\t\t\t\t\t\t\t\t// These elements don't affect sound\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 'midi':\n\t\t\t\t\t\t\t\t\t//console.log(\"MIDI inline\", elem); // TODO-PER: for debugging. Remove this.\n\t\t\t\t\t\t\t\t\tvar drumChange = false;\n\t\t\t\t\t\t\t\t\tswitch (elem.cmd) {\n\t\t\t\t\t\t\t\t\t\tcase \"drumon\": drumOn = true; drumChange = true; break;\n\t\t\t\t\t\t\t\t\t\tcase \"drumoff\": drumOn = false; drumChange = true; break;\n\t\t\t\t\t\t\t\t\t\tcase \"drum\": drumPattern = elem.params; drumChange = true; break;\n\t\t\t\t\t\t\t\t\t\tcase \"drumbars\": drumBars = elem.params[0]; drumChange = true; break;\n\t\t\t\t\t\t\t\t\t\tcase \"drummap\":\n\t\t\t\t\t\t\t\t\t\t\t// This is handled before getting here so it can be ignored.\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"channel\":\n\t\t\t\t\t\t\t\t\t\t\t// There's not much needed for the channel except to look out for the percussion channel\n\t\t\t\t\t\t\t\t\t\t\tif (elem.params[0] === 10)\n\t\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'instrument', program: PERCUSSION_PROGRAM });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"program\":\n\t\t\t\t\t\t\t\t\t\t\taddIfDifferent(voices[voiceNumber], { el_type: 'instrument', program: elem.params[0] });\n\t\t\t\t\t\t\t\t\t\t\tchannelExplicitlySet = true;\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"transpose\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: elem.params[0] });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"gchordoff\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'gchordOn', tacet: true });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"gchordon\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'gchordOn', tacet: false });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"beat\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'beat', beats: elem.params });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"nobeataccents\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'beataccents', value: false });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"beataccents\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'beataccents', value: true });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"vol\":\n\t\t\t\t\t\t\t\t\t\tcase \"volinc\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: elem.cmd, volume: elem.params[0] });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"swing\":\n\t\t\t\t\t\t\t\t\t\tcase \"gchord\":\n\t\t\t\t\t\t\t\t\t\tcase \"bassprog\":\n\t\t\t\t\t\t\t\t\t\tcase \"chordprog\":\n\t\t\t\t\t\t\t\t\t\tcase \"bassvol\":\n\t\t\t\t\t\t\t\t\t\tcase \"chordvol\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: elem.cmd, param: elem.params[0] });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\t\tconsole.log(\"MIDI seq: midi cmd not handled: \", elem.cmd, elem);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (drumChange) {\n\t\t\t\t\t\t\t\t\t\tvoices[0].push({el_type: 'drum', params: { pattern: drumPattern, bars: drumBars, intro: drumIntro, on: drumOn}});\n\t\t\t\t\t\t\t\t\t\tstartingDrumSet = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tconsole.log(\"MIDI: element type \" + elem.el_type + \" not handled.\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvoiceNumber++;\n\t\t\t\t\t\tif (!durationCounter[voiceNumber])\n\t\t\t\t\t\t\tdurationCounter[voiceNumber] = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfunction setDynamics(elem) {\n\t\t\t\t\tvar volumes = {\n\t\t\t\t\t\t'pppp': [15, 10, 5, 1],\n\t\t\t\t\t\t'ppp': [30, 20, 10, 1],\n\t\t\t\t\t\t'pp': [45, 35, 20, 1],\n\t\t\t\t\t\t'p': [60, 50, 35, 1],\n\t\t\t\t\t\t'mp': [75, 65, 50, 1],\n\t\t\t\t\t\t'mf': [90, 80, 65, 1],\n\t\t\t\t\t\t'f': [105, 95, 80, 1],\n\t\t\t\t\t\t'ff': [120, 110, 95, 1],\n\t\t\t\t\t\t'fff': [127, 125, 110, 1],\n\t\t\t\t\t\t'ffff': [127, 125, 110, 1]\n\t\t\t\t\t};\n\n\t\t\t\t\tvar dynamicType;\n\t\t\t\t\tif (elem.decoration) {\n\t\t\t\t\t\tif (elem.decoration.indexOf('pppp') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'pppp';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('ppp') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'ppp';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('pp') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'pp';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('p') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'p';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('mp') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'mp';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('mf') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'mf';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('f') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'f';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('ff') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'ff';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('fff') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'fff';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('ffff') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'ffff';\n\n\t\t\t\t\t\tif (dynamicType) {\n\t\t\t\t\t\t\tcurrentVolume = volumes[dynamicType].slice(0);\n\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'beat', beats: currentVolume.slice(0) });\n\t\t\t\t\t\t\tinCrescendo[k] = false;\n\t\t\t\t\t\t\tinDiminuendo[k] = false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (elem.decoration.indexOf(\"crescendo(\") >= 0) {\n\t\t\t\t\t\t\tvar n = numNotesToDecoration(voice, v, \"crescendo)\");\n\t\t\t\t\t\t\tvar top = Math.min(127, currentVolume[0] + crescendoSize);\n\t\t\t\t\t\t\tvar endDec = endingVolume(voice, v+n+1, Object.keys(volumes));\n\t\t\t\t\t\t\tif (endDec)\n\t\t\t\t\t\t\t\ttop = volumes[endDec][0];\n\t\t\t\t\t\t\tif (n > 0)\n\t\t\t\t\t\t\t\tinCrescendo[k] = Math.floor((top - currentVolume[0]) / n);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tinCrescendo[k] = false;\n\t\t\t\t\t\t\tinDiminuendo[k] = false;\n\t\t\t\t\t\t} else if (elem.decoration.indexOf(\"crescendo)\") >= 0) {\n\t\t\t\t\t\t\tinCrescendo[k] = false;\n\t\t\t\t\t\t} else if (elem.decoration.indexOf(\"diminuendo(\") >= 0) {\n\t\t\t\t\t\t\tvar n2 = numNotesToDecoration(voice, v, \"diminuendo)\");\n\t\t\t\t\t\t\tvar bottom = Math.max(15, currentVolume[0] - crescendoSize);\n\t\t\t\t\t\t\tvar endDec2 = endingVolume(voice, v+n2+1, Object.keys(volumes));\n\t\t\t\t\t\t\tif (endDec2)\n\t\t\t\t\t\t\t\tbottom = volumes[endDec2][0];\n\t\t\t\t\t\t\tinCrescendo[k] = false;\n\t\t\t\t\t\t\tif (n2 > 0)\n\t\t\t\t\t\t\t\tinDiminuendo[k] = Math.floor((bottom - currentVolume[0]) / n2);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tinDiminuendo[k] = false;\n\t\t\t\t\t\t} else if (elem.decoration.indexOf(\"diminuendo)\") >= 0) {\n\t\t\t\t\t\t\tinDiminuendo[k] = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// If there are tempo changes, make sure they are in all the voices. This must be done post process because all the elements in all the voices need to be created first.\n\t\tinsertTempoChanges(voices, tempoChanges);\n\n\t\tif (drumIntro) {\n\t\t\tvar pickups = abctune.getPickupLength();\n\t\t\t// add some measures of rests to the start of each track.\n\t\t\tfor (var vv = 0; vv < voices.length; vv++) {\n\t\t\t\tvar insertPoint = 0;\n\t\t\t\twhile (voices[vv][insertPoint].el_type !== \"note\" && voices[vv].length > insertPoint)\n\t\t\t\t\tinsertPoint++;\n\t\t\t\tif (voices[vv].length > insertPoint) {\n\t\t\t\t\tfor (var w = 0; w < drumIntro; w++) {\n\t\t\t\t\t\t// If it is the last measure of intro, subtract the pickups.\n\t\t\t\t\t\tif (pickups === 0 || w < drumIntro-1) {\n\t\t\t\t\t\t\tvoices[vv].splice(insertPoint, 0, \n\t\t\t\t\t\t\t\t{el_type: \"note\", rest: {type: \"rest\"}, duration: measureLength},\n\t\t\t\t\t\t\t\t{ el_type: \"bar\" }\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tinsertPoint += 2\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvoices[vv].splice(insertPoint++, 0, {el_type: \"note\", rest: {type: \"rest\"}, duration: measureLength-pickups});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (drumOffAfterIntro) {\n\t\t\t\t\t\tdrumOn = false\n\t\t\t\t\t\tvoices[vv].splice(insertPoint++, 0, {el_type: 'drum', params: { pattern: drumPattern, bars: drumBars, intro: drumIntro, on: drumOn}});\n\t\t\t\t\t\tdrumOffAfterIntro = false\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (voices.length > 0 && voices[0].length > 0) {\n\t\t\tvoices[0][0].pickupLength = abctune.getPickupLength();\n\t\t}\n\t\treturn voices;\n\t};\n\n\tfunction numNotesToDecoration(voice, start, decoration) {\n\t\tvar counter = 0;\n\t\tfor (var i = start+1; i < voice.length; i++) {\n\t\t\tif (voice[i].el_type === \"note\")\n\t\t\t\tcounter++;\n\t\t\tif (voice[i].decoration && voice[i].decoration.indexOf(decoration) >= 0)\n\t\t\t\treturn counter;\n\t\t}\n\t\treturn counter;\n\t}\n\tfunction endingVolume(voice, start, volumeDecorations) {\n\t\tvar end = Math.min(voice.length, start + 3); // If we have a volume within a couple notes of the end then assume that is the destination.\n\t\tfor (var i = start; i < end; i++) {\n\t\t\tif (voice[i].el_type === \"note\") {\n\t\t\t\tif (voice[i].decoration) {\n\t\t\t\t\tfor (var j = 0; j < voice[i].decoration.length; j++) {\n\t\t\t\t\t\tif (volumeDecorations.indexOf(voice[i].decoration[j]) >= 0)\n\t\t\t\t\t\t\treturn voice[i].decoration[j];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tfunction insertTempoChanges(voices, tempoChanges) {\n\t\tif (!tempoChanges || tempoChanges.length === 0)\n\t\t\treturn;\n\t\tvar changePositions = Object.keys(tempoChanges);\n\t\tfor (var i = 0; i < voices.length; i++) {\n\t\t\tvar voice = voices[i];\n\t\t\tvar lastTempo = tempoChanges['0'] ? tempoChanges['0'].qpm : 0; // Don't insert redundant changes. This happens normally when repeating from the beginning, but could happen anywhere that there is a tempo marking that is the same as the last one.\n\t\t\tfor (var j = 0; j < voice.length; j++) {\n\t\t\t\tvar el = voice[j];\n\t\t\t\tif (el.el_type === \"tempo\")\n\t\t\t\t\tlastTempo = el.qpm;\n\t\t\t\tif (changePositions.indexOf(''+el.timing) >= 0 && lastTempo !== tempoChanges[''+el.timing].qpm) {\n\t\t\t\t\tlastTempo = tempoChanges[''+el.timing].qpm;\n\t\t\t\t\tif (el.el_type === \"tempo\") {\n\t\t\t\t\t\tel.qpm = tempoChanges[''+el.timing].qpm;\n\t\t\t\t\t\tj++; // when there is a tempo element the next element has the same timing and we don't want it to match the second time.\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//console.log(\"tempo position\", i, j, el);\n\t\t\t\t\t\tvoices[i].splice(j, 0, {el_type: \"tempo\", qpm: tempoChanges[''+el.timing].qpm, timing: el.timing});\n\t\t\t\t\t\tj +=2; // skip the element we just inserted.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction chordVoiceOffThisBar(voices) {\n\t\tfor (var i = 0; i < voices.length; i++) {\n\t\t\tvar voice = voices[i];\n\t\t\tvar j = voice.length-1;\n\t\t\twhile (j >= 0 && voice[j].el_type !== 'bar') {\n\t\t\t\tvoice[j].noChordVoice = true;\n\t\t\t\tj--;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction getTrackTitle(staff, voiceNumber) {\n\t\tif (!staff || staff.length <= voiceNumber || !staff[voiceNumber].title)\n\t\t\treturn undefined;\n\t\treturn staff[voiceNumber].title.join(\" \");\n\t}\n\n\tfunction interpretTempo(element, beatLength) {\n\t\tvar duration = 1/4;\n\t\tif (element.duration) {\n\t\t\tduration = element.duration[0];\n\t\t}\n\t\tvar bpm = 60;\n\t\tif (element.bpm) {\n\t\t\tbpm = element.bpm;\n\t\t}\n\t\t// The tempo is defined with a beat length of \"duration\". If that isn't the natural beat length then there is a translation.\n\t\treturn duration * bpm / beatLength;\n\t}\n\n\tfunction interpretMeter(element) {\n\t\tvar meter;\n\t\tswitch (element.type) {\n\t\t\tcase \"common_time\":\n\t\t\t\tmeter = { el_type: 'meter', num: 4, den: 4 };\n\t\t\t\tbreak;\n\t\t\tcase \"cut_time\":\n\t\t\t\tmeter = { el_type: 'meter', num: 2, den: 2 };\n\t\t\t\tbreak;\n\t\t\tcase \"specified\":\n\t\t\t\t// TODO-PER: only taking the first meter, so the complex meters are not handled.\n\t\t\t\tmeter = { el_type: 'meter', num: element.value[0].num, den: element.value[0].den };\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// This should never happen.\n\t\t\t\tmeter = { el_type: 'meter' };\n\t\t}\n\t\tmeasureLength = meter.num/meter.den;\n\t\treturn meter;\n\t}\n\n\tfunction removeNaturals(accidentals) {\n\t\tvar acc = [];\n\t\tfor (var i = 0; i < accidentals.length; i++) {\n\t\t\tif (accidentals[i].acc !== \"natural\")\n\t\t\t\tacc.push(accidentals[i])\n\t\t}\n\t\treturn acc;\n\t}\n\tfunction addKey(arr, key) {\n\t\tvar newKey;\n\t\tif (key.root === 'HP')\n\t\t\tnewKey = {el_type: 'key', accidentals: [{acc: 'natural', note: 'g'}, {acc: 'sharp', note: 'f'}, {acc: 'sharp', note: 'c'}]};\n\t\telse\n\t\t\tnewKey = {el_type: 'key', accidentals: removeNaturals(key.accidentals) };\n\t\taddIfDifferent(arr, newKey);\n\t}\n\tfunction addMeter(arr, meter) {\n\t\tvar newMeter = interpretMeter(meter);\n\t\taddIfDifferent(arr, newMeter);\n\t}\n\tfunction addIfDifferent(arr, item) {\n\t\tfor (var i = arr.length-1; i >= 0; i--) {\n\t\t\tif (arr[i].el_type === item.el_type) {\n\t\t\t\tif (JSON.stringify(arr[i]) !== JSON.stringify(item))\n\t\t\t\t\tarr.push(item);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tarr.push(item);\n\t}\n\n})();\n\nmodule.exports = sequence;\n","var registerAudioContext = require('./register-audio-context.js');\n\nfunction activeAudioContext() {\n\tif (!window.abcjsAudioContext)\n\t\tregisterAudioContext();\n\treturn window.abcjsAudioContext;\n}\n\nmodule.exports = activeAudioContext;\n","// This turns the number of cents to detune into a value that is convenient to use in pitch calculations\n// A cent is 1/100 of a musical half step and is calculated exponentially over the course of an octave.\n// The equation is:\n// Two to the power of cents divided by 1200\n\nfunction centsToFactor(cents) {\n\treturn Math.pow(2, cents/1200);\n}\n\nmodule.exports = centsToFactor;\n","//\n// The algorithm for chords is:\n// - The chords are done in a separate track.\n// - If there are notes before the first chord, then put that much silence to start the track.\n// - The pattern of chord expression depends on the meter, and how many chords are in a measure.\n// - There is a possibility that a measure will have an incorrect number of beats, if that is the case, then\n// start the pattern anew on the next measure number.\n// - If a chord root is not A-G, then ignore it as if the chord wasn't there at all.\n// - If a chord modification isn't in our supported list, change it to a major triad.\n//\n// - There is a standard pattern of boom-chick for each time sig, or it can be overridden.\n// - For any unrecognized meter, play the full chord on each beat.\n//\n//\t- If there is a chord specified that is not on a beat, move it earlier to the previous beat, unless there is already a chord on that beat.\n//\t- Otherwise, move it later, unless there is already a chord on that beat.\n// \t- Otherwise, ignore it. (TODO-PER: expand this as more support is added.)\n//\n// If there is any note in the melody that has a rhythm head, then assume the melody controls the rhythm, so there is no chord added for that entire measure.\n\nvar parseCommon = require(\"../parse/abc_common\");\n\nvar ChordTrack = function ChordTrack(numVoices, chordsOff, midiOptions, meter) {\n\tthis.chordTrack = [];\n\tthis.chordTrackFinished = false;\n\tthis.chordChannel = numVoices; // first free channel for chords\n\tthis.currentChords = [];\n\tthis.lastChord;\n\tthis.chordLastBar;\n\tthis.chordsOff = !!chordsOff\n\tthis.gChordTacet = this.chordsOff;\n\tthis.hasRhythmHead = false;\n\tthis.transpose = 0;\n\tthis.lastBarTime = 0;\n\tthis.meter = meter;\n\tthis.tempoChangeFactor = 1;\n\n\tthis.bassInstrument = midiOptions.bassprog && midiOptions.bassprog.length === 1 ? midiOptions.bassprog[0] : 0;\n\tthis.chordInstrument = midiOptions.chordprog && midiOptions.chordprog.length === 1 ? midiOptions.chordprog[0] : 0;\n\tthis.boomVolume = midiOptions.bassvol && midiOptions.bassvol.length === 1 ? midiOptions.bassvol[0] : 64;\n\tthis.chickVolume = midiOptions.chordvol && midiOptions.chordvol.length === 1 ? midiOptions.chordvol[0] : 48;\n\n\tthis.overridePattern = midiOptions.gchord ? parseGChord(midiOptions.gchord[0]) : undefined\n};\n\nChordTrack.prototype.setMeter = function (meter) {\n\tthis.meter = meter\n};\n\nChordTrack.prototype.setTempoChangeFactor = function (tempoChangeFactor) {\n\tthis.tempoChangeFactor = tempoChangeFactor\n};\n\nChordTrack.prototype.setLastBarTime = function (lastBarTime) {\n\tthis.lastBarTime = lastBarTime\n};\n\nChordTrack.prototype.setTranspose = function (transpose) {\n\tthis.transpose = transpose\n};\n\nChordTrack.prototype.setRhythmHead = function (isRhythmHead, elem) {\n\tthis.hasRhythmHead = isRhythmHead\n\tvar ePitches = [];\n\tif (isRhythmHead) {\n\t\tif (this.lastChord && this.lastChord.chick) {\n\t\t\tfor (var i2 = 0; i2 < this.lastChord.chick.length; i2++) {\n\t\t\t\tvar note2 = parseCommon.clone(elem.pitches[0]);\n\t\t\t\tnote2.actualPitch = this.lastChord.chick[i2];\n\t\t\t\tePitches.push(note2);\n\t\t\t}\n\t\t}\n\t}\n\treturn ePitches\n};\n\nChordTrack.prototype.barEnd = function (element) {\n\tif (this.chordTrack.length > 0 && !this.chordTrackFinished) {\n\t\tthis.resolveChords(this.lastBarTime, timeToRealTime(element.time));\n\t\tthis.currentChords = [];\n\t}\n\tthis.chordLastBar = this.lastChord;\n};\n\nChordTrack.prototype.gChordOn = function (element) {\n\tif (!this.chordsOff)\n\t\tthis.gChordTacet = element.tacet;\n};\n\nChordTrack.prototype.paramChange = function (element) {\n\tswitch (element.el_type) {\n\t\tcase \"gchord\":\n\t\t\tthis.overridePattern = parseGChord(element.param);\n\t\t\tbreak;\n\t\tcase \"bassprog\":\n\t\t\tthis.bassInstrument = element.param;\n\t\t\tbreak;\n\t\tcase \"chordprog\":\n\t\t\tthis.chordInstrument = element.param;\n\t\t\tbreak;\n\t\tcase \"bassvol\":\n\t\t\tthis.boomVolume = element.param;\n\t\t\tbreak;\n\t\tcase \"chordvol\":\n\t\t\tthis.chickVolume = element.param;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tconsole.log(\"unhandled midi param\", element)\t\n\t}\n};\n\nChordTrack.prototype.finish = function () {\n\tif (!this.chordTrackEmpty()) // Don't do chords on more than one track, so turn off chord detection after we create it.\n\t\tthis.chordTrackFinished = true;\n};\n\nChordTrack.prototype.addTrack = function (tracks) {\n\tif (!this.chordTrackEmpty())\n\t\ttracks.push(this.chordTrack);\n};\n\nChordTrack.prototype.findChord = function (elem) {\n\tif (this.gChordTacet)\n\t\treturn 'break';\n\n\t// TODO-PER: Just using the first chord if there are more than one.\n\tif (this.chordTrackFinished || !elem.chord || elem.chord.length === 0)\n\t\treturn null;\n\n\t// Return the first annotation that is a regular chord: that is, it is in the default place or is a recognized \"tacet\" phrase.\n\tfor (var i = 0; i < elem.chord.length; i++) {\n\t\tvar ch = elem.chord[i];\n\t\tif (ch.position === 'default')\n\t\t\treturn ch.name;\n\t\tif (this.breakSynonyms.indexOf(ch.name.toLowerCase()) >= 0)\n\t\t\treturn 'break';\n\t}\n\treturn null;\n}\n\nChordTrack.prototype.interpretChord = function (name) {\n\t// chords have the format:\n\t// [root][acc][modifier][/][bass][acc]\n\t// (The chord might be surrounded by parens. Just ignore them.)\n\t// root must be present and must be from A-G.\n\t// acc is optional and can be # or b\n\t// The modifier can be a wide variety of things, like \"maj7\". As they are discovered, more are supported here.\n\t// If there is a slash, then there is a bass note, which can be from A-G, with an optional acc.\n\t// If the root is unrecognized, then \"undefined\" is returned and there is no chord.\n\t// If the modifier is unrecognized, a major triad is returned.\n\t// If the bass notes is unrecognized, it is ignored.\n\tif (name.length === 0)\n\t\treturn undefined;\n\tif (name === 'break')\n\t\treturn { chick: [] };\n\tvar root = name.substring(0, 1);\n\tif (root === '(') {\n\t\tname = name.substring(1, name.length - 2);\n\t\tif (name.length === 0)\n\t\t\treturn undefined;\n\t\troot = name.substring(0, 1);\n\t}\n\tvar bass = this.basses[root];\n\tif (!bass)\t// If the bass note isn't listed, then this was an unknown root. Only A-G are accepted.\n\t\treturn undefined;\n\t// Don't transpose the chords more than an octave.\n\tvar chordTranspose = this.transpose;\n\twhile (chordTranspose < -8)\n\t\tchordTranspose += 12;\n\twhile (chordTranspose > 8)\n\t\tchordTranspose -= 12;\n\tbass += chordTranspose;\n\tvar bass2 = bass - 5;\t// The alternating bass is a 4th below\n\tvar chick;\n\tif (name.length === 1)\n\t\tchick = this.chordNotes(bass, '');\n\tvar remaining = name.substring(1);\n\tvar acc = remaining.substring(0, 1);\n\tif (acc === 'b' || acc === '♭') {\n\t\tbass--;\n\t\tbass2--;\n\t\tremaining = remaining.substring(1);\n\t} else if (acc === '#' || acc === '♯') {\n\t\tbass++;\n\t\tbass2++;\n\t\tremaining = remaining.substring(1);\n\t}\n\tvar arr = remaining.split('/');\n\tchick = this.chordNotes(bass, arr[0]);\n\t// If the 5th is altered then the bass is altered. Normally the bass is 7 from the root, so adjust if it isn't.\n\tif (chick.length >= 3) {\n\t\tvar fifth = chick[2] - chick[0];\n\t\tbass2 = bass2 + fifth - 7;\n\t}\n\n\tif (arr.length === 2) {\n\t\tvar explicitBass = this.basses[arr[1].substring(0, 1)];\n\t\tif (explicitBass) {\n\t\t\tvar bassAcc = arr[1].substring(1);\n\t\t\tvar bassShift = { '#': 1, '♯': 1, 'b': -1, '♭': -1 }[bassAcc] || 0;\n\t\t\tbass = this.basses[arr[1].substring(0, 1)] + bassShift + chordTranspose;\n\t\t\tbass2 = bass;\n\t\t}\n\t}\n\treturn { boom: bass, boom2: bass2, chick: chick };\n}\n\nChordTrack.prototype.chordNotes = function (bass, modifier) {\n\tvar intervals = this.chordIntervals[modifier];\n\tif (!intervals) {\n\t\tif (modifier.slice(0, 2).toLowerCase() === 'ma' || modifier[0] === 'M')\n\t\t\tintervals = this.chordIntervals.M;\n\t\telse if (modifier[0] === 'm' || modifier[0] === '-')\n\t\t\tintervals = this.chordIntervals.m;\n\t\telse\n\t\t\tintervals = this.chordIntervals.M;\n\t}\n\tbass += 12;\t// the chord is an octave above the bass note.\n\tvar notes = [];\n\tfor (var i = 0; i < intervals.length; i++) {\n\t\tnotes.push(bass + intervals[i]);\n\t}\n\treturn notes;\n}\n\nChordTrack.prototype.writeNote = function (note, beatLength, volume, beat, noteLength, instrument) {\n\t// undefined means there is a stop time.\n\tif (note !== undefined)\n\t\tthis.chordTrack.push({ cmd: 'note', pitch: note, volume: volume, start: this.lastBarTime + beat * durationRounded(beatLength, this.tempoChangeFactor), duration: durationRounded(noteLength, this.tempoChangeFactor), gap: 0, instrument: instrument });\n}\n\nChordTrack.prototype.chordTrackEmpty = function () {\n\tvar isEmpty = true;\n\tfor (var i = 0; i < this.chordTrack.length && isEmpty; i++) {\n\t\tif (this.chordTrack[i].cmd === 'note')\n\t\t\tisEmpty = false\n\t}\n\treturn isEmpty;\n}\n\nChordTrack.prototype.resolveChords = function (startTime, endTime) {\n\t// If there is a rhythm head anywhere in the measure then don't add a separate rhythm track\n\tif (this.hasRhythmHead)\n\t\treturn\n\n\tvar num = this.meter.num;\n\tvar den = this.meter.den;\n\tvar beatLength = 1 / den;\n\tvar noteLength = beatLength / 2;\n\tvar thisMeasureLength = parseInt(num, 10) / parseInt(den, 10);\n\tvar portionOfAMeasure = thisMeasureLength - (endTime - startTime) / this.tempoChangeFactor;\n\tif (Math.abs(portionOfAMeasure) < 0.00001)\n\t\tportionOfAMeasure = 0;\n\n\t // there wasn't a new chord this measure, so use the last chord declared.\n\t // also the case where there is a chord declared in the measure, but not on its first beat.\n\tif (this.currentChords.length === 0 || this.currentChords[0].beat !== 0) {\n\t\tthis.currentChords.unshift({ beat: 0, chord: this.chordLastBar });\n\t}\n\n\t//console.log(this.currentChords)\n\tvar currentChordsExpanded = expandCurrentChords(this.currentChords, 8*num/den, beatLength)\n\t//console.log(currentChordsExpanded)\n\tvar thisPattern = this.overridePattern ? this.overridePattern : this.rhythmPatterns[num + '/' + den]\n\tif (portionOfAMeasure) {\n\t\tthisPattern = [];\n\t\tvar beatsPresent = ((endTime - startTime) / this.tempoChangeFactor) * 8;\n\t\tfor (var p = 0; p < beatsPresent/2; p += 2) {\n\t\t\tthisPattern.push(\"chick\");\n\t\t\tthisPattern.push(\"\");\n\t\t}\n\t}\n\tif (!thisPattern) {\n\t\tthisPattern = []\n\t\tfor (var p = 0; p < (8*num/den)/2; p++) {\n\t\t\tthisPattern.push('chick')\n\t\t\tthisPattern.push(\"\");\n\t\t}\n\t}\n\tvar firstBoom = true\n\t// If the pattern is overridden, it might be longer than the length of a measure. If so, then ignore the rest of it\n\tvar minLength = Math.min(thisPattern.length, currentChordsExpanded.length)\n\tfor (var p = 0; p < minLength; p++) {\n\t\tif (p > 0 && currentChordsExpanded[p-1] && currentChordsExpanded[p] && currentChordsExpanded[p-1].boom !== currentChordsExpanded[p].boom)\n\t\t\tfirstBoom = true\n\t\tvar type = thisPattern[p]\n\t\tvar isBoom = type.indexOf('boom') >= 0\n\t\t// If we changed chords at a time when we're not expecting a bass note, then add an extra bass note in if the first thing in the pattern is a bass note.\n\t\tvar newBass = !isBoom &&\n\t\t\tp !== 0 &&\n\t\t\tthisPattern[0].indexOf('boom') >= 0 &&\n\t\t\t(!currentChordsExpanded[p-1] || currentChordsExpanded[p-1].boom !== currentChordsExpanded[p].boom)\n\t\tvar pitches = resolvePitch(currentChordsExpanded[p], type, firstBoom, newBass)\n\t\tif (isBoom)\n\t\t\tfirstBoom = false\n\t\tfor (var oo = 0; oo < pitches.length; oo++) {\n\t\t\tthis.writeNote(pitches[oo], \n\t\t\t\t0.125,\n\t\t\t\tisBoom || newBass ? this.boomVolume : this.chickVolume,\n\t\t\t\tp,\n\t\t\t\tnoteLength,\n\t\t\t\tisBoom || newBass ? this.bassInstrument : this.chordInstrument\n\t\t\t)\n\t\t\tif (newBass)\n\t\t\t\tnewBass = false\n\t\t\telse\n\t\t\t\tisBoom = false // only the first note in a chord is a bass note. This handles the case where bass and chord are played at the same time.\n\t\t}\n\t}\n\treturn\n}\n\nChordTrack.prototype.processChord = function (elem) {\n\tif (this.chordTrackFinished)\n\t\treturn\n\tvar chord = this.findChord(elem);\n\tif (chord) {\n\t\tvar c = this.interpretChord(chord);\n\t\t// If this isn't a recognized chord, just completely ignore it.\n\t\tif (c) {\n\t\t\t// If we ever have a chord in this voice, then we add the chord track.\n\t\t\t// However, if there are chords on more than one voice, then just use the first voice.\n\t\t\tif (this.chordTrack.length === 0) {\n\t\t\t\tthis.chordTrack.push({ cmd: 'program', channel: this.chordChannel, instrument: this.chordInstrument });\n\t\t\t}\n\n\t\t\tthis.lastChord = c;\n\t\t\tvar barBeat = calcBeat(this.lastBarTime, timeToRealTime(elem.time));\n\t\t\tthis.currentChords.push({ chord: this.lastChord, beat: barBeat, start: timeToRealTime(elem.time) });\n\t\t}\n\t}\n}\n\nfunction resolvePitch(currentChord, type, firstBoom, newBass) {\n\tvar ret = []\n\tif (!currentChord)\n\t\treturn ret\n\tif (type.indexOf('boom') >= 0)\n\t\tret.push(firstBoom ? currentChord.boom : currentChord.boom2)\n\telse if (newBass)\n\t\tret.push(currentChord.boom)\n\tif (type.indexOf('chick') >= 0) {\n\t\tfor (var i = 0; i < currentChord.chick.length; i++)\n\t\t\tret.push(currentChord.chick[i])\n\t}\n\tswitch (type) {\n\t\tcase 'DO': ret.push(currentChord.chick[0]); break;\n\t\tcase 'MI': ret.push(currentChord.chick[1]); break;\n\t\tcase 'SOL': ret.push(currentChord.chick[2]); break;\n\t\tcase 'TI': currentChord.chick.length > 3 ? ret.push(currentChord.chick[2]) : ret.push(currentChord.chick[0]+12); break;\n\t\tcase 'TOP': currentChord.chick.length > 4 ? ret.push(currentChord.chick[2]) : ret.push(currentChord.chick[1]+12); break;\n\t\tcase 'do': ret.push(currentChord.chick[0]+12); break;\n\t\tcase 'mi': ret.push(currentChord.chick[1]+12); break;\n\t\tcase 'sol': ret.push(currentChord.chick[2]+12); break;\n\t\tcase 'ti': currentChord.chick.length > 3 ? ret.push(currentChord.chick[2]+12) : ret.push(currentChord.chick[0]+24); break;\n\t\tcase 'top': currentChord.chick.length > 4 ? ret.push(currentChord.chick[2]+12) : ret.push(currentChord.chick[1]+24); break;\n\t}\n\treturn ret\n}\n\nfunction parseGChord(gchord) {\n\t// TODO-PER: The spec is more complicated than this but for now this will not try to do anything with error cases like the wrong number of beats.\n\tvar pattern = []\n\tfor (var i = 0; i < gchord.length; i++) {\n\t\tvar ch = gchord[i]\n\t\tswitch(ch) {\n\t\t\tcase 'z' : pattern.push(''); break;\n\t\t\tcase '2' : pattern.push(''); break; // TODO-PER: This should extend the last note, but that's a small effect\n\t\t\tcase 'c' : pattern.push('chick'); break;\n\t\t\tcase 'b' : pattern.push('boom&chick'); break;\n\t\t\tcase 'f' : pattern.push('boom'); break;\n\t\t\tcase 'G' : pattern.push('DO'); break;\n\t\t\tcase 'H' : pattern.push('MI'); break;\n\t\t\tcase 'I' : pattern.push('SOL'); break;\n\t\t\tcase 'J' : pattern.push('TI'); break;\n\t\t\tcase 'K' : pattern.push('TOP'); break;\n\t\t\tcase 'g' : pattern.push('do'); break;\n\t\t\tcase 'h' : pattern.push('mi'); break;\n\t\t\tcase 'i' : pattern.push('sol'); break;\n\t\t\tcase 'j' : pattern.push('ti'); break;\n\t\t\tcase 'k' : pattern.push('top'); break;\n\t\t}\n\t}\n\treturn pattern\n}\n\n// This returns an array that has a chord for each 1/8th note position in the current measure\nfunction expandCurrentChords(currentChords, num8thNotes, beatLength) {\n\tbeatLength = beatLength * 8 // this is expressed as a fraction, so that 0.25 is a quarter notes. We want it to be the number of 8th notes\n\tvar chords = []\n\tif (currentChords.length === 0)\n\t\treturn chords\n\n\tvar currentChord = currentChords[0].chord\n\tfor (var i = 1; i < currentChords.length; i++) {\n\t\tvar current = currentChords[i]\n\t\twhile (chords.length < current.beat) {\n\t\t\tchords.push(currentChord)\n\t\t}\n\t\tcurrentChord = current.chord\n\t}\n\twhile (chords.length < num8thNotes)\n\t\tchords.push(currentChord)\n\treturn chords\n}\n\nfunction calcBeat(measureStart, currTime) {\n\tvar distanceFromStart = currTime - measureStart;\n\treturn distanceFromStart * 8;\n}\n\nChordTrack.prototype.breakSynonyms = ['break', '(break)', 'no chord', 'n.c.', 'tacet'];\n\nChordTrack.prototype.basses = {\n\t'A': 33, 'B': 35, 'C': 36, 'D': 38, 'E': 40, 'F': 41, 'G': 43\n};\n\nChordTrack.prototype.chordIntervals = {\n\t// diminished (all flat 5 chords)\n\t'dim': [0, 3, 6],\n\t'°': [0, 3, 6],\n\t'˚': [0, 3, 6],\n\n\t'dim7': [0, 3, 6, 9],\n\t'°7': [0, 3, 6, 9],\n\t'˚7': [0, 3, 6, 9],\n\n\t'ø7': [0, 3, 6, 10],\n\t'm7(b5)': [0, 3, 6, 10],\n\t'm7b5': [0, 3, 6, 10],\n\t'm7♭5': [0, 3, 6, 10],\n\t'-7(b5)': [0, 3, 6, 10],\n\t'-7b5': [0, 3, 6, 10],\n\n\t'7b5': [0, 4, 6, 10],\n\t'7(b5)': [0, 4, 6, 10],\n\t'7♭5': [0, 4, 6, 10],\n\n\t'7(b9,b5)': [0, 4, 6, 10, 13],\n\t'7b9,b5': [0, 4, 6, 10, 13],\n\t'7(#9,b5)': [0, 4, 6, 10, 15],\n\t'7#9b5': [0, 4, 6, 10, 15],\n\t'maj7(b5)': [0, 4, 6, 11],\n\t'maj7b5': [0, 4, 6, 11],\n\t'13(b5)': [0, 4, 6, 10, 14, 21],\n\t'13b5': [0, 4, 6, 10, 14, 21],\n\n\t// minor (all normal 5, minor 3 chords)\n\t'm': [0, 3, 7],\n\t'-': [0, 3, 7],\n\t'm6': [0, 3, 7, 9],\n\t'-6': [0, 3, 7, 9],\n\t'm7': [0, 3, 7, 10],\n\t'-7': [0, 3, 7, 10],\n\n\t'-(b6)': [0, 3, 7, 8],\n\t'-b6': [0, 3, 7, 8],\n\t'-6/9': [0, 3, 7, 9, 14],\n\t'-7(b9)': [0, 3, 7, 10, 13],\n\t'-7b9': [0, 3, 7, 10, 13],\n\t'-maj7': [0, 3, 7, 11],\n\t'-9+7': [0, 3, 7, 11, 13],\n\t'-11': [0, 3, 7, 11, 14, 17],\n\t'm11': [0, 3, 7, 11, 14, 17],\n\t'-maj9': [0, 3, 7, 11, 14],\n\t'-∆9': [0, 3, 7, 11, 14],\n\t'mM9': [0, 3, 7, 11, 14],\n\n\t// major (all normal 5, major 3 chords)\n\t'M': [0, 4, 7],\n\t'6': [0, 4, 7, 9],\n\t'6/9': [0, 4, 7, 9, 14],\n\t'6add9': [0, 4, 7, 9, 14],\n\t'69': [0, 4, 7, 9, 14],\n\n\t'7': [0, 4, 7, 10],\n\t'9': [0, 4, 7, 10, 14],\n\t'11': [0, 7, 10, 14, 17],\n\t'13': [0, 4, 7, 10, 14, 21],\n\t'7b9': [0, 4, 7, 10, 13],\n\t'7♭9': [0, 4, 7, 10, 13],\n\t'7(b9)': [0, 4, 7, 10, 13],\n\t'7(#9)': [0, 4, 7, 10, 15],\n\t'7#9': [0, 4, 7, 10, 15],\n\t'(13)': [0, 4, 7, 10, 14, 21],\n\t'7(9,13)': [0, 4, 7, 10, 14, 21],\n\t'7(#9,b13)': [0, 4, 7, 10, 15, 20],\n\t'7(#11)': [0, 4, 7, 10, 14, 18],\n\t'7#11': [0, 4, 7, 10, 14, 18],\n\t'7(b13)': [0, 4, 7, 10, 20],\n\t'7b13': [0, 4, 7, 10, 20],\n\t'9(#11)': [0, 4, 7, 10, 14, 18],\n\t'9#11': [0, 4, 7, 10, 14, 18],\n\t'13(#11)': [0, 4, 7, 10, 18, 21],\n\t'13#11': [0, 4, 7, 10, 18, 21],\n\n\t'maj7': [0, 4, 7, 11],\n\t'∆7': [0, 4, 7, 11],\n\t'Δ7': [0, 4, 7, 11],\n\t'maj9': [0, 4, 7, 11, 14],\n\t'maj7(9)': [0, 4, 7, 11, 14],\n\t'maj7(11)': [0, 4, 7, 11, 17],\n\t'maj7(#11)': [0, 4, 7, 11, 18],\n\t'maj7(13)': [0, 4, 7, 14, 21],\n\t'maj7(9,13)': [0, 4, 7, 11, 14, 21],\n\n\t'7sus4': [0, 5, 7, 10],\n\t'm7sus4': [0, 3, 7, 10, 17],\n\t'sus4': [0, 5, 7],\n\t'sus2': [0, 2, 7],\n\t'7sus2': [0, 2, 7, 10],\n\t'9sus4': [0, 5, 7, 10, 14],\n\t'13sus4': [0, 5, 7, 10, 14, 21],\n\n\t// augmented (all sharp 5 chords)\n\t'aug7': [0, 4, 8, 10],\n\t'+7': [0, 4, 8, 10],\n\t'+': [0, 4, 8],\n\t'7#5': [0, 4, 8, 10],\n\t'7♯5': [0, 4, 8, 10],\n\t'7+5': [0, 4, 8, 10],\n\t'9#5': [0, 4, 8, 10, 14],\n\t'9♯5': [0, 4, 8, 10, 14],\n\t'9+5': [0, 4, 8, 10, 14],\n\t'-7(#5)': [0, 3, 8, 10],\n\t'-7#5': [0, 3, 8, 10],\n\t'7(#5)': [0, 4, 8, 10],\n\t'7(b9,#5)': [0, 4, 8, 10, 13],\n\t'7b9#5': [0, 4, 8, 10, 13],\n\t'maj7(#5)': [0, 4, 8, 11],\n\t'maj7#5': [0, 4, 8, 11],\n\t'maj7(#5,#11)': [0, 4, 8, 11, 18],\n\t'maj7#5#11': [0, 4, 8, 11, 18],\n\t'9(#5)': [0, 4, 8, 10, 14],\n\t'13(#5)': [0, 4, 8, 10, 14, 21],\n\t'13#5': [0, 4, 8, 10, 14, 21]\n};\n\nChordTrack.prototype.rhythmPatterns = {\n\t\"2/2\": ['boom', '', '', '', 'chick', '', '', ''],\n\t\"3/2\": ['boom', '', '', '', 'chick', '', '', '', 'chick', '', '', ''],\n\t\"4/2\": ['boom', '', '', '', 'chick', '', '', '', 'boom', '', '', '', 'chick', '', '', ''],\n\n\t\"2/4\": ['boom', '', 'chick', ''],\n\t\"3/4\": ['boom', '', 'chick', '', 'chick', ''],\n\t\"4/4\": ['boom', '', 'chick', '', 'boom', '', 'chick', ''],\n\t\"5/4\": ['boom', '', 'chick', '', 'chick', '', 'boom', '', 'chick', ''],\n\t\"6/4\": ['boom', '', 'chick', '', 'boom', '', 'chick', '', 'boom', '', 'chick', ''],\n\n\t\"3/8\": ['boom', '', 'chick'],\n\t\"6/8\": ['boom', '', 'chick', 'boom', '', 'chick'],\n\t\"9/8\": ['boom', '', 'chick', 'boom', '', 'chick', 'boom', '', 'chick'],\n\t\"12/8\": ['boom', '', 'chick', 'boom', '', 'chick', 'boom', '', 'chick', 'boom', '', 'chick'],\n};\n\n// TODO-PER: these are repeated in flattener. Can it be shared?\n\nfunction timeToRealTime(time) {\n\treturn time / 1000000;\n}\n\nfunction durationRounded(duration, tempoChangeFactor) {\n\treturn Math.round(duration * tempoChangeFactor * 1000000) / 1000000;\n}\n\nmodule.exports = ChordTrack;\n","// Convert the input structure to a more useful structure where each item has a length of its own.\n\nvar instrumentIndexToName = require('./instrument-index-to-name');\n\nvar createNoteMap = function(sequence) {\n\tvar map = [];\n\tfor (var i = 0; i < sequence.tracks.length; i++)\n\t\tmap.push([]);\n\n\t// TODO-PER: handle more than one note in a track\n\tvar nextNote = {};\n\tvar currentInstrument = instrumentIndexToName[0];\n\t// ev.start and ev.duration are in whole notes. Need to turn them into\n\tsequence.tracks.forEach(function(track, i) {\n\t\ttrack.forEach(function(ev) {\n\t\t\tswitch (ev.cmd) {\n\t\t\t\tcase \"note\":\n\t\t\t\t\t// ev contains:\n\t\t\t\t\t// {\"cmd\":\"note\",\"pitch\":72,\"volume\":95,\"start\":0.125,\"duration\":0.25,\"instrument\":0,\"gap\":0}\n\t\t\t\t\t// where start and duration are in whole notes, gap is in 1/1920 of a second (i.e. MIDI ticks)\n\t\t\t\t\tvar inst = ev.instrument !== undefined ? instrumentIndexToName[ev.instrument] : currentInstrument\n\t\t\t\t\tif (ev.duration > 0) {\n\t\t\t\t\t\tvar gap = ev.gap ? ev.gap : 0;\n\t\t\t\t\t\tvar len = ev.duration;\n\t\t\t\t\t\tgap = Math.min(gap, len * 2 / 3);\n\t\t\t\t\t\tvar obj = {\n\t\t\t\t\t\t\tpitch: ev.pitch,\n\t\t\t\t\t\t\tinstrument: inst,\n\t\t\t\t\t\t\tstart: Math.round((ev.start) * 1000000)/1000000,\n\t\t\t\t\t\t\tend: Math.round((ev.start + len - gap) * 1000000)/1000000,\n\t\t\t\t\t\t\tvolume: ev.volume\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (ev.startChar)\n\t\t\t\t\t\t\tobj.startChar = ev.startChar;\n\t\t\t\t\t\tif (ev.endChar)\n\t\t\t\t\t\t\tobj.endChar = ev.endChar;\n\t\t\t\t\t\tif (ev.style)\n\t\t\t\t\t\t\tobj.style = ev.style;\n\t\t\t\t\t\tif (ev.cents)\n\t\t\t\t\t\t\tobj.cents = ev.cents;\n\t\t\t\t\t\tmap[i].push(obj);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"program\":\n\t\t\t\t\tcurrentInstrument = instrumentIndexToName[ev.instrument];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"text\":\n\t\t\t\t\t// Ignore the track names - that is just for midi files.\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t// TODO-PER: handle other event types\n\t\t\t\t\tconsole.log(\"Unhandled midi event\", ev);\n\t\t\t}\n\t\t});\n\t});\n\treturn map;\n};\n\nmodule.exports = createNoteMap;\n","var supportsAudio = require('./supports-audio');\nvar registerAudioContext = require('./register-audio-context');\nvar activeAudioContext = require('./active-audio-context');\nvar parseCommon = require('../parse/abc_common');\n\nvar loopImage = require('./images/loop.svg.js');\nvar playImage = require('./images/play.svg.js');\nvar pauseImage = require('./images/pause.svg.js');\nvar loadingImage = require('./images/loading.svg.js');\nvar resetImage = require('./images/reset.svg.js');\n\nfunction CreateSynthControl(parent, options) {\n\tvar self = this;\n\t// parent is either an element or a selector.\n\tif (typeof parent === \"string\") {\n\t\tvar selector = parent;\n\t\tparent = document.querySelector(selector);\n\t\tif (!parent)\n\t\t\tthrow new Error(\"Cannot find element \\\"\" + selector + \"\\\" in the DOM.\");\n\t} else if (!(parent instanceof HTMLElement))\n\t\tthrow new Error(\"The first parameter must be a valid element or selector in the DOM.\");\n\n\tself.parent = parent;\n\tself.options = {};\n\tif (options)\n\t\tself.options = parseCommon.clone(options);\n\n\t// This can be called in the following cases:\n\t// AC already registered and not suspended\n\t// AC already registered and suspended\n\t// AC not registered and not passed in\n\t// AC not registered but passed in (but suspended)\n\t// AC not registered but passed in (not suspended)\n\t// If the AC is already registered, then just use it - ignore what is passed in\n\t// Create the AC if necessary if there isn't one already.\n\t// We don't care right now if the AC is suspended - whenever a button is clicked then we check it.\n\tif (self.options.ac)\n\t\tregisterAudioContext(self.options.ac);\n\tbuildDom(self.parent, self.options);\n\tattachListeners(self);\n\n\tself.disable = function(isDisabled) {\n\t\tvar el = self.parent.querySelector(\".abcjs-inline-audio\");\n\t\tif (isDisabled)\n\t\t\tel.classList.add(\"abcjs-disabled\");\n\t\telse\n\t\t\tel.classList.remove(\"abcjs-disabled\");\n\t};\n\tself.setWarp = function(tempo, warp) {\n\t\tvar el = self.parent.querySelector(\".abcjs-midi-tempo\");\n\t\tel.value = Math.round(warp);\n\t\tself.setTempo(tempo)\n\t};\n\tself.setTempo = function(tempo) {\n\t\tvar el = self.parent.querySelector(\".abcjs-midi-current-tempo\");\n\t\tif (el)\n\t\t\tel.innerHTML = Math.round(tempo);\n\t};\n\tself.resetAll = function() {\n\t\tvar pushedButtons = self.parent.querySelectorAll(\".abcjs-pushed\");\n\t\tfor (var i = 0; i < pushedButtons.length; i++) {\n\t\t\tvar button = pushedButtons[i];\n\t\t\tbutton.classList.remove(\"abcjs-pushed\");\n\t\t}\n\t};\n\tself.pushPlay = function(push) {\n\t\tvar startButton = self.parent.querySelector(\".abcjs-midi-start\");\n\t\tif (!startButton)\n\t\t\treturn;\n\t\tif (push)\n\t\t\tstartButton.classList.add(\"abcjs-pushed\");\n\t\telse\n\t\t\tstartButton.classList.remove(\"abcjs-pushed\");\n\t};\n\tself.pushLoop = function(push) {\n\t\tvar loopButton = self.parent.querySelector(\".abcjs-midi-loop\");\n\t\tif (!loopButton)\n\t\t\treturn;\n\t\tif (push)\n\t\t\tloopButton.classList.add(\"abcjs-pushed\");\n\t\telse\n\t\t\tloopButton.classList.remove(\"abcjs-pushed\");\n\t};\n\n\tself.setProgress = function (percent, totalTime) {\n\t\tvar progressBackground = self.parent.querySelector(\".abcjs-midi-progress-background\");\n\t\tvar progressThumb = self.parent.querySelector(\".abcjs-midi-progress-indicator\");\n\t\tif (!progressBackground || !progressThumb)\n\t\t\treturn;\n\t\tvar width = progressBackground.clientWidth;\n\t\tvar left = width * percent;\n\t\tprogressThumb.style.left = left + \"px\";\n\n\t\tvar clock = self.parent.querySelector(\".abcjs-midi-clock\");\n\t\tif (clock) {\n\t\t\tvar totalSeconds = (totalTime * percent) / 1000;\n\t\t\tvar minutes = Math.floor(totalSeconds / 60);\n\t\t\tvar seconds = Math.floor(totalSeconds % 60);\n\t\t\tvar secondsFormatted = seconds < 10 ? \"0\" + seconds : seconds;\n\t\t\tclock.innerHTML = minutes + \":\" + secondsFormatted;\n\t\t}\n\t};\n\n\tif (self.options.afterResume) {\n\t\tvar isResumed = false;\n\t\tif (self.options.ac) {\n\t\t\tisResumed = self.options.ac.state !== \"suspended\";\n\t\t} else if (activeAudioContext()) {\n\t\t\tisResumed = activeAudioContext().state !== \"suspended\";\n\t\t}\n\t\tif (isResumed)\n\t\t\tself.options.afterResume();\n\t}\n}\n\nfunction buildDom(parent, options) {\n\tvar hasLoop = !!options.loopHandler;\n\tvar hasRestart = !!options.restartHandler;\n\tvar hasPlay = !!options.playHandler || !!options.playPromiseHandler;\n\tvar hasProgress = !!options.progressHandler;\n\tvar hasWarp = !!options.warpHandler;\n\tvar hasClock = options.hasClock !== false;\n\n\tvar html = '
\\n';\n\tif (hasLoop) {\n\t\tvar repeatTitle = options.repeatTitle ? options.repeatTitle : \"Click to toggle play once/repeat.\";\n\t\tvar repeatAria = options.repeatAria ? options.repeatAria : repeatTitle;\n\t\thtml += '\\n';\n\t}\n\tif (hasRestart) {\n\t\tvar restartTitle = options.restartTitle ? options.restartTitle : \"Click to go to beginning.\";\n\t\tvar restartAria = options.restartAria ? options.restartAria : restartTitle;\n\t\thtml += '\\n';\n\t}\n\tif (hasPlay) {\n\t\tvar playTitle = options.playTitle ? options.playTitle : \"Click to play/pause.\";\n\t\tvar playAria = options.playAria ? options.playAria : playTitle;\n\t\thtml += '\\n';\n\t}\n\tif (hasProgress) {\n\t\tvar randomTitle = options.randomTitle ? options.randomTitle : \"Click to change the playback position.\";\n\t\tvar randomAria = options.randomAria ? options.randomAria : randomTitle;\n\t\thtml += '\\n';\n\t}\n\tif (hasClock) {\n\t\thtml += '\\n';\n\t}\n\tif (hasWarp) {\n\t\tvar warpTitle = options.warpTitle ? options.warpTitle : \"Change the playback speed.\";\n\t\tvar warpAria = options.warpAria ? options.warpAria : warpTitle;\n\t\tvar bpm = options.bpm ? options.bpm : \"BPM\";\n\t\thtml += ' ( ' + bpm + ')\\n';\n\t}\n\thtml += '
CSS required: load abcjs-audio.css
';\n\thtml += '
\\n';\n\tparent.innerHTML = html;\n}\n\nfunction acResumerMiddleWare(next, ev, playBtn, afterResume, isPromise) {\n\tvar needsInit = true;\n\tif (!activeAudioContext()) {\n\t\tregisterAudioContext();\n\t} else {\n\t\tneedsInit = activeAudioContext().state === \"suspended\";\n\t}\n\tif (!supportsAudio()) {\n\t\tthrow { status: \"NotSupported\", message: \"This browser does not support audio.\"};\n\t}\n\n\tif ((needsInit || isPromise) && playBtn)\n\t\tplayBtn.classList.add(\"abcjs-loading\");\n\n\tif (needsInit) {\n\t\tactiveAudioContext().resume().then(function () {\n\t\t\tif (afterResume) {\n\t\t\t\tafterResume().then(function (response) {\n\t\t\t\t\tdoNext(next, ev, playBtn, isPromise);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tdoNext(next, ev, playBtn, isPromise);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tdoNext(next, ev, playBtn, isPromise);\n\t}\n}\n\nfunction doNext(next, ev, playBtn, isPromise) {\n\tif (isPromise) {\n\t\tnext(ev).then(function() {\n\t\t\tif (playBtn)\n\t\t\t\tplayBtn.classList.remove(\"abcjs-loading\");\n\t\t});\n\t} else {\n\t\tnext(ev);\n\t\tif (playBtn)\n\t\t\tplayBtn.classList.remove(\"abcjs-loading\");\n\t}\n}\n\nfunction attachListeners(self) {\n\tvar hasLoop = !!self.options.loopHandler;\n\tvar hasRestart = !!self.options.restartHandler;\n\tvar hasPlay = !!self.options.playHandler || !!self.options.playPromiseHandler;\n\tvar hasProgress = !!self.options.progressHandler;\n\tvar hasWarp = !!self.options.warpHandler;\n\tvar playBtn = self.parent.querySelector(\".abcjs-midi-start\");\n\n\tif (hasLoop)\n\t\tself.parent.querySelector(\".abcjs-midi-loop\").addEventListener(\"click\", function(ev){acResumerMiddleWare(self.options.loopHandler, ev, playBtn, self.options.afterResume)});\n\tif (hasRestart)\n\t\tself.parent.querySelector(\".abcjs-midi-reset\").addEventListener(\"click\", function(ev){acResumerMiddleWare(self.options.restartHandler, ev, playBtn, self.options.afterResume)});\n\tif (hasPlay)\n\t\tplayBtn.addEventListener(\"click\", function(ev){\n\t\t\tacResumerMiddleWare(\n\t\t\t\tself.options.playPromiseHandler || self.options.playHandler,\n\t\t\t\tev,\n\t\t\t\tplayBtn,\n\t\t\t\tself.options.afterResume,\n\t\t\t\t!!self.options.playPromiseHandler)\n\t\t});\n\tif (hasProgress)\n\t\tself.parent.querySelector(\".abcjs-midi-progress-background\").addEventListener(\"click\", function(ev){acResumerMiddleWare(self.options.progressHandler, ev, playBtn, self.options.afterResume)});\n\tif (hasWarp)\n\t\tself.parent.querySelector(\".abcjs-midi-tempo\").addEventListener(\"change\", function(ev){acResumerMiddleWare(self.options.warpHandler, ev, playBtn, self.options.afterResume)});\n}\nmodule.exports = CreateSynthControl;\n","var getNote = require('./load-note');\nvar createNoteMap = require('./create-note-map');\nvar registerAudioContext = require('./register-audio-context');\nvar activeAudioContext = require('./active-audio-context');\nvar supportsAudio = require('./supports-audio');\nvar pitchToNoteName = require('./pitch-to-note-name');\nvar instrumentIndexToName = require('./instrument-index-to-name');\nvar downloadBuffer = require('./download-buffer');\nvar placeNote = require('./place-note');\nvar soundsCache = require('./sounds-cache');\n\n// TODO-PER: remove the midi tests from here: I don't think the object can be constructed unless it passes.\nvar notSupportedMessage = \"MIDI is not supported in this browser.\";\n\nvar originalSoundFontUrl = \"https://paulrosen.github.io/midi-js-soundfonts/abcjs/\";\n// These are the original soundfonts supplied. They will need a volume boost:\nvar defaultSoundFontUrl = \"https://paulrosen.github.io/midi-js-soundfonts/FluidR3_GM/\";\nvar alternateSoundFontUrl = \"https://paulrosen.github.io/midi-js-soundfonts/MusyngKite/\";\n\nfunction CreateSynth() {\n\tvar self = this;\n\tself.audioBufferPossible = undefined;\n\tself.directSource = []; // type: AudioBufferSourceNode\n\tself.startTimeSec = undefined; // the time (in seconds) that the audio started: used for pause to get the pausedTimeSec.\n\tself.pausedTimeSec = undefined; // the position (in seconds) that the audio was paused: used for resume.\n\tself.audioBuffers = []; // cache of the buffers so starting play can be fast.\n\tself.duration = undefined; // the duration of the tune in seconds.\n\tself.isRunning = false; // whether there is currently a sound buffer running.\n\tself.options = undefined\n\tself.pickupLength = 0\n\n\t// Load and cache all needed sounds\n\tself.init = function(options) {\n\t\tif (!options)\n\t\t\toptions = {};\n\t\tif (options.options)\n\t\t\tself.options = options.options\n\t\tregisterAudioContext(options.audioContext); // This works no matter what - if there is already an ac it is a nop; if the context is not passed in, then it creates one.\n\t\tvar startTime = activeAudioContext().currentTime;\n\t\tself.debugCallback = options.debugCallback;\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"init called\");\n\t\tself.audioBufferPossible = self._deviceCapable();\n\t\tif (!self.audioBufferPossible)\n\t\t\treturn Promise.reject({ status: \"NotSupported\", message: notSupportedMessage});\n\t\tvar params = options.options ? options.options : {};\n\t\tself.soundFontUrl = params.soundFontUrl ? params.soundFontUrl : defaultSoundFontUrl;\n\t\tif (self.soundFontUrl[self.soundFontUrl.length-1] !== '/')\n\t\t\tself.soundFontUrl += '/';\n\t\tif (params.soundFontVolumeMultiplier || params.soundFontVolumeMultiplier === 0)\n\t\t\tself.soundFontVolumeMultiplier = params.soundFontVolumeMultiplier;\n\t\telse if (self.soundFontUrl === defaultSoundFontUrl || self.soundFontUrl === alternateSoundFontUrl)\n\t\t\tself.soundFontVolumeMultiplier = 3.0;\n\t\telse if (self.soundFontUrl === originalSoundFontUrl)\n\t\t\tself.soundFontVolumeMultiplier = 0.4;\n\t\telse\n\t\t\tself.soundFontVolumeMultiplier = 1.0;\n\t\tif (params.programOffsets)\n\t\t\tself.programOffsets = params.programOffsets;\n\t\telse if (self.soundFontUrl === originalSoundFontUrl)\n\t\t\tself.programOffsets = {\n\t\t\t\t\"bright_acoustic_piano\": 20,\n\t\t\t\t\"honkytonk_piano\": 20,\n\t\t\t\t\"electric_piano_1\": 30,\n\t\t\t\t\"electric_piano_2\": 30,\n\t\t\t\t\"harpsichord\": 40,\n\t\t\t\t\"clavinet\": 20,\n\t\t\t\t\"celesta\": 20,\n\t\t\t\t\"glockenspiel\": 40,\n\t\t\t\t\"vibraphone\": 30,\n\t\t\t\t\"marimba\": 35,\n\t\t\t\t\"xylophone\": 30,\n\t\t\t\t\"tubular_bells\": 35,\n\t\t\t\t\"dulcimer\": 30,\n\t\t\t\t\"drawbar_organ\": 20,\n\t\t\t\t\"percussive_organ\": 25,\n\t\t\t\t\"rock_organ\": 20,\n\t\t\t\t\"church_organ\": 40,\n\t\t\t\t\"reed_organ\": 40,\n\t\t\t\t\"accordion\": 40,\n\t\t\t\t\"harmonica\": 40,\n\t\t\t\t\"acoustic_guitar_nylon\": 20,\n\t\t\t\t\"acoustic_guitar_steel\": 30,\n\t\t\t\t\"electric_guitar_jazz\": 25,\n\t\t\t\t\"electric_guitar_clean\": 15,\n\t\t\t\t\"electric_guitar_muted\": 35,\n\t\t\t\t\"overdriven_guitar\": 25,\n\t\t\t\t\"distortion_guitar\": 20,\n\t\t\t\t\"guitar_harmonics\": 30,\n\t\t\t\t\"electric_bass_finger\": 15,\n\t\t\t\t\"electric_bass_pick\": 30,\n\t\t\t\t\"fretless_bass\": 40,\n\t\t\t\t\"violin\": 105,\n\t\t\t\t\"viola\": 50,\n\t\t\t\t\"cello\": 40,\n\t\t\t\t\"contrabass\": 60,\n\t\t\t\t\"trumpet\": 10,\n\t\t\t\t\"trombone\": 90,\n\t\t\t\t\"alto_sax\": 20,\n\t\t\t\t\"tenor_sax\": 20,\n\t\t\t\t\"clarinet\": 20,\n\t\t\t\t\"flute\": 50,\n\t\t\t\t\"banjo\": 50,\n\t\t\t\t\"woodblock\": 20,\n\t\t\t};\n\t\telse\n\t\t\tself.programOffsets = {};\n\t\tvar p = params.fadeLength !== undefined ? parseInt(params.fadeLength,10) : NaN;\n\t\tself.fadeLength = isNaN(p) ? 200 : p;\n\t\tp = params.noteEnd !== undefined ? parseInt(params.noteEnd,10) : NaN;\n\t\tself.noteEnd = isNaN(p) ? 0 : p;\n\n\t\tself.pan = params.pan;\n\t\tself.meterSize = 1;\n\t\tif (options.visualObj) {\n\t\t\tself.flattened = options.visualObj.setUpAudio(params);\n\t\t\tvar meter = options.visualObj.getMeterFraction();\n\t\t\tif (meter.den)\n\t\t\t\tself.meterSize = options.visualObj.getMeterFraction().num / options.visualObj.getMeterFraction().den;\n\t\t\tself.pickupLength = options.visualObj.getPickupLength()\n\t\t} else if (options.sequence)\n\t\t\tself.flattened = options.sequence;\n\t\telse\n\t\t\treturn Promise.reject(new Error(\"Must pass in either a visualObj or a sequence\"));\n\t\tself.millisecondsPerMeasure = options.millisecondsPerMeasure ? options.millisecondsPerMeasure : (options.visualObj ? options.visualObj.millisecondsPerMeasure(self.flattened.tempo) : 1000);\n\t\tself.beatsPerMeasure = options.visualObj ? options.visualObj.getBeatsPerMeasure() : 4;\n\t\tself.sequenceCallback = params.sequenceCallback;\n\t\tself.callbackContext = params.callbackContext;\n\t\tself.onEnded = params.onEnded;\n\t\tself.meterFraction = options.visualObj ? options.visualObj.getMeterFraction() : {den: 1} // If we are given a sequence instead of a regular visual obj, then don't do the swing\n\n\t\tvar allNotes = {};\n\t\tvar cached = [];\n\t\tvar errorNotes = [];\n\t\tvar currentInstrument = instrumentIndexToName[0];\n\t\tself.flattened.tracks.forEach(function(track) {\n\t\t\ttrack.forEach(function(event) {\n\t\t\t\tif (event.cmd === \"program\" && instrumentIndexToName[event.instrument])\n\t\t\t\t\tcurrentInstrument = instrumentIndexToName[event.instrument];\n\t\t\t\tif (event.pitch !== undefined) {\n\t\t\t\t\tvar pitchNumber = event.pitch;\n\t\t\t\t\tvar noteName = pitchToNoteName[pitchNumber];\n\t\t\t\t\tvar inst = event.instrument !== undefined ? instrumentIndexToName[event.instrument] : currentInstrument\n\t\t\t\t\tif (noteName) {\n\t\t\t\t\t\tif (!allNotes[inst])\n\t\t\t\t\t\t\tallNotes[inst] = {};\n\t\t\t\t\t\tif (!soundsCache[inst] || !soundsCache[inst][noteName])\n\t\t\t\t\t\t\tallNotes[inst][noteName] = true;\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvar label2 = inst+\":\"+noteName\n\t\t\t\t\t\t\tif (cached.indexOf(label2) < 0)\n\t\t\t\t\t\t\t\tcached.push(label2);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar label = inst+\":\"+noteName\n\t\t\t\t\t\tconsole.log(\"Can't find note: \", pitchNumber, label);\n\t\t\t\t\t\tif (errorNotes.indexOf(label) < 0)\n\t\t\t\t\t\t\terrorNotes.push(label)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"note gathering time = \" + Math.floor((activeAudioContext().currentTime - startTime)*1000)+\"ms\");\n\t\tstartTime = activeAudioContext().currentTime;\n\n\t\tvar notes = [];\n\t\tObject.keys(allNotes).forEach(function(instrument) {\n\t\t\tObject.keys(allNotes[instrument]).forEach(function(note) {\n\t\t\t\tnotes.push({ instrument: instrument, note: note });\n\t\t\t});\n\t\t});\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"notes \"+JSON.stringify(notes));\n\n\t\t// If there are lots of notes, load them in batches\n\t\tvar batches = [];\n\t\tvar CHUNK = 256;\n\t\tfor (var i=0; i < notes.length; i += CHUNK) {\n\t\t\tbatches.push(notes.slice(i, i + CHUNK));\n\t\t}\n\n\t\treturn new Promise(function(resolve, reject) {\n\t\t\tvar results = {\n\t\t\t\tcached: cached,\n\t\t\t\terror: errorNotes,\n\t\t\t\tloaded: []\n\t\t\t};\n\n\t\t\tvar index = 0;\n\t\t\tvar next = function() {\n\t\t\t\tif (self.debugCallback)\n\t\t\t\t\tself.debugCallback(\"loadBatch idx=\"+index+ \" len=\"+batches.length);\n\t\n\t\t\t\tif (index < batches.length) {\n\t\t\t\t\tself._loadBatch(batches[index], self.soundFontUrl, startTime).then(function(data) {\n\t\t\t\t\t\tif (self.debugCallback)\n\t\t\t\t\t\t\tself.debugCallback(\"loadBatch then\");\n\t\t\t\t\t\tstartTime = activeAudioContext().currentTime;\n\t\t\t\t\t\tif (data) {\n\t\t\t\t\t\t\tif (data.error)\n\t\t\t\t\t\t\t\tresults.error = results.error.concat(data.error);\n\t\t\t\t\t\t\tif (data.loaded)\n\t\t\t\t\t\t\t\tresults.loaded = results.loaded.concat(data.loaded);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t\tnext();\n\t\t\t\t\t}, reject);\n\t\t\t\t} else {\n\t\t\t\t\tif (self.debugCallback)\n\t\t\t\t\t\tself.debugCallback(\"resolve init\");\n\t\t\n\t\t\t\t\tresolve(results);\n\t\t\t\t}\n\t\t\t};\n\t\t\tnext();\n\t\t});\n\t};\n\n\tself._loadBatch = (function(batch, soundFontUrl, startTime, delay) {\n\t\t// This is called recursively to see if the sounds have loaded. The \"delay\" parameter is how long it has been since the original call.\n\t\tvar promises = [];\n\t\tbatch.forEach(function(item) {\n\t\t\tif (self.debugCallback)\n\t\t\t\tself.debugCallback(\"getNote \" + item.instrument+':'+item.note);\n\t\t\tpromises.push(getNote(soundFontUrl, item.instrument, item.note, activeAudioContext()));\n\t\t});\n\t\treturn Promise.all(promises).then(function(response) {\n\t\t\tif (self.debugCallback)\n\t\t\t\tself.debugCallback(\"mp3 load time = \" + Math.floor((activeAudioContext().currentTime - startTime)*1000)+\"ms\");\n\t\t\tvar loaded = [];\n\t\t\tvar cached = [];\n\t\t\tvar pending = [];\n\t\t\tvar error = [];\n\t\t\tfor (var i = 0; i < response.length; i++) {\n\t\t\t\tvar oneResponse = response[i];\n\t\t\t\tvar which = oneResponse.instrument + \":\" + oneResponse.name;\n\t\t\t\tif (oneResponse.status === \"loaded\")\n\t\t\t\t\tloaded.push(which);\n\t\t\t\telse if (oneResponse.status === \"pending\")\n\t\t\t\t\tpending.push(which);\n\t\t\t\telse if (oneResponse.status === \"cached\")\n\t\t\t\t\tcached.push(which);\n\t\t\t\telse\n\t\t\t\t\terror.push(which + ' ' + oneResponse.message);\n\t\t\t}\n\t\t\tif (pending.length > 0) {\n\t\t\t\tif (self.debugCallback)\n\t\t\t\t\tself.debugCallback(\"pending \" + JSON.stringify(pending));\n\t\t\t\t// There was probably a second call for notes before the first one finished, so just retry a few times to see if they stop being pending.\n\t\t\t\t// Retry quickly at first so that there isn't an unnecessary delay, but increase the delay each time.\n\t\t\t\tif (!delay)\n\t\t\t\t\tdelay = 50;\n\t\t\t\telse\n\t\t\t\t\tdelay = delay * 2;\n\t\t\t\tif (delay < 90000) {\n\t\t\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tvar newBatch = [];\n\t\t\t\t\t\t\tfor (i = 0; i < pending.length; i++) {\n\t\t\t\t\t\t\t\twhich = pending[i].split(\":\");\n\t\t\t\t\t\t\t\tnewBatch.push({instrument: which[0], note: which[1]});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (self.debugCallback)\n\t\t\t\t\t\t\t\tself.debugCallback(\"retry \" + JSON.stringify(newBatch));\n\t\t\t\t\t\t\t\t\tself._loadBatch(newBatch, soundFontUrl, startTime, delay).then(function (response) {\n\t\t\t\t\t\t\t\tresolve(response);\n\t\t\t\t\t\t\t}).catch(function (error) {\n\t\t\t\t\t\t\t\treject(error);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}, delay);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tvar list = [];\n\t\t\t\t\tfor (var j = 0; j < batch.length; j++)\n\t\t\t\t\t\tlist.push(batch[j].instrument+'/'+batch[j].note)\n\t\t\t\t\t\tif (self.debugCallback)\n\t\t\t\t\t\t\tself.debugCallback(\"loadBatch timeout\")\n\t\t\t\t\t\treturn Promise.reject(new Error(\"timeout attempting to load: \" + list.join(\", \")));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (self.debugCallback)\n\t\t\t\t\tself.debugCallback(\"loadBatch resolve\")\n\t\t\t\treturn Promise.resolve({loaded: loaded, cached: cached, error: error});\n\t\t\t}\n\t\t}).catch(function (error) {\n\t\t\tif (self.debugCallback)\n\t\t\t\tself.debugCallback(\"loadBatch catch \"+error.message)\n\t\t});\n\t});\n\n\tself.prime = function() {\n\t\t// At this point all of the notes are loaded. This function writes them into the output buffer.\n\t\t// Most music has a lot of repeating notes. If a note is the same pitch, volume, length, etc. as another one,\n\t\t// It saves a lot of time to just create it once and place it repeatedly where ever it needs to be.\n\t\tvar fadeTimeSec = self.fadeLength/1000;\n\t\tself.isRunning = false;\n\t\tif (!self.audioBufferPossible)\n\t\t\treturn Promise.reject(new Error(notSupportedMessage));\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"prime called\");\n\t\treturn new Promise(function(resolve) {\n\t\t\tvar startTime = activeAudioContext().currentTime;\n\t\t\tvar tempoMultiplier = self.millisecondsPerMeasure / 1000 / self.meterSize;\n\t\t\tself.duration = self.flattened.totalDuration * tempoMultiplier;\n\t\t\tif(self.duration <= 0) {\n\t\t\t\tself.audioBuffers = [];\n\t\t\t\treturn resolve({ status: \"empty\", seconds: 0});\n\t\t\t}\n\t\t\tself.duration += fadeTimeSec;\n\t\t\tvar totalSamples = Math.floor(activeAudioContext().sampleRate * self.duration);\n\n\t\t\t// There might be a previous run that needs to be turned off.\n\t\t\tself.stop();\n\n\t\t\tvar noteMapTracks = createNoteMap(self.flattened);\n\n\t\t\tif (self.options.swing)\n\t\t\t\taddSwing(noteMapTracks, self.options.swing, self.meterFraction, self.pickupLength)\n\n\t\t\tif (self.sequenceCallback)\n\t\t\t\tself.sequenceCallback(noteMapTracks, self.callbackContext);\n\n\t\t\tvar panDistances = setPan(noteMapTracks.length, self.pan);\n\n\t\t\t// Create a simple list of all the unique sounds in this music and where they should be placed.\n\t\t\t// There appears to be a limit on how many audio buffers can be created at once so this technique limits the number needed.\n\t\t\tvar uniqueSounds = {};\n\t\t\tnoteMapTracks.forEach(function(noteMap, trackNumber) {\n\t\t\t\tvar panDistance = panDistances && panDistances.length > trackNumber ? panDistances[trackNumber] : 0;\n\t\t\t\tnoteMap.forEach(function(note) {\n\t\t\t\t\tvar key = note.instrument + ':' + note.pitch + ':' +note.volume + ':' + Math.round((note.end-note.start)*1000)/1000 + ':' + panDistance + ':' + tempoMultiplier + ':' + (note.cents ? note.cents : 0);\n\t\t\t\t\tif (self.debugCallback)\n\t\t\t\t\t\tself.debugCallback(\"noteMapTrack \"+key)\n\t\t\t\t\tif (!uniqueSounds[key])\n\t\t\t\t\t\tuniqueSounds[key] = [];\n\t\t\t\t\tuniqueSounds[key].push(note.start);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t// Now that we know what we are trying to create, construct the audio buffer by creating each sound and placing it.\n\t\t\tvar allPromises = [];\n\t\t\tvar audioBuffer = activeAudioContext().createBuffer(2, totalSamples, activeAudioContext().sampleRate);\n\t\t\tfor (var key2 = 0; key2 < Object.keys(uniqueSounds).length; key2++) {\n\t\t\t\tvar k = Object.keys(uniqueSounds)[key2];\n\t\t\t\tvar parts = k.split(\":\");\n\t\t\t\tvar cents = parts[6] !== undefined ? parseFloat(parts[6]) : 0;\n\t\t\t\tparts = {instrument: parts[0], pitch: parseInt(parts[1], 10), volume: parseInt(parts[2], 10), len: parseFloat(parts[3]), pan: parseFloat(parts[4]), tempoMultiplier: parseFloat(parts[5]), cents: cents};\n\t\t\t\tallPromises.push(placeNote(audioBuffer, activeAudioContext().sampleRate, parts, uniqueSounds[k], self.soundFontVolumeMultiplier, self.programOffsets[parts.instrument], fadeTimeSec, self.noteEnd/1000, self.debugCallback));\n\t\t\t}\n\t\t\tself.audioBuffers = [audioBuffer];\n\n\t\t\tif (self.debugCallback) {\n\t\t\t\tself.debugCallback(\"sampleRate = \" + activeAudioContext().sampleRate);\n\t\t\t\tself.debugCallback(\"totalSamples = \" + totalSamples);\n\t\t\t\tself.debugCallback(\"creationTime = \" + Math.floor((activeAudioContext().currentTime - startTime)*1000) + \"ms\");\n\t\t\t}\n\t\t\tfunction resolveData(me) {\n\t\t\t\tvar duration = me && me.audioBuffers && me.audioBuffers.length > 0 ? me.audioBuffers[0].duration : 0;\n\t\t\t\treturn { status: activeAudioContext().state, duration: duration}\n\t\t\t}\n\t\t\tPromise.all(allPromises).then(function() {\n\t\t\t\t// Safari iOS can mess with the audioContext state, so resume if needed.\n\t\t\t\tif (activeAudioContext().state === \"suspended\") {\n\t\t\t\t\tactiveAudioContext().resume().then(function () {\n\t\t\t\t\t\tresolve(resolveData(self));\n\t\t\t\t\t})\n\t\t\t\t} else if (activeAudioContext().state === \"interrupted\") {\n\t\t\t\t\tactiveAudioContext().suspend().then(function () {\n\t\t\t\t\t\tactiveAudioContext().resume().then(function () {\n\t\t\t\t\t\t\tresolve(resolveData(self));\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tresolve(resolveData(self));\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t};\n\n\tfunction setPan(numTracks, panParam) {\n\t\t// panParam, if it is set, can be either a number representing the separation between each track,\n\t\t// or an array, which is the absolute pan position for each track.\n\t\tif (panParam === null || panParam === undefined)\n\t\t\treturn null;\n\n\t\tvar panDistances = [];\n\t\tif (panParam.length) {\n\t\t\t// We received an array. If there are the same number of items in the pan array as the number of tracks,\n\t\t\t// it all lines up perfectly. If there are more items in the pan array than the tracks then the excess items are ignored.\n\t\t\t// If there are more tracks than items in the pan array then the remaining tracks are placed in the middle.\n\t\t\t// If any of the pan numbers are out of range then they are adjusted.\n\t\t\tfor (var pp = 0; pp < numTracks; pp++) {\n\t\t\t\tif (pp < panParam.length) {\n\t\t\t\t\tvar x = parseFloat(panParam[pp]);\n\t\t\t\t\tif (x < -1)\n\t\t\t\t\t\tx = -1;\n\t\t\t\t\telse if (x > 1)\n\t\t\t\t\t\tx = 1;\n\t\t\t\t\tpanDistances.push(x);\n\t\t\t\t} else\n\t\t\t\t\tpanDistances.push(0)\n\t\t\t}\n\t\t\treturn panDistances;\n\t\t} else {\n\t\t\tvar panNumber = parseFloat(panParam);\n\t\t\t// the separation needs to be no further than 2 (i.e. -1 to 1) so test to see if there are too many tracks for the passed in distance\n\t\t\tif (panNumber*(numTracks-1) > 2)\n\t\t\t\treturn null;\n\n\t\t\t// If there are an even number of tracks, then offset so that the first two are centered around the middle\n\t\t\tvar even = numTracks % 2 === 0;\n\t\t\tvar currLow = even ? 0 - panNumber/2 : 0;\n\t\t\tvar currHigh = currLow+panNumber;\n\t\t\t// Now add the tracks to either side\n\t\t\tfor (var p = 0; p < numTracks; p++) {\n\t\t\t\teven = p % 2 === 0;\n\t\t\t\tif (even) {\n\t\t\t\t\tpanDistances.push(currLow);\n\t\t\t\t\tcurrLow -= panNumber;\n\t\t\t\t} else {\n\t\t\t\t\tpanDistances.push(currHigh);\n\t\t\t\t\tcurrHigh += panNumber;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn panDistances;\n\t\t}\n\t\t// There was either no panning, or the parameters were illegal\n\t\treturn null;\n\t}\n\n\t// This is called after everything is set up, so it can quickly make sound\n\tself.start = function() {\n\t\tif (!self.audioBufferPossible)\n\t\t\tthrow new Error(notSupportedMessage);\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"start called\");\n\n\t\tvar resumePosition = self.pausedTimeSec ? self.pausedTimeSec : 0;\n\t\tself._kickOffSound(resumePosition);\n\t\tself.startTimeSec = activeAudioContext().currentTime - resumePosition;\n\t\tself.pausedTimeSec = undefined;\n\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"MIDI STARTED\", self.startTimeSec);\n\t};\n\n\tself.pause = function() {\n\t\tif (!self.audioBufferPossible)\n\t\t\tthrow new Error(notSupportedMessage);\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"pause called\");\n\n\t\tself.pausedTimeSec = self.stop();\n\t\treturn self.pausedTimeSec;\n\t};\n\n\tself.resume = function() {\n\t\tself.start();\n\t};\n\n\tself.seek = function(position, units) {\n\t\tvar offset;\n\t\tswitch (units) {\n\t\t\tcase \"seconds\":\n\t\t\t\toffset = position;\n\t\t\t\tbreak;\n\t\t\tcase \"beats\":\n\t\t\t\toffset = position * self.millisecondsPerMeasure / self.beatsPerMeasure / 1000;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// this is \"percent\" or any illegal value\n\t\t\t\toffset = (self.duration-self.fadeLength/1000) * position;\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// TODO-PER: can seek when paused or when playing\n\t\tif (!self.audioBufferPossible)\n\t\t\tthrow new Error(notSupportedMessage);\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"seek called sec=\" + offset);\n\n\t\tif (self.isRunning) {\n\t\t\tself.stop();\n\t\t\tself._kickOffSound(offset);\n\t\t} else {\n\t\t\tself.pausedTimeSec = offset;\n\t\t}\n\t\tself.pausedTimeSec = offset;\n\t};\n\n\tself.stop = function() {\n\t\tself.isRunning = false;\n\t\tself.pausedTimeSec = undefined;\n\t\tself.directSource.forEach(function(source) {\n\t\t\ttry {\n\t\t\t\tsource.stop();\n\t\t\t} catch (error) {\n\t\t\t\t// We don't care if self succeeds: it might fail if something else turned off the sound or it ended for some reason.\n\t\t\t\tconsole.log(\"direct source didn't stop:\", error)\n\t\t\t}\n\t\t});\n\t\tself.directSource = [];\n\t\tvar elapsed = activeAudioContext().currentTime - self.startTimeSec;\n\t\treturn elapsed;\n\t};\n\tself.finished = function() {\n\t\tself.startTimeSec = undefined;\n\t\tself.pausedTimeSec = undefined;\n\t\tself.isRunning = false;\n\t};\n\n\tself.download = function() {\n\t\treturn downloadBuffer(self);\n\t};\n\n\tself.getAudioBuffer = function() {\n\t\treturn self.audioBuffers[0];\n\t};\n\n\tself.getIsRunning = function() {\n\t\treturn self.isRunning;\n\t}\n\n\t/////////////// Private functions //////////////\n\n\tself._deviceCapable = function() {\n\t\tif (!supportsAudio()) {\n\t\t\tconsole.warn(notSupportedMessage);\n\t\t\tif (self.debugCallback)\n\t\t\t\tself.debugCallback(notSupportedMessage);\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\tself._kickOffSound = function(seconds) {\n\t\tself.isRunning = true;\n\t\tself.directSource = [];\n\t\tself.audioBuffers.forEach(function(audioBuffer, trackNum) {\n\t\t\tself.directSource[trackNum] = activeAudioContext().createBufferSource(); // creates a sound source\n\t\t\tself.directSource[trackNum].buffer = audioBuffer; // tell the source which sound to play\n\t\t\tself.directSource[trackNum].connect(activeAudioContext().destination); // connect the source to the context's destination (the speakers)\n\t\t});\n\t\tself.directSource.forEach(function(source) {\n\t\t\tsource.start(0, seconds);\n\t\t});\n\t\tif (self.onEnded) {\n\t\t\tself.directSource[0].onended = function () {\n\t\t\t\tself.onEnded(self.callbackContext);\n\t\t\t};\n\t\t}\n\t};\n\n\tfunction addSwing(noteMapTracks, swing, meterFraction, pickupLength) {\n\n\t\t// we can only swing in X/4 and X/8 meters.\n\t\tif (meterFraction.den != 4 && meterFraction.den != 8)\n\t\t\treturn;\n\n\t\tswing = parseFloat(swing);\n\n\t\t// 50 (or less) is no swing, \n\t\tif (isNaN(swing) || swing <= 50)\n\t\t\treturn;\n\n\t\t// 66 is triplet swing 2:1, and \n\t\t// 60 is swing with a ratio of 3:2. \n\t\t// 75 is the maximum swing where the first eight is played as a dotted eight and the second as a sixteenth. \n\t\tif (swing > 75)\n\t\t\tswing = 75;\n\n\t\t// convert the swing percentage to a percentage of increase for the first half of the beat\n\t\tswing = swing/50 - 1;\n\n\t\t// The volume of the swung notes is increased by this factor\n\t\t// could be also in the settings. Try out values such 0.1, 0.2\n\t\tvar volumeIncrease = 0.0;\n\n\t\t// the beatLength in X/8 meters\n\t\tvar beatLength = 0.25; \n\n\t\t// in X/8 meters the 16s swing so the beatLength is halved\n\t\tif (meterFraction.den === 8) \n\t\t\tbeatLength = beatLength/2; \n\n\t\t// duration of a half beat\n\t\tvar halfbeatLength = beatLength/2;\n\n\t\t// the extra duration of the first swung notes and the delay of the second notes\n\t\tvar swingDuration = halfbeatLength * swing;\n\n\t\tfor (var t = 0; t < noteMapTracks.length; t++) {\n\t\t\tvar track = noteMapTracks[t];\n\t\t\tfor (var i = 0; i < track.length; i++) {\n\t\t\t\tvar event = track[i];\n\t\t\t\tif (\n\t\t\t\t\t// is halfbeat\n\t\t\t\t\t(event.start-pickupLength) % halfbeatLength == 0 && (event.start-pickupLength) % beatLength != 0 \n\t\t\t\t\t&& (\n\t\t\t\t\t\t// the previous note is on the beat or before OR there is no previous note \n\t\t\t\t\t\ti == 0 \n\t\t\t\t\t\t|| track[i-1].start <= track[i].start - halfbeatLength\n\t\t\t\t\t)\n\t\t\t\t\t&& (\n\t\t\t\t\t\t// the next note is on the beat or after OR there is no next note\n\t\t\t\t\t\ti == track.length - 1 \n\t\t\t\t\t\t|| track[i+1].start >= track[i].start + halfbeatLength\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tvar oldEventStart = event.start;\n\n\t\t\t\t\tevent.start += swingDuration;\n\n\t\t\t\t\t// Increase volume of swung notes\n\t\t\t\t\tevent.volume *= 1 + volumeIncrease;\n\n\t\t\t\t\t// if there is a previous note ending at the start of this note, extend its end\n\t\t\t\t\t// and decrease its volume\n\t\t\t\t\tif (i > 0 && track[i-1].end == oldEventStart) {\n\t\t\t\t\t\ttrack[i-1].end = event.start;\n\t\t\t\t\t\ttrack[i-1].volume *= 1 - volumeIncrease;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n}\n\nmodule.exports = CreateSynth;\n","var downloadBuffer = function(buffer) {\n\treturn window.URL.createObjectURL(bufferToWave(buffer.audioBuffers));\n};\n\n// Convert an AudioBuffer to a Blob using WAVE representation\nfunction bufferToWave(audioBuffers) {\n\tvar audioBuffer = audioBuffers[0];\n\tvar numOfChan = audioBuffer.numberOfChannels;\n\tvar length = audioBuffer.length * numOfChan * 2 + 44;\n\tvar buffer = new ArrayBuffer(length);\n\tvar view = new DataView(buffer);\n\tvar channels = [];\n\tvar i;\n\tvar sample;\n\tvar offset = 0;\n\tvar pos = 0;\n\n\t// write WAVE header\n\tsetUint32(0x46464952); // \"RIFF\"\n\tsetUint32(length - 8); // file length - 8\n\tsetUint32(0x45564157); // \"WAVE\"\n\n\tsetUint32(0x20746d66); // \"fmt \" chunk\n\tsetUint32(16); // length = 16\n\tsetUint16(1); // PCM (uncompressed)\n\tsetUint16(numOfChan);\n\tsetUint32(audioBuffer.sampleRate);\n\tsetUint32(audioBuffer.sampleRate * 2 * numOfChan); // avg. bytes/sec\n\tsetUint16(numOfChan * 2); // block-align\n\tsetUint16(16); // 16-bit (hardcoded in this demo)\n\n\tsetUint32(0x61746164); // \"data\" - chunk\n\tsetUint32(length - pos - 4); // chunk length\n\n\t// write interleaved data\n\tfor(i = 0; i < numOfChan; i++)\n\t\tchannels.push(audioBuffer.getChannelData(i));\n\n\twhile(pos < length) {\n\t\tfor(i = 0; i < channels.length; i++) { // interleave channels\n\t\t\tsample = Math.max(-1, Math.min(1, channels[i][offset])); // clamp\n\t\t\tsample = (0.5 + sample < 0 ? sample * 32768 : sample * 32767)|0; // scale to 16-bit signed int\n\t\t\tview.setInt16(pos, sample, true); // write 16-bit sample\n\t\t\tpos += 2;\n\t\t}\n\t\toffset++; // next source sample\n\t}\n\n\t// create Blob\n\treturn new Blob([buffer], {type: \"audio/wav\"});\n\n\tfunction setUint16(data) {\n\t\tview.setUint16(pos, data, true);\n\t\tpos += 2;\n\t}\n\n\tfunction setUint32(data) {\n\t\tview.setUint32(pos, data, true);\n\t\tpos += 4;\n\t}\n}\n\nmodule.exports = downloadBuffer;\n","var tunebook = require('../api/abc_tunebook');\nvar midiCreate = require('../midi/abc_midi_create');\n\nvar getMidiFile = function(source, options) {\n\tvar params = {};\n\tif (options) {\n\t\tfor (var key in options) {\n\t\t\tif (options.hasOwnProperty(key)) {\n\t\t\t\tparams[key] = options[key];\n\t\t\t}\n\t\t}\n\t}\n\tparams.generateInline = false;\n\n\tfunction callback(div, tune, index) {\n\t\tvar downloadMidi = midiCreate(tune, params);\n\t\tswitch (params.midiOutputType) {\n\t\t\tcase \"encoded\":\n\t\t\t\treturn downloadMidi;\n\t\t\tcase \"binary\":\n\t\t\t\tvar decoded = downloadMidi.replace(\"data:audio/midi,\", \"\");\n\t\t\t\tdecoded = decoded.replace(/MThd/g,\"%4d%54%68%64\");\n\t\t\t\tdecoded = decoded.replace(/MTrk/g,\"%4d%54%72%6b\");\n\t\t\t\tvar buffer = new ArrayBuffer(decoded.length/3);\n\t\t\t\tvar output = new Uint8Array(buffer);\n\t\t\t\tfor (var i = 0; i < decoded.length/3; i++) {\n\t\t\t\t\tvar p = i*3+1;\n\t\t\t\t\tvar d = parseInt(decoded.substring(p, p+2), 16);\n\t\t\t\t\toutput[i] = d;\n\t\t\t\t}\n\t\t\t\treturn output;\n\t\t\tcase \"link\":\n\t\t\tdefault:\n\t\t\t\treturn generateMidiDownloadLink(tune, params, downloadMidi, index);\n\t\t}\n\t}\n\n\tif (typeof source === \"string\")\n\t\treturn tunebook.renderEngine(callback, \"*\", source, params);\n\telse\n\t\treturn callback(null, source, 0);\n};\n\nfunction isFunction(functionToCheck) {\n\tvar getType = {};\n\treturn functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\nvar generateMidiDownloadLink = function(tune, midiParams, midi, index) {\n\tvar divClasses = ['abcjs-download-midi', 'abcjs-midi-' + index]\n\tif (midiParams.downloadClass)\n\t\tdivClasses.push(midiParams.downloadClass)\n\tvar html = '
';\n\tif (midiParams.preTextDownload)\n\t\thtml += midiParams.preTextDownload;\n\tvar title = tune.metaText && tune.metaText.title ? tune.metaText.title : 'Untitled';\n\tvar label;\n\tif (midiParams.downloadLabel && isFunction(midiParams.downloadLabel))\n\t\tlabel = midiParams.downloadLabel(tune, index);\n\telse if (midiParams.downloadLabel)\n\t\tlabel = midiParams.downloadLabel.replace(/%T/, title);\n\telse\n\t\tlabel = \"Download MIDI for \\\"\" + title + \"\\\"\";\n\ttitle = title.toLowerCase().replace(/'/g, '').replace(/\\W/g, '_').replace(/__/g, '_');\n\tvar filename = (midiParams.fileName) ? midiParams.fileName : title + '.midi';\n\thtml += '' + label + '';\n\tif (midiParams.postTextDownload)\n\t\thtml += midiParams.postTextDownload;\n\treturn html + \"
\";\n};\n\n\nmodule.exports = getMidiFile;\n","var svg = `\n\n \n\n`\n\nmodule.exports = svg\n","var svg = `\n\n\t\n\t\n\t\n\t\n\n`\n\nmodule.exports = svg\n","var svg = `\n\n \n \n \n \n\n`\n\nmodule.exports = svg\n","var svg = `\n\n \n \n \n\n`\n\nmodule.exports = svg\n","var svg = `\n\n \n \n \n \n\n`\n\nmodule.exports = svg\n","var instrumentIndexToName = [\n\t\"acoustic_grand_piano\",\n\t\"bright_acoustic_piano\",\n\t\"electric_grand_piano\",\n\t\"honkytonk_piano\",\n\t\"electric_piano_1\",\n\t\"electric_piano_2\",\n\t\"harpsichord\",\n\t\"clavinet\",\n\n\t\"celesta\",\n\t\"glockenspiel\",\n\t\"music_box\",\n\t\"vibraphone\",\n\t\"marimba\",\n\t\"xylophone\",\n\t\"tubular_bells\",\n\t\"dulcimer\",\n\n\t\"drawbar_organ\",\n\t\"percussive_organ\",\n\t\"rock_organ\",\n\t\"church_organ\",\n\t\"reed_organ\",\n\t\"accordion\",\n\t\"harmonica\",\n\t\"tango_accordion\",\n\n\t\"acoustic_guitar_nylon\",\n\t\"acoustic_guitar_steel\",\n\t\"electric_guitar_jazz\",\n\t\"electric_guitar_clean\",\n\t\"electric_guitar_muted\",\n\t\"overdriven_guitar\",\n\t\"distortion_guitar\",\n\t\"guitar_harmonics\",\n\n\t\"acoustic_bass\",\n\t\"electric_bass_finger\",\n\t\"electric_bass_pick\",\n\t\"fretless_bass\",\n\t\"slap_bass_1\",\n\t\"slap_bass_2\",\n\t\"synth_bass_1\",\n\t\"synth_bass_2\",\n\n\t\"violin\",\n\t\"viola\",\n\t\"cello\",\n\t\"contrabass\",\n\t\"tremolo_strings\",\n\t\"pizzicato_strings\",\n\t\"orchestral_harp\",\n\t\"timpani\",\n\n\t\"string_ensemble_1\",\n\t\"string_ensemble_2\",\n\t\"synth_strings_1\",\n\t\"synth_strings_2\",\n\t\"choir_aahs\",\n\t\"voice_oohs\",\n\t\"synth_choir\",\n\t\"orchestra_hit\",\n\n\t\"trumpet\",\n\t\"trombone\",\n\t\"tuba\",\n\t\"muted_trumpet\",\n\t\"french_horn\",\n\t\"brass_section\",\n\t\"synth_brass_1\",\n\t\"synth_brass_2\",\n\n\t\"soprano_sax\",\n\t\"alto_sax\",\n\t\"tenor_sax\",\n\t\"baritone_sax\",\n\t\"oboe\",\n\t\"english_horn\",\n\t\"bassoon\",\n\t\"clarinet\",\n\n\t\"piccolo\",\n\t\"flute\",\n\t\"recorder\",\n\t\"pan_flute\",\n\t\"blown_bottle\",\n\t\"shakuhachi\",\n\t\"whistle\",\n\t\"ocarina\",\n\n\t\"lead_1_square\",\n\t\"lead_2_sawtooth\",\n\t\"lead_3_calliope\",\n\t\"lead_4_chiff\",\n\t\"lead_5_charang\",\n\t\"lead_6_voice\",\n\t\"lead_7_fifths\",\n\t\"lead_8_bass_lead\",\n\n\t\"pad_1_new_age\",\n\t\"pad_2_warm\",\n\t\"pad_3_polysynth\",\n\t\"pad_4_choir\",\n\t\"pad_5_bowed\",\n\t\"pad_6_metallic\",\n\t\"pad_7_halo\",\n\t\"pad_8_sweep\",\n\n\t\"fx_1_rain\",\n\t\"fx_2_soundtrack\",\n\t\"fx_3_crystal\",\n\t\"fx_4_atmosphere\",\n\t\"fx_5_brightness\",\n\t\"fx_6_goblins\",\n\t\"fx_7_echoes\",\n\t\"fx_8_scifi\",\n\n\t\"sitar\",\n\t\"banjo\",\n\t\"shamisen\",\n\t\"koto\",\n\t\"kalimba\",\n\t\"bagpipe\",\n\t\"fiddle\",\n\t\"shanai\",\n\n\t\"tinkle_bell\",\n\t\"agogo\",\n\t\"steel_drums\",\n\t\"woodblock\",\n\t\"taiko_drum\",\n\t\"melodic_tom\",\n\t\"synth_drum\",\n\t\"reverse_cymbal\",\n\n\t\"guitar_fret_noise\",\n\t\"breath_noise\",\n\t\"seashore\",\n\t\"bird_tweet\",\n\t\"telephone_ring\",\n\t\"helicopter\",\n\t\"applause\",\n\t\"gunshot\",\n\n\t\"percussion\"\n];\n\nmodule.exports = instrumentIndexToName;\n","// Load one mp3 file for one note.\n// url = the base url for the soundfont\n// instrument = the instrument name (e.g. \"acoustic_grand_piano\")\n// name = the pitch name (e.g. \"A3\")\nvar soundsCache = require(\"./sounds-cache\");\n\nvar getNote = function (url, instrument, name, audioContext) {\n\tif (!soundsCache[instrument]) soundsCache[instrument] = {};\n\tvar instrumentCache = soundsCache[instrument];\n\n\tif (!instrumentCache[name])\n\t\tinstrumentCache[name] = new Promise(function (resolve, reject) {\n\t\t\tvar xhr = new XMLHttpRequest();\n\t\t\tlet noteUrl = url + instrument + \"-mp3/\" + name + \".mp3\";\n\t\t\txhr.open(\"GET\", noteUrl, true);\n\t\t\txhr.responseType = \"arraybuffer\";\n\t\t\txhr.onload = function () {\n\t\t\t\tif (xhr.status !== 200) {\n\t\t\t\t\treject(Error(\"Can't load sound at \" + noteUrl + ' status=' + xhr.status));\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tvar noteDecoded = function(audioBuffer) {\n\t\t\t\t\tresolve({instrument: instrument, name: name, status: \"loaded\", audioBuffer: audioBuffer})\n\t\t\t\t}\n\t\t\t\tvar maybePromise = audioContext.decodeAudioData(xhr.response, noteDecoded, function () {\n\t\t\t\t\treject(Error(\"Can't decode sound at \" + noteUrl));\n\t\t\t\t});\n\t\t\t\t// In older browsers `BaseAudioContext.decodeAudio()` did not return a promise\n\t\t\t\tif (maybePromise && typeof maybePromise.catch === \"function\") maybePromise.catch(reject);\n\t\t\t};\n\t\t\txhr.onerror = function () {\n\t\t\t\treject(Error(\"Can't load sound at \" + noteUrl));\n\t\t\t};\n\t\t\txhr.send();\n\t\t})\n\t\t\t.catch(err => {\n\t\t\t\tconsole.error(\"Didn't load note\", instrument, name, \":\", err.message);\n\t\t\t\tthrow err;\n\t\t\t});\n\n\treturn instrumentCache[name];\n};\n\nmodule.exports = getNote;\n","var accidentals = {\n\t\"__\": -2,\n\t\"_\": -1,\n\t\"_/\": -0.5,\n\t\"=\": 0,\n\t\"\": 0,\n\t\"^/\": 0.5,\n\t\"^\": 1,\n\t\"^^\": 2\n}\n\nvar notesInOrder = ['C', '-', 'D', '-', 'E', 'F', '-', 'G', '-', 'A', '-', 'B', 'c', '-', 'd', '-', 'e', 'f', '-', 'g', '-', 'a', '-', 'b']\n\nfunction noteToMidi(note) {\n\tvar reg = note.match(/([_^\\/]*)([ABCDEFGabcdefg])(,*)('*)/)\n\tif (reg && reg.length === 5) {\n\t\tvar acc = accidentals[reg[1]]\n\t\tvar pitch = notesInOrder.indexOf(reg[2])\n\t\tvar octave = reg[4].length - reg[3].length\n\t\treturn 48 + pitch + acc + octave * 12;\n\t}\n\treturn 0;\n}\n\nfunction midiToNote(midi) {\n\tmidi = parseInt(midi, 10) // TODO-PER: not sure how to handle quarter sharps and flats, so strip them for now.\n\tvar octave = Math.floor(midi / 12)\n\tvar pitch = midi % 12\n\tvar name = notesInOrder[pitch]\n\tif (name === '-') {\n\t\tname = '^' + notesInOrder[pitch-1]\n\t}\n\t\n\tif (octave > 4) {\n\t\tname = name.toLowerCase()\n\t\toctave -= 5\n\t\twhile (octave > 0) {\n\t\t\tname += \"'\"\n\t\t\toctave--\n\t\t}\n\t} else {\n\t\twhile (octave < 4) {\n\t\t\tname += ','\n\t\t\toctave++\n\t\t}\n\t}\t\n\treturn name\n}\n\nmodule.exports = {noteToMidi: noteToMidi, midiToNote: midiToNote};\n","var pitchToNoteName = {\n\t21: 'A0',\n\t22: 'Bb0',\n\t23: 'B0',\n\t24: 'C1',\n\t25: 'Db1',\n\t26: 'D1',\n\t27: 'Eb1',\n\t28: 'E1',\n\t29: 'F1',\n\t30: 'Gb1',\n\t31: 'G1',\n\t32: 'Ab1',\n\t33: 'A1',\n\t34: 'Bb1',\n\t35: 'B1',\n\t36: 'C2',\n\t37: 'Db2',\n\t38: 'D2',\n\t39: 'Eb2',\n\t40: 'E2',\n\t41: 'F2',\n\t42: 'Gb2',\n\t43: 'G2',\n\t44: 'Ab2',\n\t45: 'A2',\n\t46: 'Bb2',\n\t47: 'B2',\n\t48: 'C3',\n\t49: 'Db3',\n\t50: 'D3',\n\t51: 'Eb3',\n\t52: 'E3',\n\t53: 'F3',\n\t54: 'Gb3',\n\t55: 'G3',\n\t56: 'Ab3',\n\t57: 'A3',\n\t58: 'Bb3',\n\t59: 'B3',\n\t60: 'C4',\n\t61: 'Db4',\n\t62: 'D4',\n\t63: 'Eb4',\n\t64: 'E4',\n\t65: 'F4',\n\t66: 'Gb4',\n\t67: 'G4',\n\t68: 'Ab4',\n\t69: 'A4',\n\t70: 'Bb4',\n\t71: 'B4',\n\t72: 'C5',\n\t73: 'Db5',\n\t74: 'D5',\n\t75: 'Eb5',\n\t76: 'E5',\n\t77: 'F5',\n\t78: 'Gb5',\n\t79: 'G5',\n\t80: 'Ab5',\n\t81: 'A5',\n\t82: 'Bb5',\n\t83: 'B5',\n\t84: 'C6',\n\t85: 'Db6',\n\t86: 'D6',\n\t87: 'Eb6',\n\t88: 'E6',\n\t89: 'F6',\n\t90: 'Gb6',\n\t91: 'G6',\n\t92: 'Ab6',\n\t93: 'A6',\n\t94: 'Bb6',\n\t95: 'B6',\n\t96: 'C7',\n\t97: 'Db7',\n\t98: 'D7',\n\t99: 'Eb7',\n\t100: 'E7',\n\t101: 'F7',\n\t102: 'Gb7',\n\t103: 'G7',\n\t104: 'Ab7',\n\t105: 'A7',\n\t106: 'Bb7',\n\t107: 'B7',\n\t108: 'C8',\n\t109: 'Db8',\n\t110: 'D8',\n\t111: 'Eb8',\n\t112: 'E8',\n\t113: 'F8',\n\t114: 'Gb8',\n\t115: 'G8',\n\t116: 'Ab8',\n\t117: 'A8',\n\t118: 'Bb8',\n\t119: 'B8',\n\t120: 'C9',\n\t121: 'Db9'\n};\n\nmodule.exports = pitchToNoteName;\n","var pitchMap = {\n\tf0: \"_C\",\n\tn0: \"=C\",\n\ts0: \"^C\",\n\tx0: \"C\",\n\tf1: \"_D\",\n\tn1: \"=D\",\n\ts1: \"^D\",\n\tx1: \"D\",\n\tf2: \"_E\",\n\tn2: \"=E\",\n\ts2: \"^E\",\n\tx2: \"E\",\n\tf3: \"_F\",\n\tn3: \"=F\",\n\ts3: \"^F\",\n\tx3: \"F\",\n\tf4: \"_G\",\n\tn4: \"=G\",\n\ts4: \"^G\",\n\tx4: \"G\",\n\tf5: \"_A\",\n\tn5: \"=A\",\n\ts5: \"^A\",\n\tx5: \"A\",\n\tf6: \"_B\",\n\tn6: \"=B\",\n\ts6: \"^B\",\n\tx6: \"B\",\n\tf7: \"_c\",\n\tn7: \"=c\",\n\ts7: \"^c\",\n\tx7: \"c\",\n\tf8: \"_d\",\n\tn8: \"=d\",\n\ts8: \"^d\",\n\tx8: \"d\",\n\tf9: \"_e\",\n\tn9: \"=e\",\n\ts9: \"^e\",\n\tx9: \"e\",\n\tf10: \"_f\",\n\tn10: \"=f\",\n\ts10: \"^f\",\n\tx10: \"f\",\n\tf11: \"_g\",\n\tn11: \"=g\",\n\ts11: \"^g\",\n\tx11: \"g\",\n\tf12: \"_a\",\n\tn12: \"=a\",\n\ts12: \"^a\",\n\tx12: \"a\",\n\tf13: \"_b\",\n\tn13: \"=b\",\n\ts13: \"^b\",\n\tx13: \"b\",\n\tf14: \"_c'\",\n\tn14: \"=c'\",\n\ts14: \"^c'\",\n\tx14: \"c'\",\n\tf15: \"_d'\",\n\tn15: \"=d'\",\n\ts15: \"^d'\",\n\tx15: \"d'\",\n\tf16: \"_e'\",\n\tn16: \"=e'\",\n\ts16: \"^e'\",\n\tx16: \"e'\",\n}\n\nfunction pitchesToPerc(pitchObj) {\n\tvar pitch = (pitchObj.accidental ? pitchObj.accidental[0] : 'x') + pitchObj.verticalPos;\n\treturn pitchMap[pitch];\n}\nmodule.exports = pitchesToPerc;\n","var soundsCache = require('./sounds-cache');\nvar pitchToNoteName = require('./pitch-to-note-name');\nvar centsToFactor = require(\"./cents-to-factor\");\n\nfunction placeNote(outputAudioBuffer, sampleRate, sound, startArray, volumeMultiplier, ofsMs, fadeTimeSec, noteEndSec, debugCallback) {\n\t// sound contains { instrument, pitch, volume, len, pan, tempoMultiplier\n\t// len is in whole notes. Multiply by tempoMultiplier to get seconds.\n\t// ofsMs is an offset to subtract from the note to line up programs that have different length onsets.\n\tvar OfflineAC = window.OfflineAudioContext ||\n\t\twindow.webkitOfflineAudioContext;\n\n\tvar len = sound.len * sound.tempoMultiplier;\n\tif (ofsMs)\n\t\tlen +=ofsMs/1000;\n\tlen -= noteEndSec;\n\tif (len < 0)\n\t\tlen = 0.005; // Have some small audible length no matter how short the note is.\n\tvar offlineCtx = new OfflineAC(2,Math.floor((len+fadeTimeSec)*sampleRate),sampleRate);\n\tvar noteName = pitchToNoteName[sound.pitch];\n\tif (!soundsCache[sound.instrument]) {\n\t\t// It shouldn't happen that the entire instrument cache wasn't created, but this has been seen in practice, so guard against it.\n\t\tif (debugCallback)\n\t\t\tdebugCallback('placeNote skipped (instrument empty): '+sound.instrument+':'+noteName)\n\t\treturn Promise.resolve();\n\t}\n\tvar noteBufferPromise = soundsCache[sound.instrument][noteName];\n\n\tif (!noteBufferPromise) {\n\t\t// if the note isn't present then just skip it - it will leave a blank spot in the audio.\n\t\tif (debugCallback)\n\t\t\tdebugCallback('placeNote skipped: '+sound.instrument+':'+noteName)\n\t\treturn Promise.resolve();\n\t}\n\n\treturn noteBufferPromise\n\t\t.then(function (response) {\n\t\t\t// create audio buffer\n\t\t\tvar source = offlineCtx.createBufferSource();\n\t\t\tsource.buffer = response.audioBuffer;\n\n\t\t\t// add gain\n\t\t\t// volume can be between 1 to 127. This translation to gain is just trial and error.\n\t\t\t// The smaller the first number, the more dynamic range between the quietest to loudest.\n\t\t\t// The larger the second number, the louder it will be in general.\n\t\t\tvar volume = (sound.volume / 96) * volumeMultiplier;\n\t\t\tsource.gainNode = offlineCtx.createGain();\n\n\t\t\t// add pan if supported and present\n\t\t\tif (sound.pan && offlineCtx.createStereoPanner) {\n\t\t\t\tsource.panNode = offlineCtx.createStereoPanner();\n\t\t\t\tsource.panNode.pan.setValueAtTime(sound.pan, 0);\n\t\t\t}\n\t\t\tsource.gainNode.gain.value = volume; // Math.min(2, Math.max(0, volume));\n\t\t\tsource.gainNode.gain.linearRampToValueAtTime(source.gainNode.gain.value, len);\n\t\t\tsource.gainNode.gain.linearRampToValueAtTime(0.0, len + fadeTimeSec);\n\n\t\t\tif (sound.cents) {\n\t\t\t\tsource.playbackRate.value = centsToFactor(sound.cents);\n\t\t\t}\n\n\t\t\t// connect all the nodes\n\t\t\tif (source.panNode) {\n\t\t\t\tsource.panNode.connect(offlineCtx.destination);\n\t\t\t\tsource.gainNode.connect(source.panNode);\n\t\t\t} else {\n\t\t\t\tsource.gainNode.connect(offlineCtx.destination);\n\t\t\t}\n\t\t\tsource.connect(source.gainNode);\n\n\t\t\t// Do the process of creating the sound and placing it in the buffer\n\t\t\tsource.start(0);\n\n\t\t\tif (source.noteOff) {\n\t\t\t\tsource.noteOff(len + fadeTimeSec);\n\t\t\t} else {\n\t\t\t\tsource.stop(len + fadeTimeSec);\n\t\t\t}\n\t\t\tvar fnResolve;\n\t\t\tofflineCtx.oncomplete = function(e) {\n\t\t\t\tif (e.renderedBuffer && e.renderedBuffer.getChannelData) { // If the system gets overloaded or there are network problems then this can start failing. Just drop the note if so.\n\t\t\t\t\tfor (var i = 0; i < startArray.length; i++) {\n\t\t\t\t\t\t//Math.floor(startArray[i] * sound.tempoMultiplier * sampleRate)\n\t\t\t\t\t\tvar start = startArray[i] * sound.tempoMultiplier;\n\t\t\t\t\t\tif (ofsMs)\n\t\t\t\t\t\t\tstart -=ofsMs/1000;\n\t\t\t\t\t\tif (start < 0)\n\t\t\t\t\t\t\tstart = 0; // If the item that is moved back is at the very beginning of the buffer then don't move it back. To do that would be to push everything else forward. TODO-PER: this should probably be done at some point but then it would change timing in existing apps.\n\t\t\t\t\t\tstart = Math.floor(start*sampleRate);\n\t\t\t\t\t\tcopyToChannel(outputAudioBuffer, e.renderedBuffer, start);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (debugCallback)\n\t\t\t\t\tdebugCallback('placeNote: '+sound.instrument+':'+noteName)\n\t\t\t\tfnResolve();\n\t\t\t};\n\t\t\tofflineCtx.startRendering();\n\t\t\treturn new Promise(function(resolve) {\n\t\t\t\tfnResolve = resolve;\n\t\t\t});\n\t\t})\n\t\t.catch(function (error) {\n\t\t\tif (debugCallback)\n\t\t\t\tdebugCallback('placeNote catch: '+error.message)\n\t\t\treturn Promise.resolve()\n\t\t});\n}\n\nvar copyToChannel = function(toBuffer, fromBuffer, start) {\n\tfor (var ch = 0; ch < 2; ch++) {\n\t\tvar fromData = fromBuffer.getChannelData(ch);\n\t\tvar toData = toBuffer.getChannelData(ch);\n\n\t\t// Mix the current note into the existing track\n\t\tfor (var n = 0; n < fromData.length; n++) {\n\t\t\ttoData[n + start] += fromData[n];\n\t\t}\n\t}\n};\n\nmodule.exports = placeNote;\n","var SynthSequence = require('./synth-sequence');\nvar CreateSynth = require('./create-synth');\nvar activeAudioContext = require(\"./active-audio-context\");\n\nfunction playEvent(midiPitches, midiGracePitches, millisecondsPerMeasure, soundFontUrl, debugCallback) {\n\tvar sequence = new SynthSequence();\n\n\tfor (var i = 0; i < midiPitches.length; i++) {\n\t\tvar note = midiPitches[i];\n\t\tvar trackNum = sequence.addTrack();\n\t\tsequence.setInstrument(trackNum, note.instrument);\n\t\tif (i === 0 && midiGracePitches) {\n\t\t\tfor (var j = 0; j < midiGracePitches.length; j++) {\n\t\t\t\tvar grace = midiGracePitches[j];\n\t\t\t\tsequence.appendNote(trackNum, grace.pitch, 1 / 64, grace.volume, grace.cents);\n\t\t\t}\n\t\t}\n\t\tsequence.appendNote(trackNum, note.pitch, note.duration, note.volume, note.cents);\n\t}\n\n\tvar ac = activeAudioContext();\n\tif (ac.state === \"suspended\") {\n\t\treturn ac.resume().then(function () {\n\t\t\treturn doPlay(sequence, millisecondsPerMeasure, soundFontUrl, debugCallback);\n\t\t});\n\t} else {\n\t\treturn doPlay(sequence, millisecondsPerMeasure, soundFontUrl, debugCallback);\n\t}\n}\n\nfunction doPlay(sequence, millisecondsPerMeasure, soundFontUrl, debugCallback) {\n\tvar buffer = new CreateSynth();\n\treturn buffer.init({\n\t\tsequence: sequence,\n\t\tmillisecondsPerMeasure: millisecondsPerMeasure,\n\t\toptions: { soundFontUrl: soundFontUrl },\n\t\tdebugCallback: debugCallback,\n\t}).then(function () {\n\t\treturn buffer.prime();\n\t}).then(function () {\n\t\tbuffer.start();\n\t\treturn Promise.resolve();\n\t});\n}\n\nmodule.exports = playEvent;\n","// Call this when it is safe for the abcjs to produce sound. This is after the first user gesture on the page.\n// If you call it with no parameters, then an AudioContext is created and stored.\n// If you call it with a parameter, that is used as an already created AudioContext.\n\nfunction registerAudioContext(ac) {\n\t// If one is passed in, that is the one to use even if there was already one created.\n\tif (ac)\n\t\twindow.abcjsAudioContext = ac;\n\telse {\n\t\t// no audio context passed in, so create it unless there is already one from before.\n\t\tif (!window.abcjsAudioContext) {\n\t\t\tvar AudioContext = window.AudioContext || window.webkitAudioContext;\n\t\t\tif (AudioContext)\n\t\t\t\twindow.abcjsAudioContext = new AudioContext();\n\t\t\telse\n\t\t\t\treturn false;\n\t\t}\n\t}\n\treturn window.abcjsAudioContext.state !== \"suspended\";\n}\n\nmodule.exports = registerAudioContext;\n","var soundsCache = {\n};\n\nmodule.exports = soundsCache;\n","var activeAudioContext = require('./active-audio-context');\n\n//\n// Support for audio depends on three things: support for Promise, support for AudioContext, and support for AudioContext.resume.\n// Unfortunately, AudioContext.resume cannot be detected unless an AudioContext is created, and creating an AudioContext can't\n// be done until a user click, so there is no way to know for sure if audio is supported until the user tries.\n// We can get close, though - we can test for Promises and AudioContext - there are just a few evergreen browsers that supported\n// that before supporting resume, so we'll test what we can.\n\n// The best use of this routine is to call it before doing any audio related stuff to decide whether to bother.\n// But then, call it again after a user interaction to test for resume.\n\nfunction supportsAudio() {\n\tif (!window.Promise)\n\t\treturn false;\n\n\tif (!window.AudioContext &&\n\t\t!window.webkitAudioContext &&\n\t\t!navigator.mozAudioContext &&\n\t\t!navigator.msAudioContext)\n\t\treturn false;\n\n\tvar aac = activeAudioContext();\n\tif (aac)\n\t\treturn aac.resume !== undefined;\n}\n\nmodule.exports = supportsAudio;\n","var CreateSynthControl = require('./create-synth-control');\nvar CreateSynth = require('./create-synth');\nvar TimingCallbacks = require('../api/abc_timing_callbacks');\nvar activeAudioContext = require('./active-audio-context');\n\nfunction SynthController() {\n\tvar self = this;\n\tself.warp = 100;\n\tself.cursorControl = null;\n\tself.visualObj = null;\n\tself.timer = null;\n\tself.midiBuffer = null;\n\tself.options = null;\n\tself.currentTempo = null;\n\tself.control = null;\n\tself.isLooping = false;\n\tself.isStarted = false;\n\tself.isLoaded = false;\n\tself.isLoading = false;\n\n\tself.load = function (selector, cursorControl, visualOptions) {\n\t\tif (!visualOptions)\n\t\t\tvisualOptions = {};\n\t\tif (visualOptions.displayPlay === undefined)\n\t\t\tvisualOptions.displayPlay = true\n\t\tif (visualOptions.displayProgress === undefined)\n\t\t\tvisualOptions.displayProgress = true\n\t\tself.control = new CreateSynthControl(selector, {\n\t\t\tloopHandler: visualOptions.displayLoop ? self.toggleLoop : undefined,\n\t\t\trestartHandler: visualOptions.displayRestart ? self.restart : undefined,\n\t\t\tplayPromiseHandler: visualOptions.displayPlay ? self.play : undefined,\n\t\t\tprogressHandler: visualOptions.displayProgress ? self.randomAccess : undefined,\n\t\t\twarpHandler: visualOptions.displayWarp ? self.onWarp : undefined,\n\t\t\tafterResume: self.init\n\t\t});\n\t\tself.cursorControl = cursorControl;\n\t\tself.disable(true);\n\t};\n\n\tself.disable = function(isDisabled) {\n\t\tif (self.control)\n\t\t\tself.control.disable(isDisabled);\n\t};\n\n\tself.setTune = function(visualObj, userAction, audioParams) {\n\t\tself.visualObj = visualObj;\n\t\tself.disable(false);\n\t\tself.options = audioParams ? audioParams : {};\n\n\t\tif (self.control) {\n\t\t\tself.pause();\n\t\t\tself.setProgress(0, 1);\n\t\t\tself.control.resetAll();\n\t\t\tself.restart();\n\t\t\tself.isStarted = false;\n\t\t}\n\t\tself.isLooping = false;\n\n\t\tif (userAction)\n\t\t\treturn self.go();\n\t\telse {\n\t\t\treturn Promise.resolve({status: \"no-audio-context\"});\n\t\t}\n\t};\n\n\tself.go = function () {\n\t\tself.isLoading = true;\n\t\tvar millisecondsPerMeasure = self.visualObj.millisecondsPerMeasure() * 100 / self.warp;\n\t\tself.currentTempo = Math.round(self.visualObj.getBeatsPerMeasure() / millisecondsPerMeasure * 60000);\n\t\tif (self.control)\n\t\t\tself.control.setTempo(self.currentTempo);\n\t\tself.percent = 0;\n\t\tvar loadingResponse;\n\n\t\tif (!self.midiBuffer)\n\t\t\tself.midiBuffer = new CreateSynth();\n\t\treturn activeAudioContext().resume().then(function (response) {\n\t\t\treturn self.midiBuffer.init({\n\t\t\t\tvisualObj: self.visualObj,\n\t\t\t\toptions: self.options,\n\t\t\t\tmillisecondsPerMeasure: millisecondsPerMeasure\n\t\t\t});\n\t\t}).then(function (response) {\n\t\t\tloadingResponse = response;\n\t\t\treturn self.midiBuffer.prime();\n\t\t}).then(function () {\n\t\t\tvar subdivisions = 16;\n\t\t\tif (self.cursorControl &&\n\t\t\t\tself.cursorControl.beatSubdivisions !== undefined &&\n\t\t\t\tparseInt(self.cursorControl.beatSubdivisions, 10) >= 1 &&\n\t\t\t\tparseInt(self.cursorControl.beatSubdivisions, 10) <= 64)\n\t\t\t\tsubdivisions = parseInt(self.cursorControl.beatSubdivisions, 10);\n\n\t\t\t// Need to create the TimingCallbacks after priming the midi so that the midi data is available for the callbacks.\n\t\t\tself.timer = new TimingCallbacks(self.visualObj, {\n\t\t\t\tbeatCallback: self.beatCallback,\n\t\t\t\teventCallback: self.eventCallback,\n\t\t\t\tlineEndCallback: self.lineEndCallback,\n\t\t\t\tqpm: self.currentTempo,\n\n\t\t\t\textraMeasuresAtBeginning: self.cursorControl ? self.cursorControl.extraMeasuresAtBeginning : undefined,\n\t\t\t\tlineEndAnticipation: self.cursorControl ? self.cursorControl.lineEndAnticipation : 0,\n\t\t\t\tbeatSubdivisions: subdivisions,\n\t\t\t});\n\t\t\tif (self.cursorControl && self.cursorControl.onReady && typeof self.cursorControl.onReady === 'function')\n\t\t\t\tself.cursorControl.onReady(self);\n\t\t\tself.isLoaded = true;\n\t\t\tself.isLoading = false;\n\t\t\treturn Promise.resolve({ status: \"created\", notesStatus: loadingResponse });\n\t\t});\n\t};\n\n\tself.destroy = function () {\n\t\tif (self.timer) {\n\t\t\tself.timer.reset();\n\t\t\tself.timer.stop();\n\t\t\tself.timer = null;\n\t\t}\n\t\tif (self.midiBuffer) {\n\t\t\tself.midiBuffer.stop();\n\t\t\tself.midiBuffer = null;\n\t\t}\n\t\tself.setProgress(0, 1);\n\t\tif (self.control)\n\t\t\tself.control.resetAll();\n\t};\n\n\tself.play = function () {\n\t\treturn self.runWhenReady(self._play, undefined);\n\t};\n\n\tfunction sleep(ms) {\n\t\treturn new Promise(function (resolve) {\n\t\t\tsetTimeout(resolve, ms)\n\t\t});\n\t}\n\n\tself.runWhenReady = function(fn, arg1) {\n\t\tif (!self.visualObj)\n\t\t\treturn Promise.resolve({status: \"loading\"});\n\t\tif (self.isLoading) {\n\t\t\t// Some other promise is waiting for the tune to be loaded, so just wait.\n\t\t\treturn sleep(500).then(function() {\n\t\t\t\tif (self.isLoading)\n\t\t\t\t\treturn self.runWhenReady(fn, arg1);\n\t\t\t\treturn fn(arg1);\n\t\t\t})\n\t\t} else if (!self.isLoaded) {\n\t\t\treturn self.go().then(function () {\n\t\t\t\treturn fn(arg1);\n\t\t\t});\n\t\t} else {\n\t\t\treturn fn(arg1);\n\t\t}\n\t};\n\n\tself._play = function () {\n\t\treturn activeAudioContext().resume().then(function () {\n\t\t\tself.isStarted = !self.isStarted;\n\t\t\tif (self.isStarted) {\n\t\t\t\tif (self.cursorControl && self.cursorControl.onStart && typeof self.cursorControl.onStart === 'function')\n\t\t\t\t\tself.cursorControl.onStart();\n\t\t\t\tself.midiBuffer.start();\n\t\t\t\tself.timer.start(self.percent);\n\t\t\t\tif (self.control)\n\t\t\t\t\tself.control.pushPlay(true);\n\t\t\t} else {\n\t\t\t\tself.pause();\n\t\t\t}\n\t\t\treturn Promise.resolve({status: \"ok\"});\n\t\t})\n\t};\n\n\tself.pause = function() {\n\t\tif (self.timer) {\n\t\t\tself.timer.pause();\n\t\t\tself.midiBuffer.pause();\n\t\t\tif (self.control)\n\t\t\t\tself.control.pushPlay(false);\n\t\t}\n\t};\n\n\tself.toggleLoop = function () {\n\t\tself.isLooping = !self.isLooping;\n\t\tif (self.control)\n\t\t\tself.control.pushLoop(self.isLooping);\n\t};\n\n\tself.restart = function () {\n\t\tif (self.timer) {\n\t\t\tself.timer.setProgress(0);\n\t\t\tself.midiBuffer.seek(0);\n\t\t}\n\t};\n\n\tself.randomAccess = function (ev) {\n\t\treturn self.runWhenReady(self._randomAccess, ev);\n\t};\n\n\tself._randomAccess = function (ev) {\n\t\tvar background = (ev.target.classList.contains('abcjs-midi-progress-indicator')) ? ev.target.parentNode : ev.target;\n\t\tvar percent = (ev.x - background.getBoundingClientRect().left) / background.offsetWidth;\n\t\tif (percent < 0)\n\t\t\tpercent = 0;\n\t\tif (percent > 1)\n\t\t\tpercent = 1;\n\t\tself.seek(percent);\n\t\treturn Promise.resolve({status: \"ok\"});\n\t};\n\n\tself.seek = function (percent, units) {\n\t\tif (self.timer && self.midiBuffer) {\n\t\t\tself.timer.setProgress(percent, units);\n\t\t\tself.midiBuffer.seek(percent, units);\n\t\t}\n\t};\n\n\tself.setWarp = function (newWarp) {\n\t\tif (parseInt(newWarp, 10) > 0) {\n\t\t\tself.warp = parseInt(newWarp, 10);\n\t\t\tvar wasPlaying = self.isStarted;\n\t\t\tvar startPercent = self.percent;\n\t\t\tself.destroy();\n\t\t\tself.isStarted = false;\n\t\t\treturn self.go().then(function () {\n\t\t\t\tself.setProgress(startPercent, self.midiBuffer.duration * 1000);\n\t\t\t\tif (self.control)\n\t\t\t\t\tself.control.setWarp(self.currentTempo, self.warp);\n\t\t\t\tif (wasPlaying) {\n\t\t\t\t\treturn self.play().then(function () {\n\t\t\t\t\t\tself.seek(startPercent);\n\t\t\t\t\t\treturn Promise.resolve();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tself.seek(startPercent);\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t}\n\t\treturn Promise.resolve();\n\t};\n\n\tself.onWarp = function (ev) {\n\t\tvar newWarp = ev.target.value;\n\t\treturn self.setWarp(newWarp);\n\t};\n\n\tself.setProgress = function (percent, totalTime) {\n\t\tself.percent = percent;\n\t\tif (self.control)\n\t\t\tself.control.setProgress(percent, totalTime);\n\t};\n\n\tself.finished = function () {\n\t\tself.timer.reset();\n\t\tif (self.isLooping) {\n\t\t\tself.timer.start(0);\n\t\t\tself.midiBuffer.finished();\n\t\t\tself.midiBuffer.start();\n\t\t\treturn \"continue\";\n\t\t} else {\n\t\t\tself.timer.stop();\n\t\t\tif (self.isStarted) {\n\t\t\t\tif (self.control)\n\t\t\t\t\tself.control.pushPlay(false);\n\t\t\t\tself.isStarted = false;\n\t\t\t\tself.midiBuffer.finished();\n\t\t\t\tif (self.cursorControl && self.cursorControl.onFinished && typeof self.cursorControl.onFinished === 'function')\n\t\t\t\t\tself.cursorControl.onFinished();\n\t\t\t\tself.setProgress(0, 1);\n\t\t\t}\n\t\t}\n\t};\n\n\tself.beatCallback = function (beatNumber, totalBeats, totalTime, position) {\n\t\tvar percent = beatNumber / totalBeats;\n\t\tself.setProgress(percent, totalTime);\n\t\tif (self.cursorControl && self.cursorControl.onBeat && typeof self.cursorControl.onBeat === 'function')\n\t\t\tself.cursorControl.onBeat(beatNumber, totalBeats, totalTime, position);\n\t};\n\n\tself.eventCallback = function (event) {\n\t\tif (event) {\n\t\t\tif (self.cursorControl && self.cursorControl.onEvent && typeof self.cursorControl.onEvent === 'function')\n\t\t\t\tself.cursorControl.onEvent(event);\n\t\t} else {\n\t\t\treturn self.finished();\n\t\t}\n\t};\n\n\tself.lineEndCallback = function (lineEvent, leftEvent) {\n\t\tif (self.cursorControl && self.cursorControl.onLineEnd && typeof self.cursorControl.onLineEnd === 'function')\n\t\t\tself.cursorControl.onLineEnd(lineEvent, leftEvent);\n\t};\n\n\tself.getUrl = function () {\n\t\treturn self.midiBuffer.download();\n\t};\n\n\tself.download = function(fileName) {\n\t\tvar url = self.getUrl();\n\t\tvar link = document.createElement('a');\n\t\tdocument.body.appendChild(link);\n\t\tlink.setAttribute(\"style\",\"display: none;\");\n\t\tlink.href = url;\n\t\tlink.download = fileName ? fileName : 'output.wav';\n\t\tlink.click();\n\t\twindow.URL.revokeObjectURL(url);\n\t\tdocument.body.removeChild(link);\n\t};\n}\n\nmodule.exports = SynthController;\n","var SynthSequence = function() {\n\tvar self = this;\n\tself.tracks = [];\n\tself.totalDuration = 0;\n\tself.currentInstrument = [];\n\tself.starts = [];\n\n\tself.addTrack = function() {\n\t\tself.tracks.push([]);\n\t\tself.currentInstrument.push(0);\n\t\tself.starts.push(0);\n\t\treturn self.tracks.length - 1;\n\t};\n\n\tself.setInstrument = function(trackNumber, instrumentNumber) {\n\t\tself.tracks[trackNumber].push({\n\t\t\tchannel: 0,\n\t\t\tcmd: \"program\",\n\t\t\tinstrument: instrumentNumber\n\t\t});\n\t\tself.currentInstrument[trackNumber] = instrumentNumber;\n\t};\n\n\tself.appendNote = function(trackNumber, pitch, durationInMeasures, volume, cents) {\n\t\tvar note = {\n\t\t\tcmd: \"note\",\n\t\t\tduration: durationInMeasures,\n\t\t\tgap: 0,\n\t\t\tinstrument: self.currentInstrument[trackNumber],\n\t\t\tpitch: pitch,\n\t\t\tstart: self.starts[trackNumber],\n\t\t\tvolume: volume\n\t\t};\n\t\tif (cents)\n\t\t\tnote.cents = cents;\n\t\tself.tracks[trackNumber].push(note);\n\t\tself.starts[trackNumber] += durationInMeasures;\n\n\t\tself.totalDuration = Math.max(self.totalDuration, self.starts[trackNumber]);\n\t};\n};\n\nmodule.exports = SynthSequence;\n","const {noteToMidi} = require('../../synth/note-to-midi');\nvar TabNote = require('./tab-note');\nvar TabNotes = require('./tab-notes');\n\n\nfunction buildCapo(self) {\n var capoTuning = null;\n var tuning = self.tuning;\n if (self.capo > 0) {\n capoTuning = [];\n for (var iii = 0; iii < tuning.length; iii++) {\n var curNote = new TabNote.TabNote(tuning[iii]);\n for (var jjj = 0; jjj < self.capo; jjj++) {\n curNote = curNote.nextNote();\n }\n capoTuning[iii] = curNote.emit();\n }\n }\n return capoTuning;\n}\n\nfunction buildPatterns(self) {\n var strings = [];\n var tuning = self.tuning;\n if (self.capo > 0) {\n tuning = self.capoTuning;\n }\n var pos = tuning.length - 1;\n for (var iii = 0; iii < tuning.length; iii++) {\n var nextNote = self.highestNote; // highest handled note\n if (iii != tuning.length - 1) {\n nextNote = tuning[iii + 1];\n }\n var tabNotes = new TabNotes(tuning[iii],nextNote);\n var stringNotes = tabNotes.build();\n if (stringNotes.error) {\n return stringNotes;\n }\n strings[pos--] = stringNotes;\n }\n return strings;\n}\n\n\nfunction buildSecond(first) {\n var seconds = [];\n seconds[0] = [];\n var strings = first.strings;\n for (var iii = 1; iii < strings.length; iii++) {\n seconds[iii] = strings[iii - 1];\n }\n return seconds;\n}\n\nfunction sameString(self, chord) {\n for (var jjjj = 0; jjjj < chord.length - 1; jjjj++) {\n var curPos = chord[jjjj];\n var nextPos = chord[jjjj + 1];\n if (curPos.str == nextPos.str) {\n // same String\n // => change lower pos \n if (curPos.str == self.strings.length - 1) {\n // Invalid tab Chord position for instrument\n curPos.num = \"?\";\n nextPos.num = \"?\"; \n return; \n }\n // change lower pitch on lowest string\n if (nextPos.num < curPos.num) {\n nextPos.str++;\n nextPos = noteToNumber(self,\n nextPos.note,\n nextPos.str,\n self.secondPos,\n self.strings[nextPos.str].length\n );\n } else {\n curPos.str++;\n curPos = noteToNumber(self,\n curPos.note,\n curPos.str,\n self.secondPos,\n self.strings[curPos.str].length\n );\n }\n // update table\n chord[jjjj] = curPos;\n chord[jjjj + 1] = nextPos;\n }\n }\n return null;\n}\n\nfunction handleChordNotes(self, notes) {\n var retNotes = [];\n for (var iiii = 0; iiii < notes.length; iiii++) {\n if (notes[iiii].endTie)\n continue;\n var note = new TabNote.TabNote(notes[iiii].name, self.clefTranspose);\n note.checkKeyAccidentals(self.accidentals, self.measureAccidentals)\n var curPos = toNumber(self, note);\n retNotes.push(curPos);\n }\n sameString(self, retNotes);\n return retNotes;\n}\n\nfunction noteToNumber(self, note, stringNumber, secondPosition , firstSize) {\n var strings = self.strings;\n note.checkKeyAccidentals(self.accidentals, self.measureAccidentals) ;\n if (secondPosition) {\n strings = secondPosition;\n }\n var noteName = note.emitNoAccidentals();\n var num = strings[stringNumber].indexOf(noteName);\n var acc = note.acc;\n if (num != -1) {\n if (secondPosition) {\n num += firstSize;\n }\n if ( (note.isFlat || note.acc == -1) && (num == 0)) {\n // flat on 0 pos => previous string 7th position\n var noteEquiv = note.getAccidentalEquiv();\n stringNumber++;\n num = strings[stringNumber].indexOf(noteEquiv.emit());\n acc = 0;\n }\n return {\n num: (num + acc),\n str: stringNumber,\n note: note\n };\n }\n return null;\n}\n\nfunction toNumber(self, note) {\n if (note.isAltered || note.natural) {\n var acc;\n if (note.isFlat) {\n if (note.isDouble)\n acc = \"__\"\n else\n acc = \"_\" \n } else if (note.isSharp) {\n if (note.isDouble)\n acc = \"^^\"\n else\n acc = \"^\" \n } else if (note.natural)\n acc = \"=\"\n self.measureAccidentals[note.name.toUpperCase()] = acc \n }\n for (var i = self.stringPitches.length-1; i >= 0; i--) {\n if (note.pitch + note.pitchAltered >= self.stringPitches[i]) {\n var num = note.pitch + note.pitchAltered - self.stringPitches[i]\n if (note.quarter === '^') num -= 0.5\n else if (note.quarter === \"v\") num += 0.5\n return {\n num: Math.round(num),\n str: self.stringPitches.length-1-i, // reverse the strings because string 0 is on the bottom\n note: note\n }\n }\n }\n return {\n num: \"?\",\n str: self.stringPitches.length-1,\n note: note,\n };\n}\n\nStringPatterns.prototype.stringToPitch = function (stringNumber) {\n var startingPitch = 5.3;\n var bottom = this.strings.length - 1;\n return startingPitch + ((bottom - stringNumber) * this.linePitch);\n};\n\nfunction invalidNumber( retNotes , note ) {\n var number = {\n num: \"?\",\n str: 0,\n note: note\n };\n retNotes.push(number);\n retNotes.error = note.emit() + ': unexpected note for instrument' ;\n} \n\nStringPatterns.prototype.notesToNumber = function (notes, graces) {\n var note;\n var number;\n var error = null; \n var retNotes = null;\n if (notes) {\n retNotes = [];\n if (notes.length > 1) {\n retNotes = handleChordNotes(this, notes);\n if (retNotes.error) {\n error = retNotes.error;\n }\n } else {\n if (!notes[0].endTie) {\n note = new TabNote.TabNote(notes[0].name, this.clefTranspose);\n note.checkKeyAccidentals(this.accidentals, this.measureAccidentals)\n number = toNumber(this, note);\n if (number) {\n retNotes.push(number);\n } else {\n invalidNumber(retNotes, note);\n error = retNotes.error;\n }\n }\n }\n } \n if (error) return retNotes;\n var retGraces = null;\n if (graces) {\n retGraces = [];\n for (var iiii = 0; iiii < graces.length; iiii++) {\n note = new TabNote.TabNote(graces[iiii].name, this.clefTranspose);\n note.checkKeyAccidentals(this.accidentals, this.measureAccidentals)\n number = toNumber(this, note);\n if (number) {\n retGraces.push(number);\n } else {\n invalidNumber(retGraces, note);\n error = retNotes.error;\n }\n }\n }\n \n return {\n notes: retNotes,\n graces: retGraces,\n error: error\n };\n};\n\nStringPatterns.prototype.toString = function () {\n var arr = []\n for (var i = 0; i < this.tuning.length; i++) {\n var str = this.tuning[i].replaceAll(',', '').replaceAll(\"'\", '').toUpperCase();\n if (str[0] === '_') str = str[1] + 'b '\n else if (str[0] === '^') str = str[1] + \"# \"\n arr.push(str)\n }\n return arr.join('');\n};\n\nStringPatterns.prototype.tabInfos = function (plugin) {\n var _super = plugin._super;\n var name = _super.params.label;\n if (name) {\n var tunePos = name.indexOf('%T');\n var tuning = \"\";\n if (tunePos != -1) {\n tuning = this.toString();\n if (plugin.capo > 0) {\n tuning += ' capo:' + plugin.capo;\n }\n name = name.replace('%T', tuning);\n }\n return name;\n }\n return '';\n};\n\n// MAE 27 Nov 2023\nStringPatterns.prototype.suppress = function (plugin) {\n var _super = plugin._super;\n var suppress = _super.params.suppress;\n if (suppress){\n return true;\n }\n return false;\n};\n// MAE 27 Nov 2023 End\n\n/**\n * Common patterns for all string instruments\n * @param {} plugin\n * @param {} tuning\n * @param {*} capo\n * @param {*} highestNote \n */\nfunction StringPatterns(plugin) {\n var tuning = plugin.tuning;\n var capo = plugin.capo;\n var highestNote = plugin._super.params.highestNote;\n this.linePitch = plugin.linePitch;\n this.highestNote = \"a'\";\n if (highestNote) {\n // override default\n this.highestNote = highestNote;\n }\n this.measureAccidentals = {}\n this.capo = 0;\n if (capo) {\n this.capo = parseInt(capo,10);\n }\n this.transpose = plugin.transpose ? plugin.transpose : 0\n this.tuning = tuning;\n this.stringPitches = []\n for (var i = 0; i < this.tuning.length; i++) {\n var pitch = noteToMidi(this.tuning[i]) + this.capo\n this.stringPitches.push(pitch)\n }\n if (this.capo > 0) {\n this.capoTuning = buildCapo(this);\n }\n this.strings = buildPatterns(this);\n if (this.strings.error) {\n plugin._super.setError(this.strings.error);\n plugin.inError = true;\n return;\n }\n // second position pattern per string\n this.secondPos = buildSecond(this);\n}\n\n\n\nmodule.exports = StringPatterns;","\n/**\n * Layout tablature informations for draw\n * @param {*} numLines \n * @param {*} lineSpace \n */\n\nfunction StringTablature(numLines, lineSpace) {\n this.numLines = numLines;\n this.lineSpace = lineSpace;\n this.verticalSize = this.numLines * this.lineSpace;\n var pitch = 3;\n this.bar = {\n pitch: pitch,\n pitch2: lineSpace * numLines,\n height: 5,\n };\n}\n\n/**\n * return true if current line should not produce a tab\n * @param {} line \n */\nStringTablature.prototype.bypass = function (line) {\n var voices = line.staffGroup.voices;\n if (voices.length > 0) {\n if (voices[0].isPercussion) return true;\n }\n return false;\n}; \n\n\nStringTablature.prototype.setRelative = function (child, relative, first) {\n switch (child.type) {\n case 'bar':\n relative.pitch = this.bar.pitch;\n relative.pitch2 = this.bar.pitch2;\n relative.height = this.height;\n break;\n case 'symbol':\n var top = this.bar.pitch2 / 2;\n if (child.name == 'dots.dot') {\n if (first) {\n relative.pitch = top;\n return false;\n } else {\n relative.pitch = top + this.lineSpace;\n return true;\n }\n }\n break;\n }\n return first;\n};\n\nmodule.exports = StringTablature;","var {noteToMidi, midiToNote} = require('../../synth/note-to-midi');\n\n/**\n * \n * Note structure for Tabs\n * \n */\nvar notes = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];\n\n\nfunction TabNote(note, clefTranspose) {\n var pitch = noteToMidi(note)\n if (clefTranspose)\n pitch += clefTranspose\n var newNote = midiToNote(pitch);\n var isFlat = false;\n var isSharp = false;\n var isAltered = false;\n var natural = null;\n var quarter = null;\n var isDouble = false;\n var acc = 0;\n\n if (note.startsWith('_')) {\n isFlat = true;\n acc = -1;\n // check quarter flat\n if (note[1] == '/') {\n isFlat = false;\n quarter = \"v\";\n acc = 0;\n } else if (note[1] == '_') {\n // double flat\n isDouble = true;\n acc -= 1;\n }\n } else if (note.startsWith('^')) {\n isSharp = true;\n acc = +1;\n // check quarter sharp\n if (note[1] == '/') {\n isSharp = false;\n quarter = \"^\";\n acc = 0;\n } else if (note[1] == '^') {\n // double sharp\n isDouble = true;\n acc += 1;\n }\n } else if (note.startsWith('=')) {\n natural = true;\n acc = 0;\n }\n isAltered = isFlat || isSharp || (quarter != null);\n if (isAltered || natural) {\n if ((quarter != null) || (isDouble)) {\n newNote = note.slice(2);\n } else {\n newNote = note.slice(1);\n }\n }\n var hasComma = (newNote.match(/,/g) || []).length;\n var hasQuote = (newNote.match(/'/g) || []).length;\n\n this.pitch = pitch\n this.pitchAltered = 0\n this.name = newNote;\n this.acc = acc;\n this.isSharp = isSharp;\n this.isKeySharp = false;\n this.isDouble = isDouble;\n this.isAltered = isAltered;\n this.isFlat = isFlat;\n this.isKeyFlat = false;\n this.natural = natural;\n this.quarter = quarter;\n this.isLower = (this.name == this.name.toLowerCase());\n this.name = this.name[0].toUpperCase();\n this.hasComma = hasComma;\n this.isQuoted = hasQuote;\n}\n\nfunction cloneNote(self) {\n var newNote = self.name;\n var newTabNote = new TabNote(newNote);\n newTabNote.pitch = self.pitch;\n newTabNote.hasComma = self.hasComma;\n newTabNote.isLower = self.isLower;\n newTabNote.isQuoted = self.isQuoted;\n newTabNote.isSharp = self.isSharp;\n newTabNote.isKeySharp = self.isKeySharp;\n newTabNote.isFlat = self.isFlat;\n newTabNote.isKeyFlat = self.isKeyFlat;\n return newTabNote;\n} \nTabNote.prototype.sameNoteAs = function (note) {\n return note.pitch === this.pitch\n};\n\nTabNote.prototype.isLowerThan = function (note) {\n return note.pitch > this.pitch\n};\n\nTabNote.prototype.checkKeyAccidentals = function(accidentals, measureAccidentals) {\n if (this.isAltered || this.natural)\n return\n if (measureAccidentals[this.name.toUpperCase()]) {\n switch (measureAccidentals[this.name.toUpperCase()]) {\n case \"__\": this.acc = -2; this.pitchAltered = -2; return;\n case \"_\": this.acc = -1; this.pitchAltered = -1; return;\n case \"=\": this.acc = 0; this.pitchAltered = 0; return;\n case \"^\": this.acc = 1; this.pitchAltered = 1; return;\n case \"^^\": this.acc = 2; this.pitchAltered = 2; return;\n }\n } else if (accidentals) {\n var curNote = this.name;\n for (var iii = 0; iii < accidentals.length; iii++) {\n var curAccidentals = accidentals[iii];\n if (curNote == curAccidentals.note.toUpperCase()) {\n if (curAccidentals.acc == 'flat') {\n this.acc = -1;\n this.isKeyFlat = true;\n this.pitchAltered = -1\n }\n if (curAccidentals.acc == 'sharp') {\n this.acc = +1;\n this.isKeySharp = true;\n this.pitchAltered = 1\n }\n }\n }\n }\n};\n\nTabNote.prototype.getAccidentalEquiv = function () {\n var cloned = cloneNote(this);\n if (cloned.isSharp || cloned.isKeySharp ) {\n cloned = cloned.nextNote();\n cloned.isFlat = true;\n cloned.isSharp = false;\n cloned.isKeySharp = false;\n } else if (cloned.isFlat || cloned.isKeyFlat ) {\n cloned = cloned.prevNote();\n cloned.isSharp = true;\n cloned.isFlat = false;\n cloned.isKeyFlat = false;\n }\n return cloned;\n};\n\n\nTabNote.prototype.nextNote = function () {\n var note = midiToNote(this.pitch+1+this.pitchAltered)\n return new TabNote(note)\n};\n\nTabNote.prototype.prevNote = function () {\n var note = midiToNote(this.pitch-1+this.pitchAltered)\n return new TabNote(note)\n};\n\nTabNote.prototype.emitNoAccidentals = function ( ) {\n var returned = this.name;\n if (this.isLower) {\n returned = returned.toLowerCase();\n }\n for (var ii = 0; ii < this.isQuoted; ii++) {\n returned += \"'\";\n }\n for (var jj = 0; jj < this.hasComma; jj++) {\n returned += \",\";\n }\n return returned;\n};\n\nTabNote.prototype.emit = function () {\n var returned = this.name;\n if (this.isSharp || this.isKeySharp ) {\n returned = '^' + returned;\n if (this.isDouble) {\n returned = '^' + returned;\n }\n }\n if (this.isFlat || this.isKeyFlat) {\n returned = '_' + returned;\n if (this.isDouble) {\n returned = '_' + returned;\n }\n }\n if (this.quarter) {\n if (this.quarter == \"^\") {\n returned = \"^/\" + returned;\n } else {\n returned = \"_/\" + returned;\n }\n }\n if (this.natural) {\n returned = '=' + returned;\n }\n for (var ii = 1; ii <= this.hasComma; ii++) {\n returned += ',';\n }\n \n if (this.isLower) {\n returned = returned.toLowerCase();\n for (var jj = 1; jj <= this.isQuoted; jj++) {\n returned += \"'\";\n }\n }\n return returned;\n};\n\nmodule.exports = {\n 'TabNote': TabNote,\n 'notes': notes\n};","\nvar TabNote = require('./tab-note');\n\nvar notes = TabNote.notes;\n\nfunction TabNotes(fromNote, toNote) {\n this.fromN = new TabNote.TabNote(fromNote);\n this.toN = new TabNote.TabNote(toNote);\n}\n\n\nTabNotes.prototype.build = function () {\n var fromN = this.fromN;\n var toN = this.toN;\n // check that toN is not lower than fromN\n if (toN.isLowerThan(fromN)) {\n var from = fromN.emit();\n var tn = toN.emit();\n return {\n error: 'Invalid string Instrument tuning : ' +\n tn + ' string lower than ' + from + ' string'\n };\n }\n var buildReturned = [];\n var startIndex = notes.indexOf(fromN.name);\n var toIndex = notes.indexOf(toN.name);\n if ((startIndex == -1) || (toIndex == -1)) {\n return buildReturned;\n }\n var finished = false;\n while (!finished) {\n buildReturned.push(fromN.emit());\n fromN = fromN.nextNote();\n if (fromN.sameNoteAs(toN)) {\n finished = true;\n }\n }\n return buildReturned;\n};\n\nmodule.exports = TabNotes;\n","var StringPatterns = require('./string-patterns');\n\nfunction TabStringPatterns(plugin, defaultTuning) {\n this.tuning = plugin._super.params.tuning;\n if (!this.tuning) {\n this.tuning = defaultTuning;\n }\n plugin.tuning = this.tuning;\n this.strings = new StringPatterns(plugin);\n}\n\nTabStringPatterns.prototype.notesToNumber = function (notes, graces) {\n var converter = this.strings;\n return converter.notesToNumber(notes, graces);\n};\n\nTabStringPatterns.prototype.stringToPitch = function (stringNumber) {\n var converter = this.strings;\n return converter.stringToPitch(stringNumber);\n};\n\n\nmodule.exports = TabStringPatterns;\n","\nvar StringTablature = require('./string-tablature');\nvar TabCommon = require('../tab-common');\nvar TabRenderer = require('../tab-renderer');\nvar TabStringPatterns = require('./tab-string-patterns');\n\n\n/**\n * upon init mainly store provided instances for later usage\n * @param {*} abcTune the parsed tune AST tree\n* @param {*} tuneNumber the parsed tune AST tree\n * @param {*} params complementary args provided to Tablature Plugin\n */\nPlugin.prototype.init = function (abcTune, tuneNumber, params, staffNumber, tabSettings) {\n var _super = new TabCommon(abcTune, tuneNumber, params);\n this.abcTune = abcTune;\n this._super = _super;\n this.linePitch = 3;\n this.nbLines = tabSettings.defaultTuning.length;\n this.isTabBig = tabSettings.isTabBig;\n this.tabSymbolOffset = tabSettings.tabSymbolOffset;\n this.capo = params.capo;\n this.transpose = params.visualTranspose;\n this.hideTabSymbol = params.hideTabSymbol;\n this.tablature = new StringTablature(this.nbLines,\n this.linePitch);\n var semantics = new TabStringPatterns(this, tabSettings.defaultTuning);\n this.semantics = semantics;\n};\n\nPlugin.prototype.render = function (renderer, line, staffIndex) {\n if (this._super.inError) return;\n if (this.tablature.bypass(line)) return;\n var rndrer = new TabRenderer(this, renderer, line, staffIndex);\n rndrer.doLayout();\n};\n\nfunction Plugin() {}\n\n//\n// Tablature plugin definition\n//\nvar AbcStringTab = function () {\n return { name: 'StringTab', tablature: Plugin };\n};\n\nmodule.exports = AbcStringTab;\n","/**\n * Tablature Absolute elements factory\n */\nvar AbsoluteElement = require('../write/creation/elements/absolute-element');\nvar RelativeElement = require('../write/creation/elements/relative-element');\n\nfunction isObject(a) { return a != null && a.constructor === Object; }\nfunction cloneObject(dest, src) {\n for (var prop in src) {\n if (src.hasOwnProperty(prop)) {\n if (!(Array.isArray(src[prop]) || isObject(src[prop]))) {\n dest[prop] = src[prop];\n }\n }\n }\n}\n\nfunction cloneAbsolute(absSrc) {\n var returned = new AbsoluteElement('', 0, 0, '', 0);\n cloneObject(returned, absSrc);\n returned.top = 0;\n returned.bottom = -1;\n if (absSrc.abcelem) {\n returned.abcelem = {};\n cloneObject(returned.abcelem, absSrc.abcelem);\n if (returned.abcelem.el_type === \"note\")\n returned.abcelem.el_type = 'tabNumber';\n }\n // TODO-PER: This fixes the classes because the element isn't created at the right time.\n absSrc.cloned = returned\n return returned;\n}\n\nfunction cloneAbsoluteAndRelatives(absSrc, plugin) {\n var returned = cloneAbsolute(absSrc);\n if (plugin) {\n var children = absSrc.children;\n // proceed with relative as well\n var first = true;\n for (var ii = 0; ii < children.length; ii++) {\n var child = children[ii];\n var relative = new RelativeElement('', 0, 0, 0, '');\n cloneObject(relative, child);\n first = plugin.tablature.setRelative(child, relative, first);\n returned.children.push(relative);\n }\n }\n return returned;\n}\n\nfunction buildTabAbsolute(plugin, absX, relX) {\n var tabIcon = 'tab.tiny';\n var tabYPos = 7.5;\n if (plugin.isTabBig) {\n tabIcon = 'tab.big';\n tabYPos = 10;\n }\n var element = {\n el_type: \"tab\",\n icon: tabIcon,\n Ypos: tabYPos\n };\n\n // Offset the TAB symbol position if specified in the tab description\n tabYPos += plugin.tabSymbolOffset;\n\n // For tablature like whistle tab where you want the TAB symbol hidden\n if (!plugin.hideTabSymbol){\n\n var tabAbsolute = new AbsoluteElement(element, 0, 0, \"symbol\", 0);\n tabAbsolute.x = absX;\n var tabRelative = new RelativeElement(tabIcon, 0, 0, 7.5, \"tab\");\n tabRelative.x = relX;\n tabAbsolute.children.push(tabRelative);\n if (tabAbsolute.abcelem.el_type == 'tab') {\n tabRelative.pitch = tabYPos;\n }\n \n }\n return tabAbsolute;\n}\n\nfunction lyricsDim(abs) {\n if (abs.extra) {\n for (var ii = 0; ii < abs.extra.length; ii++) {\n var extra = abs.extra[ii];\n if (extra.type == 'lyric') {\n return {\n bottom: extra.bottom,\n height: extra.height\n };\n }\n }\n }\n return null;\n}\nfunction TabAbsoluteElements() {\n this.accidentals = null;\n}\n\nfunction getInitialStaffSize(staffGroup) {\n var returned = 0;\n for (var ii = 0; ii < staffGroup.length; ii++) {\n if (!staffGroup[ii].tabNameInfos) returned++;\n }\n return returned;\n}\n\nfunction buildRelativeTabNote(plugin, relX, def, curNote, isGrace) {\n var strNote = curNote.num;\n if (curNote.note.quarter != null) {\n // add tab quarter => needs to string conversion then \n strNote = strNote.toString();\n strNote += curNote.note.quarter;\n }\n var pitch = plugin.semantics.stringToPitch(curNote.str);\n def.notes.push({ num: strNote, str: curNote.str, pitch: curNote.note.emit() });\n var opt = {\n type: 'tabNumber'\n };\n var tabNoteRelative = new RelativeElement(\n strNote, 0, 0, pitch+0.3, opt);\n tabNoteRelative.x = relX;\n tabNoteRelative.isGrace = isGrace;\n tabNoteRelative.isAltered = curNote.note.isAltered;\n return tabNoteRelative;\n}\n\nfunction getXGrace(abs, index) {\n var found = 0;\n if (abs.extra) {\n for (var ii = 0; ii < abs.extra.length; ii++) {\n if (abs.extra[ii].c.indexOf('noteheads') >= 0) {\n if (found === index) {\n return abs.extra[ii].x + abs.extra[ii].w/2;\n } else {\n found++;\n }\n }\n }\n }\n return -1;\n}\n\nfunction graceInRest( absElem ) {\n if (absElem.abcelem) {\n var elem = absElem.abcelem; \n if (elem.rest) {\n return elem.gracenotes;\n }\n }\n return null;\n}\n\nfunction convertToNumber(plugin, pitches, graceNotes) {\n var tabPos = plugin.semantics.notesToNumber(pitches, graceNotes);\n if (tabPos.error) {\n plugin._super.setError(tabPos.error);\n return tabPos; // give up on error here\n }\n if (tabPos.graces && tabPos.notes) {\n // add graces to last note in notes\n var posNote = tabPos.notes.length - 1;\n tabPos.notes[posNote].graces = tabPos.graces;\n }\n return tabPos;\n}\n\nfunction buildGraceRelativesForRest(plugin,abs,absChild,graceNotes,tabVoice) {\n for (var mm = 0; mm < graceNotes.length; mm++) {\n var defGrace = { el_type: \"note\", startChar: absChild.abcelem.startChar, endChar: absChild.abcelem.endChar, notes: [], grace: true };\n var graceX = getXGrace(absChild, mm);\n var curGrace = graceNotes[mm];\n var tabGraceRelative = buildRelativeTabNote(plugin, graceX, defGrace, curGrace, true);\n abs.children.push(tabGraceRelative);\n tabVoice.push(defGrace);\n }\n}\n\n/**\n * Build tab absolutes by scanning current staff line absolute array\n * @param {*} staffAbsolute\n */\nTabAbsoluteElements.prototype.build = function (plugin,\n staffAbsolute,\n tabVoice,\n voiceIndex,\n staffIndex,\n keySig,\n tabVoiceIndex ) {\n var staffSize = getInitialStaffSize(staffAbsolute);\n var source = staffAbsolute[staffIndex+voiceIndex];\n var dest = staffAbsolute[tabVoiceIndex];\n var tabPos = null;\n var defNote = null;\n if (source.children[0].abcelem.el_type != 'clef') {\n // keysig missing => provide one for tabs\n if (keySig != 'none') {\n source.children.splice(0, 0, keySig);\n } \n }\n for (var ii = 0; ii < source.children.length; ii++) {\n var absChild = source.children[ii];\n var absX = absChild.x;\n var relX = absX;\n // if (absChild.children.length > 0) {\n // relX = absChild.children[0].x;\n // }\n if ( (absChild.isClef) ) {\n dest.children.push(buildTabAbsolute(plugin, absX, relX));\n if (absChild.abcelem.type.indexOf('-8') >= 0) plugin.semantics.strings.clefTranspose = -12\n if (absChild.abcelem.type.indexOf('+8') >= 0) plugin.semantics.strings.clefTranspose = 12\n }\n switch (absChild.type) {\n case 'staff-extra key-signature':\n // refresh key accidentals\n this.accidentals = absChild.abcelem.accidentals;\n plugin.semantics.strings.accidentals = this.accidentals;\n break;\n case 'bar':\n plugin.semantics.strings.measureAccidentals = {}\n var lastBar = false;\n if (ii === source.children.length-1) {\n // used for final line bar drawing\n // for multi tabs / multi staves\n lastBar = true;\n }\n var cloned = cloneAbsoluteAndRelatives(absChild, plugin);\n if (cloned.abcelem.barNumber) {\n delete cloned.abcelem.barNumber;\n for (var bn = 0; bn < cloned.children.length; bn++) {\n if (cloned.children[bn].type === \"barNumber\" ) {\n cloned.children.splice(bn, 1);\n break;\n }\n }\n }\n cloned.abcelem.lastBar = lastBar;\n dest.children.push(cloned);\n tabVoice.push({\n el_type: absChild.abcelem.el_type,\n type: absChild.abcelem.type,\n endChar: absChild.abcelem.endChar,\n startChar: absChild.abcelem.startChar,\n abselem: cloned\n });\n break;\n case 'rest':\n var restGraces = graceInRest(absChild);\n if (restGraces) {\n // to number conversion \n tabPos = convertToNumber(plugin, null, restGraces);\n if (tabPos.error) return;\n // build relative for grace\n defGrace = { el_type: \"note\", startChar: absChild.abcelem.startChar, endChar: absChild.abcelem.endChar, notes: [], grace: true };\n buildGraceRelativesForRest(plugin, abs, absChild, tabPos.graces, tabVoice);\n }\n break;\n case 'note':\n var abs = cloneAbsolute(absChild);\n abs.x = absChild.heads[0].x + absChild.heads[0].w / 2; // center the number\n abs.lyricDim = lyricsDim(absChild);\n var pitches = absChild.abcelem.pitches;\n var graceNotes = absChild.abcelem.gracenotes;\n abs.type = 'tabNumber';\n // to number conversion \n tabPos = convertToNumber(plugin, pitches, graceNotes); \n if (tabPos.error) return;\n if (tabPos.graces) {\n // add graces to last note in notes\n var posNote = tabPos.notes.length - 1;\n tabPos.notes[posNote].graces = tabPos.graces;\n }\n // build relative\n defNote = { el_type: \"note\", startChar: absChild.abcelem.startChar, endChar: absChild.abcelem.endChar, notes: [] };\n for (var ll = 0; ll < tabPos.notes.length; ll++) {\n var curNote = tabPos.notes[ll];\n if (curNote.graces) {\n for (var mm = 0; mm < curNote.graces.length; mm++) {\n var defGrace = { el_type: \"note\", startChar: absChild.abcelem.startChar, endChar: absChild.abcelem.endChar, notes: [], grace: true };\n var graceX = getXGrace(absChild , mm);\n var curGrace = curNote.graces[mm];\n var tabGraceRelative = buildRelativeTabNote(plugin, graceX, defGrace, curGrace, true);\n abs.children.push(tabGraceRelative);\n tabVoice.push(defGrace);\n }\n }\n var tabNoteRelative = buildRelativeTabNote(plugin, abs.x+absChild.heads[ll].dx, defNote, curNote, false);\n abs.children.push(tabNoteRelative);\n }\n if (defNote.notes.length > 0) {\n defNote.abselem = abs;\n tabVoice.push(defNote);\n dest.children.push(abs);\n }\n break;\n }\n }\n};\n\nmodule.exports = TabAbsoluteElements;\n","/**\n *\n * Common Class/Method available for all instruments\n *\n */\n\nfunction TabCommon(abcTune, tuneNumber, params) {\n this.tune = abcTune;\n this.params = params;\n this.tuneNumber = tuneNumber;\n this.inError = false;\n}\n\n\nTabCommon.prototype.setError = function (error) {\n var tune = this.tune;\n if (error) {\n this.error = error;\n this.inError = true;\n if (tune.warnings) {\n tune.warnings.push(error);\n } else {\n tune.warnings = [error];\n }\n }\n};\n\n\nmodule.exports = TabCommon;\n","/* eslint-disable no-debugger */\nvar VoiceElement = require('../write/creation/elements/voice-element');\nvar TabAbsoluteElements = require('./tab-absolute-elements');\nvar spacing = require('../write/helpers/spacing');\n\nfunction initSpecialY() {\n return {\n tempoHeightAbove: 0,\n partHeightAbove: 0,\n volumeHeightAbove: 0,\n dynamicHeightAbove: 0,\n endingHeightAbove: 0,\n chordHeightAbove: 0,\n lyricHeightAbove: 0,\n lyricHeightBelow: 0,\n chordHeightBelow: 0,\n volumeHeightBelow: 0,\n dynamicHeightBelow: 0\n };\n}\n\nfunction getLyricHeight(voice) {\n var maxLyricHeight = 0;\n for (var ii = 0; ii < voice.children.length; ii++) {\n var curAbs = voice.children[ii];\n if (curAbs.specialY) {\n if (curAbs.specialY.lyricHeightBelow > maxLyricHeight) {\n maxLyricHeight = curAbs.specialY.lyricHeightBelow;\n }\n }\n }\n return maxLyricHeight; // add spacing\n}\n\nfunction buildTabName(self, dest) {\n var stringSemantics = self.plugin.semantics.strings;\n var controller = self.renderer.controller;\n var textSize = controller.getTextSize;\n var tabName = stringSemantics.tabInfos(self.plugin);\n var suppress = stringSemantics.suppress(self.plugin);\n var doDraw = true;\n\n if (suppress){\n doDraw = false\n }\n\n \n if (doDraw){\n var size = textSize.calc(tabName, 'tablabelfont', 'text instrumentname'); \n dest.tabNameInfos = {\n textSize: {height:size.height,width:size.width},\n name: tabName\n };\n return size.height;\n }\n return 0\n\n}\n\n/**\n * Laying out tabs\n * @param {*} renderer\n * @param {*} line\n * @param {*} staffIndex\n * @param {*} tablatureLayout\n */\nfunction TabRenderer(plugin, renderer, line, staffIndex) {\n this.renderer = renderer;\n this.plugin = plugin;\n this.line = line;\n this.absolutes = new TabAbsoluteElements();\n this.staffIndex = staffIndex ;\n this.tabStaff = {\n clef: {\n type: 'TAB'\n }\n };\n this.tabSize = (plugin.linePitch * plugin.nbLines);\n}\n\nfunction islastTabInStaff(index, staffGroup) {\n if (staffGroup[index].isTabStaff) {\n if (index === staffGroup.length - 1) return true;\n if (staffGroup[index + 1].isTabStaff) {\n return false; \n } else {\n return true;\n }\n }\n return false;\n}\n\nfunction getStaffNumbers(staffs) {\n var nbStaffs = 0; \n for (var ii = 0; ii < staffs.length; ii++) {\n if (!staffs[ii].isTabStaff) {\n nbStaffs++;\n }\n }\n return nbStaffs;\n}\n\nfunction getParentStaffIndex(staffs, index) {\n for (var ii = index; ii >= 0; ii--) {\n if (!staffs[ii].isTabStaff) {\n return ii;\n }\n }\n return -1;\n}\n\n\nfunction linkStaffAndTabs(staffs) {\n for (var ii = 0; ii < staffs.length; ii++) {\n if (staffs[ii].isTabStaff) {\n // link to parent staff\n var parentIndex = getParentStaffIndex(staffs, ii);\n staffs[ii].hasStaff = staffs[parentIndex];\n if (!staffs[parentIndex].hasTab) staffs[parentIndex].hasTab = [];\n staffs[parentIndex].hasTab.push(staffs[ii]);\n }\n }\n}\n\nfunction isMultiVoiceSingleStaff(staffs , parent) {\n if ( getStaffNumbers(staffs) === 1) {\n if (parent.voices.length > 1) return true;\n }\n return false;\n}\n\n\nfunction getNextTabPos(self,staffGroup) {\n var tabIndex = self.staffIndex;\n var startIndex = 0;\n var handledVoices = 0;\n var inProgress = true;\n var nbVoices = 0;\n while (inProgress) {\n //for (var ii = 0; ii < staffGroup.length; ii++) {\n if (!staffGroup[startIndex])\n return -1;\n if (!staffGroup[startIndex].isTabStaff) {\n nbVoices = staffGroup[startIndex].voices.length; // get number of staff voices\n }\n if (staffGroup[startIndex].isTabStaff) {\n handledVoices++;\n if (islastTabInStaff(startIndex, staffGroup)) {\n if (handledVoices < nbVoices) return startIndex + 1;\n }\n } else {\n handledVoices = 0;\n if (startIndex >= tabIndex) {\n if (startIndex+1 == staffGroup.length) return startIndex +1;\n if (!staffGroup[startIndex + 1].isTabStaff) return startIndex + 1;\n }\n }\n startIndex++;\n // out of space case\n if (startIndex > staffGroup.length) return -1;\n }\n}\n\nfunction getLastStaff(staffs, lastTab) {\n for (var ii = lastTab; ii >= 0 ; ii-- ) {\n if (!staffs[ii].isTabStaff) {\n return staffs[ii];\n }\n }\n return null; \n}\n\nfunction checkVoiceKeySig(voices, ii) {\n var curVoice = voices[ii];\n // on multivoice multistaff only the first voice has key signature\n // folling consecutive do not have one => we should provide the first voice key sig back then\n var elem0 = curVoice.children[0].abcelem;\n if (elem0.el_type === 'clef') return null;\n if (ii == 0) {\n // not found => clef=none case\n return 'none';\n }\n return voices[ii-1].children[0];\n}\n\nTabRenderer.prototype.doLayout = function () {\n var staffs = this.line.staff;\n if (staffs) {\n // give up on staffline=0 in key \n var firstStaff = staffs[0];\n if (firstStaff) {\n if (firstStaff.clef) {\n if (firstStaff.clef.stafflines == 0) {\n this.plugin._super.setError(\"No tablatures when stafflines=0\");\n return; \n }\n }\n }\n staffs.splice(\n staffs.length, 0,\n this.tabStaff\n );\n }\n var staffGroup = this.line.staffGroup;\n\n var voices = staffGroup.voices;\n var firstVoice = voices[0];\n // take lyrics into account if any\n var lyricsHeight = getLyricHeight(firstVoice);\n var padd = 3;\n var prevIndex = this.staffIndex;\n var previousStaff = staffGroup.staffs[prevIndex];\n var tabTop = this.tabSize + padd - previousStaff.bottom - lyricsHeight;\n if (previousStaff.isTabStaff) {\n tabTop = previousStaff.top;\n }\n var staffGroupInfos = {\n bottom: -1,\n isTabStaff: true,\n specialY: initSpecialY(),\n lines: this.plugin.nbLines,\n linePitch: this.plugin.linePitch,\n dy: 0.15,\n top: tabTop,\n };\n var nextTabPos = getNextTabPos(this,staffGroup.staffs);\n if (nextTabPos === -1)\n return;\n staffGroupInfos.parentIndex = nextTabPos - 1;\n staffGroup.staffs.splice(nextTabPos, 0, staffGroupInfos);\n // staffGroup.staffs.push(staffGroupInfos);\n staffGroup.height += this.tabSize + padd;\n var parentStaff = getLastStaff(staffGroup.staffs, nextTabPos); \n var nbVoices = 1;\n if (isMultiVoiceSingleStaff(staffGroup.staffs,parentStaff)) {\n nbVoices = parentStaff.voices.length;\n } \n // build from staff\n this.tabStaff.voices = [];\n for (var ii = 0; ii < nbVoices; ii++) {\n var tabVoice = new VoiceElement(0, 0);\n if (ii > 0) tabVoice.duplicate = true;\n var nameHeight = buildTabName(this, tabVoice) / spacing.STEP;\n nameHeight = Math.max(nameHeight, 1) // If there is no label for the tab line, then there needs to be a little padding\n // This was pushing down the top staff by the tab label height\n //staffGroup.staffs[this.staffIndex].top += nameHeight;\n staffGroup.staffs[this.staffIndex].top += 1;\n staffGroup.height += nameHeight;\n tabVoice.staff = staffGroupInfos;\n var tabVoiceIndex = voices.length\n voices.splice(voices.length, 0, tabVoice);\n var keySig = checkVoiceKeySig(voices, ii + this.staffIndex);\n this.tabStaff.voices[ii] = [];\n this.absolutes.build(this.plugin, voices, this.tabStaff.voices[ii], ii , this.staffIndex ,keySig, tabVoiceIndex);\n }\n linkStaffAndTabs(staffGroup.staffs); // crossreference tabs and staff\n};\n\nmodule.exports = TabRenderer;\n","// abc_abstract_engraver.js: Creates a data structure suitable for printing a line of abc\n\nvar AbsoluteElement = require('./elements/absolute-element');\nvar BeamElem = require('./elements/beam-element');\nvar BraceElem = require('./elements/brace-element');\nvar createClef = require('./create-clef');\nvar createKeySignature = require('./create-key-signature');\nvar createNoteHead = require('./create-note-head');\nvar createTimeSignature = require('./create-time-signature');\nvar Decoration = require('./decoration');\nvar EndingElem = require('./elements/ending-element');\nvar glyphs = require('./glyphs');\nvar RelativeElement = require('./elements/relative-element');\nvar spacing = require('../helpers/spacing');\nvar StaffGroupElement = require('./elements/staff-group-element');\nvar TempoElement = require('./elements/tempo-element');\nvar TieElem = require('./elements/tie-element');\nvar TripletElem = require('./elements/triplet-element');\nvar VoiceElement = require('./elements/voice-element');\nvar addChord = require('./add-chord');\nvar pitchesToPerc = require('../../synth/pitches-to-perc')\n\nvar parseCommon = require('../../parse/abc_common');\n\nvar getDuration = function (elem) {\n\tvar d = 0;\n\tif (elem.duration) {\n\t\td = elem.duration;\n\t}\n\treturn d;\n};\n\nvar hint = false;\n\nvar chartable = {\n\trest: { 0: \"rests.whole\", 1: \"rests.half\", 2: \"rests.quarter\", 3: \"rests.8th\", 4: \"rests.16th\", 5: \"rests.32nd\", 6: \"rests.64th\", 7: \"rests.128th\", \"multi\": \"rests.multimeasure\" },\n\tnote: { \"-1\": \"noteheads.dbl\", 0: \"noteheads.whole\", 1: \"noteheads.half\", 2: \"noteheads.quarter\", 3: \"noteheads.quarter\", 4: \"noteheads.quarter\", 5: \"noteheads.quarter\", 6: \"noteheads.quarter\", 7: \"noteheads.quarter\", 'nostem': \"noteheads.quarter\" },\n\trhythm: { \"-1\": \"noteheads.slash.whole\", 0: \"noteheads.slash.whole\", 1: \"noteheads.slash.whole\", 2: \"noteheads.slash.quarter\", 3: \"noteheads.slash.quarter\", 4: \"noteheads.slash.quarter\", 5: \"noteheads.slash.quarter\", 6: \"noteheads.slash.quarter\", 7: \"noteheads.slash.quarter\", nostem: \"noteheads.slash.nostem\" },\n\tx: { \"-1\": \"noteheads.indeterminate\", 0: \"noteheads.indeterminate\", 1: \"noteheads.indeterminate\", 2: \"noteheads.indeterminate\", 3: \"noteheads.indeterminate\", 4: \"noteheads.indeterminate\", 5: \"noteheads.indeterminate\", 6: \"noteheads.indeterminate\", 7: \"noteheads.indeterminate\", nostem: \"noteheads.indeterminate\" },\n\tharmonic: { \"-1\": \"noteheads.harmonic.quarter\", 0: \"noteheads.harmonic.quarter\", 1: \"noteheads.harmonic.quarter\", 2: \"noteheads.harmonic.quarter\", 3: \"noteheads.harmonic.quarter\", 4: \"noteheads.harmonic.quarter\", 5: \"noteheads.harmonic.quarter\", 6: \"noteheads.harmonic.quarter\", 7: \"noteheads.harmonic.quarter\", nostem: \"noteheads.harmonic.quarter\" },\n\ttriangle: { \"-1\": \"noteheads.triangle.quarter\", 0: \"noteheads.triangle.quarter\", 1: \"noteheads.triangle.quarter\", 2: \"noteheads.triangle.quarter\", 3: \"noteheads.triangle.quarter\", 4: \"noteheads.triangle.quarter\", 5: \"noteheads.triangle.quarter\", 6: \"noteheads.triangle.quarter\", 7: \"noteheads.triangle.quarter\", nostem: \"noteheads.triangle.quarter\" },\n\tuflags: { 3: \"flags.u8th\", 4: \"flags.u16th\", 5: \"flags.u32nd\", 6: \"flags.u64th\" },\n\tdflags: { 3: \"flags.d8th\", 4: \"flags.d16th\", 5: \"flags.d32nd\", 6: \"flags.d64th\" }\n};\n\nvar AbstractEngraver = function (getTextSize, tuneNumber, options) {\n\tthis.decoration = new Decoration();\n\tthis.getTextSize = getTextSize;\n\tthis.tuneNumber = tuneNumber;\n\tthis.isBagpipes = options.bagpipes;\n\tthis.flatBeams = options.flatbeams;\n\tthis.graceSlurs = options.graceSlurs;\n\tthis.percmap = options.percmap;\n\tthis.initialClef = options.initialClef\n\tthis.jazzchords = !!options.jazzchords\n\tthis.accentAbove = !!options.accentAbove\n\tthis.germanAlphabet = !!options.germanAlphabet\n\tthis.reset();\n};\n\nAbstractEngraver.prototype.reset = function () {\n\tthis.slurs = {};\n\tthis.ties = [];\n\tthis.voiceScale = 1;\n\tthis.voiceColor = undefined;\n\tthis.slursbyvoice = {};\n\tthis.tiesbyvoice = {};\n\tthis.endingsbyvoice = {};\n\tthis.scaleByVoice = {};\n\tthis.colorByVoice = {};\n\tthis.tripletmultiplier = 1;\n\n\tthis.abcline = undefined;\n\tthis.accidentalSlot = undefined;\n\tthis.accidentalshiftx = undefined;\n\tthis.dotshiftx = undefined;\n\tthis.hasVocals = false;\n\tthis.minY = undefined;\n\tthis.partstartelem = undefined;\n\tthis.startlimitelem = undefined;\n\tthis.stemdir = undefined;\n};\n\nAbstractEngraver.prototype.setStemHeight = function (heightInPixels) {\n\tthis.stemHeight = Math.round(heightInPixels * 10 / spacing.STEP) / 10;\n};\n\nAbstractEngraver.prototype.getCurrentVoiceId = function (s, v) {\n\treturn \"s\" + s + \"v\" + v;\n};\n\nAbstractEngraver.prototype.pushCrossLineElems = function (s, v) {\n\tthis.slursbyvoice[this.getCurrentVoiceId(s, v)] = this.slurs;\n\tthis.tiesbyvoice[this.getCurrentVoiceId(s, v)] = this.ties;\n\tthis.endingsbyvoice[this.getCurrentVoiceId(s, v)] = this.partstartelem;\n\tthis.scaleByVoice[this.getCurrentVoiceId(s, v)] = this.voiceScale;\n\tif (this.voiceColor)\n\t\tthis.colorByVoice[this.getCurrentVoiceId(s, v)] = this.voiceColor;\n};\n\nAbstractEngraver.prototype.popCrossLineElems = function (s, v) {\n\tthis.slurs = this.slursbyvoice[this.getCurrentVoiceId(s, v)] || {};\n\tthis.ties = this.tiesbyvoice[this.getCurrentVoiceId(s, v)] || [];\n\tthis.partstartelem = this.endingsbyvoice[this.getCurrentVoiceId(s, v)];\n\tthis.voiceScale = this.scaleByVoice[this.getCurrentVoiceId(s, v)];\n\tif (this.voiceScale === undefined) this.voiceScale = 1;\n\tthis.voiceColor = this.colorByVoice[this.getCurrentVoiceId(s, v)];\n};\n\nAbstractEngraver.prototype.containsLyrics = function (staves) {\n\tfor (var i = 0; i < staves.length; i++) {\n\t\tfor (var j = 0; j < staves[i].voices.length; j++) {\n\t\t\tfor (var k = 0; k < staves[i].voices[j].length; k++) {\n\t\t\t\tvar el = staves[i].voices[j][k];\n\t\t\t\tif (el.lyric) {\n\t\t\t\t\t// We just want to see if there are vocals below the music to know where to put the dynamics.\n\t\t\t\t\tif (!el.positioning || el.positioning.vocalPosition === 'below')\n\t\t\t\t\t\tthis.hasVocals = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nAbstractEngraver.prototype.createABCLine = function (staffs, tempo, l) {\n\tthis.minY = 2; // PER: This will be the lowest that any note reaches. It will be used to set the dynamics row.\n\t// See if there are any lyrics on this line.\n\tthis.containsLyrics(staffs);\n\tvar staffgroup = new StaffGroupElement(this.getTextSize);\n\tthis.tempoSet = false;\n\tfor (var s = 0; s < staffs.length; s++) {\n\t\tif (hint)\n\t\t\tthis.restoreState();\n\t\thint = false;\n\t\tthis.createABCStaff(staffgroup, staffs[s], tempo, s, l);\n\t}\n\treturn staffgroup;\n};\n\nAbstractEngraver.prototype.createABCStaff = function (staffgroup, abcstaff, tempo, s, l) {\n\t// If the tempo is passed in, then the first element should get the tempo attached to it.\n\tstaffgroup.getTextSize.updateFonts(abcstaff);\n\tfor (var v = 0; v < abcstaff.voices.length; v++) {\n\t\tvar voice = new VoiceElement(v, abcstaff.voices.length);\n\t\tif (v === 0) {\n\t\t\tvoice.barfrom = (abcstaff.connectBarLines === \"start\" || abcstaff.connectBarLines === \"continue\");\n\t\t\tvoice.barto = (abcstaff.connectBarLines === \"continue\" || abcstaff.connectBarLines === \"end\");\n\t\t} else {\n\t\t\tvoice.duplicate = true; // bar lines and other duplicate info need not be created\n\t\t}\n\t\tif (abcstaff.title && abcstaff.title[v]) {\n\t\t\tvoice.header = abcstaff.title[v].replace(/\\\\n/g, \"\\n\");\n\t\t\tvoice.headerPosition = 6 + staffgroup.getTextSize.baselineToCenter(voice.header, \"voicefont\", 'staff-extra voice-name', v, abcstaff.voices.length) / spacing.STEP;\n\t\t}\n\t\tif (abcstaff.clef && abcstaff.clef.type === \"perc\")\n\t\t\tvoice.isPercussion = true;\n\t\tvar clef = (!this.initialClef || l === 0) && createClef(abcstaff.clef, this.tuneNumber);\n\t\tif (clef) {\n\t\t\tif (v === 0 && abcstaff.barNumber) {\n\t\t\t\tthis.addMeasureNumber(abcstaff.barNumber, clef);\n\t\t\t}\n\t\t\tvoice.addChild(clef);\n\t\t\tthis.startlimitelem = clef; // limit ties here\n\t\t}\n\t\tvar keySig = createKeySignature(abcstaff.key, this.tuneNumber);\n\t\tif (keySig) {\n\t\t\tvoice.addChild(keySig);\n\t\t\tthis.startlimitelem = keySig; // limit ties here\n\t\t}\n\t\tif (abcstaff.meter) {\n\t\t\tif (abcstaff.meter.type === 'specified') {\n\t\t\t\tthis.measureLength = abcstaff.meter.value[0].num / abcstaff.meter.value[0].den;\n\t\t\t} else\n\t\t\t\tthis.measureLength = 1;\n\t\t\tvar ts = createTimeSignature(abcstaff.meter, this.tuneNumber);\n\t\t\tvoice.addChild(ts);\n\t\t\tthis.startlimitelem = ts; // limit ties here\n\t\t}\n\t\tif (voice.duplicate)\n\t\t\tvoice.children = []; // we shouldn't reprint the above if we're reusing the same staff. We just created them to get the right spacing.\n\t\tvar staffLines = abcstaff.clef.stafflines || abcstaff.clef.stafflines === 0 ? abcstaff.clef.stafflines : 5;\n\t\tstaffgroup.addVoice(voice, s, staffLines);\n\t\tvar isSingleLineStaff = staffLines === 1;\n\t\tthis.createABCVoice(abcstaff.voices[v], tempo, s, v, isSingleLineStaff, voice);\n\t\tstaffgroup.setStaffLimits(voice);\n\t\tif (v === 0) {\n\t\t\t// only do brace and bracket processing on the first voice, otherwise it would be done twice.\n\t\t\tif (abcstaff.brace === \"start\" || (!staffgroup.brace && abcstaff.brace)) {\n\t\t\t\tif (!staffgroup.brace)\n\t\t\t\t\tstaffgroup.brace = [];\n\t\t\t\tstaffgroup.brace.push(new BraceElem(voice, \"brace\"));\n\t\t\t} else if (abcstaff.brace === \"end\" && staffgroup.brace) {\n\t\t\t\tstaffgroup.brace[staffgroup.brace.length - 1].setBottomStaff(voice);\n\t\t\t} else if (abcstaff.brace === \"continue\" && staffgroup.brace) {\n\t\t\t\tstaffgroup.brace[staffgroup.brace.length - 1].continuing(voice);\n\t\t\t}\n\t\t\tif (abcstaff.bracket === \"start\" || (!staffgroup.bracket && abcstaff.bracket)) {\n\t\t\t\tif (!staffgroup.bracket)\n\t\t\t\t\tstaffgroup.bracket = [];\n\t\t\t\tstaffgroup.bracket.push(new BraceElem(voice, \"bracket\"));\n\t\t\t} else if (abcstaff.bracket === \"end\" && staffgroup.bracket) {\n\t\t\t\tstaffgroup.bracket[staffgroup.bracket.length - 1].setBottomStaff(voice);\n\t\t\t} else if (abcstaff.bracket === \"continue\" && staffgroup.bracket) {\n\t\t\t\tstaffgroup.bracket[staffgroup.bracket.length - 1].continuing(voice);\n\t\t\t}\n\t\t}\n\t}\n};\n\nfunction getBeamGroup(abcline, pos) {\n\t// If there are notes beamed together, they are handled as a group, so find all of them here.\n\tvar elem = abcline[pos];\n\tif (elem.el_type !== 'note' || !elem.startBeam || elem.endBeam)\n\t\treturn { count: 1, elem: elem };\n\n\tvar group = [];\n\twhile (pos < abcline.length && abcline[pos].el_type === 'note') {\n\t\tgroup.push(abcline[pos]);\n\t\tif (abcline[pos].endBeam)\n\t\t\tbreak;\n\t\tpos++;\n\t}\n\treturn { count: group.length, elem: group };\n}\n\nAbstractEngraver.prototype.createABCVoice = function (abcline, tempo, s, v, isSingleLineStaff, voice) {\n\tthis.popCrossLineElems(s, v);\n\tthis.stemdir = (this.isBagpipes) ? \"down\" : null;\n\tthis.abcline = abcline;\n\tif (this.partstartelem) {\n\t\tthis.partstartelem = new EndingElem(\"\", null, null);\n\t\tvoice.addOther(this.partstartelem);\n\t}\n\tvar voiceNumber = voice.voicetotal < 2 ? -1 : voice.voicenumber;\n\tfor (var slur in this.slurs) {\n\t\tif (this.slurs.hasOwnProperty(slur)) {\n\t\t\t// this is already a slur element, but it was created for the last line, so recreate it.\n\t\t\tthis.slurs[slur] = new TieElem({ force: this.slurs[slur].force, voiceNumber: voiceNumber, stemDir: this.slurs[slur].stemDir, style: this.slurs[slur].dotted });\n\t\t\tif (hint) this.slurs[slur].setHint();\n\t\t\tvoice.addOther(this.slurs[slur]);\n\t\t}\n\t}\n\tfor (var i = 0; i < this.ties.length; i++) {\n\t\t// this is already a tie element, but it was created for the last line, so recreate it.\n\t\tthis.ties[i] = new TieElem({ force: this.ties[i].force, stemDir: this.ties[i].stemDir, voiceNumber: voiceNumber, style: this.ties[i].dotted });\n\t\tif (hint) this.ties[i].setHint();\n\t\tvoice.addOther(this.ties[i]);\n\t}\n\n\tfor (var j = 0; j < this.abcline.length; j++) {\n\t\tsetAveragePitch(this.abcline[j]);\n\t\tthis.minY = Math.min(this.abcline[j].minpitch, this.minY);\n\t}\n\n\tvar isFirstStaff = (s === 0);\n\tvar pos = 0;\n\twhile (pos < this.abcline.length) {\n\t\tvar ret = getBeamGroup(this.abcline, pos);\n\t\tvar abselems = this.createABCElement(isFirstStaff, isSingleLineStaff, voice, ret.elem);\n\t\tif (abselems) {\n\t\t\tfor (i = 0; i < abselems.length; i++) {\n\t\t\t\tif (!this.tempoSet && tempo && !tempo.suppress) {\n\t\t\t\t\tthis.tempoSet = true;\n\t\t\t\t\tvar tempoElement = new AbsoluteElement(tempo, 0, 0, \"tempo\", this.tuneNumber, {});\n\t\t\t\t\ttempoElement.addFixedX(new TempoElement(tempo, this.tuneNumber, createNoteHead));\n\t\t\t\t\tvoice.addChild(tempoElement);\n\t\t\t\t}\n\t\t\t\tvoice.addChild(abselems[i]);\n\t\t\t}\n\t\t}\n\t\tpos += ret.count;\n\t}\n\tthis.pushCrossLineElems(s, v);\n};\n\nAbstractEngraver.prototype.saveState = function () {\n\tthis.tiesSave = parseCommon.cloneArray(this.ties);\n\tthis.slursSave = parseCommon.cloneHashOfHash(this.slurs);\n\tthis.slursbyvoiceSave = parseCommon.cloneHashOfHash(this.slursbyvoice);\n\tthis.tiesbyvoiceSave = parseCommon.cloneHashOfArrayOfHash(this.tiesbyvoice);\n};\n\nAbstractEngraver.prototype.restoreState = function () {\n\tthis.ties = parseCommon.cloneArray(this.tiesSave);\n\tthis.slurs = parseCommon.cloneHashOfHash(this.slursSave);\n\tthis.slursbyvoice = parseCommon.cloneHashOfHash(this.slursbyvoiceSave);\n\tthis.tiesbyvoice = parseCommon.cloneHashOfArrayOfHash(this.tiesbyvoiceSave);\n};\n\n// function writeMeasureWidth(voice) {\n// \tvar width = 0;\n// \tfor (var i = voice.children.length-1; i >= 0; i--) {\n// \t\tvar elem = voice.children[i];\n// \t\tif (elem.abcelem.el_type === 'bar')\n// \t\t\tbreak;\n// \t\twidth += elem.w;\n// \t}\n// \treturn new RelativeElement(width.toFixed(2), -70, 0, undefined, {type:\"debug\"});\n// }\n\n// return an array of AbsoluteElement\nAbstractEngraver.prototype.createABCElement = function (isFirstStaff, isSingleLineStaff, voice, elem) {\n\tvar elemset = [];\n\tswitch (elem.el_type) {\n\t\tcase undefined:\n\t\t\t// it is undefined if we were passed an array in - an array means a set of notes that should be beamed together.\n\t\t\telemset = this.createBeam(isSingleLineStaff, voice, elem);\n\t\t\tbreak;\n\t\tcase \"note\":\n\t\t\telemset[0] = this.createNote(elem, false, isSingleLineStaff, voice);\n\t\t\tif (this.triplet && this.triplet.isClosed()) {\n\t\t\t\tvoice.addOther(this.triplet);\n\t\t\t\tthis.triplet = null;\n\t\t\t\tthis.tripletmultiplier = 1;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"bar\":\n\t\t\telemset[0] = this.createBarLine(voice, elem, isFirstStaff);\n\t\t\tif (voice.duplicate && elemset.length > 0) elemset[0].invisible = true;\n\t\t\t//\t elemset[0].addChild(writeMeasureWidth(voice));\n\t\t\tbreak;\n\t\tcase \"meter\":\n\t\t\telemset[0] = createTimeSignature(elem, this.tuneNumber);\n\t\t\tthis.startlimitelem = elemset[0]; // limit ties here\n\t\t\tif (voice.duplicate && elemset.length > 0) elemset[0].invisible = true;\n\t\t\tbreak;\n\t\tcase \"clef\":\n\t\t\telemset[0] = createClef(elem, this.tuneNumber);\n\t\t\tif (!elemset[0]) return null;\n\t\t\tif (voice.duplicate && elemset.length > 0) elemset[0].invisible = true;\n\t\t\tbreak;\n\t\tcase \"key\":\n\t\t\tvar absKey = createKeySignature(elem, this.tuneNumber);\n\t\t\tif (absKey) {\n\t\t\t\telemset[0] = absKey;\n\t\t\t\tthis.startlimitelem = elemset[0]; // limit ties here\n\t\t\t}\n\t\t\tif (voice.duplicate && elemset.length > 0) elemset[0].invisible = true;\n\t\t\tbreak;\n\t\tcase \"stem\":\n\t\t\tthis.stemdir = elem.direction === \"auto\" ? undefined : elem.direction;\n\t\t\tbreak;\n\t\tcase \"part\":\n\t\t\tvar abselem = new AbsoluteElement(elem, 0, 0, 'part', this.tuneNumber);\n\t\t\tvar dim = this.getTextSize.calc(elem.title, 'partsfont', \"part\");\n\t\t\tabselem.addFixedX(new RelativeElement(elem.title, 0, 0, undefined, { type: \"part\", height: dim.height / spacing.STEP }));\n\t\t\telemset[0] = abselem;\n\t\t\tbreak;\n\t\tcase \"tempo\":\n\t\t\tvar abselem3 = new AbsoluteElement(elem, 0, 0, 'tempo', this.tuneNumber);\n\t\t\tabselem3.addFixedX(new TempoElement(elem, this.tuneNumber, createNoteHead));\n\t\t\telemset[0] = abselem3;\n\t\t\tbreak;\n\t\tcase \"style\":\n\t\t\tif (elem.head === \"normal\")\n\t\t\t\tdelete this.style;\n\t\t\telse\n\t\t\t\tthis.style = elem.head;\n\t\t\tbreak;\n\t\tcase \"hint\":\n\t\t\thint = true;\n\t\t\tthis.saveState();\n\t\t\tbreak;\n\t\tcase \"midi\":\n\t\t\t// This has no effect on the visible music, so just skip it.\n\t\t\tbreak;\n\t\tcase \"scale\":\n\t\t\tthis.voiceScale = elem.size;\n\t\t\tbreak;\n\t\tcase \"color\":\n\t\t\tthis.voiceColor = elem.color;\n\t\t\tvoice.color = this.voiceColor;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tvar abselem2 = new AbsoluteElement(elem, 0, 0, 'unsupported', this.tuneNumber);\n\t\t\tabselem2.addFixed(new RelativeElement(\"element type \" + elem.el_type, 0, 0, undefined, { type: \"debug\" }));\n\t\t\telemset[0] = abselem2;\n\t}\n\n\treturn elemset;\n};\n\nfunction setAveragePitch(elem) {\n\tif (elem.pitches) {\n\t\tsortPitch(elem);\n\t\tvar sum = 0;\n\t\tfor (var p = 0; p < elem.pitches.length; p++) {\n\t\t\tsum += elem.pitches[p].verticalPos;\n\t\t}\n\t\telem.averagepitch = sum / elem.pitches.length;\n\t\telem.minpitch = elem.pitches[0].verticalPos;\n\t\telem.maxpitch = elem.pitches[elem.pitches.length - 1].verticalPos;\n\t}\n}\n\nAbstractEngraver.prototype.createBeam = function (isSingleLineStaff, voice, elems) {\n\tvar abselemset = [];\n\n\tvar beamelem = new BeamElem(this.stemHeight * this.voiceScale, this.stemdir, this.flatBeams, elems[0]);\n\tif (hint) beamelem.setHint();\n\tfor (var i = 0; i < elems.length; i++) {\n\t\t// Do a first pass to figure out the stem direction before creating the notes, so that staccatos and other decorations can be placed correctly.\n\t\tbeamelem.runningDirection(elems[i])\n\t}\n\tbeamelem.setStemDirection()\n\tvar tempStemDir = this.stemdir\n\tthis.stemdir = beamelem.stemsUp ? 'up' : 'down'\n\tfor (i = 0; i < elems.length; i++) {\n\t\tvar elem = elems[i];\n\t\tvar abselem = this.createNote(elem, true, isSingleLineStaff, voice);\n\t\tabselemset.push(abselem);\n\t\tbeamelem.add(abselem);\n\t\tif (this.triplet && this.triplet.isClosed()) {\n\t\t\tvoice.addOther(this.triplet);\n\t\t\tthis.triplet = null;\n\t\t\tthis.tripletmultiplier = 1;\n\t\t}\n\t}\n\tbeamelem.calcDir();\n\tvoice.addBeam(beamelem);\n\tthis.stemdir = tempStemDir\n\treturn abselemset;\n};\n\nvar sortPitch = function (elem) {\n\tvar sorted;\n\tdo {\n\t\tsorted = true;\n\t\tfor (var p = 0; p < elem.pitches.length - 1; p++) {\n\t\t\tif (elem.pitches[p].pitch > elem.pitches[p + 1].pitch) {\n\t\t\t\tsorted = false;\n\t\t\t\tvar tmp = elem.pitches[p];\n\t\t\t\telem.pitches[p] = elem.pitches[p + 1];\n\t\t\t\telem.pitches[p + 1] = tmp;\n\t\t\t}\n\t\t}\n\t} while (!sorted);\n};\n\nvar ledgerLines = function (abselem, minPitch, maxPitch, isRest, symbolWidth, additionalLedgers, dir, dx, scale) {\n\tfor (var i = maxPitch; i > 11; i--) {\n\t\tif (i % 2 === 0 && !isRest) {\n\t\t\tabselem.addFixed(new RelativeElement(null, dx, (symbolWidth + 4) * scale, i, { type: \"ledger\" }));\n\t\t}\n\t}\n\n\tfor (i = minPitch; i < 1; i++) {\n\t\tif (i % 2 === 0 && !isRest) {\n\t\t\tabselem.addFixed(new RelativeElement(null, dx, (symbolWidth + 4) * scale, i, { type: \"ledger\" }));\n\t\t}\n\t}\n\n\tfor (i = 0; i < additionalLedgers.length; i++) { // PER: draw additional ledgers\n\t\tvar ofs = symbolWidth;\n\t\tif (dir === 'down') ofs = -ofs;\n\t\tabselem.addFixed(new RelativeElement(null, ofs + dx, (symbolWidth + 4) * scale, additionalLedgers[i], { type: \"ledger\" }));\n\t}\n};\n\nAbstractEngraver.prototype.addGraceNotes = function (elem, voice, abselem, notehead, stemHeight, isBagpipes, roomtaken) {\n\tvar gracescale = 3 / 5;\n\tvar graceScaleStem = 3.5 / 5; // TODO-PER: empirically found constant.\n\tstemHeight = Math.round(stemHeight * graceScaleStem);\n\tvar gracebeam = null;\n\tvar flag;\n\n\tif (elem.gracenotes.length > 1) {\n\t\tgracebeam = new BeamElem(stemHeight, \"grace\", isBagpipes);\n\t\tif (hint) gracebeam.setHint();\n\t\tgracebeam.mainNote = abselem;\t// this gives us a reference back to the note this is attached to so that the stems can be attached somewhere.\n\t}\n\n\tvar i;\n\tvar graceoffsets = [];\n\tfor (i = elem.gracenotes.length - 1; i >= 0; i--) { // figure out where to place each gracenote\n\t\troomtaken += 10;\n\t\tgraceoffsets[i] = roomtaken;\n\t\tif (elem.gracenotes[i].accidental) {\n\t\t\troomtaken += 7;\n\t\t}\n\t}\n\n\tfor (i = 0; i < elem.gracenotes.length; i++) {\n\t\tvar gracepitch = elem.gracenotes[i].verticalPos;\n\n\t\tflag = (gracebeam) ? null : chartable.uflags[(isBagpipes) ? 5 : 3];\n\t\tvar accidentalSlot = [];\n\t\tvar ret = createNoteHead(abselem, \"noteheads.quarter\", elem.gracenotes[i],\n\t\t\t{ dir: \"up\", headx: -graceoffsets[i], extrax: -graceoffsets[i], flag: flag, scale: gracescale * this.voiceScale, accidentalSlot: accidentalSlot });\n\t\tret.notehead.highestVert = ret.notehead.pitch + stemHeight;\n\t\tvar grace = ret.notehead;\n\t\tthis.addSlursAndTies(abselem, elem.gracenotes[i], grace, voice, \"up\", true);\n\n\t\tabselem.addExtra(grace);\n\t\t// PER: added acciaccatura slash\n\t\tif (elem.gracenotes[i].acciaccatura) {\n\t\t\tvar pos = elem.gracenotes[i].verticalPos + 7 * gracescale; // the same formula that determines the flag position.\n\t\t\tvar dAcciaccatura = gracebeam ? 5 : 6; // just an offset to make it line up correctly.\n\t\t\tabselem.addRight(new RelativeElement(\"flags.ugrace\", -graceoffsets[i] + dAcciaccatura, 0, pos, { scalex: gracescale, scaley: gracescale }));\n\t\t}\n\t\tif (gracebeam) { // give the beam the necessary info\n\t\t\tvar graceDuration = elem.gracenotes[i].duration / 2;\n\t\t\tif (isBagpipes) graceDuration /= 2;\n\t\t\tvar pseudoabselem = {\n\t\t\t\theads: [grace],\n\t\t\t\tabcelem: { averagepitch: gracepitch, minpitch: gracepitch, maxpitch: gracepitch, duration: graceDuration }\n\t\t\t};\n\t\t\tgracebeam.add(pseudoabselem);\n\t\t} else { // draw the stem\n\t\t\tvar p1 = gracepitch + 1 / 3 * gracescale;\n\t\t\tvar p2 = gracepitch + 7 * gracescale;\n\t\t\tvar dx = grace.dx + grace.w;\n\t\t\tvar width = -0.6;\n\t\t\tabselem.addExtra(new RelativeElement(null, dx, 0, p1, { \"type\": \"stem\", \"pitch2\": p2, linewidth: width }));\n\t\t}\n\t\tledgerLines(abselem, gracepitch, gracepitch, false, glyphs.getSymbolWidth(\"noteheads.quarter\"), [], true, grace.dx - 1, 0.6);\n\n\t\t// if this is the first grace note, we might want to start a slur.\n\t\t// there is a slur if graceSlurs is specifically set.\n\t\t// there is no slur if it is bagpipes.\n\t\t// there is not a slur if the element is a spacer or invisible rest.\n\t\tvar isInvisibleRest = elem.rest && (elem.rest.type === \"spacer\" || elem.rest.type === \"invisible\");\n\t\tif (i === 0 && !isBagpipes && this.graceSlurs && !isInvisibleRest) {\n\t\t\t// This is the overall slur that is under the grace notes.\n\t\t\tvoice.addOther(new TieElem({ anchor1: grace, anchor2: notehead, isGrace: true }));\n\t\t}\n\t}\n\n\tif (gracebeam) {\n\t\tgracebeam.calcDir();\n\t\tvoice.addBeam(gracebeam);\n\t}\n\treturn roomtaken;\n};\n\nfunction addRestToAbsElement(abselem, elem, duration, dot, isMultiVoice, stemdir, isSingleLineStaff, durlog, voiceScale) {\n\tvar c;\n\tvar restpitch = 7;\n\tvar noteHead;\n\tvar roomTaken;\n\tvar roomTakenRight;\n\n\tif (isMultiVoice) {\n\t\tif (stemdir === \"down\") restpitch = 3;\n\t\tif (stemdir === \"up\") restpitch = 11;\n\t}\n\t// There is special placement for the percussion staff. If there is one staff line, then move the rest position.\n\tif (isSingleLineStaff) {\n\t\t// The half and whole rests are attached to different lines normally, so we need to tweak their position to get them to both be attached to the same one.\n\t\tif (duration < 0.5)\n\t\t\trestpitch = 7;\n\t\telse if (duration < 1)\n\t\t\trestpitch = 7;\t// half rest\n\t\telse\n\t\t\trestpitch = 5; // whole rest\n\t}\n\tswitch (elem.rest.type) {\n\t\tcase \"whole\":\n\t\t\tc = chartable.rest[0];\n\t\t\telem.averagepitch = restpitch;\n\t\t\telem.minpitch = restpitch;\n\t\t\telem.maxpitch = restpitch;\n\t\t\tdot = 0;\n\t\t\tbreak;\n\t\tcase \"rest\":\n\t\t\tif (elem.style === \"rhythm\") // special case for rhythm: rests are a handy way to express the rhythm.\n\t\t\t\tc = chartable.rhythm[-durlog];\n\t\t\telse\n\t\t\t\tc = chartable.rest[-durlog];\n\t\t\telem.averagepitch = restpitch;\n\t\t\telem.minpitch = restpitch;\n\t\t\telem.maxpitch = restpitch;\n\t\t\tbreak;\n\t\tcase \"invisible\":\n\t\tcase \"invisible-multimeasure\":\n\t\tcase \"spacer\":\n\t\t\tc = \"\";\n\t\t\telem.averagepitch = restpitch;\n\t\t\telem.minpitch = restpitch;\n\t\t\telem.maxpitch = restpitch;\n\t\t\tbreak;\n\t\tcase \"multimeasure\":\n\t\t\tc = chartable.rest['multi'];\n\t\t\telem.averagepitch = restpitch;\n\t\t\telem.minpitch = restpitch;\n\t\t\telem.maxpitch = restpitch;\n\t\t\tdot = 0;\n\t\t\tvar mmWidth = glyphs.getSymbolWidth(c);\n\t\t\tabselem.addHead(new RelativeElement(c, mmWidth, mmWidth * 2, 7));\n\t\t\tvar numMeasures = new RelativeElement(\"\" + elem.rest.text, mmWidth, mmWidth, 16, { type: \"multimeasure-text\" });\n\t\t\tabselem.addExtra(numMeasures);\n\t}\n\tif (elem.rest.type.indexOf(\"multimeasure\") < 0 && elem.rest.type !== \"invisible\") {\n\t\tvar ret = createNoteHead(abselem, c, { verticalPos: restpitch },\n\t\t\t{ dot: dot, scale: voiceScale });\n\t\tnoteHead = ret.notehead;\n\t\tif (noteHead) {\n\t\t\tabselem.addHead(noteHead);\n\t\t\troomTaken = ret.accidentalshiftx;\n\t\t\troomTakenRight = ret.dotshiftx;\n\t\t}\n\t}\n\treturn { noteHead: noteHead, roomTaken: roomTaken, roomTakenRight: roomTakenRight };\n}\n\nfunction addIfNotExist(arr, item) {\n\tfor (var i = 0; i < arr.length; i++) {\n\t\tif (JSON.stringify(arr[i]) === JSON.stringify(item))\n\t\t\treturn;\n\t}\n\tarr.push(item);\n}\n\nAbstractEngraver.prototype.addNoteToAbcElement = function (abselem, elem, dot, stemdir, style, zeroDuration, durlog, nostem, voice) {\n\tvar dotshiftx = 0; // room taken by chords with displaced noteheads which cause dots to shift\n\tvar noteHead;\n\tvar roomTaken = 0;\n\tvar roomTakenRight = 0;\n\tvar min;\n\tvar i;\n\tvar additionalLedgers = [];\n\t// The accidentalSlot will hold a list of all the accidentals on this chord. Each element is a vertical place,\n\t// and contains a pitch, which is the last pitch that contains an accidental in that slot. The slots are numbered\n\t// from closest to the note to farther left. We only need to know the last accidental we placed because\n\t// we know that the pitches are sorted by now.\n\tvar accidentalSlot = [];\n\tvar symbolWidth = 0;\n\n\tvar dir = (elem.averagepitch >= 6) ? \"down\" : \"up\";\n\tif (stemdir) dir = stemdir;\n\n\tstyle = elem.style ? elem.style : style; // get the style of note head.\n\tif (!style || style === \"normal\") style = \"note\";\n\tvar noteSymbol;\n\tif (zeroDuration)\n\t\tnoteSymbol = chartable[style].nostem;\n\telse\n\t\tnoteSymbol = chartable[style][-durlog];\n\tif (!noteSymbol)\n\t\tconsole.log(\"noteSymbol:\", style, durlog, zeroDuration);\n\n\t// determine elements of chords which should be shifted\n\tvar p;\n\tfor (p = (dir === \"down\") ? elem.pitches.length - 2 : 1; (dir === \"down\") ? p >= 0 : p < elem.pitches.length; p = (dir === \"down\") ? p - 1 : p + 1) {\n\t\tvar prev = elem.pitches[(dir === \"down\") ? p + 1 : p - 1];\n\t\tvar curr = elem.pitches[p];\n\t\tvar delta = (dir === \"down\") ? prev.pitch - curr.pitch : curr.pitch - prev.pitch;\n\t\tif (delta <= 1 && !prev.printer_shift) {\n\t\t\tcurr.printer_shift = (delta) ? \"different\" : \"same\";\n\t\t\tif (curr.verticalPos > 11 || curr.verticalPos < 1) { // PER: add extra ledger line\n\t\t\t\tadditionalLedgers.push(curr.verticalPos - (curr.verticalPos % 2));\n\t\t\t}\n\t\t\tif (dir === \"down\") {\n\t\t\t\troomTaken = glyphs.getSymbolWidth(noteSymbol) + 2;\n\t\t\t} else {\n\t\t\t\tdotshiftx = glyphs.getSymbolWidth(noteSymbol) + 2;\n\t\t\t}\n\t\t}\n\t}\n\n\tvar pp = elem.pitches.length;\n\tfor (p = 0; p < elem.pitches.length; p++) {\n\n\t\tif (!nostem) {\n\t\t\tvar flag;\n\t\t\tif ((dir === \"down\" && p !== 0) || (dir === \"up\" && p !== pp - 1)) { // not the stemmed elem of the chord\n\t\t\t\tflag = null;\n\t\t\t} else {\n\t\t\t\tflag = chartable[(dir === \"down\") ? \"dflags\" : \"uflags\"][-durlog];\n\t\t\t}\n\t\t}\n\t\tvar c;\n\t\tif (elem.pitches[p].style) { // There is a style for the whole group of pitches, but there could also be an override for a particular pitch.\n\t\t\tc = chartable[elem.pitches[p].style][-durlog];\n\t\t} else if (voice.isPercussion && this.percmap) {\n\t\t\tc = noteSymbol;\n\t\t\tvar percHead = this.percmap[pitchesToPerc(elem.pitches[p])];\n\t\t\tif (percHead && percHead.noteHead) {\n\t\t\t\tif (chartable[percHead.noteHead])\n\t\t\t\t\tc = chartable[percHead.noteHead][-durlog];\n\t\t\t}\n\t\t} else\n\t\t\tc = noteSymbol;\n\t\t// The highest position for the sake of placing slurs is itself if the slur is internal. It is the highest position possible if the slur is for the whole chord.\n\t\t// If the note is the only one in the chord, then any slur it has counts as if it were on the whole chord.\n\t\telem.pitches[p].highestVert = elem.pitches[p].verticalPos;\n\t\tvar isTopWhenStemIsDown = (stemdir === \"up\" || dir === \"up\") && p === 0;\n\t\tvar isBottomWhenStemIsUp = (stemdir === \"down\" || dir === \"down\") && p === pp - 1;\n\t\tif (isTopWhenStemIsDown || isBottomWhenStemIsUp) { // place to put slurs if not already on pitches\n\n\t\t\tif (elem.startSlur || pp === 1) {\n\t\t\t\telem.pitches[p].highestVert = elem.pitches[pp - 1].verticalPos;\n\t\t\t\tif (getDuration(elem) < 1 && (stemdir === \"up\" || dir === \"up\"))\n\t\t\t\t\telem.pitches[p].highestVert += 6; // If the stem is up, then compensate for the length of the stem\n\t\t\t}\n\t\t\tif (elem.startSlur) {\n\t\t\t\tif (!elem.pitches[p].startSlur) elem.pitches[p].startSlur = []; //TODO possibly redundant, provided array is not optional\n\t\t\t\tfor (i = 0; i < elem.startSlur.length; i++) {\n\t\t\t\t\taddIfNotExist(elem.pitches[p].startSlur, elem.startSlur[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (elem.endSlur) {\n\t\t\t\telem.pitches[p].highestVert = elem.pitches[pp - 1].verticalPos;\n\t\t\t\tif (getDuration(elem) < 1 && (stemdir === \"up\" || dir === \"up\"))\n\t\t\t\t\telem.pitches[p].highestVert += 6; // If the stem is up, then compensate for the length of the stem\n\t\t\t\tif (!elem.pitches[p].endSlur) elem.pitches[p].endSlur = []; //TODO possibly redundant, provided array is not optional\n\t\t\t\tfor (i = 0; i < elem.endSlur.length; i++) {\n\t\t\t\t\taddIfNotExist(elem.pitches[p].endSlur, elem.endSlur[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar hasStem = !nostem && durlog <= -1;\n\t\tvar ret = createNoteHead(abselem, c, elem.pitches[p],\n\t\t\t{ dir: dir, extrax: -roomTaken, flag: flag, dot: dot, dotshiftx: dotshiftx, scale: this.voiceScale, accidentalSlot: accidentalSlot, shouldExtendStem: !stemdir, printAccidentals: !voice.isPercussion });\n\t\tsymbolWidth = Math.max(glyphs.getSymbolWidth(c), symbolWidth);\n\t\tabselem.extraw -= ret.extraLeft;\n\t\tnoteHead = ret.notehead;\n\t\tif (noteHead) {\n\t\t\tthis.addSlursAndTies(abselem, elem.pitches[p], noteHead, voice, hasStem ? dir : null, false);\n\n\t\t\tif (elem.gracenotes && elem.gracenotes.length > 0)\n\t\t\t\tnoteHead.bottom = noteHead.bottom - 1;\t // If there is a tie to the grace notes, leave a little more room for the note to avoid collisions.\n\t\t\tabselem.addHead(noteHead);\n\t\t}\n\t\troomTaken += ret.accidentalshiftx;\n\t\troomTakenRight = Math.max(roomTakenRight, ret.dotshiftx);\n\t}\n\n\t// draw stem from the furthest note to a pitch above/below the stemmed note\n\tif (hasStem) {\n\t\tvar stemHeight = Math.round(70 * this.voiceScale) / 10;\n\t\tvar p1 = (dir === \"down\") ? elem.minpitch - stemHeight : elem.minpitch + 1 / 3;\n\t\t// PER added stemdir test to make the line meet the note.\n\t\tif (p1 > 6 && !stemdir) p1 = 6;\n\t\tvar p2 = (dir === \"down\") ? elem.maxpitch - 1 / 3 : elem.maxpitch + stemHeight;\n\t\t// PER added stemdir test to make the line meet the note.\n\t\tif (p2 < 6 && !stemdir) p2 = 6;\n\t\tvar dx = (dir === \"down\" || abselem.heads.length === 0) ? 0 : abselem.heads[0].w;\n\t\tvar width = (dir === \"down\") ? 1 : -1;\n\t\t// TODO-PER-HACK: One type of note head has a different placement of the stem. This should be more generically calculated:\n\t\tif (noteHead && noteHead.c === 'noteheads.slash.quarter') {\n\t\t\tif (dir === 'down')\n\t\t\t\tp2 -= 1;\n\t\t\telse\n\t\t\t\tp1 += 1;\n\t\t}\n\t\tif (noteHead && noteHead.c === 'noteheads.triangle.quarter') {\n\t\t\tif (dir === 'down')\n\t\t\t\tp2 -= 0.7;\n\t\t\telse\n\t\t\t\tp1 -= 1.2;\n\t\t}\n\t\tabselem.addRight(new RelativeElement(null, dx, 0, p1, { \"type\": \"stem\", \"pitch2\": p2, linewidth: width, bottom: p1 - 1 }));\n\t\t//var RelativeElement = function RelativeElement(c, dx, w, pitch, opt) {\n\t\tmin = Math.min(p1, p2);\n\t}\n\treturn { noteHead: noteHead, roomTaken: roomTaken, roomTakenRight: roomTakenRight, min: min, additionalLedgers: additionalLedgers, dir: dir, symbolWidth: symbolWidth };\n};\n\nAbstractEngraver.prototype.addLyric = function (abselem, elem) {\n\tvar lyricStr = \"\";\n\telem.lyric.forEach(function (ly) {\n\t\tvar div = ly.divider === ' ' ? \"\" : ly.divider;\n\t\tlyricStr += ly.syllable + div + \"\\n\";\n\t});\n\tvar lyricDim = this.getTextSize.calc(lyricStr, 'vocalfont', \"lyric\");\n\tvar position = elem.positioning ? elem.positioning.vocalPosition : 'below';\n\tabselem.addCentered(new RelativeElement(lyricStr, 0, lyricDim.width, undefined, { type: \"lyric\", position: position, height: lyricDim.height / spacing.STEP, dim: this.getTextSize.attr('vocalfont', \"lyric\") }));\n};\n\nAbstractEngraver.prototype.createNote = function (elem, nostem, isSingleLineStaff, voice) { //stem presence: true for drawing stemless notehead\n\tvar notehead = null;\n\tvar roomtaken = 0; // room needed to the left of the note\n\tvar roomtakenright = 0; // room needed to the right of the note\n\tvar symbolWidth = 0;\n\tvar additionalLedgers = []; // PER: handle the case of [bc'], where the b doesn't have a ledger line\n\n\tvar dir;\n\n\tvar duration = getDuration(elem);\n\tvar zeroDuration = false;\n\tif (duration === 0) { zeroDuration = true; duration = 0.25; nostem = true; } //PER: zero duration will draw a quarter note head.\n\tvar durlog = Math.floor(Math.log(duration) / Math.log(2)); //TODO use getDurlog\n\tvar dot = 0;\n\n\tfor (var tot = Math.pow(2, durlog), inc = tot / 2; tot < duration; dot++, tot += inc, inc /= 2);\n\n\n\tif (elem.startTriplet) {\n\t\tthis.tripletmultiplier = elem.tripletMultiplier;\n\t}\n\n\tvar durationForSpacing = duration * this.tripletmultiplier;\n\tif (elem.rest && elem.rest.type === 'multimeasure')\n\t\tdurationForSpacing = 1;\n\tif (elem.rest && elem.rest.type === 'invisible-multimeasure')\n\t\tdurationForSpacing = this.measureLength * elem.rest.text;\n\tvar absType = elem.rest ? \"rest\" : \"note\";\n\tvar abselem = new AbsoluteElement(elem, durationForSpacing, 1, absType, this.tuneNumber, { durationClassOveride: elem.duration * this.tripletmultiplier });\n\tif (hint) abselem.setHint();\n\n\tif (elem.rest) {\n\t\tif (this.measureLength === duration && elem.rest.type !== 'invisible' && elem.rest.type !== 'spacer' && elem.rest.type.indexOf('multimeasure') < 0)\n\t\t\telem.rest.type = 'whole'; // If the rest is exactly a measure, always use a whole rest\n\t\tvar ret1 = addRestToAbsElement(abselem, elem, duration, dot, voice.voicetotal > 1, this.stemdir, isSingleLineStaff, durlog, this.voiceScale);\n\t\tnotehead = ret1.noteHead;\n\t\troomtaken = ret1.roomTaken;\n\t\troomtakenright = ret1.roomTakenRight;\n\t} else {\n\t\tvar ret2 = this.addNoteToAbcElement(abselem, elem, dot, this.stemdir, this.style, zeroDuration, durlog, nostem, voice);\n\t\tif (ret2.min !== undefined)\n\t\t\tthis.minY = Math.min(ret2.min, this.minY);\n\t\tnotehead = ret2.noteHead;\n\t\troomtaken = ret2.roomTaken;\n\t\troomtakenright = ret2.roomTakenRight;\n\t\tadditionalLedgers = ret2.additionalLedgers;\n\t\tdir = ret2.dir;\n\t\tsymbolWidth = ret2.symbolWidth;\n\t}\n\n\tif (elem.lyric !== undefined) {\n\t\tthis.addLyric(abselem, elem);\n\t}\n\n\tif (elem.gracenotes !== undefined) {\n\t\troomtaken += this.addGraceNotes(elem, voice, abselem, notehead, this.stemHeight * this.voiceScale, this.isBagpipes, roomtaken);\n\t}\n\n\tif (elem.decoration) {\n\t\t// TODO-PER: nostem is true if this is beamed. In that case we don't know where to place the decoration yet so just make a guess. This should be refactored to not place decorations until after the beams are determined.\n\t\t// This should probably be combined with moveDecorations()\n\t\tvar bottom = nostem ? Math.min(-3, abselem.bottom - 6) : abselem.bottom\n\t\tthis.decoration.createDecoration(voice, elem.decoration, abselem.top, (notehead) ? notehead.w : 0, abselem, roomtaken, dir, bottom, elem.positioning, this.hasVocals, this.accentAbove);\n\t}\n\n\tif (elem.barNumber) {\n\t\tabselem.addFixed(new RelativeElement(elem.barNumber, -10, 0, 0, { type: \"barNumber\" }));\n\t}\n\n\t// ledger lines\n\tledgerLines(abselem, elem.minpitch, elem.maxpitch, elem.rest, symbolWidth, additionalLedgers, dir, -2, 1);\n\n\tif (elem.chord !== undefined) {\n\t\tvar ret3 = addChord(this.getTextSize, abselem, elem, roomtaken, roomtakenright, symbolWidth, this.jazzchords, this.germanAlphabet);\n\t\troomtaken = ret3.roomTaken;\n\t\troomtakenright = ret3.roomTakenRight;\n\t}\n\n\tif (elem.startTriplet) {\n\t\tthis.triplet = new TripletElem(elem.startTriplet, notehead, { flatBeams: this.flatBeams }); // above is opposite from case of slurs\n\t}\n\n\tif (elem.endTriplet && this.triplet) {\n\t\tthis.triplet.setCloseAnchor(notehead);\n\t}\n\n\tif (this.triplet && !elem.startTriplet && !elem.endTriplet && !(elem.rest && elem.rest.type === \"spacer\")) {\n\t\tthis.triplet.middleNote(notehead);\n\t}\n\n\treturn abselem;\n};\n\nAbstractEngraver.prototype.addSlursAndTies = function (abselem, pitchelem, notehead, voice, dir, isGrace) {\n\tif (pitchelem.endTie) {\n\t\tif (this.ties.length > 0) {\n\t\t\t// If there are multiple open ties, find the one that applies by matching the pitch, if possible.\n\t\t\tvar found = false;\n\t\t\tfor (var j = 0; j < this.ties.length; j++) {\n\t\t\t\tif (this.ties[j].anchor1 && this.ties[j].anchor1.pitch === notehead.pitch) {\n\t\t\t\t\tthis.ties[j].setEndAnchor(notehead);\n\t\t\t\t\tvoice.setRange(this.ties[j])\n\t\t\t\t\tthis.ties.splice(j, 1);\n\t\t\t\t\tfound = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!found) {\n\t\t\t\tthis.ties[0].setEndAnchor(notehead);\n\t\t\t\tvoice.setRange(this.ties[0])\n\t\t\t\tthis.ties.splice(0, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\tvar voiceNumber = voice.voicetotal < 2 ? -1 : voice.voicenumber;\n\tif (pitchelem.startTie) {\n\t\tvar tie = new TieElem({ anchor1: notehead, force: (this.stemdir === \"down\" || this.stemdir === \"up\"), stemDir: this.stemdir, isGrace: isGrace, voiceNumber: voiceNumber, style: pitchelem.startTie.style });\n\t\tif (hint) tie.setHint();\n\n\t\tthis.ties[this.ties.length] = tie;\n\t\tvoice.addOther(tie);\n\t\t// HACK-PER: For the animation, we need to know if a note is tied to the next one, so here's a flag.\n\t\t// Unfortunately, only some of the notes in the current event might be tied, but this will consider it\n\t\t// tied if any one of them is. That will work for most cases.\n\t\tabselem.startTie = true;\n\t}\n\n\tvar slur;\n\tvar slurid;\n\tif (pitchelem.endSlur) {\n\t\tfor (var i = 0; i < pitchelem.endSlur.length; i++) {\n\t\t\tslurid = pitchelem.endSlur[i];\n\t\t\tif (this.slurs[slurid]) {\n\t\t\t\tslur = this.slurs[slurid];\n\t\t\t\tslur.setEndAnchor(notehead);\n\t\t\t\tvoice.setRange(slur)\n\t\t\t\tdelete this.slurs[slurid];\n\t\t\t} else {\n\t\t\t\tslur = new TieElem({ anchor2: notehead, stemDir: this.stemdir, voiceNumber: voiceNumber });\n\t\t\t\tif (hint) slur.setHint();\n\t\t\t\tvoice.addOther(slur);\n\t\t\t}\n\t\t\tif (this.startlimitelem) {\n\t\t\t\tslur.setStartX(this.startlimitelem);\n\t\t\t}\n\t\t}\n\t} else if (!isGrace) {\n\t\tfor (var s in this.slurs) {\n\t\t\tif (this.slurs.hasOwnProperty(s)) {\n\t\t\t\tthis.slurs[s].addInternalNote(notehead);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (pitchelem.startSlur) {\n\t\tfor (i = 0; i < pitchelem.startSlur.length; i++) {\n\t\t\tslurid = pitchelem.startSlur[i].label;\n\t\t\tslur = new TieElem({ anchor1: notehead, stemDir: this.stemdir, voiceNumber: voiceNumber, style: pitchelem.startSlur[i].style });\n\t\t\tif (hint) slur.setHint();\n\t\t\tthis.slurs[slurid] = slur;\n\t\t\tvoice.addOther(slur);\n\t\t}\n\t}\n};\n\nAbstractEngraver.prototype.addMeasureNumber = function (number, abselem) {\n\tvar measureNumDim = this.getTextSize.calc(number, \"measurefont\", 'bar-number');\n\tvar dx = 0;\n\tif (abselem.isClef) // If this is a clef rather than bar line, then the number shouldn't be centered because it could overlap the left side. This is an easy way to let it be centered but move it over, too.\n\t\tdx += measureNumDim.width / 2\n\tvar vert = measureNumDim.width > 10 && abselem.abcelem.type === \"treble\" ? 13 : 11\n\tabselem.addFixed(new RelativeElement(number, dx, measureNumDim.width, vert + measureNumDim.height / spacing.STEP, { type: \"barNumber\", dim: this.getTextSize.attr(\"measurefont\", 'bar-number') }));\n};\n\nAbstractEngraver.prototype.createBarLine = function (voice, elem, isFirstStaff) {\n\t// bar_thin, bar_thin_thick, bar_thin_thin, bar_thick_thin, bar_right_repeat, bar_left_repeat, bar_double_repeat\n\n\tvar abselem = new AbsoluteElement(elem, 0, 10, 'bar', this.tuneNumber);\n\tvar anchor = null; // place to attach part lines\n\tvar dx = 0;\n\n\tif (elem.barNumber) {\n\t\tthis.addMeasureNumber(elem.barNumber, abselem);\n\t}\n\n\n\tvar firstdots = (elem.type === \"bar_right_repeat\" || elem.type === \"bar_dbl_repeat\");\n\tvar firstthin = (elem.type !== \"bar_left_repeat\" && elem.type !== \"bar_thick_thin\" && elem.type !== \"bar_invisible\");\n\tvar thick = (elem.type === \"bar_right_repeat\" || elem.type === \"bar_dbl_repeat\" || elem.type === \"bar_left_repeat\" ||\n\t\telem.type === \"bar_thin_thick\" || elem.type === \"bar_thick_thin\");\n\tvar secondthin = (elem.type === \"bar_left_repeat\" || elem.type === \"bar_thick_thin\" || elem.type === \"bar_thin_thin\" || elem.type === \"bar_dbl_repeat\");\n\tvar seconddots = (elem.type === \"bar_left_repeat\" || elem.type === \"bar_dbl_repeat\");\n\n\t// limit positioning of slurs\n\tif (firstdots || seconddots) {\n\t\tfor (var slur in this.slurs) {\n\t\t\tif (this.slurs.hasOwnProperty(slur)) {\n\t\t\t\tthis.slurs[slur].setEndX(abselem);\n\t\t\t}\n\t\t}\n\t\tthis.startlimitelem = abselem;\n\t}\n\n\tif (firstdots) {\n\t\tabselem.addRight(new RelativeElement(\"dots.dot\", dx, 1, 7));\n\t\tabselem.addRight(new RelativeElement(\"dots.dot\", dx, 1, 5));\n\t\tdx += 6; //2 hardcoded, twice;\n\t}\n\n\tif (firstthin) {\n\t\tanchor = new RelativeElement(null, dx, 1, 2, { \"type\": \"bar\", \"pitch2\": 10, linewidth: 0.6 });\n\t\tabselem.addRight(anchor);\n\t}\n\n\tif (elem.type === \"bar_invisible\") {\n\t\tanchor = new RelativeElement(null, dx, 1, 2, { \"type\": \"none\", \"pitch2\": 10, linewidth: 0.6 });\n\t\tabselem.addRight(anchor);\n\t}\n\n\tif (elem.decoration) {\n\t\tthis.decoration.createDecoration(voice, elem.decoration, 12, (thick) ? 3 : 1, abselem, 0, \"down\", 2, elem.positioning, this.hasVocals, this.accentAbove);\n\t}\n\n\tif (thick) {\n\t\tdx += 4; //3 hardcoded;\n\t\tanchor = new RelativeElement(null, dx, 4, 2, { \"type\": \"bar\", \"pitch2\": 10, linewidth: 4 });\n\t\tabselem.addRight(anchor);\n\t\tdx += 5;\n\t}\n\n\t// if (this.partstartelem && (thick || (firstthin && secondthin))) { // means end of nth part\n\t// this.partstartelem.anchor2=anchor;\n\t// this.partstartelem = null;\n\t// }\n\n\tif (this.partstartelem && elem.endEnding) {\n\t\tthis.partstartelem.anchor2 = anchor;\n\t\tthis.partstartelem = null;\n\t}\n\n\tif (secondthin) {\n\t\tdx += 3; //3 hardcoded;\n\t\tanchor = new RelativeElement(null, dx, 1, 2, { \"type\": \"bar\", \"pitch2\": 10, linewidth: 0.6 });\n\t\tabselem.addRight(anchor); // 3 is hardcoded\n\t}\n\n\tif (seconddots) {\n\t\tdx += 3; //3 hardcoded;\n\t\tabselem.addRight(new RelativeElement(\"dots.dot\", dx, 1, 7));\n\t\tabselem.addRight(new RelativeElement(\"dots.dot\", dx, 1, 5));\n\t} // 2 is hardcoded\n\n\tif (elem.startEnding && isFirstStaff) { // only put the first & second ending marks on the first staff\n\t\tvar textWidth = this.getTextSize.calc(elem.startEnding, \"repeatfont\", '').width;\n\t\tabselem.minspacing += textWidth + 10; // Give plenty of room for the ending number.\n\t\tthis.partstartelem = new EndingElem(elem.startEnding, anchor, null);\n\t\tvoice.addOther(this.partstartelem);\n\t}\n\n\t// Add a little space to the left of the bar line so that nothing can crowd it.\n\tabselem.extraw -= 5;\n\n\tif (elem.chord !== undefined) {\n\t\tvar ret3 = addChord(this.getTextSize, abselem, elem, 0, 0, 0, false, this.germanAlphabet);\n\t}\n\n\treturn abselem;\n\n};\n\nmodule.exports = AbstractEngraver;\n","var RelativeElement = require('./elements/relative-element');\nvar spacing = require('../helpers/spacing');\nconst translateChord = require(\"./translate-chord\");\n\nvar addChord = function (getTextSize, abselem, elem, roomTaken, roomTakenRight, noteheadWidth, jazzchords, germanAlphabet) {\n\tfor (var i = 0; i < elem.chord.length; i++) {\n\t\tvar pos = elem.chord[i].position;\n\t\tvar rel_position = elem.chord[i].rel_position;\n\t\tvar isAnnotation = pos === \"left\" || pos === \"right\" || pos === \"below\" || pos === \"above\" || !!rel_position\n\t\tvar font;\n\t\tvar klass;\n\t\tif (isAnnotation) {\n\t\t\tfont = 'annotationfont';\n\t\t\tklass = \"abcjs-annotation\";\n\t\t} else {\n\t\t\tfont = 'gchordfont';\n\t\t\tklass = \"abcjs-chord\";\n\t\t}\n\t\tvar attr = getTextSize.attr(font, klass);\n\n\t\tvar name = elem.chord[i].name\n\t\tvar ret;\n\t\t//console.log(\"chord\",name)\n\t\tif (typeof name === \"string\") {\n\t\t\tret = chordString(name, pos, rel_position, isAnnotation, font, klass, attr, getTextSize, abselem, elem, roomTaken, roomTakenRight, noteheadWidth, jazzchords, germanAlphabet)\n\t\t\troomTaken = ret.roomTaken\n\t\t\troomTakenRight = ret.roomTakenRight\n\t\t} else {\n\t\t\tfor (var j = 0; j < name.length; j++) {\n\t\t\t\tret = chordString(name[j].text, pos, rel_position, isAnnotation, font, klass, attr, getTextSize, abselem, elem, roomTaken, roomTakenRight, noteheadWidth, jazzchords, germanAlphabet)\n\t\t\t\troomTaken = ret.roomTaken\n\t\t\t\troomTakenRight = ret.roomTakenRight\n\t\t\t}\n\t\t}\n\t}\n\treturn { roomTaken: roomTaken, roomTakenRight: roomTakenRight };\n};\n\nfunction chordString(chordString, pos, rel_position, isAnnotation, font, klass, attr, getTextSize, abselem, elem, roomTaken, roomTakenRight, noteheadWidth, jazzchords, germanAlphabet) {\n\tvar chords = chordString.split(\"\\n\");\n\tfor (var j = chords.length - 1; j >= 0; j--) { // parse these in opposite order because we place them from bottom to top.\n\t\tvar chord = chords[j];\n\t\tvar x = 0;\n\t\tvar y;\n\t\tif (!isAnnotation)\n\t\t\tchord = translateChord(chord, jazzchords, germanAlphabet);\n\t\tvar dim = getTextSize.calc(chord, font, klass);\n\t\tvar chordWidth = dim.width;\n\t\tvar chordHeight = dim.height / spacing.STEP;\n\t\tswitch (pos) {\n\t\t\tcase \"left\":\n\t\t\t\troomTaken += chordWidth + 7;\n\t\t\t\tx = -roomTaken; // TODO-PER: This is just a guess from trial and error\n\t\t\t\ty = elem.averagepitch;\n\t\t\t\tabselem.addExtra(new RelativeElement(chord, x, chordWidth + 4, y, {\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\theight: chordHeight,\n\t\t\t\t\tdim: attr,\n\t\t\t\t\tposition: \"left\"\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t\tcase \"right\":\n\t\t\t\troomTakenRight += 4;\n\t\t\t\tx = roomTakenRight;// TODO-PER: This is just a guess from trial and error\n\t\t\t\ty = elem.averagepitch;\n\t\t\t\tabselem.addRight(new RelativeElement(chord, x, chordWidth + 4, y, {\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\theight: chordHeight,\n\t\t\t\t\tdim: attr,\n\t\t\t\t\tposition: \"right\"\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t\tcase \"below\":\n\t\t\t\t// setting the y-coordinate to undefined for now: it will be overwritten later on, after we figure out what the highest element on the line is.\n\t\t\t\tabselem.addRight(new RelativeElement(chord, 0, 0, undefined, {\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\tposition: \"below\",\n\t\t\t\t\theight: chordHeight,\n\t\t\t\t\tdim: attr,\n\t\t\t\t\trealWidth: chordWidth\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t\tcase \"above\":\n\t\t\t\t// setting the y-coordinate to undefined for now: it will be overwritten later on, after we figure out what the highest element on the line is.\n\t\t\t\tabselem.addRight(new RelativeElement(chord, 0, 0, undefined, {\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\tposition: \"above\",\n\t\t\t\t\theight: chordHeight,\n\t\t\t\t\tdim: attr,\n\t\t\t\t\trealWidth: chordWidth\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tif (rel_position) {\n\t\t\t\t\tvar relPositionY = rel_position.y + 3 * spacing.STEP; // TODO-PER: this is a fudge factor to make it line up with abcm2ps\n\t\t\t\t\tabselem.addRight(new RelativeElement(chord, x + rel_position.x, 0, elem.minpitch + relPositionY / spacing.STEP, {\n\t\t\t\t\t\tposition: \"relative\",\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\theight: chordHeight,\n\t\t\t\t\t\tdim: attr\n\t\t\t\t\t}));\n\t\t\t\t} else {\n\t\t\t\t\t// setting the y-coordinate to undefined for now: it will be overwritten later on, after we figure out what the highest element on the line is.\n\t\t\t\t\tvar pos2 = 'above';\n\t\t\t\t\tif (elem.positioning && elem.positioning.chordPosition)\n\t\t\t\t\t\tpos2 = elem.positioning.chordPosition;\n\n\t\t\t\t\tif (pos2 !== 'hidden') {\n\t\t\t\t\t\tabselem.addCentered(new RelativeElement(chord, noteheadWidth / 2, chordWidth, undefined, {\n\t\t\t\t\t\t\ttype: \"chord\",\n\t\t\t\t\t\t\tposition: pos2,\n\t\t\t\t\t\t\theight: chordHeight,\n\t\t\t\t\t\t\tdim: attr,\n\t\t\t\t\t\t\trealWidth: chordWidth\n\t\t\t\t\t\t}));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t}\n\t}\n\treturn { roomTaken: roomTaken, roomTakenRight: roomTakenRight };\n}\nmodule.exports = addChord;\n","function addTextIf(rows, params, getTextSize) {\n\tif (!params.text)\n\t\treturn;\n\tif (!params.marginLeft) params.marginLeft = 0;\n\tif (!params.klass) params.klass = '';\n\tif (!params.anchor) params.anchor = 'start';\n\tif (!params.info) params.info = { startChar: -2, endChar: -2 }\n\n\tif (params.marginTop)\n\t\trows.push({ move: params.marginTop });\n\tvar attr = { left: params.marginLeft, text: params.text, font: params.font, anchor: params.anchor, startChar: params.info.startChar, endChar: params.info.endChar, 'dominant-baseline': params['dominant-baseline'] };\n\tif (params.absElemType)\n\t\tattr.absElemType = params.absElemType;\n\tif (!params.inGroup && params.klass)\n\t\tattr.klass = params.klass;\n\tif (params.name)\n\t\tattr.name = params.name;\n\n\trows.push(attr);\n\t// If there are blank lines they won't be counted by getTextSize, so just get the height of one line and multiply\n\tvar size = getTextSize.calc(\"A\", params.font, params.klass);\n\tvar numLines = params.text.split(\"\\n\").length;\n\tif (params.text[params.text.length - 1] === '\\n')\n\t\tnumLines--; // If there is a new line at the end of the string, then an extra line will be counted.\n\tif (!params.noMove) {\n\t\tvar h = (size.height * 1.1) * numLines;\n\t\trows.push({ move: Math.round(h) });\n\t\tif (params.marginBottom)\n\t\t\trows.push({ move: params.marginBottom });\n\t}\n}\n\nmodule.exports = addTextIf;\n","var calcHeight = function (staffGroup) {\n\t// the height is calculated here in a parallel way to the drawing below in hopes that both of these functions will be modified together.\n\t// TODO-PER: also add the space between staves. (That's systemStaffSeparation, which is the minimum distance between the staff LINES.)\n\tvar height = 0;\n\tfor (var i = 0; i < staffGroup.voices.length; i++) {\n\t\tvar staff = staffGroup.voices[i].staff;\n\t\tif (!staffGroup.voices[i].duplicate) {\n\t\t\theight += staff.top;\n\t\t\t//if (staff.bottom < 0)\n\t\t\theight += -staff.bottom;\n\t\t}\n\t}\n\treturn height;\n};\n\nmodule.exports = calcHeight;\n\n","// abc_create_clef.js\n\nvar AbsoluteElement = require('./elements/absolute-element');\nvar glyphs = require('./glyphs');\nvar RelativeElement = require('./elements/relative-element');\n\nvar createClef = function (elem, tuneNumber) {\n\tvar clef;\n\tvar octave = 0;\n\telem.el_type = \"clef\";\n\tvar abselem = new AbsoluteElement(elem, 0, 10, 'staff-extra clef', tuneNumber);\n\tabselem.isClef = true;\n\tswitch (elem.type) {\n\t\tcase \"treble\": clef = \"clefs.G\"; break;\n\t\tcase \"tenor\": clef = \"clefs.C\"; break;\n\t\tcase \"alto\": clef = \"clefs.C\"; break;\n\t\tcase \"bass\": clef = \"clefs.F\"; break;\n\t\tcase 'treble+8': clef = \"clefs.G\"; octave = 1; break;\n\t\tcase 'tenor+8': clef = \"clefs.C\"; octave = 1; break;\n\t\tcase 'bass+8': clef = \"clefs.F\"; octave = 1; break;\n\t\tcase 'alto+8': clef = \"clefs.C\"; octave = 1; break;\n\t\tcase 'treble-8': clef = \"clefs.G\"; octave = -1; break;\n\t\tcase 'tenor-8': clef = \"clefs.C\"; octave = -1; break;\n\t\tcase 'bass-8': clef = \"clefs.F\"; octave = -1; break;\n\t\tcase 'alto-8': clef = \"clefs.C\"; octave = -1; break;\n\t\tcase 'none': return null;\n\t\tcase 'perc': clef = \"clefs.perc\"; break;\n\t\tdefault: abselem.addFixed(new RelativeElement(\"clef=\" + elem.type, 0, 0, undefined, { type: \"debug\" }));\n\t}\n\t// if (elem.verticalPos) {\n\t// pitch = elem.verticalPos;\n\t// }\n\tvar dx = 5;\n\tif (clef) {\n\t\tvar height = glyphs.symbolHeightInPitches(clef);\n\t\tvar ofs = clefOffsets(clef);\n\t\tabselem.addRight(new RelativeElement(clef, dx, glyphs.getSymbolWidth(clef), elem.clefPos, { top: height + elem.clefPos + ofs, bottom: elem.clefPos + ofs }));\n\n\t\tif (octave !== 0) {\n\t\t\tvar scale = 2 / 3;\n\t\t\tvar adjustspacing = (glyphs.getSymbolWidth(clef) - glyphs.getSymbolWidth(\"8\") * scale) / 2;\n\t\t\tvar pitch = (octave > 0) ? abselem.top + 3 : abselem.bottom - 1;\n\t\t\tvar top = (octave > 0) ? abselem.top + 3 : abselem.bottom - 3;\n\t\t\tvar bottom = top - 2;\n\t\t\tif (elem.type === \"bass-8\") {\n\t\t\t\t// The placement for bass octave is a little different. It should hug the clef.\n\t\t\t\tpitch = 3;\n\t\t\t\tadjustspacing = 0;\n\t\t\t}\n\t\t\tabselem.addRight(new RelativeElement(\"8\", dx + adjustspacing, glyphs.getSymbolWidth(\"8\") * scale, pitch, {\n\t\t\t\tscalex: scale,\n\t\t\t\tscaley: scale,\n\t\t\t\ttop: top,\n\t\t\t\tbottom: bottom\n\t\t\t}));\n\t\t\t//abselem.top += 2;\n\t\t}\n\t}\n\treturn abselem;\n};\n\nfunction clefOffsets(clef) {\n\tswitch (clef) {\n\t\tcase \"clefs.G\": return -5;\n\t\tcase \"clefs.C\": return -4;\n\t\tcase \"clefs.F\": return -4;\n\t\tcase \"clefs.perc\": return -2;\n\t\tdefault: return 0;\n\t}\n}\n\nmodule.exports = createClef;\n","// abc_create_key_signature.js\n\nvar AbsoluteElement = require('./elements/absolute-element');\nvar glyphs = require('./glyphs');\nvar RelativeElement = require('./elements/relative-element');\n\nvar createKeySignature = function (elem, tuneNumber) {\n\telem.el_type = \"keySignature\";\n\tif (!elem.accidentals || elem.accidentals.length === 0)\n\t\treturn null;\n\tvar abselem = new AbsoluteElement(elem, 0, 10, 'staff-extra key-signature', tuneNumber);\n\tabselem.isKeySig = true;\n\tvar dx = 0;\n\telem.accidentals.forEach(function (acc) {\n\t\tvar symbol;\n\t\tvar fudge = 0;\n\t\tswitch (acc.acc) {\n\t\t\tcase \"sharp\": symbol = \"accidentals.sharp\"; fudge = -3; break;\n\t\t\tcase \"natural\": symbol = \"accidentals.nat\"; break;\n\t\t\tcase \"flat\": symbol = \"accidentals.flat\"; fudge = -1.2; break;\n\t\t\tcase \"quartersharp\": symbol = \"accidentals.halfsharp\"; fudge = -2.5; break;\n\t\t\tcase \"quarterflat\": symbol = \"accidentals.halfflat\"; fudge = -1.2; break;\n\t\t\tdefault: symbol = \"accidentals.flat\";\n\t\t}\n\t\tabselem.addRight(new RelativeElement(symbol, dx, glyphs.getSymbolWidth(symbol), acc.verticalPos, { thickness: glyphs.symbolHeightInPitches(symbol), top: acc.verticalPos + glyphs.symbolHeightInPitches(symbol) + fudge, bottom: acc.verticalPos + fudge }));\n\t\tdx += glyphs.getSymbolWidth(symbol) + 2;\n\t}, this);\n\treturn abselem;\n};\n\nmodule.exports = createKeySignature;\n","var glyphs = require('./glyphs');\nvar RelativeElement = require('./elements/relative-element');\n\nvar createNoteHead = function (abselem, c, pitchelem, options) {\n\tif (!options) options = {};\n\tvar dir = (options.dir !== undefined) ? options.dir : null;\n\tvar headx = (options.headx !== undefined) ? options.headx : 0;\n\tvar extrax = (options.extrax !== undefined) ? options.extrax : 0;\n\tvar flag = (options.flag !== undefined) ? options.flag : null;\n\tvar dot = (options.dot !== undefined) ? options.dot : 0;\n\tvar dotshiftx = (options.dotshiftx !== undefined) ? options.dotshiftx : 0;\n\tvar scale = (options.scale !== undefined) ? options.scale : 1;\n\tvar accidentalSlot = (options.accidentalSlot !== undefined) ? options.accidentalSlot : [];\n\tvar shouldExtendStem = (options.shouldExtendStem !== undefined) ? options.shouldExtendStem : false;\n\tvar printAccidentals = (options.printAccidentals !== undefined) ? options.printAccidentals : true;\n\n\t// TODO scale the dot as well\n\tvar pitch = pitchelem.verticalPos;\n\tvar notehead;\n\tvar accidentalshiftx = 0;\n\tvar newDotShiftX = 0;\n\tvar extraLeft = 0;\n\tif (c === undefined)\n\t\tabselem.addFixed(new RelativeElement(\"pitch is undefined\", 0, 0, 0, { type: \"debug\" }));\n\telse if (c === \"\") {\n\t\tnotehead = new RelativeElement(null, 0, 0, pitch);\n\t} else {\n\t\tvar shiftheadx = headx;\n\t\tif (pitchelem.printer_shift) {\n\t\t\tvar adjust = (pitchelem.printer_shift === \"same\") ? 1 : 0;\n\t\t\tshiftheadx = (dir === \"down\") ? -glyphs.getSymbolWidth(c) * scale + adjust : glyphs.getSymbolWidth(c) * scale - adjust;\n\t\t}\n\t\tvar opts = { scalex: scale, scaley: scale, thickness: glyphs.symbolHeightInPitches(c) * scale, name: pitchelem.name };\n\t\tnotehead = new RelativeElement(c, shiftheadx, glyphs.getSymbolWidth(c) * scale, pitch, opts);\n\t\tnotehead.stemDir = dir;\n\t\tif (flag) {\n\t\t\tvar pos = pitch + ((dir === \"down\") ? -7 : 7) * scale;\n\t\t\t// if this is a regular note, (not grace or tempo indicator) then the stem will have been stretched to the middle line if it is far from the center.\n\t\t\tif (shouldExtendStem) {\n\t\t\t\tif (dir === \"down\" && pos > 6)\n\t\t\t\t\tpos = 6;\n\t\t\t\tif (dir === \"up\" && pos < 6)\n\t\t\t\t\tpos = 6;\n\t\t\t}\n\t\t\t//if (scale===1 && (dir===\"down\")?(pos>6):(pos<6)) pos=6;\n\t\t\tvar xdelta = (dir === \"down\") ? headx : headx + notehead.w - 0.6;\n\t\t\tabselem.addRight(new RelativeElement(flag, xdelta, glyphs.getSymbolWidth(flag) * scale, pos, { scalex: scale, scaley: scale }));\n\t\t}\n\t\tnewDotShiftX = notehead.w + dotshiftx - 2 + 5 * dot;\n\t\tfor (; dot > 0; dot--) {\n\t\t\tvar dotadjusty = (1 - Math.abs(pitch) % 2); //PER: take abs value of the pitch. And the shift still happens on ledger lines.\n\t\t\tabselem.addRight(new RelativeElement(\"dots.dot\", notehead.w + dotshiftx - 2 + 5 * dot, glyphs.getSymbolWidth(\"dots.dot\"), pitch + dotadjusty));\n\t\t}\n\t}\n\tif (notehead)\n\t\tnotehead.highestVert = pitchelem.highestVert;\n\n\tif (printAccidentals && pitchelem.accidental) {\n\t\tvar symb;\n\t\tswitch (pitchelem.accidental) {\n\t\t\tcase \"quartersharp\":\n\t\t\t\tsymb = \"accidentals.halfsharp\";\n\t\t\t\tbreak;\n\t\t\tcase \"dblsharp\":\n\t\t\t\tsymb = \"accidentals.dblsharp\";\n\t\t\t\tbreak;\n\t\t\tcase \"sharp\":\n\t\t\t\tsymb = \"accidentals.sharp\";\n\t\t\t\tbreak;\n\t\t\tcase \"quarterflat\":\n\t\t\t\tsymb = \"accidentals.halfflat\";\n\t\t\t\tbreak;\n\t\t\tcase \"flat\":\n\t\t\t\tsymb = \"accidentals.flat\";\n\t\t\t\tbreak;\n\t\t\tcase \"dblflat\":\n\t\t\t\tsymb = \"accidentals.dblflat\";\n\t\t\t\tbreak;\n\t\t\tcase \"natural\":\n\t\t\t\tsymb = \"accidentals.nat\";\n\t\t}\n\t\t// if a note is at least a sixth away, it can share a slot with another accidental\n\t\tvar accSlotFound = false;\n\t\tvar accPlace = extrax;\n\t\tfor (var j = 0; j < accidentalSlot.length; j++) {\n\t\t\tif (pitch - accidentalSlot[j][0] >= 6) {\n\t\t\t\taccidentalSlot[j][0] = pitch;\n\t\t\t\taccPlace = accidentalSlot[j][1];\n\t\t\t\taccSlotFound = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (accSlotFound === false) {\n\t\t\taccPlace -= (glyphs.getSymbolWidth(symb) * scale + 2);\n\t\t\taccidentalSlot.push([pitch, accPlace]);\n\t\t\taccidentalshiftx = (glyphs.getSymbolWidth(symb) * scale + 2);\n\t\t}\n\t\tvar h = glyphs.symbolHeightInPitches(symb);\n\t\tabselem.addExtra(new RelativeElement(symb, accPlace, glyphs.getSymbolWidth(symb), pitch, { scalex: scale, scaley: scale, top: pitch + h / 2, bottom: pitch - h / 2 }));\n\t\textraLeft = glyphs.getSymbolWidth(symb) / 2; // TODO-PER: We need a little extra width if there is an accidental, but I'm not sure why it isn't the full width of the accidental.\n\t}\n\n\treturn { notehead: notehead, accidentalshiftx: accidentalshiftx, dotshiftx: newDotShiftX, extraLeft: extraLeft };\n\n};\n\nmodule.exports = createNoteHead;\n","// abc_create_time_signature.js\n\nvar AbsoluteElement = require('./elements/absolute-element');\nvar glyphs = require('./glyphs');\nvar RelativeElement = require('./elements/relative-element');\n\nvar createTimeSignature = function (elem, tuneNumber) {\n\telem.el_type = \"timeSignature\";\n\tvar abselem = new AbsoluteElement(elem, 0, 10, 'staff-extra time-signature', tuneNumber);\n\tif (elem.type === \"specified\") {\n\t\tvar x = 0;\n\t\tfor (var i = 0; i < elem.value.length; i++) {\n\t\t\tif (i !== 0) {\n\t\t\t\tabselem.addRight(new RelativeElement('+', x + 1, glyphs.getSymbolWidth(\"+\"), 6, { thickness: glyphs.symbolHeightInPitches(\"+\") }));\n\t\t\t\tx += glyphs.getSymbolWidth(\"+\") + 2;\n\t\t\t}\n\t\t\tif (elem.value[i].den) {\n\t\t\t\tvar numWidth = 0;\n\t\t\t\tfor (var i2 = 0; i2 < elem.value[i].num.length; i2++)\n\t\t\t\t\tnumWidth += glyphs.getSymbolWidth(elem.value[i].num[i2]);\n\t\t\t\tvar denWidth = 0;\n\t\t\t\tfor (i2 = 0; i2 < elem.value[i].num.length; i2++)\n\t\t\t\t\tdenWidth += glyphs.getSymbolWidth(elem.value[i].den[i2]);\n\t\t\t\tvar maxWidth = Math.max(numWidth, denWidth);\n\t\t\t\tabselem.addRight(new RelativeElement(elem.value[i].num, x + (maxWidth - numWidth) / 2, numWidth, 8, { thickness: glyphs.symbolHeightInPitches(elem.value[i].num[0]) }));\n\t\t\t\tabselem.addRight(new RelativeElement(elem.value[i].den, x + (maxWidth - denWidth) / 2, denWidth, 4, { thickness: glyphs.symbolHeightInPitches(elem.value[i].den[0]) }));\n\t\t\t\tx += maxWidth\n\t\t\t} else {\n\t\t\t\tvar thisWidth = 0;\n\t\t\t\tfor (var i3 = 0; i3 < elem.value[i].num.length; i3++)\n\t\t\t\t\tthisWidth += glyphs.getSymbolWidth(elem.value[i].num[i3]);\n\t\t\t\tabselem.addRight(new RelativeElement(elem.value[i].num, x, thisWidth, 6, { thickness: glyphs.symbolHeightInPitches(elem.value[i].num[0]) }));\n\t\t\t\tx += thisWidth;\n\t\t\t}\n\t\t}\n\t} else if (elem.type === \"common_time\") {\n\t\tabselem.addRight(new RelativeElement(\"timesig.common\", 0, glyphs.getSymbolWidth(\"timesig.common\"), 6, { thickness: glyphs.symbolHeightInPitches(\"timesig.common\") }));\n\n\t} else if (elem.type === \"cut_time\") {\n\t\tabselem.addRight(new RelativeElement(\"timesig.cut\", 0, glyphs.getSymbolWidth(\"timesig.cut\"), 6, { thickness: glyphs.symbolHeightInPitches(\"timesig.cut\") }));\n\t} else if (elem.type === \"tempus_imperfectum\") {\n\t\tabselem.addRight(new RelativeElement(\"timesig.imperfectum\", 0, glyphs.getSymbolWidth(\"timesig.imperfectum\"), 6, { thickness: glyphs.symbolHeightInPitches(\"timesig.imperfectum\") }));\n\t} else if (elem.type === \"tempus_imperfectum_prolatio\") {\n\t\tabselem.addRight(new RelativeElement(\"timesig.imperfectum2\", 0, glyphs.getSymbolWidth(\"timesig.imperfectum2\"), 6, { thickness: glyphs.symbolHeightInPitches(\"timesig.imperfectum2\") }));\n\t} else if (elem.type === \"tempus_perfectum\") {\n\t\tabselem.addRight(new RelativeElement(\"timesig.perfectum\", 0, glyphs.getSymbolWidth(\"timesig.perfectum\"), 6, { thickness: glyphs.symbolHeightInPitches(\"timesig.perfectum\") }));\n\t} else if (elem.type === \"tempus_perfectum_prolatio\") {\n\t\tabselem.addRight(new RelativeElement(\"timesig.perfectum2\", 0, glyphs.getSymbolWidth(\"timesig.perfectum2\"), 6, { thickness: glyphs.symbolHeightInPitches(\"timesig.perfectum2\") }));\n\t} else {\n\t\tconsole.log(\"time signature:\", elem);\n\t}\n\treturn abselem;\n};\n\nmodule.exports = createTimeSignature;\n","// abc_decoration.js: Creates a data structure suitable for printing a line of abc\n\nvar DynamicDecoration = require('./elements/dynamic-decoration');\nvar CrescendoElem = require('./elements/crescendo-element');\nvar GlissandoElem = require('./elements/glissando-element');\nvar glyphs = require('./glyphs');\nvar RelativeElement = require('./elements/relative-element');\nvar TieElem = require('./elements/tie-element');\n\nvar Decoration = function Decoration() {\n\tthis.startDiminuendoX = undefined;\n\tthis.startCrescendoX = undefined;\n\tthis.minTop = 12;\t// TODO-PER: this is assuming a 5-line staff. Pass that info in.\n\tthis.minBottom = 0;\n};\n\nvar closeDecoration = function (voice, decoration, pitch, width, abselem, roomtaken, dir, minPitch, accentAbove) {\n\tvar yPos;\n\tfor (var i = 0; i < decoration.length; i++) {\n\t\tif (decoration[i] === \"staccato\" || decoration[i] === \"tenuto\" || (decoration[i] === \"accent\" && !accentAbove)) {\n\t\t\tvar symbol = \"scripts.\" + decoration[i];\n\t\t\tif (decoration[i] === \"accent\") symbol = \"scripts.sforzato\";\n\t\t\tif (yPos === undefined)\n\t\t\t\tyPos = (dir === \"down\") ? pitch + 2 : minPitch - 2;\n\t\t\telse\n\t\t\t\tyPos = (dir === \"down\") ? yPos + 2 : yPos - 2;\n\t\t\tif (decoration[i] === \"accent\") {\n\t\t\t\t// Always place the accent three pitches away, no matter whether that is a line or space.\n\t\t\t\tif (dir === \"up\") yPos--;\n\t\t\t\telse yPos++;\n\t\t\t} else {\n\t\t\t\t// don't place on a stave line. The stave lines are 2,4,6,8,10\n\t\t\t\tswitch (yPos) {\n\t\t\t\t\tcase 2:\n\t\t\t\t\tcase 4:\n\t\t\t\t\tcase 6:\n\t\t\t\t\tcase 8:\n\t\t\t\t\tcase 10:\n\t\t\t\t\t\tif (dir === \"up\") yPos--;\n\t\t\t\t\t\telse yPos++;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (pitch > 9) yPos++; // take up some room of those that are above\n\t\t\tvar deltaX = width / 2;\n\t\t\tif (glyphs.getSymbolAlign(symbol) !== \"center\") {\n\t\t\t\tdeltaX -= (glyphs.getSymbolWidth(symbol) / 2);\n\t\t\t}\n\t\t\tabselem.addFixedX(new RelativeElement(symbol, deltaX, glyphs.getSymbolWidth(symbol), yPos));\n\t\t}\n\t\tif (decoration[i] === \"slide\" && abselem.heads[0]) {\n\t\t\tvar yPos2 = abselem.heads[0].pitch;\n\t\t\tyPos2 -= 2; // TODO-PER: not sure what this fudge factor is.\n\t\t\tvar blank1 = new RelativeElement(\"\", -roomtaken - 15, 0, yPos2 - 1);\n\t\t\tvar blank2 = new RelativeElement(\"\", -roomtaken - 5, 0, yPos2 + 1);\n\t\t\tabselem.addFixedX(blank1);\n\t\t\tabselem.addFixedX(blank2);\n\t\t\tvoice.addOther(new TieElem({ anchor1: blank1, anchor2: blank2, fixedY: true }));\n\t\t}\n\t}\n\tif (yPos === undefined)\n\t\tyPos = pitch;\n\n\treturn { above: yPos, below: abselem.bottom };\n};\n\nvar volumeDecoration = function (voice, decoration, abselem, positioning) {\n\tfor (var i = 0; i < decoration.length; i++) {\n\t\tswitch (decoration[i]) {\n\t\t\tcase \"p\":\n\t\t\tcase \"mp\":\n\t\t\tcase \"pp\":\n\t\t\tcase \"ppp\":\n\t\t\tcase \"pppp\":\n\t\t\tcase \"f\":\n\t\t\tcase \"ff\":\n\t\t\tcase \"fff\":\n\t\t\tcase \"ffff\":\n\t\t\tcase \"sfz\":\n\t\t\tcase \"mf\":\n\t\t\t\tvar elem = new DynamicDecoration(abselem, decoration[i], positioning);\n\t\t\t\tvoice.addOther(elem);\n\t\t}\n\t}\n};\n\nvar compoundDecoration = function (decoration, pitch, width, abselem, dir) {\n\tfunction highestPitch() {\n\t\tif (abselem.heads.length === 0)\n\t\t\treturn 10;\t// TODO-PER: I don't know if this can happen, but we'll return the top of the staff if so.\n\t\tvar pitch = abselem.heads[0].pitch;\n\t\tfor (var i = 1; i < abselem.heads.length; i++)\n\t\t\tpitch = Math.max(pitch, abselem.heads[i].pitch);\n\t\treturn pitch;\n\t}\n\tfunction lowestPitch() {\n\t\tif (abselem.heads.length === 0)\n\t\t\treturn 2;\t// TODO-PER: I don't know if this can happen, but we'll return the bottom of the staff if so.\n\t\tvar pitch = abselem.heads[0].pitch;\n\t\tfor (var i = 1; i < abselem.heads.length; i++)\n\t\t\tpitch = Math.min(pitch, abselem.heads[i].pitch);\n\t\treturn pitch;\n\t}\n\tfunction compoundDecoration(symbol, count) {\n\t\tvar placement = (dir === 'down') ? lowestPitch() + 1 : highestPitch() + 9;\n\t\tif (dir !== 'down' && count === 1)\n\t\t\tplacement--;\n\t\tvar deltaX = width / 2;\n\t\tdeltaX += (dir === 'down') ? -5 : 3;\n\t\tfor (var i = 0; i < count; i++) {\n\t\t\tplacement -= 1;\n\t\t\tabselem.addFixedX(new RelativeElement(symbol, deltaX, glyphs.getSymbolWidth(symbol), placement));\n\t\t}\n\t}\n\n\tfor (var i = 0; i < decoration.length; i++) {\n\t\tswitch (decoration[i]) {\n\t\t\tcase \"/\": compoundDecoration(\"flags.ugrace\", 1); break;\n\t\t\tcase \"//\": compoundDecoration(\"flags.ugrace\", 2); break;\n\t\t\tcase \"///\": compoundDecoration(\"flags.ugrace\", 3); break;\n\t\t\tcase \"////\": compoundDecoration(\"flags.ugrace\", 4); break;\n\t\t}\n\t}\n};\n\nvar stackedDecoration = function (decoration, width, abselem, yPos, positioning, minTop, minBottom, accentAbove) {\n\tfunction incrementPlacement(placement, height) {\n\t\tif (placement === 'above')\n\t\t\tyPos.above += height;\n\t\telse\n\t\t\tyPos.below -= height;\n\t}\n\tfunction getPlacement(placement) {\n\t\tvar y;\n\t\tif (placement === 'above') {\n\t\t\ty = yPos.above;\n\t\t\tif (y < minTop)\n\t\t\t\ty = minTop;\n\t\t} else {\n\t\t\ty = yPos.below;\n\t\t\tif (y > minBottom)\n\t\t\t\ty = minBottom;\n\t\t}\n\t\treturn y;\n\t}\n\tfunction textDecoration(text, placement, anchor) {\n\t\tvar y = getPlacement(placement);\n\t\tvar textFudge = 2;\n\t\tvar textHeight = 5;\n\t\t// TODO-PER: Get the height of the current font and use that for the thickness.\n\t\tabselem.addFixedX(new RelativeElement(text, width / 2, 0, y + textFudge, { type: \"decoration\", klass: 'ornament', thickness: 3, anchor: anchor }));\n\n\t\tincrementPlacement(placement, textHeight);\n\t}\n\tfunction symbolDecoration(symbol, placement) {\n\t\tvar deltaX = width / 2;\n\t\tif (glyphs.getSymbolAlign(symbol) !== \"center\") {\n\t\t\tdeltaX -= (glyphs.getSymbolWidth(symbol) / 2);\n\t\t}\n\t\tvar height = glyphs.symbolHeightInPitches(symbol) + 1; // adding a little padding so nothing touches.\n\t\tvar y = getPlacement(placement);\n\t\ty = (placement === 'above') ? y + height / 2 : y - height / 2;// Center the element vertically.\n\t\tabselem.addFixedX(new RelativeElement(symbol, deltaX, glyphs.getSymbolWidth(symbol), y, { klass: 'ornament', thickness: glyphs.symbolHeightInPitches(symbol), position: placement }));\n\n\t\tincrementPlacement(placement, height);\n\t}\n\n\tvar symbolList = {\n\t\t\"+\": \"scripts.stopped\",\n\t\t\"open\": \"scripts.open\",\n\t\t\"snap\": \"scripts.snap\",\n\t\t\"wedge\": \"scripts.wedge\",\n\t\t\"thumb\": \"scripts.thumb\",\n\t\t\"shortphrase\": \"scripts.shortphrase\",\n\t\t\"mediumphrase\": \"scripts.mediumphrase\",\n\t\t\"longphrase\": \"scripts.longphrase\",\n\t\t\"trill\": \"scripts.trill\",\n\t\t\"roll\": \"scripts.roll\",\n\t\t\"irishroll\": \"scripts.roll\",\n\t\t\"marcato\": \"scripts.umarcato\",\n\t\t\"dmarcato\": \"scripts.dmarcato\",\n\t\t\"umarcato\": \"scripts.umarcato\",\n\t\t\"turn\": \"scripts.turn\",\n\t\t\"uppermordent\": \"scripts.prall\",\n\t\t\"pralltriller\": \"scripts.prall\",\n\t\t\"mordent\": \"scripts.mordent\",\n\t\t\"lowermordent\": \"scripts.mordent\",\n\t\t\"downbow\": \"scripts.downbow\",\n\t\t\"upbow\": \"scripts.upbow\",\n\t\t\"fermata\": \"scripts.ufermata\",\n\t\t\"invertedfermata\": \"scripts.dfermata\",\n\t\t\"breath\": \",\",\n\t\t\"coda\": \"scripts.coda\",\n\t\t\"segno\": \"scripts.segno\"\n\t};\n\n\tvar hasOne = false;\n\tfor (var i = 0; i < decoration.length; i++) {\n\t\tswitch (decoration[i]) {\n\t\t\tcase \"0\":\n\t\t\tcase \"1\":\n\t\t\tcase \"2\":\n\t\t\tcase \"3\":\n\t\t\tcase \"4\":\n\t\t\tcase \"5\":\n\t\t\tcase \"D.C.\":\n\t\t\tcase \"D.S.\":\n\t\t\t\ttextDecoration(decoration[i], positioning, 'middle');\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"D.C.alcoda\":\n\t\t\t\ttextDecoration(\"D.C. al coda\", positioning, 'end');\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"D.C.alfine\":\n\t\t\t\ttextDecoration(\"D.C. al fine\", positioning, 'end');\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"D.S.alcoda\":\n\t\t\t\ttextDecoration(\"D.S. al coda\", positioning, 'end');\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"D.S.alfine\":\n\t\t\t\ttextDecoration(\"D.S. al fine\", positioning, 'end');\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"fine\":\n\t\t\t\ttextDecoration(\"FINE\", positioning, 'middle');\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"+\":\n\t\t\tcase \"open\":\n\t\t\tcase \"snap\":\n\t\t\tcase \"wedge\":\n\t\t\tcase \"thumb\":\n\t\t\tcase \"shortphrase\":\n\t\t\tcase \"mediumphrase\":\n\t\t\tcase \"longphrase\":\n\t\t\tcase \"trill\":\n\t\t\tcase \"roll\":\n\t\t\tcase \"irishroll\":\n\t\t\tcase \"marcato\":\n\t\t\tcase \"dmarcato\":\n\t\t\tcase \"turn\":\n\t\t\tcase \"uppermordent\":\n\t\t\tcase \"pralltriller\":\n\t\t\tcase \"mordent\":\n\t\t\tcase \"lowermordent\":\n\t\t\tcase \"downbow\":\n\t\t\tcase \"upbow\":\n\t\t\tcase \"fermata\":\n\t\t\tcase \"breath\":\n\t\t\tcase \"umarcato\":\n\t\t\tcase \"coda\":\n\t\t\tcase \"segno\":\n\t\t\t\tsymbolDecoration(symbolList[decoration[i]], positioning);\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"invertedfermata\":\n\t\t\t\tsymbolDecoration(symbolList[decoration[i]], 'below');\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"mark\":\n\t\t\t\tabselem.klass = \"mark\";\n\t\t\t\tbreak;\n\t\t\tcase \"accent\":\n\t\t\t\tif (accentAbove) {\n\t\t\t\t\tsymbolDecoration(\"scripts.sforzato\", positioning);\n\t\t\t\t\thasOne = true;\n\t\t\t\t}\n\t\t\t\tbreak;\t\n\t\t}\n\t}\n\treturn hasOne;\n};\n\nfunction leftDecoration(decoration, abselem, roomtaken) {\n\tfor (var i = 0; i < decoration.length; i++) {\n\t\tswitch (decoration[i]) {\n\t\t\tcase \"arpeggio\":\n\t\t\t\t// The arpeggio symbol is the height of a note (that is, two Y units). This stacks as many as we need to go from the\n\t\t\t\t// top note to the bottom note. The arpeggio should also be a little taller than the stacked notes, so there is an extra\n\t\t\t\t// one drawn and it is offset by half of a note height (that is, one Y unit).\n\t\t\t\tfor (var j = abselem.abcelem.minpitch - 1; j <= abselem.abcelem.maxpitch; j += 2) {\n\t\t\t\t\tabselem.addExtra(\n\t\t\t\t\t\tnew RelativeElement(\n\t\t\t\t\t\t\t\"scripts.arpeggio\",\n\t\t\t\t\t\t\t-glyphs.getSymbolWidth(\"scripts.arpeggio\") * 2 - roomtaken,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\tj + 2,\n\t\t\t\t\t\t\t{ klass: 'ornament', thickness: glyphs.symbolHeightInPitches(\"scripts.arpeggio\") }\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\nDecoration.prototype.dynamicDecoration = function (voice, decoration, abselem, positioning) {\n\tvar diminuendo;\n\tvar crescendo;\n\tvar glissando;\n\tfor (var i = 0; i < decoration.length; i++) {\n\t\tswitch (decoration[i]) {\n\t\t\tcase \"diminuendo(\":\n\t\t\t\tthis.startDiminuendoX = abselem;\n\t\t\t\tdiminuendo = undefined;\n\t\t\t\tbreak;\n\t\t\tcase \"diminuendo)\":\n\t\t\t\tdiminuendo = { start: this.startDiminuendoX, stop: abselem };\n\t\t\t\tthis.startDiminuendoX = undefined;\n\t\t\t\tbreak;\n\t\t\tcase \"crescendo(\":\n\t\t\t\tthis.startCrescendoX = abselem;\n\t\t\t\tcrescendo = undefined;\n\t\t\t\tbreak;\n\t\t\tcase \"crescendo)\":\n\t\t\t\tcrescendo = { start: this.startCrescendoX, stop: abselem };\n\t\t\t\tthis.startCrescendoX = undefined;\n\t\t\t\tbreak;\n\t\t\tcase '~(':\n\t\t\tcase \"glissando(\":\n\t\t\t\tthis.startGlissandoX = abselem;\n\t\t\t\tglissando = undefined;\n\t\t\t\tbreak;\n\t\t\tcase '~)':\n\t\t\tcase \"glissando)\":\n\t\t\t\tglissando = { start: this.startGlissandoX, stop: abselem };\n\t\t\t\tthis.startGlissandoX = undefined;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tif (diminuendo) {\n\t\tvoice.addOther(new CrescendoElem(diminuendo.start, diminuendo.stop, \">\", positioning));\n\t}\n\tif (crescendo) {\n\t\tvoice.addOther(new CrescendoElem(crescendo.start, crescendo.stop, \"<\", positioning));\n\t}\n\tif (glissando) {\n\t\tvoice.addOther(new GlissandoElem(glissando.start, glissando.stop));\n\t}\n};\n\nDecoration.prototype.createDecoration = function (voice, decoration, pitch, width, abselem, roomtaken, dir, minPitch, positioning, hasVocals, accentAbove) {\n\tif (!positioning)\n\t\tpositioning = { ornamentPosition: 'above', volumePosition: hasVocals ? 'above' : 'below', dynamicPosition: hasVocals ? 'above' : 'below' };\n\t// These decorations don't affect the placement of other decorations\n\tvolumeDecoration(voice, decoration, abselem, positioning.volumePosition);\n\tthis.dynamicDecoration(voice, decoration, abselem, positioning.dynamicPosition);\n\tcompoundDecoration(decoration, pitch, width, abselem, dir);\n\n\t// treat staccato, accent, and tenuto first (may need to shift other markers)\n\tvar yPos = closeDecoration(voice, decoration, pitch, width, abselem, roomtaken, dir, minPitch, accentAbove);\n\t// yPos is an object containing 'above' and 'below'. That is the placement of the next symbol on either side.\n\n\tyPos.above = Math.max(yPos.above, this.minTop);\n\tyPos.below = Math.min(yPos.below, minPitch);\n\tvar hasOne = stackedDecoration(decoration, width, abselem, yPos, positioning.ornamentPosition, this.minTop, minPitch, accentAbove);\n\t//if (hasOne) {\n\t\t//\t\t\tabselem.top = Math.max(yPos.above + 3, abselem.top); // TODO-PER: Not sure why we need this fudge factor.\n\t//}\n\tleftDecoration(decoration, abselem, roomtaken);\n};\n\nmodule.exports = Decoration;\n","// abc_absolute_element.js: Definition of the AbsoluteElement class.\n\nvar highlight = require(\"../../interactive/highlight\");\nvar unhighlight = require(\"../../interactive/unhighlight\");\n\n// Everything that is placed in the SVG is first created as an absolute element. This is one unit of graphic information.\n// That is, it embodies a concept: a clef, a time signature, a bar line,etc. or most complexly:\n// a note with its accidental, grace note, chord symbol, trill, stem, eighth flags, etc.\n// In the largest sense, these are placed on the page at a particular place that is determined during the layout phase.\n// This object doesn't contain any of the drawing information, though. That information is contained in an array of\n// RelativeElements as the \"children\" of this class.\n// During the layout phase, the width of all the children is calculated and the X coordinate of the absolute element is set.\n//\n// So, after the AbsoluteElement is placed, then its children can be placed relative to that. There are different types of\n// relative elements that are placed with different rules:\n// 1) Fixed - these elements don't move relative to the absolute element's coordinates. These are things like the notehead,\n// any ledger lines, accidentals, etc.\n// 2) Slotted - these elements can move vertically and don't get Y coordinates until after the absolute element is placed.\n// These are things like the chord symbol, many decorations, the lyrics, etc.\n//\n// Relative elements are also classified by how they are related. This could be:\n// 1) Increases the absolute element's width to the left. This doesn't change the center point of\n// the absolute element, so adding a sharp to the note won't move it to the right. However, if the elements\n// are close together then this enforces a minimum distance.\n// 2) Has no effect on the width. Annotations and the tempo act like this. No matter how long they are the width doesn't change.\n// 3) Increases the absolute element's width to the right. This doesn't change the center point,\n// but it will increase the minimum distance.\n// 4) Sets the width on both sides. This is the note heads. They are centered on both sides of the absolute element's X coordinate.\n\n// duration - actual musical duration - different from notehead duration in triplets. refer to abcelem to get the notehead duration\n// minspacing - spacing which must be taken on top of the width defined by the duration\n// type is a meta-type for the element. It is not necessary for drawing, but it is useful to make semantic sense of the element. For instance, it can be used in the element's class name.\nvar AbsoluteElement = function AbsoluteElement(abcelem, duration, minspacing, type, tuneNumber, options) {\n\t//\tconsole.log(\"Absolute:\",abcelem, duration, minspacing, type, tuneNumber, options);\n\tif (!options)\n\t\toptions = {};\n\tthis.tuneNumber = tuneNumber;\n\tthis.abcelem = abcelem;\n\tthis.duration = duration;\n\tthis.durationClass = options.durationClassOveride ? options.durationClassOveride : this.duration;\n\tthis.minspacing = minspacing || 0;\n\tthis.x = 0;\n\tthis.children = [];\n\tthis.heads = [];\n\tthis.extra = [];\n\tthis.extraw = 0;\n\tthis.w = 0;\n\tthis.right = [];\n\tthis.invisible = false;\n\tthis.bottom = undefined;\n\tthis.top = undefined;\n\tthis.type = type;\n\n\t// The following are the dimensions of the fixed part of the element.\n\t// That is, the chord text will be a different height depending on lot of factors, but the 8th flag will always be in the same place.\n\tthis.fixed = { w: 0, t: undefined, b: undefined }; // there is no x-coord here, because that is set later.\n\n\t// these are the heights of all of the vertical elements that can't be placed until the end of the line.\n\t// the vertical order of elements that are above is: tempo, part, volume/dynamic, ending/chord, lyric\n\t// the vertical order of elements that are below is: lyric, chord, volume/dynamic\n\tthis.specialY = {\n\t\ttempoHeightAbove: 0,\n\t\tpartHeightAbove: 0,\n\t\tvolumeHeightAbove: 0,\n\t\tdynamicHeightAbove: 0,\n\t\tendingHeightAbove: 0,\n\t\tchordHeightAbove: 0,\n\t\tlyricHeightAbove: 0,\n\n\t\tlyricHeightBelow: 0,\n\t\tchordHeightBelow: 0,\n\t\tvolumeHeightBelow: 0,\n\t\tdynamicHeightBelow: 0\n\t};\n};\n\nAbsoluteElement.prototype.getFixedCoords = function () {\n\treturn { x: this.x, w: this.fixed.w, t: this.fixed.t, b: this.fixed.b };\n};\n\nAbsoluteElement.prototype.addExtra = function (extra) {\n\t// used for accidentals, multi-measure rest text,\n\t// left-side decorations, gracenote heads,\n\t// left annotations, gracenote stems.\n\t// if (!(extra.c && extra.c.indexOf(\"accidentals\") >= 0) &&\n\t// \t!(extra.c && extra.c.indexOf(\"arpeggio\") >= 0) &&\n\t// \textra.type !== \"multimeasure-text\" &&\n\t// \t!(extra.c === \"noteheads.quarter\" && (extra.scalex === 0.6 || extra.scalex === 0.36)) &&\n\t// \t!(extra.type === \"stem\" && extra.linewidth === -0.6) &&\n\t// \textra.position !== \"left\"\n\t// )\n\t// \tconsole.log(\"extra\", extra);\n\n\tthis.fixed.w = Math.max(this.fixed.w, extra.dx + extra.w);\n\tif (this.fixed.t === undefined) this.fixed.t = extra.top; else this.fixed.t = Math.max(this.fixed.t, extra.top);\n\tif (this.fixed.b === undefined) this.fixed.b = extra.bottom; else this.fixed.b = Math.min(this.fixed.b, extra.bottom);\n\tif (extra.dx < this.extraw) this.extraw = extra.dx;\n\tthis.extra[this.extra.length] = extra;\n\tthis._addChild(extra);\n};\n\nAbsoluteElement.prototype.addHead = function (head) {\n\tif (head.dx < this.extraw) this.extraw = head.dx;\n\tthis.heads[this.heads.length] = head;\n\tthis.addRight(head);\n};\n\nAbsoluteElement.prototype.addRight = function (right) {\n\t// // used for clefs, note heads, bar lines, stems, key-signature accidentals, non-beamed flags, dots\n\t// if (!(right.c && right.c.indexOf(\"clefs\") >= 0) &&\n\t// \t!(right.c && right.c.indexOf(\"noteheads\") >= 0) &&\n\t// \t!(right.c && right.c.indexOf(\"flags\") >= 0) &&\n\t// \t!(right.c && right.c.indexOf(\"rests\") >= 0) &&\n\t// \t!(right.c && right.c.indexOf(\"dots.dot\") >= 0) &&\n\t// \tright.type !== \"stem\" &&\n\t// \tright.type !== \"bar\" &&\n\t// \tright.type !== \"none\" && // used when an invisible anchor is needed.\n\t// \t!(this.type.indexOf(\"clef\") >= -1 && right.c === \"8\") &&\n\t// \tthis.type.indexOf(\"key-signature\") === -1 &&\n\t// \tthis.type.indexOf(\"time-signature\") === -1 &&\n\t// \t!(this.abcelem && this.abcelem.rest && this.abcelem.rest.type === \"spacer\") &&\n\t// \t!(this.abcelem && this.abcelem.rest && this.abcelem.rest.type === \"invisible\") &&\n\t// \t!(right.type === \"text\" && right.position === \"relative\") &&\n\t// \t!(right.type === \"text\" && right.position === \"right\") &&\n\t// \t!(right.type === \"text\" && right.position === \"above\") &&\n\t// \t!(right.type === \"text\" && right.position === \"below\")\n\t// )\n\t// \tconsole.log(\"right\", right);\n\t// These are the elements that are the fixed part.\n\tthis.fixed.w = Math.max(this.fixed.w, right.dx + right.w);\n\tif (right.top !== undefined) {\n\t\tif (this.fixed.t === undefined) this.fixed.t = right.top; else this.fixed.t = Math.max(this.fixed.t, right.top);\n\t}\n\tif (right.bottom !== undefined) {\n\t\tif (this.fixed.b === undefined) this.fixed.b = right.bottom; else this.fixed.b = Math.min(this.fixed.b, right.bottom);\n\t}\n\t// if (isNaN(this.fixed.t) || isNaN(this.fixed.b))\n\t// \tdebugger;\n\tif (right.dx + right.w > this.w) this.w = right.dx + right.w;\n\tthis.right[this.right.length] = right;\n\tthis._addChild(right);\n};\n\nAbsoluteElement.prototype.addFixed = function (elem) {\n\t// used for elements that can't move relative to other elements after they have been placed.\n\t// used for ledger lines, bar numbers, debug msgs, clef, key sigs, time sigs\n\tthis._addChild(elem);\n};\n\nAbsoluteElement.prototype.addFixedX = function (elem) {\n\t// used for elements that can't move horizontally relative to other elements after they have been placed.\n\t// used for parts, tempo, decorations\n\tthis._addChild(elem);\n};\n\nAbsoluteElement.prototype.addCentered = function (elem) {\n\t// // used for chord labels, lyrics\n\t// if (!(elem.type === \"chord\" && elem.position === \"above\") &&\n\t// \t!(elem.type === \"chord\" && elem.position === \"below\") &&\n\t// \telem.type !== 'lyric'\n\t// )\n\t// \tconsole.log(\"centered\", elem);\n\tvar half = elem.w / 2;\n\tif (-half < this.extraw) this.extraw = -half;\n\tthis.extra[this.extra.length] = elem;\n\tif (elem.dx + half > this.w) this.w = elem.dx + half;\n\tthis.right[this.right.length] = elem;\n\tthis._addChild(elem);\n};\n\nAbsoluteElement.prototype.setLimit = function (member, child) {\n\tif (!child[member]) return;\n\tif (!this.specialY[member])\n\t\tthis.specialY[member] = child[member];\n\telse\n\t\tthis.specialY[member] = Math.max(this.specialY[member], child[member]);\n};\n\nAbsoluteElement.prototype._addChild = function (child) {\n\t//\tconsole.log(\"Relative:\",child);\n\tchild.parent = this;\n\tthis.children[this.children.length] = child;\n\tthis.pushTop(child.top);\n\tthis.pushBottom(child.bottom);\n\tthis.setLimit('tempoHeightAbove', child);\n\tthis.setLimit('partHeightAbove', child);\n\tthis.setLimit('volumeHeightAbove', child);\n\tthis.setLimit('dynamicHeightAbove', child);\n\tthis.setLimit('endingHeightAbove', child);\n\tthis.setLimit('chordHeightAbove', child);\n\tthis.setLimit('lyricHeightAbove', child);\n\tthis.setLimit('lyricHeightBelow', child);\n\tthis.setLimit('chordHeightBelow', child);\n\tthis.setLimit('volumeHeightBelow', child);\n\tthis.setLimit('dynamicHeightBelow', child);\n};\n\nAbsoluteElement.prototype.pushTop = function (top) {\n\tif (top !== undefined) {\n\t\tif (this.top === undefined)\n\t\t\tthis.top = top;\n\t\telse\n\t\t\tthis.top = Math.max(top, this.top);\n\t}\n};\n\nAbsoluteElement.prototype.pushBottom = function (bottom) {\n\tif (bottom !== undefined) {\n\t\tif (this.bottom === undefined)\n\t\t\tthis.bottom = bottom;\n\t\telse\n\t\t\tthis.bottom = Math.min(bottom, this.bottom);\n\t}\n};\n\nAbsoluteElement.prototype.setX = function (x) {\n\tthis.x = x;\n\tfor (var i = 0; i < this.children.length; i++)\n\t\tthis.children[i].setX(x);\n};\n\nAbsoluteElement.prototype.center = function (before, after) {\n\t// Used to center whole rests\n\tvar midpoint = (after.x - before.x) / 2 + before.x;\n\tthis.x = midpoint - this.w / 2;\n\tfor (var k = 0; k < this.children.length; k++)\n\t\tthis.children[k].setX(this.x);\n};\n\nAbsoluteElement.prototype.setHint = function () {\n\tthis.hint = true;\n};\n\nAbsoluteElement.prototype.highlight = function (klass, color) {\n\thighlight.bind(this)(klass, color);\n};\n\nAbsoluteElement.prototype.unhighlight = function (klass, color) {\n\tunhighlight.bind(this)(klass, color);\n};\n\nmodule.exports = AbsoluteElement;\n","// abc_beam_element.js: Definition of the BeamElem class.\n\n// Most elements on the page are related to a particular absolute element -- notes, rests, bars, etc. Beams, however, span multiple elements.\n// This means that beams can't be laid out until the absolute elements are placed. There is the further complication that the stems for beamed\n// notes can't be laid out until the beams are because we don't know how long they will be until we know the slope of the beam and the horizontal\n// spacing of the absolute elements.\n//\n// So, when a beam is detected, a BeamElem is created, then all notes belonging to that beam are added to it. These notes are not given stems at that time.\n// Then, after the horizontal layout is complete, all of the BeamElem are iterated to set the beam position, then all of the notes that are beamed are given\n// stems. After that, we are ready for the drawing step.\n\n// There are three phases: the setup phase, when new elements are being discovered, the layout phase, when everything is calculated, and the drawing phase,\n// when the object is not changed, but is used to put the elements on the page.\n\n//\n// Setup phase\n//\nvar BeamElem = function BeamElem(stemHeight, type, flat, firstElement) {\n\t// type is \"grace\", \"up\", \"down\", or undefined. flat is used to force flat beams, as it commonly found in the grace notes of bagpipe music.\n\tthis.type = \"BeamElem\";\n\tthis.isflat = !!flat;\n\tthis.isgrace = !!(type && type === \"grace\");\n\tthis.forceup = !!(this.isgrace || (type && type === \"up\"));\n\tthis.forcedown = !!(type && type === \"down\");\n\tthis.elems = []; // all the AbsoluteElements that this beam touches. It may include embedded rests.\n\tthis.total = 0;\n\tthis.average = 6; // use middle line as start for average.\n\tthis.allrests = true;\n\tthis.stemHeight = stemHeight;\n\tthis.beams = []; // During the layout phase, this will become a list of the beams that need to be drawn.\n\tif (firstElement && firstElement.duration) {\n\t\tthis.duration = firstElement.duration;\n\t\tif (firstElement.startTriplet) {\n\t\t\tthis.duration *= firstElement.tripletMultiplier;\n\t\t}\n\t\tthis.duration = Math.round(this.duration * 1000) / 1000;\n\t} else\n\t\tthis.duration = 0;\n};\n\nBeamElem.prototype.setHint = function () {\n\tthis.hint = true;\n};\n\nBeamElem.prototype.runningDirection = function (abcelem) {\n\tvar pitch = abcelem.averagepitch;\n\tif (pitch === undefined) return; // don't include elements like spacers in beams\n\tthis.total = Math.round(this.total + pitch);\n\tif (!this.count)\n\t\tthis.count = 0;\n\tthis.count++\n};\n\nBeamElem.prototype.add = function (abselem) {\n\tvar pitch = abselem.abcelem.averagepitch;\n\tif (pitch === undefined) return; // don't include elements like spacers in beams\n\tif (!abselem.abcelem.rest)\n\t\tthis.allrests = false;\n\tabselem.beam = this;\n\tthis.elems.push(abselem);\n\tthis.total = Math.round(this.total + pitch);\n\tif (this.min === undefined || abselem.abcelem.minpitch < this.min) {\n\t\tthis.min = abselem.abcelem.minpitch;\n\t}\n\tif (this.max === undefined || abselem.abcelem.maxpitch > this.max) {\n\t\tthis.max = abselem.abcelem.maxpitch;\n\t}\n};\n\nBeamElem.prototype.addBeam = function (beam) {\n\tthis.beams.push(beam);\n};\n\nBeamElem.prototype.setStemDirection = function () {\n\t// Have to figure this out before the notes are placed because placing the notes also places the decorations.\n\tthis.average = calcAverage(this.total, this.count);\n\tif (this.forceup) {\n\t\tthis.stemsUp = true;\n\t} else if (this.forcedown) {\n\t\tthis.stemsUp = false;\n\t} else {\n\t\tvar middleLine = 6;\t// hardcoded 6 is B\n\t\tthis.stemsUp = this.average < middleLine; // true is up, false is down;\n\t}\n\tdelete this.count;\n\tthis.total = 0;\n};\n\nBeamElem.prototype.calcDir = function () {\n\tthis.average = calcAverage(this.total, this.elems.length);\n\tif (this.forceup) {\n\t\tthis.stemsUp = true;\n\t} else if (this.forcedown) {\n\t\tthis.stemsUp = false;\n\t} else {\n\t\tvar middleLine = 6;\t// hardcoded 6 is B\n\t\tthis.stemsUp = this.average < middleLine; // true is up, false is down;\n\t}\n\tvar dir = this.stemsUp ? 'up' : 'down';\n\tfor (var i = 0; i < this.elems.length; i++) {\n\t\tfor (var j = 0; j < this.elems[i].heads.length; j++) {\n\t\t\tthis.elems[i].heads[j].stemDir = dir;\n\t\t}\n\t}\n};\n\nfunction calcAverage(total, numElements) {\n\tif (!numElements)\n\t\treturn 0;\n\treturn total / numElements;\n}\n\nmodule.exports = BeamElem;\n","const addTextIf = require(\"../add-text-if\");\nconst richText = require(\"./rich-text\");\n\nfunction BottomText(metaText, width, isPrint, paddingLeft, spacing, shouldAddClasses, getTextSize) {\n\tthis.rows = [];\n\tif (metaText.unalignedWords && metaText.unalignedWords.length > 0)\n\t\tthis.unalignedWords(metaText.unalignedWords, paddingLeft, spacing, shouldAddClasses, getTextSize);\n\tthis.extraText(metaText, paddingLeft, spacing, shouldAddClasses, getTextSize);\n\tif (metaText.footer && isPrint)\n\t\tthis.footer(metaText.footer, width, paddingLeft, getTextSize);\n}\n\nBottomText.prototype.unalignedWords = function (unalignedWords, marginLeft, spacing, shouldAddClasses, getTextSize) {\n\tvar klass = shouldAddClasses ? 'abcjs-unaligned-words' : ''\n\tvar defFont = 'wordsfont';\n\tvar space = getTextSize.calc(\"i\", defFont, klass);\n\t\n\tthis.rows.push({ move: spacing.words });\n\t\n\taddMultiLine(this.rows, '', unalignedWords, marginLeft, defFont, \"unalignedWords\", \"unalignedWords\", klass, \"unalignedWords\", spacing, shouldAddClasses, getTextSize)\n\tthis.rows.push({ move: space.height });\n}\n\nfunction addSingleLine(rows, preface, text, marginLeft, klass, shouldAddClasses, getTextSize) {\n\tif (text) {\n\t\tif (preface) {\n\t\t\tif (typeof text === 'string')\n\t\t\t\ttext = preface + text\n\t\t\telse\n\t\t\t\ttext = [{text: preface}].concat(text)\n\t\t}\n\t\tklass = shouldAddClasses ? 'abcjs-extra-text '+klass : ''\n\t\trichText(rows, text, 'historyfont', klass, \"description\", marginLeft, {absElemType: \"extraText\", anchor: 'start'}, getTextSize)\n\t}\n\n}\n\nfunction addMultiLine(rows, preface, content, marginLeft, defFont, absElemType, groupName, klass, name, spacing, shouldAddClasses, getTextSize) {\n\tif (content) {\n\t\tklass = shouldAddClasses ? 'abcjs-extra-text '+klass : ''\n\t\tvar size = getTextSize.calc(\"A\", defFont, klass);\n\t\tif (typeof content === 'string') {\n\t\t\tif (preface)\n\t\t\t\tcontent = preface + \"\\n\" + content\n\t\t\taddTextIf(rows, { marginLeft: marginLeft, text: content, font: defFont, absElemType: \"extraText\", name: name, 'dominant-baseline': 'middle', klass: klass }, getTextSize);\n\t\t\t//rows.push({move: size.height*3/4})\n\t\t} else {\n\t\t\trows.push({ startGroup: groupName, klass: klass, name: name });\n\t\t\trows.push({move: spacing.info})\n\t\t\tif (preface) {\n\t\t\t\taddTextIf(rows, { marginLeft: marginLeft, text: preface, font: defFont, absElemType: \"extraText\", name: name, 'dominant-baseline': 'middle' }, getTextSize);\n\t\t\t\trows.push({move: size.height*3/4})\n\t\t\t}\n\n\t\t\tfor (var j = 0; j < content.length; j++) {\n\t\t\t\trichText(rows, content[j], defFont, '', name, marginLeft, {anchor: 'start'}, getTextSize)\n\t\t\t\t// TODO-PER: Hack! the string and rich lines should have used up the same amount of space without this.\n\t\t\t\tif (j < content.length-1 && typeof content[j] === 'string' && typeof content[j+1] !== 'string')\n\t\t\t\t\trows.push({move: size.height*3/4})\n\t\t\t}\n\t\t\trows.push({ endGroup: groupName, absElemType: absElemType, startChar: -1, endChar: -1, name: name });\n\t\t\trows.push({move: size.height})\n\t\t}\n\t}\n}\nBottomText.prototype.extraText = function (metaText, marginLeft, spacing, shouldAddClasses, getTextSize) {\n\taddSingleLine(this.rows, \"Book: \", metaText.book, marginLeft, 'abcjs-book', shouldAddClasses, getTextSize)\n\taddSingleLine(this.rows, \"Source: \", metaText.source, marginLeft, 'abcjs-source', shouldAddClasses, getTextSize)\n\taddSingleLine(this.rows, \"Discography: \", metaText.discography, marginLeft, 'abcjs-discography', shouldAddClasses, getTextSize)\n\n\taddMultiLine(this.rows, 'Notes:', metaText.notes, marginLeft, 'historyfont', \"extraText\", \"notes\", 'abcjs-notes', \"description\", spacing, shouldAddClasses, getTextSize)\n\n\taddSingleLine(this.rows, \"Transcription: \", metaText.transcription, marginLeft, 'abcjs-transcription', shouldAddClasses, getTextSize)\n\n\taddMultiLine(this.rows, \"History:\", metaText.history, marginLeft, 'historyfont', \"extraText\", \"history\", 'abcjs-history', \"description\", spacing, shouldAddClasses, getTextSize)\n\n\taddSingleLine(this.rows, \"Copyright: \", metaText['abc-copyright'], marginLeft, 'abcjs-copyright', shouldAddClasses, getTextSize)\n\taddSingleLine(this.rows, \"Creator: \", metaText['abc-creator'], marginLeft, 'abcjs-creator', shouldAddClasses, getTextSize)\n\taddSingleLine(this.rows, \"Edited By: \", metaText['abc-edited-by'], marginLeft, 'abcjs-edited-by', shouldAddClasses, getTextSize)\n\n}\n\nBottomText.prototype.footer = function (footer, width, paddingLeft, getTextSize) {\n\tvar klass = 'header meta-bottom';\n\tvar font = \"footerfont\";\n\tthis.rows.push({ startGroup: \"footer\", klass: klass });\n\t// Note: whether there is a footer or not doesn't change any other positioning, so this doesn't change the Y-coordinate.\n\taddTextIf(this.rows, { marginLeft: paddingLeft, text: footer.left, font: font, klass: klass, name: \"footer\" }, getTextSize);\n\taddTextIf(this.rows, { marginLeft: paddingLeft + width / 2, text: footer.center, font: font, klass: klass, anchor: 'middle', name: \"footer\" }, getTextSize);\n\taddTextIf(this.rows, { marginLeft: paddingLeft + width, text: footer.right, font: font, klass: klass, anchor: 'end', name: \"footer\" }, getTextSize);\n}\n\nmodule.exports = BottomText;\n","// abc_brace_element.js: Definition of the BraceElement class.\n\nvar BraceElem = function BraceElem(voice, type) {\n\tthis.startVoice = voice;\n\tthis.type = type;\n};\n\nBraceElem.prototype.setBottomStaff = function (voice) {\n\tthis.endVoice = voice;\n\t// If only the start brace has a name then the name belongs to the brace instead of the staff.\n\tif (this.startVoice.header && !this.endVoice.header) {\n\t\tthis.header = this.startVoice.header;\n\t\tdelete this.startVoice.header;\n\t}\n};\n\nBraceElem.prototype.continuing = function (voice) {\n\t// If the final staff isn't present, then use the last one we saw.\n\tthis.lastContinuedVoice = voice;\n};\n\nBraceElem.prototype.getWidth = function () {\n\treturn 10; // TODO-PER: right now the drawing function doesn't vary the width at all. If it does in the future then this will change.\n};\n\nBraceElem.prototype.isStartVoice = function (voice) {\n\tif (this.startVoice && this.startVoice.staff && this.startVoice.staff.voices.length > 0 && this.startVoice.staff.voices[0] === voice)\n\t\treturn true;\n\treturn false;\n};\n\nmodule.exports = BraceElem;\n","// abc_crescendo_element.js: Definition of the CrescendoElem class.\n\nvar CrescendoElem = function CrescendoElem(anchor1, anchor2, dir, positioning) {\n\tthis.type = \"CrescendoElem\";\n\tthis.anchor1 = anchor1; // must have a .x and a .parent property or be null (means starts at the \"beginning\" of the line - after keysig)\n\tthis.anchor2 = anchor2; // must have a .x property or be null (means ends at the end of the line)\n\tthis.dir = dir; // either \"<\" or \">\"\n\tif (positioning === 'above')\n\t\tthis.dynamicHeightAbove = 6;\n\telse\n\t\tthis.dynamicHeightBelow = 6;\n\tthis.pitch = undefined; // This will be set later\n};\n\nmodule.exports = CrescendoElem;\n","// abc_dynamic_decoration.js: Definition of the DynamicDecoration class.\n\nvar DynamicDecoration = function DynamicDecoration(anchor, dec, position) {\n\tthis.type = \"DynamicDecoration\";\n\tthis.anchor = anchor;\n\tthis.dec = dec;\n\tif (position === 'below')\n\t\tthis.volumeHeightBelow = 6;\n\telse\n\t\tthis.volumeHeightAbove = 6;\n\tthis.pitch = undefined; // This will be set later\n};\n\nmodule.exports = DynamicDecoration;\n","// abc_ending_element.js: Definition of the EndingElement class.\n\nvar EndingElem = function EndingElem(text, anchor1, anchor2) {\n\tthis.type = \"EndingElem\";\n\tthis.text = text; // text to be displayed top left\n\tthis.anchor1 = anchor1; // must have a .x property or be null (means starts at the \"beginning\" of the line - after keysig)\n\tthis.anchor2 = anchor2; // must have a .x property or be null (means ends at the end of the line)\n\tthis.endingHeightAbove = 5;\n\tthis.pitch = undefined; // This will be set later\n};\n\nmodule.exports = EndingElem;\n","function FreeText(info, vskip, getFontAndAttr, paddingLeft, width, getTextSize) {\n\tvar text = info.text;\n\tthis.rows = [];\n\tvar size;\n\tif (vskip)\n\t\tthis.rows.push({ move: vskip });\n\tvar hash = getFontAndAttr.calc('textfont', 'defined-text');\n\tif (text === \"\") {\t// we do want to print out blank lines if they have been specified.\n\t\tthis.rows.push({ move: hash.attr['font-size'] * 2 }); // move the distance of the line, plus the distance of the margin, which is also one line.\n\t} else if (typeof text === 'string') {\n\t\tthis.rows.push({ move: hash.attr['font-size'] / 2 }); // TODO-PER: move down some - the y location should be the top of the text, but we output text specifying the center line.\n\t\tthis.rows.push({ left: paddingLeft, text: text, font: 'textfont', klass: 'defined-text', anchor: \"start\", startChar: info.startChar, endChar: info.endChar, absElemType: \"freeText\", name: \"free-text\" });\n\t\tsize = getTextSize.calc(text, 'textfont', 'defined-text');\n\t\tthis.rows.push({ move: size.height });\n\t} else if (text) {\n\t\tvar maxHeight = 0;\n\t\tvar leftSide = paddingLeft;\n\t\tvar currentFont = 'textfont';\n\t\tfor (var i = 0; i < text.length; i++) {\n\t\t\tif (text[i].font) {\n\t\t\t\tcurrentFont = text[i].font;\n\t\t\t} else\n\t\t\t\tcurrentFont = 'textfont';\n\t\t\tthis.rows.push({ left: leftSide, text: text[i].text, font: currentFont, klass: 'defined-text', anchor: 'start', startChar: info.startChar, endChar: info.endChar, absElemType: \"freeText\", name: \"free-text\" });\n\t\t\tsize = getTextSize.calc(text[i].text, getFontAndAttr.calc(currentFont, 'defined-text').font, 'defined-text');\n\t\t\tleftSide += size.width + size.height / 2; // add a little padding to the right side. The height of the font is probably a close enough approximation.\n\t\t\tmaxHeight = Math.max(maxHeight, size.height)\n\t\t}\n\t\tthis.rows.push({ move: maxHeight });\n\t} else {\n\t\t// The structure is wrong here: it requires an array to do centering, but it shouldn't have.\n\t\tif (info.length === 1) {\n\t\t\tvar x = width / 2;\n\t\t\tthis.rows.push({ left: x, text: info[0].text, font: 'textfont', klass: 'defined-text', anchor: 'middle', startChar: info.startChar, endChar: info.endChar, absElemType: \"freeText\", name: \"free-text\" });\n\t\t\tsize = getTextSize.calc(info[0].text, 'textfont', 'defined-text');\n\t\t\tthis.rows.push({ move: size.height });\n\t\t}\n\t}\n}\n\nmodule.exports = FreeText;\n","var GlissandoElem = function GlissandoElem(anchor1, anchor2) {\n\tthis.type = \"GlissandoElem\";\n\tthis.anchor1 = anchor1; // must have a .x and a .parent property or be null (means starts at the \"beginning\" of the line - after keysig)\n\tthis.anchor2 = anchor2; // must have a .x property or be null (means ends at the end of the line)\n};\n\nmodule.exports = GlissandoElem;\n","// abc_relative_element.js: Definition of the RelativeElement class.\n\nvar RelativeElement = function RelativeElement(c, dx, w, pitch, opt) {\n\topt = opt || {};\n\tthis.x = 0;\n\tthis.c = c; // character or path or string\n\tthis.dx = dx; // relative x position\n\tthis.w = w; // minimum width taken up by this element (can include gratuitous space)\n\tthis.pitch = pitch; // relative y position by pitch\n\tthis.scalex = opt.scalex || 1; // should the character/path be scaled?\n\tthis.scaley = opt.scaley || 1; // should the character/path be scaled?\n\tthis.type = opt.type || \"symbol\"; // cheap types.\n\tthis.pitch2 = opt.pitch2;\n\tthis.linewidth = opt.linewidth;\n\tthis.klass = opt.klass;\n\tthis.anchor = opt.anchor ? opt.anchor : 'middle'\n\tthis.top = pitch;\n\tif (this.pitch2 !== undefined && this.pitch2 > this.top) this.top = this.pitch2;\n\tthis.bottom = pitch;\n\tif (this.pitch2 !== undefined && this.pitch2 < this.bottom) this.bottom = this.pitch2;\n\tif (opt.thickness) {\n\t\tthis.top += opt.thickness / 2;\n\t\tthis.bottom -= opt.thickness / 2;\n\t}\n\tif (opt.stemHeight) {\n\t\tif (opt.stemHeight > 0)\n\t\t\tthis.top += opt.stemHeight;\n\t\telse\n\t\t\tthis.bottom += opt.stemHeight;\n\t}\n\tif (opt.dim)\n\t\tthis.dim = opt.dim;\n\tif (opt.position)\n\t\tthis.position = opt.position;\n\tthis.height = opt.height ? opt.height : 4; // The +1 is to give a little bit of padding.\n\tif (opt.top)\n\t\tthis.top = opt.top;\n\tif (opt.bottom)\n\t\tthis.bottom = opt.bottom;\n\tif (opt.name)\n\t\tthis.name = opt.name;\n\telse if (this.c)\n\t\tthis.name = this.c;\n\telse\n\t\tthis.name = this.type;\n\tif (opt.realWidth)\n\t\tthis.realWidth = opt.realWidth;\n\telse\n\t\tthis.realWidth = this.w;\n\tthis.centerVertically = false;\n\tswitch (this.type) {\n\t\tcase \"debug\":\n\t\t\tthis.chordHeightAbove = this.height;\n\t\t\tbreak;\n\t\tcase \"lyric\":\n\t\t\tif (opt.position && opt.position === 'below')\n\t\t\t\tthis.lyricHeightBelow = this.height;\n\t\t\telse\n\t\t\t\tthis.lyricHeightAbove = this.height;\n\t\t\tbreak;\n\t\tcase \"chord\":\n\t\t\tif (opt.position && opt.position === 'below')\n\t\t\t\tthis.chordHeightBelow = this.height;\n\t\t\telse\n\t\t\t\tthis.chordHeightAbove = this.height;\n\t\t\tbreak;\n\t\tcase \"text\":\n\t\t\tif (this.pitch === undefined) {\n\t\t\t\tif (opt.position && opt.position === 'below')\n\t\t\t\t\tthis.chordHeightBelow = this.height;\n\t\t\t\telse\n\t\t\t\t\tthis.chordHeightAbove = this.height;\n\t\t\t} else\n\t\t\t\tthis.centerVertically = true;\n\t\t\tbreak;\n\t\tcase \"part\": this.partHeightAbove = this.height; break;\n\t}\n};\n\nRelativeElement.prototype.getChordDim = function () {\n\tif (this.type === \"debug\")\n\t\treturn null;\n\tif (!this.chordHeightAbove && !this.chordHeightBelow)\n\t\treturn null;\n\t// Chords are centered, annotations are left justified.\n\t// NOTE: the font reports extra space to the left and right anyway, so there is a built in margin.\n\t// We add a little margin so that items can't touch - we use half the font size as the margin, so that is 1/4 on each side.\n\t// if there is only one character that we're printing, use half of that margin.\n\t// var margin = this.dim.font.size/4;\n\t// if (this.c.length === 1)\n\t// \tmargin = margin / 2;\n\tvar margin = 0;\n\n\tvar offset = this.type === \"chord\" ? this.realWidth / 2 : 0;\n\tvar left = this.x - offset - margin;\n\tvar right = left + this.realWidth + margin;\n\treturn { left: left, right: right };\n};\n\nRelativeElement.prototype.invertLane = function (total) {\n\tif (this.lane === undefined)\n\t\tthis.lane = 0;\n\tthis.lane = total - this.lane - 1;\n};\n\nRelativeElement.prototype.putChordInLane = function (i) {\n\tthis.lane = i;\n\t// Add some extra space to account for the character's descenders.\n\tif (this.chordHeightAbove)\n\t\tthis.chordHeightAbove = (this.height * 1.25) * this.lane;\n\telse\n\t\tthis.chordHeightBelow = (this.height * 1.25) * this.lane;\n};\n\nRelativeElement.prototype.getLane = function () {\n\tif (this.lane === undefined)\n\t\treturn 0;\n\treturn this.lane;\n};\n\nRelativeElement.prototype.setX = function (x) {\n\tthis.x = x + this.dx;\n};\n\nmodule.exports = RelativeElement;\n","const addTextIf = require(\"../add-text-if\");\n\nfunction richText(rows, str, defFont, klass, name, paddingLeft, attr, getTextSize) {\n\tvar space = getTextSize.calc(\"i\", defFont, klass);\n\tif (str === '') {\n\t\trows.push({ move: space.height });\n\t} else {\n\t\tif (typeof str === 'string') {\n\t\t\taddTextIf(rows, { marginLeft: paddingLeft, text: str, font: defFont, klass: klass, marginTop: attr.marginTop, anchor: attr.anchor, absElemType: attr.absElemType, info: attr.info, name: name }, getTextSize);\n\t\t\treturn\n\t\t}\n\t\tif (attr.marginTop)\n\t\t\trows.push({move: attr.marginTop})\n\n\t\tvar largestY = 0;\n\t\tvar gap = 0;\n\t\tvar row = {\n\t\t\tleft: paddingLeft,\n\t\t\tanchor: attr.anchor,\n\t\t\tphrases: []\n\t\t}\n\t\tif (klass)\n\t\t\trow.klass = klass\n\t\trows.push(row)\n\t\tfor (var k = 0; k < str.length; k++) {\n\t\t\tvar thisWord = str[k];\n\t\t\tvar font = (thisWord.font) ? thisWord.font : getTextSize.attr(defFont, klass).font;\n\t\t\tvar phrase = {\n\t\t\t\tcontent: thisWord.text,\n\t\t\t}\n\t\t\tif (font)\n\t\t\t\tphrase.attrs = {\n\t\t\t\t\t\"font-family\": getTextSize.getFamily(font.face),\n\t\t\t\t\t\"font-size\": font.size,\n\t\t\t\t\t\"font-weight\": font.weight,\n\t\t\t\t\t\"font-style\": font.style,\n\t\t\t\t\t\"font-decoration\": font.decoration,\n\t\t\t}\n\t\t\t//if (thisWord.text) {\n\t\t\t\trow.phrases.push(phrase);\n\t\t\t\tvar size = getTextSize.calc(thisWord.text, font, klass);\n\t\t\t\tlargestY = Math.max(largestY, size.height);\n\t\t\t\tif (thisWord.text[thisWord.text.length - 1] === ' ') {\n\t\t\t\t\tgap = space.width\n\t\t\t\t}\n\t\t}\n\t\trows.push({ move: largestY });\n\t}\n}\n\nmodule.exports = richText;\n","function Separator(spaceAbove, lineLength, spaceBelow) {\n\tthis.rows = [];\n\tif (spaceAbove)\n\t\tthis.rows.push({ move: spaceAbove });\n\tthis.rows.push({ separator: lineLength, absElemType: \"separator\" });\n\tif (spaceBelow)\n\t\tthis.rows.push({ move: spaceBelow });\n}\n\nmodule.exports = Separator;\n","// abc_staff_group_element.js: Definition of the StaffGroupElement class.\n\n// StaffGroupElement contains all the elements that go together to make one line of music.\n// That might be multiple staves that are tied together, and it might be multiple voices on one staff.\n//\n// Methods:\n// constructor: some basic initialization\n// addVoice(): Called once for each voice. May add a new staff if needed.\n// finished(): Called only internally by layout()\n// layout(): This does all the layout. It sets the following: spacingunits, startx, minspace, w, and the x-coordinate of each element in each voice.\n// draw(): Calls the underlying methods on the voice objects to do the drawing. Sets y and height.\n//\n// Members:\n// staffs: an array of all the staves in this group. Each staff contains the following elements:\n// { top, bottom, highest, lowest, y }\n// voices: array of VoiceElement objects. This is mostly passed in, but the VoiceElement objects are modified here.\n//\n// spacingunits: number of relative x-units in the line. Used by the calling function to pass back in as the \"spacing\" input parameter.\n// TODO-PER: This should actually be passed back as a return value.\n// minspace: smallest space between two notes. Used by the calling function to pass back in as the \"spacing\" input parameter.\n// TODO-PER: This should actually be passed back as a return value.\n// startx: The left edge, taking the margin and the optional voice name. Used by the draw() method.\n// w: The width of the line. Used by calling function to pass back in as the \"spacing\" input parameter, and the draw() method.\n// TODO-PER: This should actually be passed back as a return value. (TODO-PER: in pixels or spacing units?)\n// y: The top of the staff group, in pixels. This is set in the draw method.\n// TODO-PER: Where is that used? It looks like it might not be needed.\n// height: Set in the draw() method to the height actually used. Used by the calling function to know where to start the next staff group.\n// TODO-PER: This should actually be set in the layout method and passed back as a return value.\nvar calcHeight = require('../calc-height');\n\nvar StaffGroupElement = function (getTextSize) {\n\tthis.getTextSize = getTextSize;\n\tthis.voices = [];\n\tthis.staffs = [];\n\tthis.brace = undefined; //tony\n\tthis.bracket = undefined;\n};\n\nStaffGroupElement.prototype.setLimit = function (member, voice) {\n\tif (!voice.specialY[member]) return;\n\tif (!voice.staff.specialY[member])\n\t\tvoice.staff.specialY[member] = voice.specialY[member];\n\telse\n\t\tvoice.staff.specialY[member] = Math.max(voice.staff.specialY[member], voice.specialY[member]);\n};\n\nStaffGroupElement.prototype.addVoice = function (voice, staffnumber, stafflines) {\n\tvar voiceNum = this.voices.length;\n\tthis.voices[voiceNum] = voice;\n\tif (this.staffs[staffnumber])\n\t\tthis.staffs[staffnumber].voices.push(voiceNum);\n\telse {\n\t\t// TODO-PER: how does the min/max change when stafflines is not 5?\n\t\tthis.staffs[this.staffs.length] = {\n\t\t\ttop: 10,\n\t\t\tbottom: 2,\n\t\t\tlines: stafflines,\n\t\t\tvoices: [voiceNum],\n\t\t\tspecialY: {\n\t\t\t\ttempoHeightAbove: 0,\n\t\t\t\tpartHeightAbove: 0,\n\t\t\t\tvolumeHeightAbove: 0,\n\t\t\t\tdynamicHeightAbove: 0,\n\t\t\t\tendingHeightAbove: 0,\n\t\t\t\tchordHeightAbove: 0,\n\t\t\t\tlyricHeightAbove: 0,\n\n\t\t\t\tlyricHeightBelow: 0,\n\t\t\t\tchordHeightBelow: 0,\n\t\t\t\tvolumeHeightBelow: 0,\n\t\t\t\tdynamicHeightBelow: 0\n\t\t\t}\n\t\t};\n\t}\n\tvoice.staff = this.staffs[staffnumber];\n};\n\nStaffGroupElement.prototype.setHeight = function () {\n\tthis.height = calcHeight(this);\n};\n\nStaffGroupElement.prototype.setWidth = function (width) {\n\tthis.w = width;\n\tfor (var i = 0; i < this.voices.length; i++) {\n\t\tthis.voices[i].setWidth(width);\n\t}\n};\n\nStaffGroupElement.prototype.setStaffLimits = function (voice) {\n\tvoice.staff.top = Math.max(voice.staff.top, voice.top);\n\tvoice.staff.bottom = Math.min(voice.staff.bottom, voice.bottom);\n\tthis.setLimit('tempoHeightAbove', voice);\n\tthis.setLimit('partHeightAbove', voice);\n\tthis.setLimit('volumeHeightAbove', voice);\n\tthis.setLimit('dynamicHeightAbove', voice);\n\tthis.setLimit('endingHeightAbove', voice);\n\tthis.setLimit('chordHeightAbove', voice);\n\tthis.setLimit('lyricHeightAbove', voice);\n\tthis.setLimit('lyricHeightBelow', voice);\n\tthis.setLimit('chordHeightBelow', voice);\n\tthis.setLimit('volumeHeightBelow', voice);\n\tthis.setLimit('dynamicHeightBelow', voice);\n};\n\nmodule.exports = StaffGroupElement;\n","function Subtitle(spaceAbove, formatting, info, center, paddingLeft, getTextSize) {\n\tthis.rows = [];\n\tif (spaceAbove)\n\t\tthis.rows.push({ move: spaceAbove });\n\tvar tAnchor = formatting.titleleft ? 'start' : 'middle';\n\tvar tLeft = formatting.titleleft ? paddingLeft : center;\n\tthis.rows.push({ left: tLeft, text: info.text, font: 'subtitlefont', klass: 'text subtitle', anchor: tAnchor, startChar: info.startChar, endChar: info.endChar, absElemType: \"subtitle\", name: \"subtitle\" });\n\tvar size = getTextSize.calc(info.text, 'subtitlefont', 'text subtitle');\n\tthis.rows.push({ move: size.height });\n}\n\nmodule.exports = Subtitle;\n","// abc_tempo_element.js: Definition of the TempoElement class.\n\nvar AbsoluteElement = require('./absolute-element');\nvar RelativeElement = require('./relative-element');\n\nvar TempoElement = function TempoElement(tempo, tuneNumber, createNoteHead) {\n\tthis.type = \"TempoElement\";\n\tthis.tempo = tempo;\n\tthis.tempo.type = \"tempo\"; /// TODO-PER: this should be set earlier, in the parser, probably.\n\tthis.tuneNumber = tuneNumber;\n\t// TODO: can these two properties be merged?\n\tthis.totalHeightInPitches = 6;\n\tthis.tempoHeightAbove = this.totalHeightInPitches;\n\tthis.pitch = undefined; // This will be set later\n\tif (this.tempo.duration && !this.tempo.suppressBpm) {\n\t\tthis.note = this.createNote(createNoteHead, tempo, tuneNumber);\n\t}\n};\n\nTempoElement.prototype.setX = function (x) {\n\tthis.x = x;\n};\n\nTempoElement.prototype.createNote = function (createNoteHead, tempo, tuneNumber) {\n\tvar temposcale = 0.75;\n\tvar duration = tempo.duration[0]; // TODO when multiple durations\n\tvar absElem = new AbsoluteElement(tempo, duration, 1, 'tempo', tuneNumber);\n\t// There aren't an infinite number of note values, but we are passed a float, so just in case something is off upstream,\n\t// merge all of the in between points.\n\tvar dot;\n\tvar flag;\n\tvar note;\n\tif (duration <= 1 / 32) { note = \"noteheads.quarter\"; flag = \"flags.u32nd\"; dot = 0; }\n\telse if (duration <= 1 / 16) { note = \"noteheads.quarter\"; flag = \"flags.u16th\"; dot = 0; }\n\telse if (duration <= 3 / 32) { note = \"noteheads.quarter\"; flag = \"flags.u16nd\"; dot = 1; }\n\telse if (duration <= 1 / 8) { note = \"noteheads.quarter\"; flag = \"flags.u8th\"; dot = 0; }\n\telse if (duration <= 3 / 16) { note = \"noteheads.quarter\"; flag = \"flags.u8th\"; dot = 1; }\n\telse if (duration <= 1 / 4) { note = \"noteheads.quarter\"; dot = 0; }\n\telse if (duration <= 3 / 8) { note = \"noteheads.quarter\"; dot = 1; }\n\telse if (duration <= 1 / 2) { note = \"noteheads.half\"; dot = 0; }\n\telse if (duration <= 3 / 4) { note = \"noteheads.half\"; dot = 1; }\n\telse if (duration <= 1) { note = \"noteheads.whole\"; dot = 0; }\n\telse if (duration <= 1.5) { note = \"noteheads.whole\"; dot = 1; }\n\telse if (duration <= 2) { note = \"noteheads.dbl\"; dot = 0; }\n\telse { note = \"noteheads.dbl\"; dot = 1; }\n\n\tvar ret = createNoteHead(absElem, note, { verticalPos: 0 }, // This is just temporary: we'll offset the vertical positioning when we get the actual vertical spot.\n\t\t{ dir: \"up\", flag: flag, dot: dot, scale: temposcale });\n\tvar tempoNote = ret.notehead;\n\tabsElem.addHead(tempoNote);\n\tvar stem;\n\tif (note !== \"noteheads.whole\" && note !== \"noteheads.dbl\") {\n\t\tvar p1 = 1 / 3 * temposcale;\n\t\tvar p2 = 5 * temposcale;\n\t\tvar dx = tempoNote.dx + tempoNote.w;\n\t\tvar width = -0.6;\n\t\tstem = new RelativeElement(null, dx, 0, p1, { \"type\": \"stem\", \"pitch2\": p2, linewidth: width });\n\t\tabsElem.addRight(stem);\n\t}\n\treturn absElem;\n};\n\nmodule.exports = TempoElement;\n","// abc_tie_element.js: Definition of the TieElement class.\n\nvar TieElem = function TieElem(options) {\n\tthis.type = \"TieElem\";\n\t//\tconsole.log(\"constructor\", options.anchor1 ? options.anchor1.pitch : \"N/A\", options.anchor2 ? options.anchor2.pitch : \"N/A\", options.isTie, options.isGrace);\n\tthis.anchor1 = options.anchor1; // must have a .x and a .pitch, and a .parent property or be null (means starts at the \"beginning\" of the line - after keysig)\n\tthis.anchor2 = options.anchor2; // must have a .x and a .pitch property or be null (means ends at the end of the line)\n\tif (options.isGrace)\n\t\tthis.isGrace = true;\n\tif (options.fixedY)\n\t\tthis.fixedY = true;\n\tif (options.stemDir)\n\t\tthis.stemDir = options.stemDir;\n\tif (options.voiceNumber !== undefined)\n\t\tthis.voiceNumber = options.voiceNumber;\n\tif (options.style !== undefined)\n\t\tthis.dotted = true;\n\tthis.internalNotes = [];\n};\n\nTieElem.prototype.addInternalNote = function (note) {\n\tthis.internalNotes.push(note);\n};\n\nTieElem.prototype.setEndAnchor = function (anchor2) {\n\t//\tconsole.log(\"end\", this.anchor1 ? this.anchor1.pitch : \"N/A\", anchor2 ? anchor2.pitch : \"N/A\", this.isTie, this.isGrace);\n\tthis.anchor2 = anchor2; // must have a .x and a .pitch property or be null (means ends at the end of the line)\n\n\t// we don't really have enough info to know what the vertical extent is yet and we won't until drawing. This will just give it enough\n\t// room on either side (we don't even know if the slur will be above yet). We need to set this so that we can make sure the voice has\n\t// at least enough room that the line doesn't get cut off if the tie or slur is the lowest thing.\n\tif (this.anchor1) {\n\t\tthis.top = Math.max(this.anchor1.pitch, this.anchor2.pitch) + 4\n\t\tthis.bottom = Math.min(this.anchor1.pitch, this.anchor2.pitch) - 4\n\t} else {\n\t\tthis.top = this.anchor2.pitch + 4\n\t\tthis.bottom = this.anchor2.pitch - 4\n\t}\n};\n\n// If we encounter a repeat sign, then we don't want to extend either a tie or a slur past it, so these are called to be a limit.\nTieElem.prototype.setStartX = function (startLimitElem) {\n\tthis.startLimitX = startLimitElem;\n};\n\nTieElem.prototype.setEndX = function (endLimitElem) {\n\tthis.endLimitX = endLimitElem;\n};\n\nTieElem.prototype.setHint = function () {\n\tthis.hint = true;\n};\n\nTieElem.prototype.calcTieDirection = function () {\n\t// The rules:\n\t// 1) If it is in a grace note group, then the direction is always BELOW.\n\t// 2) If it is in a single voice, then the direction is always OPPOSITE of the stem (or where the stem would have been in the case of whole notes.)\n\t// 3) If the stem direction is forced (probably because there are two voices on the same line), then the direction is the SAME as the stem direction.\n\n\tif (this.isGrace)\n\t\tthis.above = false;\n\telse if (this.voiceNumber === 0)\n\t\tthis.above = true;\n\telse if (this.voiceNumber > 0)\n\t\tthis.above = false;\n\telse {\n\t\tvar referencePitch;\n\t\tif (this.anchor1)\n\t\t\treferencePitch = this.anchor1.pitch;\n\t\telse if (this.anchor2)\n\t\t\treferencePitch = this.anchor2.pitch;\n\t\telse\n\t\t\treferencePitch = 14; // TODO-PER: this can't really happen normally. This would imply that a tie crossed over three lines, something like \"C-\\nz\\nC\"\n\t\t// Put the arc in the opposite direction of the stem. That isn't always the pitch if one or both of the notes are beamed with something that affects its stem.\n\t\tif ((this.anchor1 && this.anchor1.stemDir === 'down') && (this.anchor2 && this.anchor2.stemDir === \"down\"))\n\t\t\tthis.above = true;\n\t\telse if ((this.anchor1 && this.anchor1.stemDir === 'up') && (this.anchor2 && this.anchor2.stemDir === \"up\"))\n\t\t\tthis.above = false;\n\t\telse if (this.anchor1 && this.anchor2)\n\t\t\tthis.above = referencePitch >= 6;\n\t\telse if (this.anchor1)\n\t\t\tthis.above = this.anchor1.stemDir === \"down\";\n\t\telse if (this.anchor2)\n\t\t\tthis.above = this.anchor2.stemDir === \"down\";\n\t\telse\n\t\t\tthis.above = referencePitch >= 6;\n\t}\n};\n\n// From \"standard music notation practice\" by Music Publishers’ Association:\n// 1) Slurs are placed under the note heads if all stems go up.\n// 2) Slurs are placed over the note heads if all stems go down.\n// 3) If there are both up stems and down stems, prefer placing the slur over.\n// 4) When the staff has opposite stemmed voices, all slurs should be on the stemmed side.\n\nTieElem.prototype.calcSlurDirection = function () {\n\tif (this.isGrace)\n\t\tthis.above = false;\n\telse if (this.voiceNumber === 0)\n\t\tthis.above = true;\n\telse if (this.voiceNumber > 0)\n\t\tthis.above = false;\n\telse {\n\t\tvar hasDownStem = false;\n\t\tif (this.anchor1 && this.anchor1.stemDir === \"down\")\n\t\t\thasDownStem = true;\n\t\tif (this.anchor2 && this.anchor2.stemDir === \"down\")\n\t\t\thasDownStem = true;\n\t\tfor (var i = 0; i < this.internalNotes.length; i++) {\n\t\t\tvar n = this.internalNotes[i];\n\t\t\tif (n.stemDir === \"down\")\n\t\t\t\thasDownStem = true;\n\t\t}\n\t\tthis.above = hasDownStem;\n\t}\n};\n\nTieElem.prototype.calcX = function (lineStartX, lineEndX) {\n\tif (this.anchor1) {\n\t\tthis.startX = this.anchor1.x; // The normal case where there is a starting element to attach to.\n\t\tif (this.anchor1.scalex < 1) // this is a grace note - don't offset the tie as much.\n\t\t\tthis.startX -= 3;\n\t} else if (this.startLimitX)\n\t\tthis.startX = this.startLimitX.x + this.startLimitX.w; // if there is no start element, but there is a repeat mark before the start of the line.\n\telse {\n\t\tif (this.anchor2)\n\t\t\tthis.startX = this.anchor2.x - 20; // There is no element and no repeat mark: make a small arc\n\t\telse\n\t\t\tthis.startX = lineStartX; // Don't have any guidance, so extend to beginning of line\n\t}\n\tif (!this.anchor1 && this.dotted)\n\t\tthis.startX -= 3; // The arc needs to be long enough to tell that it is dotted.\n\n\tif (this.anchor2)\n\t\tthis.endX = this.anchor2.x; // The normal case where there is a starting element to attach to.\n\telse if (this.endLimitX)\n\t\tthis.endX = this.endLimitX.x; // if there is no start element, but there is a repeat mark before the start of the line.\n\telse\n\t\tthis.endX = lineEndX; // There is no element and no repeat mark: extend to the beginning of the line.\n};\n\nTieElem.prototype.calcTieY = function () {\n\t// If the tie comes from another line, then one or both anchors will be missing.\n\tif (this.anchor1)\n\t\tthis.startY = this.anchor1.pitch;\n\telse if (this.anchor2)\n\t\tthis.startY = this.anchor2.pitch;\n\telse\n\t\tthis.startY = this.above ? 14 : 0;\n\n\tif (this.anchor2)\n\t\tthis.endY = this.anchor2.pitch;\n\telse if (this.anchor1)\n\t\tthis.endY = this.anchor1.pitch;\n\telse\n\t\tthis.endY = this.above ? 14 : 0;\n};\n\n// From \"standard music notation practice\" by Music Publishers’ Association:\n// 1) If the anchor note is down stem, the slur points to the note head.\n// 2) If the anchor note is up stem, and the slur is over, then point to middle of stem.\n\nTieElem.prototype.calcSlurY = function () {\n\tif (this.anchor1 && this.anchor2) {\n\t\tif (this.above && this.anchor1.stemDir === \"up\" && !this.fixedY) {\n\t\t\tthis.startY = (this.anchor1.highestVert + this.anchor1.pitch) / 2;\n\t\t\tthis.startX += this.anchor1.w / 2; // When going to the middle of the stem, bump the line to the right a little bit to make it look right.\n\t\t} else\n\t\t\tthis.startY = this.anchor1.pitch;\n\n\t\t// If the closing note has an up stem, and it is beamed, and it isn't the first note in the beam, then the beam will get in the way.\n\t\tvar beamInterferes = this.anchor2.parent.beam && this.anchor2.parent.beam.stemsUp && this.anchor2.parent.beam.elems[0] !== this.anchor2.parent;\n\t\tvar midPoint = (this.anchor2.highestVert + this.anchor2.pitch) / 2;\n\t\tif (this.above && this.anchor2.stemDir === \"up\" && !this.fixedY && !beamInterferes && (midPoint < this.startY)) {\n\t\t\tthis.endY = midPoint;\n\t\t\tthis.endX += Math.round(this.anchor2.w / 2); // When going to the middle of the stem, bump the line to the right a little bit to make it look right.\n\t\t} else\n\t\t\tthis.endY = this.above && beamInterferes ? this.anchor2.highestVert : this.anchor2.pitch;\n\n\t\tif (this.anchor1.scalex === 1) { // Need a way to tell if this is a grace note - if so then keep the slur as close as possible. TODO-PER-HACK: this should be more declaratively determined.\n\t\t\tvar hasBeam1 = !!this.anchor1.parent.beam\n\t\t\tvar hasBeam2 = !!this.anchor2.parent.beam\n\t\t\tif (hasBeam1) {\n\t\t\t\tvar isLastInBeam = this.anchor1.parent === this.anchor1.parent.beam.elems[this.anchor1.parent.beam.elems.length-1]\n\t\t\t\tif (!isLastInBeam) {\n\t\t\t\t\t\tif (this.above)\n\t\t\t\t\t\tthis.startY = this.anchor1.parent.fixed.t\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.startY = this.anchor1.parent.fixed.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (hasBeam2) {\n\t\t\t\tvar isFirstInBeam = this.anchor2.parent === this.anchor2.parent.beam.elems[0]\n\t\t\t\tif (!isFirstInBeam) {\n\t\t\t\t\tif (this.above)\n\t\t\t\t\t\tthis.endY = this.anchor2.parent.fixed.t\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.endY = this.anchor2.parent.fixed.b\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else if (this.anchor1) {\n\t\tthis.startY = this.endY = this.anchor1.pitch;\n\t} else if (this.anchor2) {\n\t\tthis.startY = this.endY = this.anchor2.pitch;\n\t} else {\n\t\t// This is the case where the slur covers the entire line.\n\t\t// TODO-PER: figure out where the real top and bottom of the line are.\n\t\tthis.startY = this.above ? 14 : 0;\n\t\tthis.endY = this.above ? 14 : 0;\n\t}\n};\n\nTieElem.prototype.avoidCollisionAbove = function () {\n\t// Double check that an interior note in the slur isn't so high that it interferes.\n\tif (this.above) {\n\t\tvar maxInnerHeight = -50;\n\t\tfor (var i = 0; i < this.internalNotes.length; i++) {\n\t\t\tif (this.internalNotes[i].highestVert > maxInnerHeight)\n\t\t\t\tmaxInnerHeight = this.internalNotes[i].highestVert;\n\t\t}\n\t\tif (maxInnerHeight > this.startY && maxInnerHeight > this.endY)\n\t\t\tthis.startY = this.endY = maxInnerHeight - 1;\n\t}\n};\n\nmodule.exports = TieElem;\n","const addTextIf = require(\"../add-text-if\");\nconst richText = require(\"./rich-text\");\n\nfunction TopText(metaText, metaTextInfo, formatting, lines, width, isPrint, paddingLeft, spacing, shouldAddClasses, getTextSize) {\n\tthis.rows = [];\n\n\tif (metaText.header && isPrint) {\n\t\t// Note: whether there is a header or not doesn't change any other positioning, so this doesn't change the Y-coordinate.\n\t\t// This text goes above the margin, so we'll temporarily move up.\n\t\tvar headerTextHeight = getTextSize.calc(\"X\", \"headerfont\", 'abcjs-header abcjs-meta-top').height;\n\t\taddTextIf(this.rows, { marginLeft: paddingLeft, text: metaText.header.left, font: 'headerfont', klass: 'header meta-top', marginTop: -headerTextHeight, info: metaTextInfo.header, name: \"header\" }, getTextSize);\n\t\taddTextIf(this.rows, { marginLeft: paddingLeft + width / 2, text: metaText.header.center, font: 'headerfont', klass: 'header meta-top', marginTop: -headerTextHeight, anchor: 'middle', info: metaTextInfo.header, name: \"header\" }, getTextSize);\n\t\taddTextIf(this.rows, { marginLeft: paddingLeft + width, text: metaText.header.right, font: 'headerfont', klass: 'header meta-top', marginTop: -headerTextHeight, anchor: 'end', info: metaTextInfo.header, name: \"header\" }, getTextSize);\n\n\t\t//\t\tTopText.prototype.addTextIf = function (marginLeft, text, font, klass, marginTop, marginBottom, anchor, getTextSize, absElemType, noMove) {\n\t}\n\tif (isPrint)\n\t\tthis.rows.push({ move: spacing.top });\n\tvar tAnchor = formatting.titleleft ? 'start' : 'middle';\n\tvar tLeft = formatting.titleleft ? paddingLeft : paddingLeft + width / 2;\n\tif (metaText.title) {\n\t\tvar klass = shouldAddClasses ? 'abcjs-title' : ''\n\t\trichText(this.rows, metaText.title, \"titlefont\", klass, 'title', tLeft, {marginTop: spacing.title, anchor: tAnchor, absElemType: \"title\", info: metaTextInfo.title}, getTextSize)\n\t}\n\tif (lines.length) {\n\t\tvar index = 0;\n\t\twhile (index < lines.length && lines[index].subtitle) {\n\t\t\tvar klass = shouldAddClasses ? 'abcjs-text abcjs-subtitle' : ''\n\t\t\trichText(this.rows, lines[index].subtitle.text, \"subtitlefont\", klass, 'subtitle', tLeft, {marginTop: spacing.subtitle, anchor: tAnchor, absElemType: \"subtitle\", info: lines[index].subtitle}, getTextSize)\n\t\t\tindex++;\n\t\t}\n\t}\n\n\tif (metaText.rhythm || metaText.origin || metaText.composer) {\n\t\tthis.rows.push({ move: spacing.composer });\n\t\tif (metaText.rhythm && metaText.rhythm.length > 0) {\n\t\t\tvar noMove = !!(metaText.composer || metaText.origin);\n\t\t\tvar klass = shouldAddClasses ? 'abcjs-rhythm' : ''\n\t\t\taddTextIf(this.rows, { marginLeft: paddingLeft, text: metaText.rhythm, font: 'infofont', klass: klass, absElemType: \"rhythm\", noMove: noMove, info: metaTextInfo.rhythm, name: \"rhythm\" }, getTextSize);\n\t\t}\n\t\tvar hasSimpleComposerLine = true\n\t\tif (metaText.composer && typeof metaText.composer !== 'string')\n\t\t\thasSimpleComposerLine = false\n\t\tif (metaText.origin && typeof metaText.origin !== 'string')\n\t\t\thasSimpleComposerLine = false\n\t\t\t\n\t\tvar composerLine = metaText.composer ? metaText.composer : '';\n\t\tif (metaText.origin) {\n\t\t\tif (typeof composerLine === 'string' && typeof metaText.origin === 'string')\n\t\t\t\tcomposerLine += ' (' + metaText.origin + ')';\n\t\t\telse if (typeof composerLine === 'string' && typeof metaText.origin !== 'string') {\n\t\t\t\tcomposerLine = [{text:composerLine}]\n\t\t\t\tcomposerLine.push({text:\" (\"})\n\t\t\t\tcomposerLine = composerLine.concat(metaText.origin)\n\t\t\t\tcomposerLine.push({text:\")\"})\n\t\t\t} else {\n\t\t\t\tcomposerLine.push({text:\" (\"})\n\t\t\t\tcomposerLine = composerLine.concat(metaText.origin)\n\t\t\t\tcomposerLine.push({text:\")\"})\n\t\t\t}\n\t\t}\n\t\tif (composerLine) {\n\t\t\tvar klass = shouldAddClasses ? 'abcjs-composer' : ''\n\t\t\trichText(this.rows, composerLine, 'composerfont', klass, \"composer\", paddingLeft+width, {anchor: \"end\", absElemType: \"composer\", info: metaTextInfo.composer, ingroup: true}, getTextSize)\n\t\t}\n\t}\n\n\tif (metaText.author && metaText.author.length > 0) {\n\t\tvar klass = shouldAddClasses ? 'abcjs-author' : ''\n\t\trichText(this.rows, metaText.author, 'composerfont', klass, \"author\", paddingLeft+width, {anchor: \"end\", absElemType: \"author\", info: metaTextInfo.author}, getTextSize)\n\t}\n\n\tif (metaText.partOrder && metaText.partOrder.length > 0) {\n\t\tvar klass = shouldAddClasses ? 'abcjs-part-order' : ''\n\t\trichText(this.rows, metaText.partOrder, 'partsfont', klass, \"part-order\", paddingLeft, {absElemType: \"partOrder\", info: metaTextInfo.partOrder, anchor: 'start'}, getTextSize)\n\n\t}\n}\n\nmodule.exports = TopText;\n","// abc_triplet_element.js: Definition of the TripletElem class.\n\nvar TripletElem = function TripletElem(number, anchor1, options) {\n\tthis.type = \"TripletElem\";\n\tthis.anchor1 = anchor1; // must have a .x and a .parent property or be null (means starts at the \"beginning\" of the line - after key signature)\n\tthis.number = number;\n\tthis.durationClass = ('d' + (Math.round(anchor1.parent.durationClass * 1000) / 1000)).replace(/\\./, '-');\n\tthis.middleElems = []; // This is to calculate the highest interior pitch. It is used to make sure that the drawn bracket never crosses a really high middle note.\n\tthis.flatBeams = options.flatBeams;\n};\n\nTripletElem.prototype.isClosed = function () {\n\treturn !!this.anchor2;\n};\n\nTripletElem.prototype.middleNote = function (elem) {\n\tthis.middleElems.push(elem);\n};\n\nTripletElem.prototype.setCloseAnchor = function (anchor2) {\n\tthis.anchor2 = anchor2;\n\t// TODO-PER: This used to be just for beamed triplets but it looks like bracketed triplets need extra room, too. The only one that doesn't is stem down and beamed\n\t//if (this.anchor1.parent.beam)\n\tif (!this.anchor1.parent.beam || this.anchor1.stemDir === 'up')\n\t\tthis.endingHeightAbove = 4;\n};\n\nmodule.exports = TripletElem;\n","// abc_voice_element.js: Definition of the VoiceElement class.\n\nvar VoiceElement = function VoiceElement(voicenumber, voicetotal) {\n\tthis.children = [];\n\tthis.beams = [];\n\tthis.otherchildren = []; // ties, slurs, triplets\n\tthis.w = 0;\n\tthis.duplicate = false;\n\tthis.voicenumber = voicenumber; //number of the voice on a given stave (not staffgroup)\n\tthis.voicetotal = voicetotal;\n\tthis.bottom = 7;\n\tthis.top = 7;\n\tthis.specialY = {\n\t\ttempoHeightAbove: 0,\n\t\tpartHeightAbove: 0,\n\t\tvolumeHeightAbove: 0,\n\t\tdynamicHeightAbove: 0,\n\t\tendingHeightAbove: 0,\n\t\tchordHeightAbove: 0,\n\t\tlyricHeightAbove: 0,\n\n\t\tlyricHeightBelow: 0,\n\t\tchordHeightBelow: 0,\n\t\tvolumeHeightBelow: 0,\n\t\tdynamicHeightBelow: 0\n\t};\n};\n\nVoiceElement.prototype.addChild = function (absElem) {\n\t// This is always passed an AbsoluteElement\n\tif (absElem.type === 'bar') {\n\t\tvar firstItem = true;\n\t\tfor (var i = 0; firstItem && i < this.children.length; i++) {\n\t\t\tif (this.children[i].type.indexOf(\"staff-extra\") < 0 && this.children[i].type !== \"tempo\")\n\t\t\t\tfirstItem = false;\n\t\t}\n\t\tif (!firstItem) {\n\t\t\tthis.beams.push(\"bar\");\n\t\t\tthis.otherchildren.push(\"bar\");\n\t\t}\n\t}\n\tthis.children[this.children.length] = absElem;\n\tthis.setRange(absElem);\n};\n\nVoiceElement.prototype.setLimit = function (member, child) {\n\t// Sometimes we get an absolute element in here and sometimes we get some type of relative element.\n\t// If there is a \"specialY\" element, then assume it is an absolute element. If that doesn't exist, look for the\n\t// same members at the top level, because that's where they are in relative elements.\n\tvar specialY = child.specialY;\n\tif (!specialY) specialY = child;\n\tif (!specialY[member]) return;\n\tif (!this.specialY[member])\n\t\tthis.specialY[member] = specialY[member];\n\telse\n\t\tthis.specialY[member] = Math.max(this.specialY[member], specialY[member]);\n};\n\nVoiceElement.prototype.adjustRange = function (child) {\n\tif (child.bottom !== undefined)\n\t\tthis.bottom = Math.min(this.bottom, child.bottom);\n\tif (child.top !== undefined)\n\t\tthis.top = Math.max(this.top, child.top);\n};\n\nVoiceElement.prototype.setRange = function (child) {\n\tthis.adjustRange(child);\n\tthis.setLimit('tempoHeightAbove', child);\n\tthis.setLimit('partHeightAbove', child);\n\tthis.setLimit('volumeHeightAbove', child);\n\tthis.setLimit('dynamicHeightAbove', child);\n\tthis.setLimit('endingHeightAbove', child);\n\tthis.setLimit('chordHeightAbove', child);\n\tthis.setLimit('lyricHeightAbove', child);\n\tthis.setLimit('lyricHeightBelow', child);\n\tthis.setLimit('chordHeightBelow', child);\n\tthis.setLimit('volumeHeightBelow', child);\n\tthis.setLimit('dynamicHeightBelow', child);\n};\n\nVoiceElement.prototype.addOther = function (child) {\n\tthis.otherchildren.push(child);\n\tthis.setRange(child);\n};\n\nVoiceElement.prototype.addBeam = function (child) {\n\tthis.beams.push(child);\n};\n\nVoiceElement.prototype.setWidth = function (width) {\n\tthis.w = width;\n};\n\nmodule.exports = VoiceElement;\n","var spacing = require('../helpers/spacing');\n\n/**\n * Glyphs and some methods to adjust for their x and y baseline\n */\nvar glyphs =\n{\n\t'0': { d: [['M', 4.83, -14.97], ['c', 0.33, -0.03, 1.11, 0.00, 1.47, 0.06], ['c', 1.68, 0.36, 2.97, 1.59, 3.78, 3.60], ['c', 1.20, 2.97, 0.81, 6.96, -0.90, 9.27], ['c', -0.78, 1.08, -1.71, 1.71, -2.91, 1.95], ['c', -0.45, 0.09, -1.32, 0.09, -1.77, 0.00], ['c', -0.81, -0.18, -1.47, -0.51, -2.07, -1.02], ['c', -2.34, -2.07, -3.15, -6.72, -1.74, -10.20], ['c', 0.87, -2.16, 2.28, -3.42, 4.14, -3.66], ['z'], ['m', 1.11, 0.87], ['c', -0.21, -0.06, -0.69, -0.09, -0.87, -0.06], ['c', -0.54, 0.12, -0.87, 0.42, -1.17, 0.99], ['c', -0.36, 0.66, -0.51, 1.56, -0.60, 3.00], ['c', -0.03, 0.75, -0.03, 4.59, 0.00, 5.31], ['c', 0.09, 1.50, 0.27, 2.40, 0.60, 3.06], ['c', 0.24, 0.48, 0.57, 0.78, 0.96, 0.90], ['c', 0.27, 0.09, 0.78, 0.09, 1.05, 0.00], ['c', 0.39, -0.12, 0.72, -0.42, 0.96, -0.90], ['c', 0.33, -0.66, 0.51, -1.56, 0.60, -3.06], ['c', 0.03, -0.72, 0.03, -4.56, 0.00, -5.31], ['c', -0.09, -1.47, -0.27, -2.37, -0.60, -3.03], ['c', -0.24, -0.48, -0.54, -0.78, -0.93, -0.90], ['z']], w: 10.78, h: 14.959 },\n\t'1': { d: [['M', 3.30, -15.06], ['c', 0.06, -0.06, 0.21, -0.03, 0.66, 0.15], ['c', 0.81, 0.39, 1.08, 0.39, 1.83, 0.03], ['c', 0.21, -0.09, 0.39, -0.15, 0.42, -0.15], ['c', 0.12, 0.00, 0.21, 0.09, 0.27, 0.21], ['c', 0.06, 0.12, 0.06, 0.33, 0.06, 5.94], ['c', 0.00, 3.93, 0.00, 5.85, 0.03, 6.03], ['c', 0.06, 0.36, 0.15, 0.69, 0.27, 0.96], ['c', 0.36, 0.75, 0.93, 1.17, 1.68, 1.26], ['c', 0.30, 0.03, 0.39, 0.09, 0.39, 0.30], ['c', 0.00, 0.15, -0.03, 0.18, -0.09, 0.24], ['c', -0.06, 0.06, -0.09, 0.06, -0.48, 0.06], ['c', -0.42, 0.00, -0.69, -0.03, -2.10, -0.24], ['c', -0.90, -0.15, -1.77, -0.15, -2.67, 0.00], ['c', -1.41, 0.21, -1.68, 0.24, -2.10, 0.24], ['c', -0.39, 0.00, -0.42, 0.00, -0.48, -0.06], ['c', -0.06, -0.06, -0.06, -0.09, -0.06, -0.24], ['c', 0.00, -0.21, 0.06, -0.27, 0.36, -0.30], ['c', 0.75, -0.09, 1.32, -0.51, 1.68, -1.26], ['c', 0.12, -0.27, 0.21, -0.60, 0.27, -0.96], ['c', 0.03, -0.18, 0.03, -1.59, 0.03, -4.29], ['c', 0.00, -3.87, 0.00, -4.05, -0.06, -4.14], ['c', -0.09, -0.15, -0.18, -0.24, -0.39, -0.24], ['c', -0.12, 0.00, -0.15, 0.03, -0.21, 0.06], ['c', -0.03, 0.06, -0.45, 0.99, -0.96, 2.13], ['c', -0.48, 1.14, -0.90, 2.10, -0.93, 2.16], ['c', -0.06, 0.15, -0.21, 0.24, -0.33, 0.24], ['c', -0.24, 0.00, -0.42, -0.18, -0.42, -0.39], ['c', 0.00, -0.06, 3.27, -7.62, 3.33, -7.74], ['z']], w: 8.94, h: 15.058 },\n\t'2': { d: [['M', 4.23, -14.97], ['c', 0.57, -0.06, 1.68, 0.00, 2.34, 0.18], ['c', 0.69, 0.18, 1.50, 0.54, 2.01, 0.90], ['c', 1.35, 0.96, 1.95, 2.25, 1.77, 3.81], ['c', -0.15, 1.35, -0.66, 2.34, -1.68, 3.15], ['c', -0.60, 0.48, -1.44, 0.93, -3.12, 1.65], ['c', -1.32, 0.57, -1.80, 0.81, -2.37, 1.14], ['c', -0.57, 0.33, -0.57, 0.33, -0.24, 0.27], ['c', 0.39, -0.09, 1.26, -0.09, 1.68, 0.00], ['c', 0.72, 0.15, 1.41, 0.45, 2.10, 0.90], ['c', 0.99, 0.63, 1.86, 0.87, 2.55, 0.75], ['c', 0.24, -0.06, 0.42, -0.15, 0.57, -0.30], ['c', 0.12, -0.09, 0.30, -0.42, 0.30, -0.51], ['c', 0.00, -0.09, 0.12, -0.21, 0.24, -0.24], ['c', 0.18, -0.03, 0.39, 0.12, 0.39, 0.30], ['c', 0.00, 0.12, -0.15, 0.57, -0.30, 0.87], ['c', -0.54, 1.02, -1.56, 1.74, -2.79, 2.01], ['c', -0.42, 0.09, -1.23, 0.09, -1.62, 0.03], ['c', -0.81, -0.18, -1.32, -0.45, -2.01, -1.11], ['c', -0.45, -0.45, -0.63, -0.57, -0.96, -0.69], ['c', -0.84, -0.27, -1.89, 0.12, -2.25, 0.90], ['c', -0.12, 0.21, -0.21, 0.54, -0.21, 0.72], ['c', 0.00, 0.12, -0.12, 0.21, -0.27, 0.24], ['c', -0.15, 0.00, -0.27, -0.03, -0.33, -0.15], ['c', -0.09, -0.21, 0.09, -1.08, 0.33, -1.71], ['c', 0.24, -0.66, 0.66, -1.26, 1.29, -1.89], ['c', 0.45, -0.45, 0.90, -0.81, 1.92, -1.56], ['c', 1.29, -0.93, 1.89, -1.44, 2.34, -1.98], ['c', 0.87, -1.05, 1.26, -2.19, 1.20, -3.63], ['c', -0.06, -1.29, -0.39, -2.31, -0.96, -2.91], ['c', -0.36, -0.33, -0.72, -0.51, -1.17, -0.54], ['c', -0.84, -0.03, -1.53, 0.42, -1.59, 1.05], ['c', -0.03, 0.33, 0.12, 0.60, 0.57, 1.14], ['c', 0.45, 0.54, 0.54, 0.87, 0.42, 1.41], ['c', -0.15, 0.63, -0.54, 1.11, -1.08, 1.38], ['c', -0.63, 0.33, -1.20, 0.33, -1.83, 0.00], ['c', -0.24, -0.12, -0.33, -0.18, -0.54, -0.39], ['c', -0.18, -0.18, -0.27, -0.30, -0.36, -0.51], ['c', -0.24, -0.45, -0.27, -0.84, -0.21, -1.38], ['c', 0.12, -0.75, 0.45, -1.41, 1.02, -1.98], ['c', 0.72, -0.72, 1.74, -1.17, 2.85, -1.32], ['z']], w: 10.764, h: 14.97 },\n\t'3': { d: [['M', 3.78, -14.97], ['c', 0.30, -0.03, 1.41, 0.00, 1.83, 0.06], ['c', 2.22, 0.30, 3.51, 1.32, 3.72, 2.91], ['c', 0.03, 0.33, 0.03, 1.26, -0.03, 1.65], ['c', -0.12, 0.84, -0.48, 1.47, -1.05, 1.77], ['c', -0.27, 0.15, -0.36, 0.24, -0.45, 0.39], ['c', -0.09, 0.21, -0.09, 0.36, 0.00, 0.57], ['c', 0.09, 0.15, 0.18, 0.24, 0.51, 0.39], ['c', 0.75, 0.42, 1.23, 1.14, 1.41, 2.13], ['c', 0.06, 0.42, 0.06, 1.35, 0.00, 1.71], ['c', -0.18, 0.81, -0.48, 1.38, -1.02, 1.95], ['c', -0.75, 0.72, -1.80, 1.20, -3.18, 1.38], ['c', -0.42, 0.06, -1.56, 0.06, -1.95, 0.00], ['c', -1.89, -0.33, -3.18, -1.29, -3.51, -2.64], ['c', -0.03, -0.12, -0.03, -0.33, -0.03, -0.60], ['c', 0.00, -0.36, 0.00, -0.42, 0.06, -0.63], ['c', 0.12, -0.30, 0.27, -0.51, 0.51, -0.75], ['c', 0.24, -0.24, 0.45, -0.39, 0.75, -0.51], ['c', 0.21, -0.06, 0.27, -0.06, 0.60, -0.06], ['c', 0.33, 0.00, 0.39, 0.00, 0.60, 0.06], ['c', 0.30, 0.12, 0.51, 0.27, 0.75, 0.51], ['c', 0.36, 0.33, 0.57, 0.75, 0.60, 1.20], ['c', 0.00, 0.21, 0.00, 0.27, -0.06, 0.42], ['c', -0.09, 0.18, -0.12, 0.24, -0.54, 0.54], ['c', -0.51, 0.36, -0.63, 0.54, -0.60, 0.87], ['c', 0.06, 0.54, 0.54, 0.90, 1.38, 0.99], ['c', 0.36, 0.06, 0.72, 0.03, 0.96, -0.06], ['c', 0.81, -0.27, 1.29, -1.23, 1.44, -2.79], ['c', 0.03, -0.45, 0.03, -1.95, -0.03, -2.37], ['c', -0.09, -0.75, -0.33, -1.23, -0.75, -1.44], ['c', -0.33, -0.18, -0.45, -0.18, -1.98, -0.18], ['c', -1.35, 0.00, -1.41, 0.00, -1.50, -0.06], ['c', -0.18, -0.12, -0.24, -0.39, -0.12, -0.60], ['c', 0.12, -0.15, 0.15, -0.15, 1.68, -0.15], ['c', 1.50, 0.00, 1.62, 0.00, 1.89, -0.15], ['c', 0.18, -0.09, 0.42, -0.36, 0.54, -0.57], ['c', 0.18, -0.42, 0.27, -0.90, 0.30, -1.95], ['c', 0.03, -1.20, -0.06, -1.80, -0.36, -2.37], ['c', -0.24, -0.48, -0.63, -0.81, -1.14, -0.96], ['c', -0.30, -0.06, -1.08, -0.06, -1.38, 0.03], ['c', -0.60, 0.15, -0.90, 0.42, -0.96, 0.84], ['c', -0.03, 0.30, 0.06, 0.45, 0.63, 0.84], ['c', 0.33, 0.24, 0.42, 0.39, 0.45, 0.63], ['c', 0.03, 0.72, -0.57, 1.50, -1.32, 1.65], ['c', -1.05, 0.27, -2.10, -0.57, -2.10, -1.65], ['c', 0.00, -0.45, 0.15, -0.96, 0.39, -1.38], ['c', 0.12, -0.21, 0.54, -0.63, 0.81, -0.81], ['c', 0.57, -0.42, 1.38, -0.69, 2.25, -0.81], ['z']], w: 9.735, h: 14.967 },\n\t'4': { d: [['M', 8.64, -14.94], ['c', 0.27, -0.09, 0.42, -0.12, 0.54, -0.03], ['c', 0.09, 0.06, 0.15, 0.21, 0.15, 0.30], ['c', -0.03, 0.06, -1.92, 2.31, -4.23, 5.04], ['c', -2.31, 2.73, -4.23, 4.98, -4.26, 5.01], ['c', -0.03, 0.06, 0.12, 0.06, 2.55, 0.06], ['l', 2.61, 0.00], ['l', 0.00, -2.37], ['c', 0.00, -2.19, 0.03, -2.37, 0.06, -2.46], ['c', 0.03, -0.06, 0.21, -0.18, 0.57, -0.42], ['c', 1.08, -0.72, 1.38, -1.08, 1.86, -2.16], ['c', 0.12, -0.30, 0.24, -0.54, 0.27, -0.57], ['c', 0.12, -0.12, 0.39, -0.06, 0.45, 0.12], ['c', 0.06, 0.09, 0.06, 0.57, 0.06, 3.96], ['l', 0.00, 3.90], ['l', 1.08, 0.00], ['c', 1.05, 0.00, 1.11, 0.00, 1.20, 0.06], ['c', 0.24, 0.15, 0.24, 0.54, 0.00, 0.69], ['c', -0.09, 0.06, -0.15, 0.06, -1.20, 0.06], ['l', -1.08, 0.00], ['l', 0.00, 0.33], ['c', 0.00, 0.57, 0.09, 1.11, 0.30, 1.53], ['c', 0.36, 0.75, 0.93, 1.17, 1.68, 1.26], ['c', 0.30, 0.03, 0.39, 0.09, 0.39, 0.30], ['c', 0.00, 0.15, -0.03, 0.18, -0.09, 0.24], ['c', -0.06, 0.06, -0.09, 0.06, -0.48, 0.06], ['c', -0.42, 0.00, -0.69, -0.03, -2.10, -0.24], ['c', -0.90, -0.15, -1.77, -0.15, -2.67, 0.00], ['c', -1.41, 0.21, -1.68, 0.24, -2.10, 0.24], ['c', -0.39, 0.00, -0.42, 0.00, -0.48, -0.06], ['c', -0.06, -0.06, -0.06, -0.09, -0.06, -0.24], ['c', 0.00, -0.21, 0.06, -0.27, 0.36, -0.30], ['c', 0.75, -0.09, 1.32, -0.51, 1.68, -1.26], ['c', 0.21, -0.42, 0.30, -0.96, 0.30, -1.53], ['l', 0.00, -0.33], ['l', -2.70, 0.00], ['c', -2.91, 0.00, -2.85, 0.00, -3.09, -0.15], ['c', -0.18, -0.12, -0.30, -0.39, -0.27, -0.54], ['c', 0.03, -0.06, 0.18, -0.24, 0.33, -0.45], ['c', 0.75, -0.90, 1.59, -2.07, 2.13, -3.03], ['c', 0.33, -0.54, 0.84, -1.62, 1.05, -2.16], ['c', 0.57, -1.41, 0.84, -2.64, 0.90, -4.05], ['c', 0.03, -0.63, 0.06, -0.72, 0.24, -0.81], ['l', 0.12, -0.06], ['l', 0.45, 0.12], ['c', 0.66, 0.18, 1.02, 0.24, 1.47, 0.27], ['c', 0.60, 0.03, 1.23, -0.09, 2.01, -0.33], ['z']], w: 11.795, h: 14.994 },\n\t'5': { d: [['M', 1.02, -14.94], ['c', 0.12, -0.09, 0.03, -0.09, 1.08, 0.06], ['c', 2.49, 0.36, 4.35, 0.36, 6.96, -0.06], ['c', 0.57, -0.09, 0.66, -0.06, 0.81, 0.06], ['c', 0.15, 0.18, 0.12, 0.24, -0.15, 0.51], ['c', -1.29, 1.26, -3.24, 2.04, -5.58, 2.31], ['c', -0.60, 0.09, -1.20, 0.12, -1.71, 0.12], ['c', -0.39, 0.00, -0.45, 0.00, -0.57, 0.06], ['c', -0.09, 0.06, -0.15, 0.12, -0.21, 0.21], ['l', -0.06, 0.12], ['l', 0.00, 1.65], ['l', 0.00, 1.65], ['l', 0.21, -0.21], ['c', 0.66, -0.57, 1.41, -0.96, 2.19, -1.14], ['c', 0.33, -0.06, 1.41, -0.06, 1.95, 0.00], ['c', 2.61, 0.36, 4.02, 1.74, 4.26, 4.14], ['c', 0.03, 0.45, 0.03, 1.08, -0.03, 1.44], ['c', -0.18, 1.02, -0.78, 2.01, -1.59, 2.70], ['c', -0.72, 0.57, -1.62, 1.02, -2.49, 1.20], ['c', -1.38, 0.27, -3.03, 0.06, -4.20, -0.54], ['c', -1.08, -0.54, -1.71, -1.32, -1.86, -2.28], ['c', -0.09, -0.69, 0.09, -1.29, 0.57, -1.74], ['c', 0.24, -0.24, 0.45, -0.39, 0.75, -0.51], ['c', 0.21, -0.06, 0.27, -0.06, 0.60, -0.06], ['c', 0.33, 0.00, 0.39, 0.00, 0.60, 0.06], ['c', 0.30, 0.12, 0.51, 0.27, 0.75, 0.51], ['c', 0.36, 0.33, 0.57, 0.75, 0.60, 1.20], ['c', 0.00, 0.21, 0.00, 0.27, -0.06, 0.42], ['c', -0.09, 0.18, -0.12, 0.24, -0.54, 0.54], ['c', -0.18, 0.12, -0.36, 0.30, -0.42, 0.33], ['c', -0.36, 0.42, -0.18, 0.99, 0.36, 1.26], ['c', 0.51, 0.27, 1.47, 0.36, 2.01, 0.27], ['c', 0.93, -0.21, 1.47, -1.17, 1.65, -2.91], ['c', 0.06, -0.45, 0.06, -1.89, 0.00, -2.31], ['c', -0.15, -1.20, -0.51, -2.10, -1.05, -2.55], ['c', -0.21, -0.18, -0.54, -0.36, -0.81, -0.39], ['c', -0.30, -0.06, -0.84, -0.03, -1.26, 0.06], ['c', -0.93, 0.18, -1.65, 0.60, -2.16, 1.20], ['c', -0.15, 0.21, -0.27, 0.30, -0.39, 0.30], ['c', -0.15, 0.00, -0.30, -0.09, -0.36, -0.18], ['c', -0.06, -0.09, -0.06, -0.15, -0.06, -3.66], ['c', 0.00, -3.39, 0.00, -3.57, 0.06, -3.66], ['c', 0.03, -0.06, 0.09, -0.15, 0.15, -0.18], ['z']], w: 10.212, h: 14.997 },\n\t'6': { d: [['M', 4.98, -14.97], ['c', 0.36, -0.03, 1.20, 0.00, 1.59, 0.06], ['c', 0.90, 0.15, 1.68, 0.51, 2.25, 1.05], ['c', 0.57, 0.51, 0.87, 1.23, 0.84, 1.98], ['c', -0.03, 0.51, -0.21, 0.90, -0.60, 1.26], ['c', -0.24, 0.24, -0.45, 0.39, -0.75, 0.51], ['c', -0.21, 0.06, -0.27, 0.06, -0.60, 0.06], ['c', -0.33, 0.00, -0.39, 0.00, -0.60, -0.06], ['c', -0.30, -0.12, -0.51, -0.27, -0.75, -0.51], ['c', -0.39, -0.36, -0.57, -0.78, -0.57, -1.26], ['c', 0.00, -0.27, 0.00, -0.30, 0.09, -0.42], ['c', 0.03, -0.09, 0.18, -0.21, 0.30, -0.30], ['c', 0.12, -0.09, 0.30, -0.21, 0.39, -0.27], ['c', 0.09, -0.06, 0.21, -0.18, 0.27, -0.24], ['c', 0.06, -0.12, 0.09, -0.15, 0.09, -0.33], ['c', 0.00, -0.18, -0.03, -0.24, -0.09, -0.36], ['c', -0.24, -0.39, -0.75, -0.60, -1.38, -0.57], ['c', -0.54, 0.03, -0.90, 0.18, -1.23, 0.48], ['c', -0.81, 0.72, -1.08, 2.16, -0.96, 5.37], ['l', 0.00, 0.63], ['l', 0.30, -0.12], ['c', 0.78, -0.27, 1.29, -0.33, 2.10, -0.27], ['c', 1.47, 0.12, 2.49, 0.54, 3.27, 1.29], ['c', 0.48, 0.51, 0.81, 1.11, 0.96, 1.89], ['c', 0.06, 0.27, 0.06, 0.42, 0.06, 0.93], ['c', 0.00, 0.54, 0.00, 0.69, -0.06, 0.96], ['c', -0.15, 0.78, -0.48, 1.38, -0.96, 1.89], ['c', -0.54, 0.51, -1.17, 0.87, -1.98, 1.08], ['c', -1.14, 0.30, -2.40, 0.33, -3.24, 0.03], ['c', -1.50, -0.48, -2.64, -1.89, -3.27, -4.02], ['c', -0.36, -1.23, -0.51, -2.82, -0.42, -4.08], ['c', 0.30, -3.66, 2.28, -6.30, 4.95, -6.66], ['z'], ['m', 0.66, 7.41], ['c', -0.27, -0.09, -0.81, -0.12, -1.08, -0.06], ['c', -0.72, 0.18, -1.08, 0.69, -1.23, 1.71], ['c', -0.06, 0.54, -0.06, 3.00, 0.00, 3.54], ['c', 0.18, 1.26, 0.72, 1.77, 1.80, 1.74], ['c', 0.39, -0.03, 0.63, -0.09, 0.90, -0.27], ['c', 0.66, -0.42, 0.90, -1.32, 0.90, -3.24], ['c', 0.00, -2.22, -0.36, -3.12, -1.29, -3.42], ['z']], w: 9.956, h: 14.982 },\n\t'7': { d: [['M', 0.21, -14.97], ['c', 0.21, -0.06, 0.45, 0.00, 0.54, 0.15], ['c', 0.06, 0.09, 0.06, 0.15, 0.06, 0.39], ['c', 0.00, 0.24, 0.00, 0.33, 0.06, 0.42], ['c', 0.06, 0.12, 0.21, 0.24, 0.27, 0.24], ['c', 0.03, 0.00, 0.12, -0.12, 0.24, -0.21], ['c', 0.96, -1.20, 2.58, -1.35, 3.99, -0.42], ['c', 0.15, 0.12, 0.42, 0.30, 0.54, 0.45], ['c', 0.48, 0.39, 0.81, 0.57, 1.29, 0.60], ['c', 0.69, 0.03, 1.50, -0.30, 2.13, -0.87], ['c', 0.09, -0.09, 0.27, -0.30, 0.39, -0.45], ['c', 0.12, -0.15, 0.24, -0.27, 0.30, -0.30], ['c', 0.18, -0.06, 0.39, 0.03, 0.51, 0.21], ['c', 0.06, 0.18, 0.06, 0.24, -0.27, 0.72], ['c', -0.18, 0.24, -0.54, 0.78, -0.78, 1.17], ['c', -2.37, 3.54, -3.54, 6.27, -3.87, 9.00], ['c', -0.03, 0.33, -0.03, 0.66, -0.03, 1.26], ['c', 0.00, 0.90, 0.00, 1.08, 0.15, 1.89], ['c', 0.06, 0.45, 0.06, 0.48, 0.03, 0.60], ['c', -0.06, 0.09, -0.21, 0.21, -0.30, 0.21], ['c', -0.03, 0.00, -0.27, -0.06, -0.54, -0.15], ['c', -0.84, -0.27, -1.11, -0.30, -1.65, -0.30], ['c', -0.57, 0.00, -0.84, 0.03, -1.56, 0.27], ['c', -0.60, 0.18, -0.69, 0.21, -0.81, 0.15], ['c', -0.12, -0.06, -0.21, -0.18, -0.21, -0.30], ['c', 0.00, -0.15, 0.60, -1.44, 1.20, -2.61], ['c', 1.14, -2.22, 2.73, -4.68, 5.10, -8.01], ['c', 0.21, -0.27, 0.36, -0.48, 0.33, -0.48], ['c', 0.00, 0.00, -0.12, 0.06, -0.27, 0.12], ['c', -0.54, 0.30, -0.99, 0.39, -1.56, 0.39], ['c', -0.75, 0.03, -1.20, -0.18, -1.83, -0.75], ['c', -0.99, -0.90, -1.83, -1.17, -2.31, -0.72], ['c', -0.18, 0.15, -0.36, 0.51, -0.45, 0.84], ['c', -0.06, 0.24, -0.06, 0.33, -0.09, 1.98], ['c', 0.00, 1.62, -0.03, 1.74, -0.06, 1.80], ['c', -0.15, 0.24, -0.54, 0.24, -0.69, 0.00], ['c', -0.06, -0.09, -0.06, -0.15, -0.06, -3.57], ['c', 0.00, -3.42, 0.00, -3.48, 0.06, -3.57], ['c', 0.03, -0.06, 0.09, -0.12, 0.15, -0.15], ['z']], w: 10.561, h: 15.093 },\n\t'8': { d: [['M', 4.98, -14.97], ['c', 0.33, -0.03, 1.02, -0.03, 1.32, 0.00], ['c', 1.32, 0.12, 2.49, 0.60, 3.21, 1.32], ['c', 0.39, 0.39, 0.66, 0.81, 0.78, 1.29], ['c', 0.09, 0.36, 0.09, 1.08, 0.00, 1.44], ['c', -0.21, 0.84, -0.66, 1.59, -1.59, 2.55], ['l', -0.30, 0.30], ['l', 0.27, 0.18], ['c', 1.47, 0.93, 2.31, 2.31, 2.25, 3.75], ['c', -0.03, 0.75, -0.24, 1.35, -0.63, 1.95], ['c', -0.45, 0.66, -1.02, 1.14, -1.83, 1.53], ['c', -1.80, 0.87, -4.20, 0.87, -6.00, 0.03], ['c', -1.62, -0.78, -2.52, -2.16, -2.46, -3.66], ['c', 0.06, -0.99, 0.54, -1.77, 1.80, -2.97], ['c', 0.54, -0.51, 0.54, -0.54, 0.48, -0.57], ['c', -0.39, -0.27, -0.96, -0.78, -1.20, -1.14], ['c', -0.75, -1.11, -0.87, -2.40, -0.30, -3.60], ['c', 0.69, -1.35, 2.25, -2.25, 4.20, -2.40], ['z'], ['m', 1.53, 0.69], ['c', -0.42, -0.09, -1.11, -0.12, -1.38, -0.06], ['c', -0.30, 0.06, -0.60, 0.18, -0.81, 0.30], ['c', -0.21, 0.12, -0.60, 0.51, -0.72, 0.72], ['c', -0.51, 0.87, -0.42, 1.89, 0.21, 2.52], ['c', 0.21, 0.21, 0.36, 0.30, 1.95, 1.23], ['c', 0.96, 0.54, 1.74, 0.99, 1.77, 1.02], ['c', 0.09, 0.00, 0.63, -0.60, 0.99, -1.11], ['c', 0.21, -0.36, 0.48, -0.87, 0.57, -1.23], ['c', 0.06, -0.24, 0.06, -0.36, 0.06, -0.72], ['c', 0.00, -0.45, -0.03, -0.66, -0.15, -0.99], ['c', -0.39, -0.81, -1.29, -1.44, -2.49, -1.68], ['z'], ['m', -1.44, 8.07], ['l', -1.89, -1.08], ['c', -0.03, 0.00, -0.18, 0.15, -0.39, 0.33], ['c', -1.20, 1.08, -1.65, 1.95, -1.59, 3.00], ['c', 0.09, 1.59, 1.35, 2.85, 3.21, 3.24], ['c', 0.33, 0.06, 0.45, 0.06, 0.93, 0.06], ['c', 0.63, 0.00, 0.81, -0.03, 1.29, -0.27], ['c', 0.90, -0.42, 1.47, -1.41, 1.41, -2.40], ['c', -0.06, -0.66, -0.39, -1.29, -0.90, -1.65], ['c', -0.12, -0.09, -1.05, -0.63, -2.07, -1.23], ['z']], w: 10.926, h: 14.989 },\n\t'9': { d: [['M', 4.23, -14.97], ['c', 0.42, -0.03, 1.29, 0.00, 1.62, 0.06], ['c', 0.51, 0.12, 0.93, 0.30, 1.38, 0.57], ['c', 1.53, 1.02, 2.52, 3.24, 2.73, 5.94], ['c', 0.18, 2.55, -0.48, 4.98, -1.83, 6.57], ['c', -1.05, 1.26, -2.40, 1.89, -3.93, 1.83], ['c', -1.23, -0.06, -2.31, -0.45, -3.03, -1.14], ['c', -0.57, -0.51, -0.87, -1.23, -0.84, -1.98], ['c', 0.03, -0.51, 0.21, -0.90, 0.60, -1.26], ['c', 0.24, -0.24, 0.45, -0.39, 0.75, -0.51], ['c', 0.21, -0.06, 0.27, -0.06, 0.60, -0.06], ['c', 0.33, 0.00, 0.39, 0.00, 0.60, 0.06], ['c', 0.30, 0.12, 0.51, 0.27, 0.75, 0.51], ['c', 0.39, 0.36, 0.57, 0.78, 0.57, 1.26], ['c', 0.00, 0.27, 0.00, 0.30, -0.09, 0.42], ['c', -0.03, 0.09, -0.18, 0.21, -0.30, 0.30], ['c', -0.12, 0.09, -0.30, 0.21, -0.39, 0.27], ['c', -0.09, 0.06, -0.21, 0.18, -0.27, 0.24], ['c', -0.06, 0.12, -0.06, 0.15, -0.06, 0.33], ['c', 0.00, 0.18, 0.00, 0.24, 0.06, 0.36], ['c', 0.24, 0.39, 0.75, 0.60, 1.38, 0.57], ['c', 0.54, -0.03, 0.90, -0.18, 1.23, -0.48], ['c', 0.81, -0.72, 1.08, -2.16, 0.96, -5.37], ['l', 0.00, -0.63], ['l', -0.30, 0.12], ['c', -0.78, 0.27, -1.29, 0.33, -2.10, 0.27], ['c', -1.47, -0.12, -2.49, -0.54, -3.27, -1.29], ['c', -0.48, -0.51, -0.81, -1.11, -0.96, -1.89], ['c', -0.06, -0.27, -0.06, -0.42, -0.06, -0.96], ['c', 0.00, -0.51, 0.00, -0.66, 0.06, -0.93], ['c', 0.15, -0.78, 0.48, -1.38, 0.96, -1.89], ['c', 0.15, -0.12, 0.33, -0.27, 0.42, -0.36], ['c', 0.69, -0.51, 1.62, -0.81, 2.76, -0.93], ['z'], ['m', 1.17, 0.66], ['c', -0.21, -0.06, -0.57, -0.06, -0.81, -0.03], ['c', -0.78, 0.12, -1.26, 0.69, -1.41, 1.74], ['c', -0.12, 0.63, -0.15, 1.95, -0.09, 2.79], ['c', 0.12, 1.71, 0.63, 2.40, 1.77, 2.46], ['c', 1.08, 0.03, 1.62, -0.48, 1.80, -1.74], ['c', 0.06, -0.54, 0.06, -3.00, 0.00, -3.54], ['c', -0.15, -1.05, -0.51, -1.53, -1.26, -1.68], ['z']], w: 9.959, h: 14.986 },\n\t'rests.multimeasure': { d: [['M', 0, -4], ['l', 0, 16], ['l', 1, 0], ['l', 0, -5], ['l', 40, 0], ['l', 0, 5], ['l', 1, 0], ['l', 0, -16], ['l', -1, 0], ['l', 0, 5], ['l', -40, 0], ['l', 0, -5], ['z']], w: 42, h: 18 },\n\t'rests.whole': { d: [['M', 0.06, 0.03], ['l', 0.09, -0.06], ['l', 5.46, 0.00], ['l', 5.49, 0.00], ['l', 0.09, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 2.19], ['l', 0.00, 2.19], ['l', -0.06, 0.09], ['l', -0.09, 0.06], ['l', -5.49, 0.00], ['l', -5.46, 0.00], ['l', -0.09, -0.06], ['l', -0.06, -0.09], ['l', 0.00, -2.19], ['l', 0.00, -2.19], ['z']], w: 11.25, h: 4.68 },\n\t'rests.half': { d: [['M', 0.06, -4.62], ['l', 0.09, -0.06], ['l', 5.46, 0.00], ['l', 5.49, 0.00], ['l', 0.09, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 2.19], ['l', 0.00, 2.19], ['l', -0.06, 0.09], ['l', -0.09, 0.06], ['l', -5.49, 0.00], ['l', -5.46, 0.00], ['l', -0.09, -0.06], ['l', -0.06, -0.09], ['l', 0.00, -2.19], ['l', 0.00, -2.19], ['z']], w: 11.25, h: 4.68 },\n\t'rests.quarter': { d: [['M', 1.89, -11.82], ['c', 0.12, -0.06, 0.24, -0.06, 0.36, -0.03], ['c', 0.09, 0.06, 4.74, 5.58, 4.86, 5.82], ['c', 0.21, 0.39, 0.15, 0.78, -0.15, 1.26], ['c', -0.24, 0.33, -0.72, 0.81, -1.62, 1.56], ['c', -0.45, 0.36, -0.87, 0.75, -0.96, 0.84], ['c', -0.93, 0.99, -1.14, 2.49, -0.60, 3.63], ['c', 0.18, 0.39, 0.27, 0.48, 1.32, 1.68], ['c', 1.92, 2.25, 1.83, 2.16, 1.83, 2.34], ['c', 0.00, 0.18, -0.18, 0.36, -0.36, 0.39], ['c', -0.15, 0.00, -0.27, -0.06, -0.48, -0.27], ['c', -0.75, -0.75, -2.46, -1.29, -3.39, -1.08], ['c', -0.45, 0.09, -0.69, 0.27, -0.90, 0.69], ['c', -0.12, 0.30, -0.21, 0.66, -0.24, 1.14], ['c', -0.03, 0.66, 0.09, 1.35, 0.30, 2.01], ['c', 0.15, 0.42, 0.24, 0.66, 0.45, 0.96], ['c', 0.18, 0.24, 0.18, 0.33, 0.03, 0.42], ['c', -0.12, 0.06, -0.18, 0.03, -0.45, -0.30], ['c', -1.08, -1.38, -2.07, -3.36, -2.40, -4.83], ['c', -0.27, -1.05, -0.15, -1.77, 0.27, -2.07], ['c', 0.21, -0.12, 0.42, -0.15, 0.87, -0.15], ['c', 0.87, 0.06, 2.10, 0.39, 3.30, 0.90], ['l', 0.39, 0.18], ['l', -1.65, -1.95], ['c', -2.52, -2.97, -2.61, -3.09, -2.70, -3.27], ['c', -0.09, -0.24, -0.12, -0.48, -0.03, -0.75], ['c', 0.15, -0.48, 0.57, -0.96, 1.83, -2.01], ['c', 0.45, -0.36, 0.84, -0.72, 0.93, -0.78], ['c', 0.69, -0.75, 1.02, -1.80, 0.90, -2.79], ['c', -0.06, -0.33, -0.21, -0.84, -0.39, -1.11], ['c', -0.09, -0.15, -0.45, -0.60, -0.81, -1.05], ['c', -0.36, -0.42, -0.69, -0.81, -0.72, -0.87], ['c', -0.09, -0.18, 0.00, -0.42, 0.21, -0.51], ['z']], w: 7.888, h: 21.435 },\n\t'rests.8th': { d: [['M', 1.68, -6.12], ['c', 0.66, -0.09, 1.23, 0.09, 1.68, 0.51], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.09, 0.33, 0.18, 0.66, 0.21, 0.72], ['c', 0.12, 0.27, 0.33, 0.45, 0.60, 0.48], ['c', 0.12, 0.00, 0.18, 0.00, 0.33, -0.09], ['c', 0.39, -0.18, 1.32, -1.29, 1.68, -1.98], ['c', 0.09, -0.21, 0.24, -0.30, 0.39, -0.30], ['c', 0.12, 0.00, 0.27, 0.09, 0.33, 0.18], ['c', 0.03, 0.06, -0.27, 1.11, -1.86, 6.42], ['c', -1.02, 3.48, -1.89, 6.39, -1.92, 6.42], ['c', 0.00, 0.03, -0.12, 0.12, -0.24, 0.15], ['c', -0.18, 0.09, -0.21, 0.09, -0.45, 0.09], ['c', -0.24, 0.00, -0.30, 0.00, -0.48, -0.06], ['c', -0.09, -0.06, -0.21, -0.12, -0.21, -0.15], ['c', -0.06, -0.03, 0.15, -0.57, 1.68, -4.92], ['c', 0.96, -2.67, 1.74, -4.89, 1.71, -4.89], ['l', -0.51, 0.15], ['c', -1.08, 0.36, -1.74, 0.48, -2.55, 0.48], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.33, -0.45, 0.84, -0.81, 1.38, -0.90], ['z']], w: 7.534, h: 13.883 },\n\t'rests.16th': { d: [['M', 3.33, -6.12], ['c', 0.66, -0.09, 1.23, 0.09, 1.68, 0.51], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.09, 0.33, 0.18, 0.66, 0.21, 0.72], ['c', 0.15, 0.39, 0.57, 0.57, 0.87, 0.42], ['c', 0.39, -0.18, 1.20, -1.23, 1.62, -2.07], ['c', 0.06, -0.15, 0.24, -0.24, 0.36, -0.24], ['c', 0.12, 0.00, 0.27, 0.09, 0.33, 0.18], ['c', 0.03, 0.06, -0.45, 1.86, -2.67, 10.17], ['c', -1.50, 5.55, -2.73, 10.14, -2.76, 10.17], ['c', -0.03, 0.03, -0.12, 0.12, -0.24, 0.15], ['c', -0.18, 0.09, -0.21, 0.09, -0.45, 0.09], ['c', -0.24, 0.00, -0.30, 0.00, -0.48, -0.06], ['c', -0.09, -0.06, -0.21, -0.12, -0.21, -0.15], ['c', -0.06, -0.03, 0.12, -0.57, 1.44, -4.92], ['c', 0.81, -2.67, 1.47, -4.86, 1.47, -4.89], ['c', -0.03, 0.00, -0.27, 0.06, -0.54, 0.15], ['c', -1.08, 0.36, -1.77, 0.48, -2.58, 0.48], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.72, -1.05, 2.22, -1.23, 3.06, -0.42], ['c', 0.30, 0.33, 0.42, 0.60, 0.60, 1.38], ['c', 0.09, 0.45, 0.21, 0.78, 0.33, 0.90], ['c', 0.09, 0.09, 0.27, 0.18, 0.45, 0.21], ['c', 0.12, 0.00, 0.18, 0.00, 0.33, -0.09], ['c', 0.33, -0.15, 1.02, -0.93, 1.41, -1.59], ['c', 0.12, -0.21, 0.18, -0.39, 0.39, -1.08], ['c', 0.66, -2.10, 1.17, -3.84, 1.17, -3.87], ['c', 0.00, 0.00, -0.21, 0.06, -0.42, 0.15], ['c', -0.51, 0.15, -1.20, 0.33, -1.68, 0.42], ['c', -0.33, 0.06, -0.51, 0.06, -0.96, 0.06], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.33, -0.45, 0.84, -0.81, 1.38, -0.90], ['z']], w: 9.724, h: 21.383 },\n\t'rests.32nd': { d: [['M', 4.23, -13.62], ['c', 0.66, -0.09, 1.23, 0.09, 1.68, 0.51], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.09, 0.33, 0.18, 0.66, 0.21, 0.72], ['c', 0.12, 0.27, 0.33, 0.45, 0.60, 0.48], ['c', 0.12, 0.00, 0.18, 0.00, 0.27, -0.06], ['c', 0.33, -0.21, 0.99, -1.11, 1.44, -1.98], ['c', 0.09, -0.24, 0.21, -0.33, 0.39, -0.33], ['c', 0.12, 0.00, 0.27, 0.09, 0.33, 0.18], ['c', 0.03, 0.06, -0.57, 2.67, -3.21, 13.89], ['c', -1.80, 7.62, -3.30, 13.89, -3.30, 13.92], ['c', -0.03, 0.06, -0.12, 0.12, -0.24, 0.18], ['c', -0.21, 0.09, -0.24, 0.09, -0.48, 0.09], ['c', -0.24, 0.00, -0.30, 0.00, -0.48, -0.06], ['c', -0.09, -0.06, -0.21, -0.12, -0.21, -0.15], ['c', -0.06, -0.03, 0.09, -0.57, 1.23, -4.92], ['c', 0.69, -2.67, 1.26, -4.86, 1.29, -4.89], ['c', 0.00, -0.03, -0.12, -0.03, -0.48, 0.12], ['c', -1.17, 0.39, -2.22, 0.57, -3.00, 0.54], ['c', -0.42, -0.03, -0.75, -0.12, -1.11, -0.30], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.72, -1.05, 2.22, -1.23, 3.06, -0.42], ['c', 0.30, 0.33, 0.42, 0.60, 0.60, 1.38], ['c', 0.09, 0.45, 0.21, 0.78, 0.33, 0.90], ['c', 0.12, 0.09, 0.30, 0.18, 0.48, 0.21], ['c', 0.12, 0.00, 0.18, 0.00, 0.30, -0.09], ['c', 0.42, -0.21, 1.29, -1.29, 1.56, -1.89], ['c', 0.03, -0.12, 1.23, -4.59, 1.23, -4.65], ['c', 0.00, -0.03, -0.18, 0.03, -0.39, 0.12], ['c', -0.63, 0.18, -1.20, 0.36, -1.74, 0.45], ['c', -0.39, 0.06, -0.54, 0.06, -1.02, 0.06], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.72, -1.05, 2.22, -1.23, 3.06, -0.42], ['c', 0.30, 0.33, 0.42, 0.60, 0.60, 1.38], ['c', 0.09, 0.45, 0.21, 0.78, 0.33, 0.90], ['c', 0.18, 0.18, 0.51, 0.27, 0.72, 0.15], ['c', 0.30, -0.12, 0.69, -0.57, 1.08, -1.17], ['c', 0.42, -0.60, 0.39, -0.51, 1.05, -3.03], ['c', 0.33, -1.26, 0.60, -2.31, 0.60, -2.34], ['c', 0.00, 0.00, -0.21, 0.03, -0.45, 0.12], ['c', -0.57, 0.18, -1.14, 0.33, -1.62, 0.42], ['c', -0.33, 0.06, -0.51, 0.06, -0.96, 0.06], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.33, -0.45, 0.84, -0.81, 1.38, -0.90], ['z']], w: 11.373, h: 28.883 },\n\t'rests.64th': { d: [['M', 5.13, -13.62], ['c', 0.66, -0.09, 1.23, 0.09, 1.68, 0.51], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.15, 0.63, 0.21, 0.81, 0.33, 0.96], ['c', 0.18, 0.21, 0.54, 0.30, 0.75, 0.18], ['c', 0.24, -0.12, 0.63, -0.66, 1.08, -1.56], ['c', 0.33, -0.66, 0.39, -0.72, 0.60, -0.72], ['c', 0.12, 0.00, 0.27, 0.09, 0.33, 0.18], ['c', 0.03, 0.06, -0.69, 3.66, -3.54, 17.64], ['c', -1.95, 9.66, -3.57, 17.61, -3.57, 17.64], ['c', -0.03, 0.06, -0.12, 0.12, -0.24, 0.18], ['c', -0.21, 0.09, -0.24, 0.09, -0.48, 0.09], ['c', -0.24, 0.00, -0.30, 0.00, -0.48, -0.06], ['c', -0.09, -0.06, -0.21, -0.12, -0.21, -0.15], ['c', -0.06, -0.03, 0.06, -0.57, 1.05, -4.95], ['c', 0.60, -2.70, 1.08, -4.89, 1.08, -4.92], ['c', 0.00, 0.00, -0.24, 0.06, -0.51, 0.15], ['c', -0.66, 0.24, -1.20, 0.36, -1.77, 0.48], ['c', -0.42, 0.06, -0.57, 0.06, -1.05, 0.06], ['c', -0.69, 0.00, -0.87, -0.03, -1.35, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.72, -1.05, 2.22, -1.23, 3.06, -0.42], ['c', 0.30, 0.33, 0.42, 0.60, 0.60, 1.38], ['c', 0.09, 0.45, 0.21, 0.78, 0.33, 0.90], ['c', 0.09, 0.09, 0.27, 0.18, 0.45, 0.21], ['c', 0.21, 0.03, 0.39, -0.09, 0.72, -0.42], ['c', 0.45, -0.45, 1.02, -1.26, 1.17, -1.65], ['c', 0.03, -0.09, 0.27, -1.14, 0.54, -2.34], ['c', 0.27, -1.20, 0.48, -2.19, 0.51, -2.22], ['c', 0.00, -0.03, -0.09, -0.03, -0.48, 0.12], ['c', -1.17, 0.39, -2.22, 0.57, -3.00, 0.54], ['c', -0.42, -0.03, -0.75, -0.12, -1.11, -0.30], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.36, -0.54, 0.96, -0.87, 1.65, -0.93], ['c', 0.54, -0.03, 1.02, 0.15, 1.41, 0.54], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.09, 0.33, 0.18, 0.66, 0.21, 0.72], ['c', 0.15, 0.39, 0.57, 0.57, 0.90, 0.42], ['c', 0.36, -0.18, 1.20, -1.26, 1.47, -1.89], ['c', 0.03, -0.09, 0.30, -1.20, 0.57, -2.43], ['l', 0.51, -2.28], ['l', -0.54, 0.18], ['c', -1.11, 0.36, -1.80, 0.48, -2.61, 0.48], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.36, -0.54, 0.96, -0.87, 1.65, -0.93], ['c', 0.54, -0.03, 1.02, 0.15, 1.41, 0.54], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.15, 0.63, 0.21, 0.81, 0.33, 0.96], ['c', 0.21, 0.21, 0.54, 0.30, 0.75, 0.18], ['c', 0.36, -0.18, 0.93, -0.93, 1.29, -1.68], ['c', 0.12, -0.24, 0.18, -0.48, 0.63, -2.55], ['l', 0.51, -2.31], ['c', 0.00, -0.03, -0.18, 0.03, -0.39, 0.12], ['c', -1.14, 0.36, -2.10, 0.54, -2.82, 0.51], ['c', -0.42, -0.03, -0.75, -0.12, -1.11, -0.30], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.33, -0.45, 0.84, -0.81, 1.38, -0.90], ['z']], w: 12.453, h: 36.383 },\n\t'rests.128th': { d: [['M', 6.03, -21.12], ['c', 0.66, -0.09, 1.23, 0.09, 1.68, 0.51], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.09, 0.33, 0.18, 0.66, 0.21, 0.72], ['c', 0.12, 0.27, 0.33, 0.45, 0.60, 0.48], ['c', 0.21, 0.00, 0.33, -0.06, 0.54, -0.36], ['c', 0.15, -0.21, 0.54, -0.93, 0.78, -1.47], ['c', 0.15, -0.33, 0.18, -0.39, 0.30, -0.48], ['c', 0.18, -0.09, 0.45, 0.00, 0.51, 0.15], ['c', 0.03, 0.09, -7.11, 42.75, -7.17, 42.84], ['c', -0.03, 0.03, -0.15, 0.09, -0.24, 0.15], ['c', -0.18, 0.06, -0.24, 0.06, -0.45, 0.06], ['c', -0.24, 0.00, -0.30, 0.00, -0.48, -0.06], ['c', -0.09, -0.06, -0.21, -0.12, -0.21, -0.15], ['c', -0.06, -0.03, 0.03, -0.57, 0.84, -4.98], ['c', 0.51, -2.70, 0.93, -4.92, 0.90, -4.92], ['c', 0.00, 0.00, -0.15, 0.06, -0.36, 0.12], ['c', -0.78, 0.27, -1.62, 0.48, -2.31, 0.57], ['c', -0.15, 0.03, -0.54, 0.03, -0.81, 0.03], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.36, -0.54, 0.96, -0.87, 1.65, -0.93], ['c', 0.54, -0.03, 1.02, 0.15, 1.41, 0.54], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.09, 0.33, 0.18, 0.66, 0.21, 0.72], ['c', 0.12, 0.27, 0.33, 0.45, 0.63, 0.48], ['c', 0.12, 0.00, 0.18, 0.00, 0.30, -0.09], ['c', 0.42, -0.21, 1.14, -1.11, 1.50, -1.83], ['c', 0.12, -0.27, 0.12, -0.27, 0.54, -2.52], ['c', 0.24, -1.23, 0.42, -2.25, 0.39, -2.25], ['c', 0.00, 0.00, -0.24, 0.06, -0.51, 0.18], ['c', -1.26, 0.39, -2.25, 0.57, -3.06, 0.54], ['c', -0.42, -0.03, -0.75, -0.12, -1.11, -0.30], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.36, -0.54, 0.96, -0.87, 1.65, -0.93], ['c', 0.54, -0.03, 1.02, 0.15, 1.41, 0.54], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.15, 0.63, 0.21, 0.81, 0.33, 0.96], ['c', 0.18, 0.21, 0.51, 0.30, 0.75, 0.18], ['c', 0.36, -0.15, 1.05, -0.99, 1.41, -1.77], ['l', 0.15, -0.30], ['l', 0.42, -2.25], ['c', 0.21, -1.26, 0.42, -2.28, 0.39, -2.28], ['l', -0.51, 0.15], ['c', -1.11, 0.39, -1.89, 0.51, -2.70, 0.51], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.36, -0.54, 0.96, -0.87, 1.65, -0.93], ['c', 0.54, -0.03, 1.02, 0.15, 1.41, 0.54], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.15, 0.63, 0.21, 0.81, 0.33, 0.96], ['c', 0.18, 0.18, 0.48, 0.27, 0.72, 0.21], ['c', 0.33, -0.12, 1.14, -1.26, 1.41, -1.95], ['c', 0.00, -0.09, 0.21, -1.11, 0.45, -2.34], ['c', 0.21, -1.20, 0.39, -2.22, 0.39, -2.28], ['c', 0.03, -0.03, 0.00, -0.03, -0.45, 0.12], ['c', -0.57, 0.18, -1.20, 0.33, -1.71, 0.42], ['c', -0.30, 0.06, -0.51, 0.06, -0.93, 0.06], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.36, -0.54, 0.96, -0.87, 1.65, -0.93], ['c', 0.54, -0.03, 1.02, 0.15, 1.41, 0.54], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.09, 0.33, 0.18, 0.66, 0.21, 0.72], ['c', 0.12, 0.27, 0.33, 0.45, 0.60, 0.48], ['c', 0.18, 0.00, 0.36, -0.09, 0.57, -0.33], ['c', 0.33, -0.36, 0.78, -1.14, 0.93, -1.56], ['c', 0.03, -0.12, 0.24, -1.20, 0.45, -2.40], ['c', 0.24, -1.20, 0.42, -2.22, 0.42, -2.28], ['c', 0.03, -0.03, 0.00, -0.03, -0.39, 0.09], ['c', -1.05, 0.36, -1.80, 0.48, -2.58, 0.48], ['c', -0.63, 0.00, -0.84, -0.03, -1.29, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.33, -0.45, 0.84, -0.81, 1.38, -0.90], ['z']], w: 12.992, h: 43.883 },\n\t'accidentals.sharp': { d: [['M', 5.73, -11.19], ['c', 0.21, -0.12, 0.54, -0.03, 0.66, 0.24], ['c', 0.06, 0.12, 0.06, 0.21, 0.06, 2.31], ['c', 0.00, 1.23, 0.00, 2.22, 0.03, 2.22], ['c', 0.00, 0.00, 0.27, -0.12, 0.60, -0.24], ['c', 0.69, -0.27, 0.78, -0.30, 0.96, -0.15], ['c', 0.21, 0.15, 0.21, 0.18, 0.21, 1.38], ['c', 0.00, 1.02, 0.00, 1.11, -0.06, 1.20], ['c', -0.03, 0.06, -0.09, 0.12, -0.12, 0.15], ['c', -0.06, 0.03, -0.42, 0.21, -0.84, 0.36], ['l', -0.75, 0.33], ['l', -0.03, 2.43], ['c', 0.00, 1.32, 0.00, 2.43, 0.03, 2.43], ['c', 0.00, 0.00, 0.27, -0.12, 0.60, -0.24], ['c', 0.69, -0.27, 0.78, -0.30, 0.96, -0.15], ['c', 0.21, 0.15, 0.21, 0.18, 0.21, 1.38], ['c', 0.00, 1.02, 0.00, 1.11, -0.06, 1.20], ['c', -0.03, 0.06, -0.09, 0.12, -0.12, 0.15], ['c', -0.06, 0.03, -0.42, 0.21, -0.84, 0.36], ['l', -0.75, 0.33], ['l', -0.03, 2.52], ['c', 0.00, 2.28, -0.03, 2.55, -0.06, 2.64], ['c', -0.21, 0.36, -0.72, 0.36, -0.93, 0.00], ['c', -0.03, -0.09, -0.06, -0.33, -0.06, -2.43], ['l', 0.00, -2.31], ['l', -1.29, 0.51], ['l', -1.26, 0.51], ['l', 0.00, 2.43], ['c', 0.00, 2.58, 0.00, 2.52, -0.15, 2.67], ['c', -0.06, 0.09, -0.27, 0.18, -0.36, 0.18], ['c', -0.12, 0.00, -0.33, -0.09, -0.39, -0.18], ['c', -0.15, -0.15, -0.15, -0.09, -0.15, -2.43], ['c', 0.00, -1.23, 0.00, -2.22, -0.03, -2.22], ['c', 0.00, 0.00, -0.27, 0.12, -0.60, 0.24], ['c', -0.69, 0.27, -0.78, 0.30, -0.96, 0.15], ['c', -0.21, -0.15, -0.21, -0.18, -0.21, -1.38], ['c', 0.00, -1.02, 0.00, -1.11, 0.06, -1.20], ['c', 0.03, -0.06, 0.09, -0.12, 0.12, -0.15], ['c', 0.06, -0.03, 0.42, -0.21, 0.84, -0.36], ['l', 0.78, -0.33], ['l', 0.00, -2.43], ['c', 0.00, -1.32, 0.00, -2.43, -0.03, -2.43], ['c', 0.00, 0.00, -0.27, 0.12, -0.60, 0.24], ['c', -0.69, 0.27, -0.78, 0.30, -0.96, 0.15], ['c', -0.21, -0.15, -0.21, -0.18, -0.21, -1.38], ['c', 0.00, -1.02, 0.00, -1.11, 0.06, -1.20], ['c', 0.03, -0.06, 0.09, -0.12, 0.12, -0.15], ['c', 0.06, -0.03, 0.42, -0.21, 0.84, -0.36], ['l', 0.78, -0.33], ['l', 0.00, -2.52], ['c', 0.00, -2.28, 0.03, -2.55, 0.06, -2.64], ['c', 0.21, -0.36, 0.72, -0.36, 0.93, 0.00], ['c', 0.03, 0.09, 0.06, 0.33, 0.06, 2.43], ['l', 0.03, 2.31], ['l', 1.26, -0.51], ['l', 1.26, -0.51], ['l', 0.00, -2.43], ['c', 0.00, -2.28, 0.00, -2.43, 0.06, -2.55], ['c', 0.06, -0.12, 0.12, -0.18, 0.27, -0.24], ['z'], ['m', -0.33, 10.65], ['l', 0.00, -2.43], ['l', -1.29, 0.51], ['l', -1.26, 0.51], ['l', 0.00, 2.46], ['l', 0.00, 2.43], ['l', 0.09, -0.03], ['c', 0.06, -0.03, 0.63, -0.27, 1.29, -0.51], ['l', 1.17, -0.48], ['l', 0.00, -2.46], ['z']], w: 8.25, h: 22.462 },\n\t'accidentals.halfsharp': { d: [['M', 2.43, -10.05], ['c', 0.21, -0.12, 0.54, -0.03, 0.66, 0.24], ['c', 0.06, 0.12, 0.06, 0.21, 0.06, 2.01], ['c', 0.00, 1.05, 0.00, 1.89, 0.03, 1.89], ['l', 0.72, -0.48], ['c', 0.69, -0.48, 0.69, -0.51, 0.87, -0.51], ['c', 0.15, 0.00, 0.18, 0.03, 0.27, 0.09], ['c', 0.21, 0.15, 0.21, 0.18, 0.21, 1.41], ['c', 0.00, 1.11, -0.03, 1.14, -0.09, 1.23], ['c', -0.03, 0.03, -0.48, 0.39, -1.02, 0.75], ['l', -0.99, 0.66], ['l', 0.00, 2.37], ['c', 0.00, 1.32, 0.00, 2.37, 0.03, 2.37], ['l', 0.72, -0.48], ['c', 0.69, -0.48, 0.69, -0.51, 0.87, -0.51], ['c', 0.15, 0.00, 0.18, 0.03, 0.27, 0.09], ['c', 0.21, 0.15, 0.21, 0.18, 0.21, 1.41], ['c', 0.00, 1.11, -0.03, 1.14, -0.09, 1.23], ['c', -0.03, 0.03, -0.48, 0.39, -1.02, 0.75], ['l', -0.99, 0.66], ['l', 0.00, 2.25], ['c', 0.00, 1.95, 0.00, 2.28, -0.06, 2.37], ['c', -0.06, 0.12, -0.12, 0.21, -0.24, 0.27], ['c', -0.27, 0.12, -0.54, 0.03, -0.69, -0.24], ['c', -0.06, -0.12, -0.06, -0.21, -0.06, -2.01], ['c', 0.00, -1.05, 0.00, -1.89, -0.03, -1.89], ['l', -0.72, 0.48], ['c', -0.69, 0.48, -0.69, 0.48, -0.87, 0.48], ['c', -0.15, 0.00, -0.18, 0.00, -0.27, -0.06], ['c', -0.21, -0.15, -0.21, -0.18, -0.21, -1.41], ['c', 0.00, -1.11, 0.03, -1.14, 0.09, -1.23], ['c', 0.03, -0.03, 0.48, -0.39, 1.02, -0.75], ['l', 0.99, -0.66], ['l', 0.00, -2.37], ['c', 0.00, -1.32, 0.00, -2.37, -0.03, -2.37], ['l', -0.72, 0.48], ['c', -0.69, 0.48, -0.69, 0.48, -0.87, 0.48], ['c', -0.15, 0.00, -0.18, 0.00, -0.27, -0.06], ['c', -0.21, -0.15, -0.21, -0.18, -0.21, -1.41], ['c', 0.00, -1.11, 0.03, -1.14, 0.09, -1.23], ['c', 0.03, -0.03, 0.48, -0.39, 1.02, -0.75], ['l', 0.99, -0.66], ['l', 0.00, -2.25], ['c', 0.00, -2.13, 0.00, -2.28, 0.06, -2.40], ['c', 0.06, -0.12, 0.12, -0.18, 0.27, -0.24], ['z']], w: 5.25, h: 20.174 },\n\t'accidentals.nat': { d: [['M', 0.21, -11.40], ['c', 0.24, -0.06, 0.78, 0.00, 0.99, 0.15], ['c', 0.03, 0.03, 0.03, 0.48, 0.00, 2.61], ['c', -0.03, 1.44, -0.03, 2.61, -0.03, 2.61], ['c', 0.00, 0.03, 0.75, -0.09, 1.68, -0.24], ['c', 0.96, -0.18, 1.71, -0.27, 1.74, -0.27], ['c', 0.15, 0.03, 0.27, 0.15, 0.36, 0.30], ['l', 0.06, 0.12], ['l', 0.09, 8.67], ['c', 0.09, 6.96, 0.12, 8.67, 0.09, 8.67], ['c', -0.03, 0.03, -0.12, 0.06, -0.21, 0.09], ['c', -0.24, 0.09, -0.72, 0.09, -0.96, 0.00], ['c', -0.09, -0.03, -0.18, -0.06, -0.21, -0.09], ['c', -0.03, -0.03, -0.03, -0.48, 0.00, -2.61], ['c', 0.03, -1.44, 0.03, -2.61, 0.03, -2.61], ['c', 0.00, -0.03, -0.75, 0.09, -1.68, 0.24], ['c', -0.96, 0.18, -1.71, 0.27, -1.74, 0.27], ['c', -0.15, -0.03, -0.27, -0.15, -0.36, -0.30], ['l', -0.06, -0.15], ['l', -0.09, -7.53], ['c', -0.06, -4.14, -0.09, -8.04, -0.12, -8.67], ['l', 0.00, -1.11], ['l', 0.15, -0.06], ['c', 0.09, -0.03, 0.21, -0.06, 0.27, -0.09], ['z'], ['m', 3.75, 8.40], ['c', 0.00, -0.33, 0.00, -0.42, -0.03, -0.42], ['c', -0.12, 0.00, -2.79, 0.45, -2.79, 0.48], ['c', -0.03, 0.00, -0.09, 6.30, -0.09, 6.33], ['c', 0.03, 0.00, 2.79, -0.45, 2.82, -0.48], ['c', 0.00, 0.00, 0.09, -4.53, 0.09, -5.91], ['z']], w: 5.4, h: 22.8 },\n\t'accidentals.flat': { d: [['M', -0.36, -14.07], ['c', 0.33, -0.06, 0.87, 0.00, 1.08, 0.15], ['c', 0.06, 0.03, 0.06, 0.36, -0.03, 5.25], ['c', -0.06, 2.85, -0.09, 5.19, -0.09, 5.19], ['c', 0.00, 0.03, 0.12, -0.03, 0.24, -0.12], ['c', 0.63, -0.42, 1.41, -0.66, 2.19, -0.72], ['c', 0.81, -0.03, 1.47, 0.21, 2.04, 0.78], ['c', 0.57, 0.54, 0.87, 1.26, 0.93, 2.04], ['c', 0.03, 0.57, -0.09, 1.08, -0.36, 1.62], ['c', -0.42, 0.81, -1.02, 1.38, -2.82, 2.61], ['c', -1.14, 0.78, -1.44, 1.02, -1.80, 1.44], ['c', -0.18, 0.18, -0.39, 0.39, -0.45, 0.42], ['c', -0.27, 0.18, -0.57, 0.15, -0.81, -0.06], ['c', -0.06, -0.09, -0.12, -0.18, -0.15, -0.27], ['c', -0.03, -0.06, -0.09, -3.27, -0.18, -8.34], ['c', -0.09, -4.53, -0.15, -8.58, -0.18, -9.03], ['l', 0.00, -0.78], ['l', 0.12, -0.06], ['c', 0.06, -0.03, 0.18, -0.09, 0.27, -0.12], ['z'], ['m', 3.18, 11.01], ['c', -0.21, -0.12, -0.54, -0.15, -0.81, -0.06], ['c', -0.54, 0.15, -0.99, 0.63, -1.17, 1.26], ['c', -0.06, 0.30, -0.12, 2.88, -0.06, 3.87], ['c', 0.03, 0.42, 0.03, 0.81, 0.06, 0.90], ['l', 0.03, 0.12], ['l', 0.45, -0.39], ['c', 0.63, -0.54, 1.26, -1.17, 1.56, -1.59], ['c', 0.30, -0.42, 0.60, -0.99, 0.72, -1.41], ['c', 0.18, -0.69, 0.09, -1.47, -0.18, -2.07], ['c', -0.15, -0.30, -0.33, -0.51, -0.60, -0.63], ['z']], w: 6.75, h: 18.801 },\n\t'accidentals.halfflat': { d: [['M', 4.83, -14.07], ['c', 0.33, -0.06, 0.87, 0.00, 1.08, 0.15], ['c', 0.06, 0.03, 0.06, 0.60, -0.12, 9.06], ['c', -0.09, 5.55, -0.15, 9.06, -0.18, 9.12], ['c', -0.03, 0.09, -0.09, 0.18, -0.15, 0.27], ['c', -0.24, 0.21, -0.54, 0.24, -0.81, 0.06], ['c', -0.06, -0.03, -0.27, -0.24, -0.45, -0.42], ['c', -0.36, -0.42, -0.66, -0.66, -1.80, -1.44], ['c', -1.23, -0.84, -1.83, -1.32, -2.25, -1.77], ['c', -0.66, -0.78, -0.96, -1.56, -0.93, -2.46], ['c', 0.09, -1.41, 1.11, -2.58, 2.40, -2.79], ['c', 0.30, -0.06, 0.84, -0.03, 1.23, 0.06], ['c', 0.54, 0.12, 1.08, 0.33, 1.53, 0.63], ['c', 0.12, 0.09, 0.24, 0.15, 0.24, 0.12], ['c', 0.00, 0.00, -0.12, -8.37, -0.18, -9.75], ['l', 0.00, -0.66], ['l', 0.12, -0.06], ['c', 0.06, -0.03, 0.18, -0.09, 0.27, -0.12], ['z'], ['m', -1.65, 10.95], ['c', -0.60, -0.18, -1.08, 0.09, -1.38, 0.69], ['c', -0.27, 0.60, -0.36, 1.38, -0.18, 2.07], ['c', 0.12, 0.42, 0.42, 0.99, 0.72, 1.41], ['c', 0.30, 0.42, 0.93, 1.05, 1.56, 1.59], ['l', 0.48, 0.39], ['l', 0.00, -0.12], ['c', 0.03, -0.09, 0.03, -0.48, 0.06, -0.90], ['c', 0.03, -0.57, 0.03, -1.08, 0.00, -2.22], ['c', -0.03, -1.62, -0.03, -1.62, -0.24, -2.07], ['c', -0.21, -0.42, -0.60, -0.75, -1.02, -0.84], ['z']], w: 6.728, h: 18.801 },\n\t'accidentals.dblflat': { d: [['M', -0.36, -14.07], ['c', 0.33, -0.06, 0.87, 0.00, 1.08, 0.15], ['c', 0.06, 0.03, 0.06, 0.36, -0.03, 5.25], ['c', -0.06, 2.85, -0.09, 5.19, -0.09, 5.19], ['c', 0.00, 0.03, 0.12, -0.03, 0.24, -0.12], ['c', 0.63, -0.42, 1.41, -0.66, 2.19, -0.72], ['c', 0.81, -0.03, 1.47, 0.21, 2.04, 0.78], ['c', 0.57, 0.54, 0.87, 1.26, 0.93, 2.04], ['c', 0.03, 0.57, -0.09, 1.08, -0.36, 1.62], ['c', -0.42, 0.81, -1.02, 1.38, -2.82, 2.61], ['c', -1.14, 0.78, -1.44, 1.02, -1.80, 1.44], ['c', -0.18, 0.18, -0.39, 0.39, -0.45, 0.42], ['c', -0.27, 0.18, -0.57, 0.15, -0.81, -0.06], ['c', -0.06, -0.09, -0.12, -0.18, -0.15, -0.27], ['c', -0.03, -0.06, -0.09, -3.27, -0.18, -8.34], ['c', -0.09, -4.53, -0.15, -8.58, -0.18, -9.03], ['l', 0.00, -0.78], ['l', 0.12, -0.06], ['c', 0.06, -0.03, 0.18, -0.09, 0.27, -0.12], ['z'], ['m', 3.18, 11.01], ['c', -0.21, -0.12, -0.54, -0.15, -0.81, -0.06], ['c', -0.54, 0.15, -0.99, 0.63, -1.17, 1.26], ['c', -0.06, 0.30, -0.12, 2.88, -0.06, 3.87], ['c', 0.03, 0.42, 0.03, 0.81, 0.06, 0.90], ['l', 0.03, 0.12], ['l', 0.45, -0.39], ['c', 0.63, -0.54, 1.26, -1.17, 1.56, -1.59], ['c', 0.30, -0.42, 0.60, -0.99, 0.72, -1.41], ['c', 0.18, -0.69, 0.09, -1.47, -0.18, -2.07], ['c', -0.15, -0.30, -0.33, -0.51, -0.60, -0.63], ['z'], ['m', 3, -11], ['c', 0.33, -0.06, 0.87, 0.00, 1.08, 0.15], ['c', 0.06, 0.03, 0.06, 0.36, -0.03, 5.25], ['c', -0.06, 2.85, -0.09, 5.19, -0.09, 5.19], ['c', 0.00, 0.03, 0.12, -0.03, 0.24, -0.12], ['c', 0.63, -0.42, 1.41, -0.66, 2.19, -0.72], ['c', 0.81, -0.03, 1.47, 0.21, 2.04, 0.78], ['c', 0.57, 0.54, 0.87, 1.26, 0.93, 2.04], ['c', 0.03, 0.57, -0.09, 1.08, -0.36, 1.62], ['c', -0.42, 0.81, -1.02, 1.38, -2.82, 2.61], ['c', -1.14, 0.78, -1.44, 1.02, -1.80, 1.44], ['c', -0.18, 0.18, -0.39, 0.39, -0.45, 0.42], ['c', -0.27, 0.18, -0.57, 0.15, -0.81, -0.06], ['c', -0.06, -0.09, -0.12, -0.18, -0.15, -0.27], ['c', -0.03, -0.06, -0.09, -3.27, -0.18, -8.34], ['c', -0.09, -4.53, -0.15, -8.58, -0.18, -9.03], ['l', 0.00, -0.78], ['l', 0.12, -0.06], ['c', 0.06, -0.03, 0.18, -0.09, 0.27, -0.12], ['z'], ['m', 3.18, 11.01], ['c', -0.21, -0.12, -0.54, -0.15, -0.81, -0.06], ['c', -0.54, 0.15, -0.99, 0.63, -1.17, 1.26], ['c', -0.06, 0.30, -0.12, 2.88, -0.06, 3.87], ['c', 0.03, 0.42, 0.03, 0.81, 0.06, 0.90], ['l', 0.03, 0.12], ['l', 0.45, -0.39], ['c', 0.63, -0.54, 1.26, -1.17, 1.56, -1.59], ['c', 0.30, -0.42, 0.60, -0.99, 0.72, -1.41], ['c', 0.18, -0.69, 0.09, -1.47, -0.18, -2.07], ['c', -0.15, -0.30, -0.33, -0.51, -0.60, -0.63], ['z']], w: 12.1, h: 18.804 },\n\t'accidentals.dblsharp': { d: [['M', -0.18, -3.96], ['c', 0.06, -0.03, 0.12, -0.06, 0.15, -0.06], ['c', 0.09, 0.00, 2.76, 0.27, 2.79, 0.30], ['c', 0.12, 0.03, 0.15, 0.12, 0.15, 0.51], ['c', 0.06, 0.96, 0.24, 1.59, 0.57, 2.10], ['c', 0.06, 0.09, 0.15, 0.21, 0.18, 0.24], ['l', 0.09, 0.06], ['l', 0.09, -0.06], ['c', 0.03, -0.03, 0.12, -0.15, 0.18, -0.24], ['c', 0.33, -0.51, 0.51, -1.14, 0.57, -2.10], ['c', 0.00, -0.39, 0.03, -0.45, 0.12, -0.51], ['c', 0.03, 0.00, 0.66, -0.09, 1.44, -0.15], ['c', 1.47, -0.15, 1.50, -0.15, 1.56, -0.03], ['c', 0.03, 0.06, 0.00, 0.42, -0.09, 1.44], ['c', -0.09, 0.72, -0.15, 1.35, -0.15, 1.38], ['c', 0.00, 0.03, -0.03, 0.09, -0.06, 0.12], ['c', -0.06, 0.06, -0.12, 0.09, -0.51, 0.09], ['c', -1.08, 0.06, -1.80, 0.30, -2.28, 0.75], ['l', -0.12, 0.09], ['l', 0.09, 0.09], ['c', 0.12, 0.15, 0.39, 0.33, 0.63, 0.45], ['c', 0.42, 0.18, 0.96, 0.27, 1.68, 0.33], ['c', 0.39, 0.00, 0.45, 0.03, 0.51, 0.09], ['c', 0.03, 0.03, 0.06, 0.09, 0.06, 0.12], ['c', 0.00, 0.03, 0.06, 0.66, 0.15, 1.38], ['c', 0.09, 1.02, 0.12, 1.38, 0.09, 1.44], ['c', -0.06, 0.12, -0.09, 0.12, -1.56, -0.03], ['c', -0.78, -0.06, -1.41, -0.15, -1.44, -0.15], ['c', -0.09, -0.06, -0.12, -0.12, -0.12, -0.54], ['c', -0.06, -0.93, -0.24, -1.56, -0.57, -2.07], ['c', -0.06, -0.09, -0.15, -0.21, -0.18, -0.24], ['l', -0.09, -0.06], ['l', -0.09, 0.06], ['c', -0.03, 0.03, -0.12, 0.15, -0.18, 0.24], ['c', -0.33, 0.51, -0.51, 1.14, -0.57, 2.07], ['c', 0.00, 0.42, -0.03, 0.48, -0.12, 0.54], ['c', -0.03, 0.00, -0.66, 0.09, -1.44, 0.15], ['c', -1.47, 0.15, -1.50, 0.15, -1.56, 0.03], ['c', -0.03, -0.06, 0.00, -0.42, 0.09, -1.44], ['c', 0.09, -0.72, 0.15, -1.35, 0.15, -1.38], ['c', 0.00, -0.03, 0.03, -0.09, 0.06, -0.12], ['c', 0.06, -0.06, 0.12, -0.09, 0.51, -0.09], ['c', 0.72, -0.06, 1.26, -0.15, 1.68, -0.33], ['c', 0.24, -0.12, 0.51, -0.30, 0.63, -0.45], ['l', 0.09, -0.09], ['l', -0.12, -0.09], ['c', -0.48, -0.45, -1.20, -0.69, -2.28, -0.75], ['c', -0.39, 0.00, -0.45, -0.03, -0.51, -0.09], ['c', -0.03, -0.03, -0.06, -0.09, -0.06, -0.12], ['c', 0.00, -0.03, -0.06, -0.63, -0.12, -1.38], ['c', -0.09, -0.72, -0.15, -1.35, -0.15, -1.38], ['z']], w: 7.95, h: 7.977 },\n\t'dots.dot': { d: [['M', 1.32, -1.68], ['c', 0.09, -0.03, 0.27, -0.06, 0.39, -0.06], ['c', 0.96, 0.00, 1.74, 0.78, 1.74, 1.71], ['c', 0.00, 0.96, -0.78, 1.74, -1.71, 1.74], ['c', -0.96, 0.00, -1.74, -0.78, -1.74, -1.71], ['c', 0.00, -0.78, 0.54, -1.50, 1.32, -1.68], ['z']], w: 3.45, h: 3.45 },\n\t'noteheads.dbl': { d: [['M', -0.69, -4.02], ['c', 0.18, -0.09, 0.36, -0.09, 0.54, 0.00], ['c', 0.18, 0.09, 0.24, 0.15, 0.33, 0.30], ['c', 0.06, 0.15, 0.06, 0.18, 0.06, 1.41], ['l', 0.00, 1.23], ['l', 0.12, -0.18], ['c', 0.72, -1.26, 2.64, -2.31, 4.86, -2.64], ['c', 0.81, -0.15, 1.11, -0.15, 2.13, -0.15], ['c', 0.99, 0.00, 1.29, 0.00, 2.10, 0.15], ['c', 0.75, 0.12, 1.38, 0.27, 2.04, 0.54], ['c', 1.35, 0.51, 2.34, 1.26, 2.82, 2.10], ['l', 0.12, 0.18], ['l', 0.00, -1.23], ['c', 0.00, -1.20, 0.00, -1.26, 0.06, -1.38], ['c', 0.09, -0.18, 0.15, -0.24, 0.33, -0.33], ['c', 0.18, -0.09, 0.36, -0.09, 0.54, 0.00], ['c', 0.18, 0.09, 0.24, 0.15, 0.33, 0.30], ['l', 0.06, 0.15], ['l', 0.00, 3.54], ['l', 0.00, 3.54], ['l', -0.06, 0.15], ['c', -0.09, 0.18, -0.15, 0.24, -0.33, 0.33], ['c', -0.18, 0.09, -0.36, 0.09, -0.54, 0.00], ['c', -0.18, -0.09, -0.24, -0.15, -0.33, -0.33], ['c', -0.06, -0.12, -0.06, -0.18, -0.06, -1.38], ['l', 0.00, -1.23], ['l', -0.12, 0.18], ['c', -0.48, 0.84, -1.47, 1.59, -2.82, 2.10], ['c', -0.84, 0.33, -1.71, 0.54, -2.85, 0.66], ['c', -0.45, 0.06, -2.16, 0.06, -2.61, 0.00], ['c', -1.14, -0.12, -2.01, -0.33, -2.85, -0.66], ['c', -1.35, -0.51, -2.34, -1.26, -2.82, -2.10], ['l', -0.12, -0.18], ['l', 0.00, 1.23], ['c', 0.00, 1.23, 0.00, 1.26, -0.06, 1.38], ['c', -0.09, 0.18, -0.15, 0.24, -0.33, 0.33], ['c', -0.18, 0.09, -0.36, 0.09, -0.54, 0.00], ['c', -0.18, -0.09, -0.24, -0.15, -0.33, -0.33], ['l', -0.06, -0.15], ['l', 0.00, -3.54], ['c', 0.00, -3.48, 0.00, -3.54, 0.06, -3.66], ['c', 0.09, -0.18, 0.15, -0.24, 0.33, -0.33], ['z'], ['m', 7.71, 0.63], ['c', -0.36, -0.06, -0.90, -0.06, -1.14, 0.00], ['c', -0.30, 0.03, -0.66, 0.24, -0.87, 0.42], ['c', -0.60, 0.54, -0.90, 1.62, -0.75, 2.82], ['c', 0.12, 0.93, 0.51, 1.68, 1.11, 2.31], ['c', 0.75, 0.72, 1.83, 1.20, 2.85, 1.26], ['c', 1.05, 0.06, 1.83, -0.54, 2.10, -1.65], ['c', 0.21, -0.90, 0.12, -1.95, -0.24, -2.82], ['c', -0.36, -0.81, -1.08, -1.53, -1.95, -1.95], ['c', -0.30, -0.15, -0.78, -0.30, -1.11, -0.39], ['z']], w: 16.83, h: 8.145 },\n\t'noteheads.whole': { d: [['M', 6.51, -4.05], ['c', 0.51, -0.03, 2.01, 0.00, 2.52, 0.03], ['c', 1.41, 0.18, 2.64, 0.51, 3.72, 1.08], ['c', 1.20, 0.63, 1.95, 1.41, 2.19, 2.31], ['c', 0.09, 0.33, 0.09, 0.90, 0.00, 1.23], ['c', -0.24, 0.90, -0.99, 1.68, -2.19, 2.31], ['c', -1.08, 0.57, -2.28, 0.90, -3.75, 1.08], ['c', -0.66, 0.06, -2.31, 0.06, -2.97, 0.00], ['c', -1.47, -0.18, -2.67, -0.51, -3.75, -1.08], ['c', -1.20, -0.63, -1.95, -1.41, -2.19, -2.31], ['c', -0.09, -0.33, -0.09, -0.90, 0.00, -1.23], ['c', 0.24, -0.90, 0.99, -1.68, 2.19, -2.31], ['c', 1.20, -0.63, 2.61, -0.99, 4.23, -1.11], ['z'], ['m', 0.57, 0.66], ['c', -0.87, -0.15, -1.53, 0.00, -2.04, 0.51], ['c', -0.15, 0.15, -0.24, 0.27, -0.33, 0.48], ['c', -0.24, 0.51, -0.36, 1.08, -0.33, 1.77], ['c', 0.03, 0.69, 0.18, 1.26, 0.42, 1.77], ['c', 0.60, 1.17, 1.74, 1.98, 3.18, 2.22], ['c', 1.11, 0.21, 1.95, -0.15, 2.34, -0.99], ['c', 0.24, -0.51, 0.36, -1.08, 0.33, -1.80], ['c', -0.06, -1.11, -0.45, -2.04, -1.17, -2.76], ['c', -0.63, -0.63, -1.47, -1.05, -2.40, -1.20], ['z']], w: 14.985, h: 8.097 },\n\t'noteheads.half': { d: [['M', 7.44, -4.05], ['c', 0.06, -0.03, 0.27, -0.03, 0.48, -0.03], ['c', 1.05, 0.00, 1.71, 0.24, 2.10, 0.81], ['c', 0.42, 0.60, 0.45, 1.35, 0.18, 2.40], ['c', -0.42, 1.59, -1.14, 2.73, -2.16, 3.39], ['c', -1.41, 0.93, -3.18, 1.44, -5.40, 1.53], ['c', -1.17, 0.03, -1.89, -0.21, -2.28, -0.81], ['c', -0.42, -0.60, -0.45, -1.35, -0.18, -2.40], ['c', 0.42, -1.59, 1.14, -2.73, 2.16, -3.39], ['c', 0.63, -0.42, 1.23, -0.72, 1.98, -0.96], ['c', 0.90, -0.30, 1.65, -0.42, 3.12, -0.54], ['z'], ['m', 1.29, 0.87], ['c', -0.27, -0.09, -0.63, -0.12, -0.90, -0.03], ['c', -0.72, 0.24, -1.53, 0.69, -3.27, 1.80], ['c', -2.34, 1.50, -3.30, 2.25, -3.57, 2.79], ['c', -0.36, 0.72, -0.06, 1.50, 0.66, 1.77], ['c', 0.24, 0.12, 0.69, 0.09, 0.99, 0.00], ['c', 0.84, -0.30, 1.92, -0.93, 4.14, -2.37], ['c', 1.62, -1.08, 2.37, -1.71, 2.61, -2.19], ['c', 0.36, -0.72, 0.06, -1.50, -0.66, -1.77], ['z']], w: 10.37, h: 8.132 },\n\t'noteheads.quarter': { d: [['M', 6.09, -4.05], ['c', 0.36, -0.03, 1.20, 0.00, 1.53, 0.06], ['c', 1.17, 0.24, 1.89, 0.84, 2.16, 1.83], ['c', 0.06, 0.18, 0.06, 0.30, 0.06, 0.66], ['c', 0.00, 0.45, 0.00, 0.63, -0.15, 1.08], ['c', -0.66, 2.04, -3.06, 3.93, -5.52, 4.38], ['c', -0.54, 0.09, -1.44, 0.09, -1.83, 0.03], ['c', -1.23, -0.27, -1.98, -0.87, -2.25, -1.86], ['c', -0.06, -0.18, -0.06, -0.30, -0.06, -0.66], ['c', 0.00, -0.45, 0.00, -0.63, 0.15, -1.08], ['c', 0.24, -0.78, 0.75, -1.53, 1.44, -2.22], ['c', 1.20, -1.20, 2.85, -2.01, 4.47, -2.22], ['z']], w: 9.81, h: 8.094 },\n\t'noteheads.slash.nostem': { d: [['M', 9.30, -7.77], ['c', 0.06, -0.06, 0.18, -0.06, 1.71, -0.06], ['l', 1.65, 0.00], ['l', 0.09, 0.09], ['c', 0.06, 0.06, 0.06, 0.09, 0.06, 0.15], ['c', -0.03, 0.12, -9.21, 15.24, -9.30, 15.33], ['c', -0.06, 0.06, -0.18, 0.06, -1.71, 0.06], ['l', -1.65, 0.00], ['l', -0.09, -0.09], ['c', -0.06, -0.06, -0.06, -0.09, -0.06, -0.15], ['c', 0.03, -0.12, 9.21, -15.24, 9.30, -15.33], ['z']], w: 12.81, h: 15.63 },\n\t'noteheads.indeterminate': { d: [['M', 0.78, -4.05], ['c', 0.12, -0.03, 0.24, -0.03, 0.36, 0.03], ['c', 0.03, 0.03, 0.93, 0.72, 1.95, 1.56], ['l', 1.86, 1.50], ['l', 1.86, -1.50], ['c', 1.02, -0.84, 1.92, -1.53, 1.95, -1.56], ['c', 0.21, -0.12, 0.33, -0.09, 0.75, 0.24], ['c', 0.30, 0.27, 0.36, 0.36, 0.36, 0.54], ['c', 0.00, 0.03, -0.03, 0.12, -0.06, 0.18], ['c', -0.03, 0.06, -0.90, 0.75, -1.89, 1.56], ['l', -1.80, 1.47], ['c', 0.00, 0.03, 0.81, 0.69, 1.80, 1.50], ['c', 0.99, 0.81, 1.86, 1.50, 1.89, 1.56], ['c', 0.03, 0.06, 0.06, 0.15, 0.06, 0.18], ['c', 0.00, 0.18, -0.06, 0.27, -0.36, 0.54], ['c', -0.42, 0.33, -0.54, 0.36, -0.75, 0.24], ['c', -0.03, -0.03, -0.93, -0.72, -1.95, -1.56], ['l', -1.86, -1.50], ['l', -1.86, 1.50], ['c', -1.02, 0.84, -1.92, 1.53, -1.95, 1.56], ['c', -0.21, 0.12, -0.33, 0.09, -0.75, -0.24], ['c', -0.30, -0.27, -0.36, -0.36, -0.36, -0.54], ['c', 0.00, -0.03, 0.03, -0.12, 0.06, -0.18], ['c', 0.03, -0.06, 0.90, -0.75, 1.89, -1.56], ['l', 1.80, -1.47], ['c', 0.00, -0.03, -0.81, -0.69, -1.80, -1.50], ['c', -0.99, -0.81, -1.86, -1.50, -1.89, -1.56], ['c', -0.06, -0.12, -0.09, -0.21, -0.03, -0.36], ['c', 0.03, -0.09, 0.57, -0.57, 0.72, -0.63], ['z']], w: 9.843, h: 8.139 },\n\t'scripts.ufermata': { d: [['M', -0.75, -10.77], ['c', 0.12, 0.00, 0.45, -0.03, 0.69, -0.03], ['c', 2.91, -0.03, 5.55, 1.53, 7.41, 4.35], ['c', 1.17, 1.71, 1.95, 3.72, 2.43, 6.03], ['c', 0.12, 0.51, 0.12, 0.57, 0.03, 0.69], ['c', -0.12, 0.21, -0.48, 0.27, -0.69, 0.12], ['c', -0.12, -0.09, -0.18, -0.24, -0.27, -0.69], ['c', -0.78, -3.63, -3.42, -6.54, -6.78, -7.38], ['c', -0.78, -0.21, -1.20, -0.24, -2.07, -0.24], ['c', -0.63, 0.00, -0.84, 0.00, -1.20, 0.06], ['c', -1.83, 0.27, -3.42, 1.08, -4.80, 2.37], ['c', -1.41, 1.35, -2.40, 3.21, -2.85, 5.19], ['c', -0.09, 0.45, -0.15, 0.60, -0.27, 0.69], ['c', -0.21, 0.15, -0.57, 0.09, -0.69, -0.12], ['c', -0.09, -0.12, -0.09, -0.18, 0.03, -0.69], ['c', 0.33, -1.62, 0.78, -3.00, 1.47, -4.38], ['c', 1.77, -3.54, 4.44, -5.67, 7.56, -5.97], ['z'], ['m', 0.33, 7.47], ['c', 1.38, -0.30, 2.58, 0.90, 2.31, 2.25], ['c', -0.15, 0.72, -0.78, 1.35, -1.47, 1.50], ['c', -1.38, 0.27, -2.58, -0.93, -2.31, -2.31], ['c', 0.15, -0.69, 0.78, -1.29, 1.47, -1.44], ['z']], w: 19.748, h: 11.289 },\n\t'scripts.dfermata': { d: [['M', -9.63, -0.42], ['c', 0.15, -0.09, 0.36, -0.06, 0.51, 0.03], ['c', 0.12, 0.09, 0.18, 0.24, 0.27, 0.66], ['c', 0.78, 3.66, 3.42, 6.57, 6.78, 7.41], ['c', 0.78, 0.21, 1.20, 0.24, 2.07, 0.24], ['c', 0.63, 0.00, 0.84, 0.00, 1.20, -0.06], ['c', 1.83, -0.27, 3.42, -1.08, 4.80, -2.37], ['c', 1.41, -1.35, 2.40, -3.21, 2.85, -5.22], ['c', 0.09, -0.42, 0.15, -0.57, 0.27, -0.66], ['c', 0.21, -0.15, 0.57, -0.09, 0.69, 0.12], ['c', 0.09, 0.12, 0.09, 0.18, -0.03, 0.69], ['c', -0.33, 1.62, -0.78, 3.00, -1.47, 4.38], ['c', -1.92, 3.84, -4.89, 6.00, -8.31, 6.00], ['c', -3.42, 0.00, -6.39, -2.16, -8.31, -6.00], ['c', -0.48, -0.96, -0.84, -1.92, -1.14, -2.97], ['c', -0.18, -0.69, -0.42, -1.74, -0.42, -1.92], ['c', 0.00, -0.12, 0.09, -0.27, 0.24, -0.33], ['z'], ['m', 9.21, 0.00], ['c', 1.20, -0.27, 2.34, 0.63, 2.34, 1.86], ['c', 0.00, 0.90, -0.66, 1.68, -1.50, 1.89], ['c', -1.38, 0.27, -2.58, -0.93, -2.31, -2.31], ['c', 0.15, -0.69, 0.78, -1.29, 1.47, -1.44], ['z']], w: 19.744, h: 11.274 },\n\t'scripts.sforzato': { d: [['M', -6.45, -3.69], ['c', 0.06, -0.03, 0.15, -0.06, 0.18, -0.06], ['c', 0.06, 0.00, 2.85, 0.72, 6.24, 1.59], ['l', 6.33, 1.65], ['c', 0.33, 0.06, 0.45, 0.21, 0.45, 0.51], ['c', 0.00, 0.30, -0.12, 0.45, -0.45, 0.51], ['l', -6.33, 1.65], ['c', -3.39, 0.87, -6.18, 1.59, -6.21, 1.59], ['c', -0.21, 0.00, -0.48, -0.24, -0.51, -0.45], ['c', 0.00, -0.15, 0.06, -0.36, 0.18, -0.45], ['c', 0.09, -0.06, 0.87, -0.27, 3.84, -1.05], ['c', 2.04, -0.54, 3.84, -0.99, 4.02, -1.02], ['c', 0.15, -0.06, 1.14, -0.24, 2.22, -0.42], ['c', 1.05, -0.18, 1.92, -0.36, 1.92, -0.36], ['c', 0.00, 0.00, -0.87, -0.18, -1.92, -0.36], ['c', -1.08, -0.18, -2.07, -0.36, -2.22, -0.42], ['c', -0.18, -0.03, -1.98, -0.48, -4.02, -1.02], ['c', -2.97, -0.78, -3.75, -0.99, -3.84, -1.05], ['c', -0.12, -0.09, -0.18, -0.30, -0.18, -0.45], ['c', 0.03, -0.15, 0.15, -0.30, 0.30, -0.39], ['z']], w: 13.5, h: 7.5 },\n\t'scripts.staccato': { d: [['M', -0.36, -1.47], ['c', 0.93, -0.21, 1.86, 0.51, 1.86, 1.47], ['c', 0.00, 0.93, -0.87, 1.65, -1.80, 1.47], ['c', -0.54, -0.12, -1.02, -0.57, -1.14, -1.08], ['c', -0.21, -0.81, 0.27, -1.65, 1.08, -1.86], ['z']], w: 2.989, h: 3.004 },\n\t'scripts.tenuto': { d: [['M', -4.20, -0.48], ['l', 0.12, -0.06], ['l', 4.08, 0.00], ['l', 4.08, 0.00], ['l', 0.12, 0.06], ['c', 0.39, 0.21, 0.39, 0.75, 0.00, 0.96], ['l', -0.12, 0.06], ['l', -4.08, 0.00], ['l', -4.08, 0.00], ['l', -0.12, -0.06], ['c', -0.39, -0.21, -0.39, -0.75, 0.00, -0.96], ['z']], w: 8.985, h: 1.08 },\n\t'scripts.umarcato': { d: [['M', -0.15, -8.19], ['c', 0.15, -0.12, 0.36, -0.03, 0.45, 0.15], ['c', 0.21, 0.42, 3.45, 7.65, 3.45, 7.71], ['c', 0.00, 0.12, -0.12, 0.27, -0.21, 0.30], ['c', -0.03, 0.03, -0.51, 0.03, -1.14, 0.03], ['c', -1.05, 0.00, -1.08, 0.00, -1.17, -0.06], ['c', -0.09, -0.06, -0.24, -0.36, -1.17, -2.40], ['c', -0.57, -1.29, -1.05, -2.34, -1.08, -2.34], ['c', 0.00, -0.03, -0.51, 1.02, -1.08, 2.34], ['c', -0.93, 2.07, -1.08, 2.34, -1.14, 2.40], ['c', -0.06, 0.03, -0.15, 0.06, -0.18, 0.06], ['c', -0.15, 0.00, -0.33, -0.18, -0.33, -0.33], ['c', 0.00, -0.06, 3.24, -7.32, 3.45, -7.71], ['c', 0.03, -0.06, 0.09, -0.15, 0.15, -0.15], ['z']], w: 7.5, h: 8.245 },\n\t'scripts.dmarcato': { d: [['M', -3.57, 0.03], ['c', 0.03, 0.00, 0.57, -0.03, 1.17, -0.03], ['c', 1.05, 0.00, 1.08, 0.00, 1.17, 0.06], ['c', 0.09, 0.06, 0.24, 0.36, 1.17, 2.40], ['c', 0.57, 1.29, 1.05, 2.34, 1.08, 2.34], ['c', 0.00, 0.03, 0.51, -1.02, 1.08, -2.34], ['c', 0.93, -2.07, 1.08, -2.34, 1.14, -2.40], ['c', 0.06, -0.03, 0.15, -0.06, 0.18, -0.06], ['c', 0.15, 0.00, 0.33, 0.18, 0.33, 0.33], ['c', 0.00, 0.09, -3.45, 7.74, -3.54, 7.83], ['c', -0.12, 0.12, -0.30, 0.12, -0.42, 0.00], ['c', -0.09, -0.09, -3.54, -7.74, -3.54, -7.83], ['c', 0.00, -0.09, 0.12, -0.27, 0.18, -0.30], ['z']], w: 7.5, h: 8.25 },\n\t'scripts.stopped': { d: [['M', -0.27, -4.08], ['c', 0.18, -0.09, 0.36, -0.09, 0.54, 0.00], ['c', 0.18, 0.09, 0.24, 0.15, 0.33, 0.30], ['l', 0.06, 0.15], ['l', 0.00, 1.50], ['l', 0.00, 1.47], ['l', 1.47, 0.00], ['l', 1.50, 0.00], ['l', 0.15, 0.06], ['c', 0.15, 0.09, 0.21, 0.15, 0.30, 0.33], ['c', 0.09, 0.18, 0.09, 0.36, 0.00, 0.54], ['c', -0.09, 0.18, -0.15, 0.24, -0.33, 0.33], ['c', -0.12, 0.06, -0.18, 0.06, -1.62, 0.06], ['l', -1.47, 0.00], ['l', 0.00, 1.47], ['l', 0.00, 1.47], ['l', -0.06, 0.15], ['c', -0.09, 0.18, -0.15, 0.24, -0.33, 0.33], ['c', -0.18, 0.09, -0.36, 0.09, -0.54, 0.00], ['c', -0.18, -0.09, -0.24, -0.15, -0.33, -0.33], ['l', -0.06, -0.15], ['l', 0.00, -1.47], ['l', 0.00, -1.47], ['l', -1.47, 0.00], ['c', -1.44, 0.00, -1.50, 0.00, -1.62, -0.06], ['c', -0.18, -0.09, -0.24, -0.15, -0.33, -0.33], ['c', -0.09, -0.18, -0.09, -0.36, 0.00, -0.54], ['c', 0.09, -0.18, 0.15, -0.24, 0.33, -0.33], ['l', 0.15, -0.06], ['l', 1.47, 0.00], ['l', 1.47, 0.00], ['l', 0.00, -1.47], ['c', 0.00, -1.44, 0.00, -1.50, 0.06, -1.62], ['c', 0.09, -0.18, 0.15, -0.24, 0.33, -0.33], ['z']], w: 8.295, h: 8.295 },\n\t'scripts.upbow': { d: [['M', -4.65, -15.54], ['c', 0.12, -0.09, 0.36, -0.06, 0.48, 0.03], ['c', 0.03, 0.03, 0.09, 0.09, 0.12, 0.15], ['c', 0.03, 0.06, 0.66, 2.13, 1.41, 4.62], ['c', 1.35, 4.41, 1.38, 4.56, 2.01, 6.96], ['l', 0.63, 2.46], ['l', 0.63, -2.46], ['c', 0.63, -2.40, 0.66, -2.55, 2.01, -6.96], ['c', 0.75, -2.49, 1.38, -4.56, 1.41, -4.62], ['c', 0.06, -0.15, 0.18, -0.21, 0.36, -0.24], ['c', 0.15, 0.00, 0.30, 0.06, 0.39, 0.18], ['c', 0.15, 0.21, 0.24, -0.18, -2.10, 7.56], ['c', -1.20, 3.96, -2.22, 7.32, -2.25, 7.41], ['c', 0.00, 0.12, -0.06, 0.27, -0.09, 0.30], ['c', -0.12, 0.21, -0.60, 0.21, -0.72, 0.00], ['c', -0.03, -0.03, -0.09, -0.18, -0.09, -0.30], ['c', -0.03, -0.09, -1.05, -3.45, -2.25, -7.41], ['c', -2.34, -7.74, -2.25, -7.35, -2.10, -7.56], ['c', 0.03, -0.03, 0.09, -0.09, 0.15, -0.12], ['z']], w: 9.73, h: 15.608 },\n\t'scripts.downbow': { d: [['M', -5.55, -9.93], ['l', 0.09, -0.06], ['l', 5.46, 0.00], ['l', 5.46, 0.00], ['l', 0.09, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 4.77], ['c', 0.00, 5.28, 0.00, 4.89, -0.18, 5.01], ['c', -0.18, 0.12, -0.42, 0.06, -0.54, -0.12], ['c', -0.06, -0.09, -0.06, -0.18, -0.06, -2.97], ['l', 0.00, -2.85], ['l', -4.83, 0.00], ['l', -4.83, 0.00], ['l', 0.00, 2.85], ['c', 0.00, 2.79, 0.00, 2.88, -0.06, 2.97], ['c', -0.15, 0.24, -0.51, 0.24, -0.66, 0.00], ['c', -0.06, -0.09, -0.06, -0.21, -0.06, -4.89], ['l', 0.00, -4.77], ['z']], w: 11.22, h: 9.992 },\n\t'scripts.turn': { d: [['M', -4.77, -3.90], ['c', 0.36, -0.06, 1.05, -0.06, 1.44, 0.03], ['c', 0.78, 0.15, 1.50, 0.51, 2.34, 1.14], ['c', 0.60, 0.45, 1.05, 0.87, 2.22, 2.01], ['c', 1.11, 1.08, 1.62, 1.50, 2.22, 1.86], ['c', 0.60, 0.36, 1.32, 0.57, 1.92, 0.57], ['c', 0.90, 0.00, 1.71, -0.57, 1.89, -1.35], ['c', 0.24, -0.93, -0.39, -1.89, -1.35, -2.10], ['l', -0.15, -0.06], ['l', -0.09, 0.15], ['c', -0.03, 0.09, -0.15, 0.24, -0.24, 0.33], ['c', -0.72, 0.72, -2.04, 0.54, -2.49, -0.36], ['c', -0.48, -0.93, 0.03, -1.86, 1.17, -2.19], ['c', 0.30, -0.09, 1.02, -0.09, 1.35, 0.00], ['c', 0.99, 0.27, 1.74, 0.87, 2.25, 1.83], ['c', 0.69, 1.41, 0.63, 3.00, -0.21, 4.26], ['c', -0.21, 0.30, -0.69, 0.81, -0.99, 1.02], ['c', -0.30, 0.21, -0.84, 0.45, -1.17, 0.54], ['c', -1.23, 0.36, -2.49, 0.15, -3.72, -0.60], ['c', -0.75, -0.48, -1.41, -1.02, -2.85, -2.46], ['c', -1.11, -1.08, -1.62, -1.50, -2.22, -1.86], ['c', -0.60, -0.36, -1.32, -0.57, -1.92, -0.57], ['c', -0.90, 0.00, -1.71, 0.57, -1.89, 1.35], ['c', -0.24, 0.93, 0.39, 1.89, 1.35, 2.10], ['l', 0.15, 0.06], ['l', 0.09, -0.15], ['c', 0.03, -0.09, 0.15, -0.24, 0.24, -0.33], ['c', 0.72, -0.72, 2.04, -0.54, 2.49, 0.36], ['c', 0.48, 0.93, -0.03, 1.86, -1.17, 2.19], ['c', -0.30, 0.09, -1.02, 0.09, -1.35, 0.00], ['c', -0.99, -0.27, -1.74, -0.87, -2.25, -1.83], ['c', -0.69, -1.41, -0.63, -3.00, 0.21, -4.26], ['c', 0.21, -0.30, 0.69, -0.81, 0.99, -1.02], ['c', 0.48, -0.33, 1.11, -0.57, 1.74, -0.66], ['z']], w: 16.366, h: 7.893 },\n\t'scripts.trill': { d: [['M', -0.51, -16.02], ['c', 0.12, -0.09, 0.21, -0.18, 0.21, -0.18], ['l', -0.81, 4.02], ['l', -0.81, 4.02], ['c', 0.03, 0.00, 0.51, -0.27, 1.08, -0.60], ['c', 0.60, -0.30, 1.14, -0.63, 1.26, -0.66], ['c', 1.14, -0.54, 2.31, -0.60, 3.09, -0.18], ['c', 0.27, 0.15, 0.54, 0.36, 0.60, 0.51], ['l', 0.06, 0.12], ['l', 0.21, -0.21], ['c', 0.90, -0.81, 2.22, -0.99, 3.12, -0.42], ['c', 0.60, 0.42, 0.90, 1.14, 0.78, 2.07], ['c', -0.15, 1.29, -1.05, 2.31, -1.95, 2.25], ['c', -0.48, -0.03, -0.78, -0.30, -0.96, -0.81], ['c', -0.09, -0.27, -0.09, -0.90, -0.03, -1.20], ['c', 0.21, -0.75, 0.81, -1.23, 1.59, -1.32], ['l', 0.24, -0.03], ['l', -0.09, -0.12], ['c', -0.51, -0.66, -1.62, -0.63, -2.31, 0.03], ['c', -0.39, 0.42, -0.30, 0.09, -1.23, 4.77], ['l', -0.81, 4.14], ['c', -0.03, 0.00, -0.12, -0.03, -0.21, -0.09], ['c', -0.33, -0.15, -0.54, -0.18, -0.99, -0.18], ['c', -0.42, 0.00, -0.66, 0.03, -1.05, 0.18], ['c', -0.12, 0.06, -0.21, 0.09, -0.21, 0.09], ['c', 0.00, -0.03, 0.36, -1.86, 0.81, -4.11], ['c', 0.90, -4.47, 0.87, -4.26, 0.69, -4.53], ['c', -0.21, -0.36, -0.66, -0.51, -1.17, -0.36], ['c', -0.15, 0.06, -2.22, 1.14, -2.58, 1.38], ['c', -0.12, 0.09, -0.12, 0.09, -0.21, 0.60], ['l', -0.09, 0.51], ['l', 0.21, 0.24], ['c', 0.63, 0.75, 1.02, 1.47, 1.20, 2.19], ['c', 0.06, 0.27, 0.06, 0.36, 0.06, 0.81], ['c', 0.00, 0.42, 0.00, 0.54, -0.06, 0.78], ['c', -0.15, 0.54, -0.33, 0.93, -0.63, 1.35], ['c', -0.18, 0.24, -0.57, 0.63, -0.81, 0.78], ['c', -0.24, 0.15, -0.63, 0.36, -0.84, 0.42], ['c', -0.27, 0.06, -0.66, 0.06, -0.87, 0.03], ['c', -0.81, -0.18, -1.32, -1.05, -1.38, -2.46], ['c', -0.03, -0.60, 0.03, -0.99, 0.33, -2.46], ['c', 0.21, -1.08, 0.24, -1.32, 0.21, -1.29], ['c', -1.20, 0.48, -2.40, 0.75, -3.21, 0.72], ['c', -0.69, -0.06, -1.17, -0.30, -1.41, -0.72], ['c', -0.39, -0.75, -0.12, -1.80, 0.66, -2.46], ['c', 0.24, -0.18, 0.69, -0.42, 1.02, -0.51], ['c', 0.69, -0.18, 1.53, -0.15, 2.31, 0.09], ['c', 0.30, 0.09, 0.75, 0.30, 0.99, 0.45], ['c', 0.12, 0.09, 0.15, 0.09, 0.15, 0.03], ['c', 0.03, -0.03, 0.33, -1.59, 0.72, -3.45], ['c', 0.36, -1.86, 0.66, -3.42, 0.69, -3.45], ['c', 0.00, -0.03, 0.03, -0.03, 0.21, 0.03], ['c', 0.21, 0.06, 0.27, 0.06, 0.48, 0.06], ['c', 0.42, -0.03, 0.78, -0.18, 1.26, -0.48], ['c', 0.15, -0.12, 0.36, -0.27, 0.48, -0.39], ['z'], ['m', -5.73, 7.68], ['c', -0.27, -0.03, -0.96, -0.06, -1.20, -0.03], ['c', -0.81, 0.12, -1.35, 0.57, -1.50, 1.20], ['c', -0.18, 0.66, 0.12, 1.14, 0.75, 1.29], ['c', 0.66, 0.12, 1.92, -0.12, 3.18, -0.66], ['l', 0.33, -0.15], ['l', 0.09, -0.39], ['c', 0.06, -0.21, 0.09, -0.42, 0.09, -0.45], ['c', 0.00, -0.03, -0.45, -0.30, -0.75, -0.45], ['c', -0.27, -0.15, -0.66, -0.27, -0.99, -0.36], ['z'], ['m', 4.29, 3.63], ['c', -0.24, -0.39, -0.51, -0.75, -0.51, -0.69], ['c', -0.06, 0.12, -0.39, 1.92, -0.45, 2.28], ['c', -0.09, 0.54, -0.12, 1.14, -0.06, 1.38], ['c', 0.06, 0.42, 0.21, 0.60, 0.51, 0.57], ['c', 0.39, -0.06, 0.75, -0.48, 0.93, -1.14], ['c', 0.09, -0.33, 0.09, -1.05, 0.00, -1.38], ['c', -0.09, -0.39, -0.24, -0.69, -0.42, -1.02], ['z']], w: 17.963, h: 16.49 },\n\t'scripts.segno': { d: [['M', -3.72, -11.22], ['c', 0.78, -0.09, 1.59, 0.03, 2.31, 0.42], ['c', 1.20, 0.60, 2.01, 1.71, 2.31, 3.09], ['c', 0.09, 0.42, 0.09, 1.20, 0.03, 1.50], ['c', -0.15, 0.45, -0.39, 0.81, -0.66, 0.93], ['c', -0.33, 0.18, -0.84, 0.21, -1.23, 0.15], ['c', -0.81, -0.18, -1.32, -0.93, -1.26, -1.89], ['c', 0.03, -0.36, 0.09, -0.57, 0.24, -0.90], ['c', 0.15, -0.33, 0.45, -0.60, 0.72, -0.75], ['c', 0.12, -0.06, 0.18, -0.09, 0.18, -0.12], ['c', 0.00, -0.03, -0.03, -0.15, -0.09, -0.24], ['c', -0.18, -0.45, -0.54, -0.87, -0.96, -1.08], ['c', -1.11, -0.57, -2.34, -0.18, -2.88, 0.90], ['c', -0.24, 0.51, -0.33, 1.11, -0.24, 1.83], ['c', 0.27, 1.92, 1.50, 3.54, 3.93, 5.13], ['c', 0.48, 0.33, 1.26, 0.78, 1.29, 0.78], ['c', 0.03, 0.00, 1.35, -2.19, 2.94, -4.89], ['l', 2.88, -4.89], ['l', 0.84, 0.00], ['l', 0.87, 0.00], ['l', -0.03, 0.06], ['c', -0.15, 0.21, -6.15, 10.41, -6.15, 10.44], ['c', 0.00, 0.00, 0.21, 0.15, 0.48, 0.27], ['c', 2.61, 1.47, 4.35, 3.03, 5.13, 4.65], ['c', 1.14, 2.34, 0.51, 5.07, -1.44, 6.39], ['c', -0.66, 0.42, -1.32, 0.63, -2.13, 0.69], ['c', -2.01, 0.09, -3.81, -1.41, -4.26, -3.54], ['c', -0.09, -0.42, -0.09, -1.20, -0.03, -1.50], ['c', 0.15, -0.45, 0.39, -0.81, 0.66, -0.93], ['c', 0.33, -0.18, 0.84, -0.21, 1.23, -0.15], ['c', 0.81, 0.18, 1.32, 0.93, 1.26, 1.89], ['c', -0.03, 0.36, -0.09, 0.57, -0.24, 0.90], ['c', -0.15, 0.33, -0.45, 0.60, -0.72, 0.75], ['c', -0.12, 0.06, -0.18, 0.09, -0.18, 0.12], ['c', 0.00, 0.03, 0.03, 0.15, 0.09, 0.24], ['c', 0.18, 0.45, 0.54, 0.87, 0.96, 1.08], ['c', 1.11, 0.57, 2.34, 0.18, 2.88, -0.90], ['c', 0.24, -0.51, 0.33, -1.11, 0.24, -1.83], ['c', -0.27, -1.92, -1.50, -3.54, -3.93, -5.13], ['c', -0.48, -0.33, -1.26, -0.78, -1.29, -0.78], ['c', -0.03, 0.00, -1.35, 2.19, -2.91, 4.89], ['l', -2.88, 4.89], ['l', -0.87, 0.00], ['l', -0.87, 0.00], ['l', 0.03, -0.06], ['c', 0.15, -0.21, 6.15, -10.41, 6.15, -10.44], ['c', 0.00, 0.00, -0.21, -0.15, -0.48, -0.30], ['c', -2.61, -1.44, -4.35, -3.00, -5.13, -4.62], ['c', -0.90, -1.89, -0.72, -4.02, 0.48, -5.52], ['c', 0.69, -0.84, 1.68, -1.41, 2.73, -1.53], ['z'], ['m', 8.76, 9.09], ['c', 0.03, -0.03, 0.15, -0.03, 0.27, -0.03], ['c', 0.33, 0.03, 0.57, 0.18, 0.72, 0.48], ['c', 0.09, 0.18, 0.09, 0.57, 0.00, 0.75], ['c', -0.09, 0.18, -0.21, 0.30, -0.36, 0.39], ['c', -0.15, 0.06, -0.21, 0.06, -0.39, 0.06], ['c', -0.21, 0.00, -0.27, 0.00, -0.39, -0.06], ['c', -0.30, -0.15, -0.48, -0.45, -0.48, -0.75], ['c', 0.00, -0.39, 0.24, -0.72, 0.63, -0.84], ['z'], ['m', -10.53, 2.61], ['c', 0.03, -0.03, 0.15, -0.03, 0.27, -0.03], ['c', 0.33, 0.03, 0.57, 0.18, 0.72, 0.48], ['c', 0.09, 0.18, 0.09, 0.57, 0.00, 0.75], ['c', -0.09, 0.18, -0.21, 0.30, -0.36, 0.39], ['c', -0.15, 0.06, -0.21, 0.06, -0.39, 0.06], ['c', -0.21, 0.00, -0.27, 0.00, -0.39, -0.06], ['c', -0.30, -0.15, -0.48, -0.45, -0.48, -0.75], ['c', 0.00, -0.39, 0.24, -0.72, 0.63, -0.84], ['z']], w: 15, h: 22.504 },\n\t'scripts.coda': { d: [['M', -0.21, -10.47], ['c', 0.18, -0.12, 0.42, -0.06, 0.54, 0.12], ['c', 0.06, 0.09, 0.06, 0.18, 0.06, 1.50], ['l', 0.00, 1.38], ['l', 0.18, 0.00], ['c', 0.39, 0.06, 0.96, 0.24, 1.38, 0.48], ['c', 1.68, 0.93, 2.82, 3.24, 3.03, 6.12], ['c', 0.03, 0.24, 0.03, 0.45, 0.03, 0.45], ['c', 0.00, 0.03, 0.60, 0.03, 1.35, 0.03], ['c', 1.50, 0.00, 1.47, 0.00, 1.59, 0.18], ['c', 0.09, 0.12, 0.09, 0.30, 0.00, 0.42], ['c', -0.12, 0.18, -0.09, 0.18, -1.59, 0.18], ['c', -0.75, 0.00, -1.35, 0.00, -1.35, 0.03], ['c', 0.00, 0.00, 0.00, 0.21, -0.03, 0.42], ['c', -0.24, 3.15, -1.53, 5.58, -3.45, 6.36], ['c', -0.27, 0.12, -0.72, 0.24, -0.96, 0.27], ['l', -0.18, 0.00], ['l', 0.00, 1.38], ['c', 0.00, 1.32, 0.00, 1.41, -0.06, 1.50], ['c', -0.15, 0.24, -0.51, 0.24, -0.66, 0.00], ['c', -0.06, -0.09, -0.06, -0.18, -0.06, -1.50], ['l', 0.00, -1.38], ['l', -0.18, 0.00], ['c', -0.39, -0.06, -0.96, -0.24, -1.38, -0.48], ['c', -1.68, -0.93, -2.82, -3.24, -3.03, -6.15], ['c', -0.03, -0.21, -0.03, -0.42, -0.03, -0.42], ['c', 0.00, -0.03, -0.60, -0.03, -1.35, -0.03], ['c', -1.50, 0.00, -1.47, 0.00, -1.59, -0.18], ['c', -0.09, -0.12, -0.09, -0.30, 0.00, -0.42], ['c', 0.12, -0.18, 0.09, -0.18, 1.59, -0.18], ['c', 0.75, 0.00, 1.35, 0.00, 1.35, -0.03], ['c', 0.00, 0.00, 0.00, -0.21, 0.03, -0.45], ['c', 0.24, -3.12, 1.53, -5.55, 3.45, -6.33], ['c', 0.27, -0.12, 0.72, -0.24, 0.96, -0.27], ['l', 0.18, 0.00], ['l', 0.00, -1.38], ['c', 0.00, -1.53, 0.00, -1.50, 0.18, -1.62], ['z'], ['m', -0.18, 6.93], ['c', 0.00, -2.97, 0.00, -3.15, -0.06, -3.15], ['c', -0.09, 0.00, -0.51, 0.15, -0.66, 0.21], ['c', -0.87, 0.51, -1.38, 1.62, -1.56, 3.51], ['c', -0.06, 0.54, -0.12, 1.59, -0.12, 2.16], ['l', 0.00, 0.42], ['l', 1.20, 0.00], ['l', 1.20, 0.00], ['l', 0.00, -3.15], ['z'], ['m', 1.17, -3.06], ['c', -0.09, -0.03, -0.21, -0.06, -0.27, -0.09], ['l', -0.12, 0.00], ['l', 0.00, 3.15], ['l', 0.00, 3.15], ['l', 1.20, 0.00], ['l', 1.20, 0.00], ['l', 0.00, -0.81], ['c', -0.06, -2.40, -0.33, -3.69, -0.93, -4.59], ['c', -0.27, -0.39, -0.66, -0.69, -1.08, -0.81], ['z'], ['m', -1.17, 10.14], ['l', 0.00, -3.15], ['l', -1.20, 0.00], ['l', -1.20, 0.00], ['l', 0.00, 0.81], ['c', 0.03, 0.96, 0.06, 1.47, 0.15, 2.13], ['c', 0.24, 2.04, 0.96, 3.12, 2.13, 3.36], ['l', 0.12, 0.00], ['l', 0.00, -3.15], ['z'], ['m', 3.18, -2.34], ['l', 0.00, -0.81], ['l', -1.20, 0.00], ['l', -1.20, 0.00], ['l', 0.00, 3.15], ['l', 0.00, 3.15], ['l', 0.12, 0.00], ['c', 1.17, -0.24, 1.89, -1.32, 2.13, -3.36], ['c', 0.09, -0.66, 0.12, -1.17, 0.15, -2.13], ['z']], w: 16.035, h: 21.062 },\n\t'scripts.comma': { d: [['M', 1.14, -4.62], ['c', 0.30, -0.12, 0.69, -0.03, 0.93, 0.15], ['c', 0.12, 0.12, 0.36, 0.45, 0.51, 0.78], ['c', 0.90, 1.77, 0.54, 4.05, -1.08, 6.75], ['c', -0.36, 0.63, -0.87, 1.38, -0.96, 1.44], ['c', -0.18, 0.12, -0.42, 0.06, -0.54, -0.12], ['c', -0.09, -0.18, -0.09, -0.30, 0.12, -0.60], ['c', 0.96, -1.44, 1.44, -2.97, 1.38, -4.35], ['c', -0.06, -0.93, -0.30, -1.68, -0.78, -2.46], ['c', -0.27, -0.39, -0.33, -0.63, -0.24, -0.96], ['c', 0.09, -0.27, 0.36, -0.54, 0.66, -0.63], ['z']], w: 3.042, h: 9.237 },\n\t'scripts.roll': { d: [['M', 1.95, -6.00], ['c', 0.21, -0.09, 0.36, -0.09, 0.57, 0.00], ['c', 0.39, 0.15, 0.63, 0.39, 1.47, 1.35], ['c', 0.66, 0.75, 0.78, 0.87, 1.08, 1.05], ['c', 0.75, 0.45, 1.65, 0.42, 2.40, -0.06], ['c', 0.12, -0.09, 0.27, -0.27, 0.54, -0.60], ['c', 0.42, -0.54, 0.51, -0.63, 0.69, -0.63], ['c', 0.09, 0.00, 0.30, 0.12, 0.36, 0.21], ['c', 0.09, 0.12, 0.12, 0.30, 0.03, 0.42], ['c', -0.06, 0.12, -3.15, 3.90, -3.30, 4.08], ['c', -0.06, 0.06, -0.18, 0.12, -0.27, 0.18], ['c', -0.27, 0.12, -0.60, 0.06, -0.99, -0.27], ['c', -0.27, -0.21, -0.42, -0.39, -1.08, -1.14], ['c', -0.63, -0.72, -0.81, -0.90, -1.17, -1.08], ['c', -0.36, -0.18, -0.57, -0.21, -0.99, -0.21], ['c', -0.39, 0.00, -0.63, 0.03, -0.93, 0.18], ['c', -0.36, 0.15, -0.51, 0.27, -0.90, 0.81], ['c', -0.24, 0.27, -0.45, 0.51, -0.48, 0.54], ['c', -0.12, 0.09, -0.27, 0.06, -0.39, 0.00], ['c', -0.24, -0.15, -0.33, -0.39, -0.21, -0.60], ['c', 0.09, -0.12, 3.18, -3.87, 3.33, -4.02], ['c', 0.06, -0.06, 0.18, -0.15, 0.24, -0.21], ['z']], w: 10.817, h: 6.125 },\n\t'scripts.prall': { d: [['M', -4.38, -3.69], ['c', 0.06, -0.03, 0.18, -0.06, 0.24, -0.06], ['c', 0.30, 0.00, 0.27, -0.03, 1.89, 1.95], ['l', 1.53, 1.83], ['c', 0.03, 0.00, 0.57, -0.84, 1.23, -1.83], ['c', 1.14, -1.68, 1.23, -1.83, 1.35, -1.89], ['c', 0.06, -0.03, 0.18, -0.06, 0.24, -0.06], ['c', 0.30, 0.00, 0.27, -0.03, 1.89, 1.95], ['l', 1.53, 1.83], ['l', 0.48, -0.69], ['c', 0.51, -0.78, 0.54, -0.84, 0.69, -0.90], ['c', 0.42, -0.18, 0.87, 0.15, 0.81, 0.60], ['c', -0.03, 0.12, -0.30, 0.51, -1.50, 2.37], ['c', -1.38, 2.07, -1.50, 2.22, -1.62, 2.28], ['c', -0.06, 0.03, -0.18, 0.06, -0.24, 0.06], ['c', -0.30, 0.00, -0.27, 0.03, -1.89, -1.95], ['l', -1.53, -1.83], ['c', -0.03, 0.00, -0.57, 0.84, -1.23, 1.83], ['c', -1.14, 1.68, -1.23, 1.83, -1.35, 1.89], ['c', -0.06, 0.03, -0.18, 0.06, -0.24, 0.06], ['c', -0.30, 0.00, -0.27, 0.03, -1.89, -1.95], ['l', -1.53, -1.83], ['l', -0.48, 0.69], ['c', -0.51, 0.78, -0.54, 0.84, -0.69, 0.90], ['c', -0.42, 0.18, -0.87, -0.15, -0.81, -0.60], ['c', 0.03, -0.12, 0.30, -0.51, 1.50, -2.37], ['c', 1.38, -2.07, 1.50, -2.22, 1.62, -2.28], ['z']], w: 15.011, h: 7.5 },\n\t'scripts.arpeggio': { d: [['M', 1.5, 0], ['c', 1.5, 2, 1.5, 3, 1.5, 3], ['s', 0, 1, -2, 1.5], ['s', -0.5, 3, 1, 5.5], ['l', 1.5, 0], ['s', -1.75, -2, -1.9, -3.25], ['s', 2.15, -0.6, 2.95, -1.6], ['s', 0.45, -1, 0.5, -1.25], ['s', 0, -1, -2, -3.9], ['l', -1.5, 0], ['z']], w: 5, h: 10 },\n\t'scripts.mordent': { d: [['M', -0.21, -4.95], ['c', 0.27, -0.15, 0.63, 0.00, 0.75, 0.27], ['c', 0.06, 0.12, 0.06, 0.24, 0.06, 1.44], ['l', 0.00, 1.29], ['l', 0.57, -0.84], ['c', 0.51, -0.75, 0.57, -0.84, 0.69, -0.90], ['c', 0.06, -0.03, 0.18, -0.06, 0.24, -0.06], ['c', 0.30, 0.00, 0.27, -0.03, 1.89, 1.95], ['l', 1.53, 1.83], ['l', 0.48, -0.69], ['c', 0.51, -0.78, 0.54, -0.84, 0.69, -0.90], ['c', 0.42, -0.18, 0.87, 0.15, 0.81, 0.60], ['c', -0.03, 0.12, -0.30, 0.51, -1.50, 2.37], ['c', -1.38, 2.07, -1.50, 2.22, -1.62, 2.28], ['c', -0.06, 0.03, -0.18, 0.06, -0.24, 0.06], ['c', -0.30, 0.00, -0.27, 0.03, -1.83, -1.89], ['c', -0.81, -0.99, -1.50, -1.80, -1.53, -1.86], ['c', -0.06, -0.03, -0.06, -0.03, -0.12, 0.03], ['c', -0.06, 0.06, -0.06, 0.15, -0.06, 2.28], ['c', 0.00, 1.95, 0.00, 2.25, -0.06, 2.34], ['c', -0.18, 0.45, -0.81, 0.48, -1.05, 0.03], ['c', -0.03, -0.06, -0.06, -0.24, -0.06, -1.41], ['l', 0.00, -1.35], ['l', -0.57, 0.84], ['c', -0.54, 0.78, -0.60, 0.87, -0.72, 0.93], ['c', -0.06, 0.03, -0.18, 0.06, -0.24, 0.06], ['c', -0.30, 0.00, -0.27, 0.03, -1.89, -1.95], ['l', -1.53, -1.83], ['l', -0.48, 0.69], ['c', -0.51, 0.78, -0.54, 0.84, -0.69, 0.90], ['c', -0.42, 0.18, -0.87, -0.15, -0.81, -0.60], ['c', 0.03, -0.12, 0.30, -0.51, 1.50, -2.37], ['c', 1.38, -2.07, 1.50, -2.22, 1.62, -2.28], ['c', 0.06, -0.03, 0.18, -0.06, 0.24, -0.06], ['c', 0.30, 0.00, 0.27, -0.03, 1.89, 1.95], ['l', 1.53, 1.83], ['c', 0.03, 0.00, 0.06, -0.06, 0.09, -0.09], ['c', 0.06, -0.12, 0.06, -0.15, 0.06, -2.28], ['c', 0.00, -1.92, 0.00, -2.22, 0.06, -2.31], ['c', 0.06, -0.15, 0.15, -0.24, 0.30, -0.30], ['z']], w: 15.011, h: 10.012 },\n\t'flags.u8th': { d: [['M', -0.42, 3.75], ['l', 0.00, -3.75], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.00, 0.18], ['c', 0.00, 0.30, 0.06, 0.84, 0.12, 1.23], ['c', 0.24, 1.53, 0.90, 3.12, 2.13, 5.16], ['l', 0.99, 1.59], ['c', 0.87, 1.44, 1.38, 2.34, 1.77, 3.09], ['c', 0.81, 1.68, 1.20, 3.06, 1.26, 4.53], ['c', 0.03, 1.53, -0.21, 3.27, -0.75, 5.01], ['c', -0.21, 0.69, -0.51, 1.50, -0.60, 1.59], ['c', -0.09, 0.12, -0.27, 0.21, -0.42, 0.21], ['c', -0.15, 0.00, -0.42, -0.12, -0.51, -0.21], ['c', -0.15, -0.18, -0.18, -0.42, -0.09, -0.66], ['c', 0.15, -0.33, 0.45, -1.20, 0.57, -1.62], ['c', 0.42, -1.38, 0.60, -2.58, 0.60, -3.90], ['c', 0.00, -0.66, 0.00, -0.81, -0.06, -1.11], ['c', -0.39, -2.07, -1.80, -4.26, -4.59, -7.14], ['l', -0.42, -0.45], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -3.75], ['z']], w: 6.692, h: 22.59 },\n\t'flags.u16th': { d: [['M', -0.42, 7.50], ['l', 0.00, -7.50], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.00, 0.39], ['c', 0.06, 1.08, 0.39, 2.19, 0.99, 3.39], ['c', 0.45, 0.90, 0.87, 1.59, 1.95, 3.12], ['c', 1.29, 1.86, 1.77, 2.64, 2.22, 3.57], ['c', 0.45, 0.93, 0.72, 1.80, 0.87, 2.64], ['c', 0.06, 0.51, 0.06, 1.50, 0.00, 1.92], ['c', -0.12, 0.60, -0.30, 1.20, -0.54, 1.71], ['l', -0.09, 0.24], ['l', 0.18, 0.45], ['c', 0.51, 1.20, 0.72, 2.22, 0.69, 3.42], ['c', -0.06, 1.53, -0.39, 3.03, -0.99, 4.53], ['c', -0.30, 0.75, -0.36, 0.81, -0.57, 0.90], ['c', -0.15, 0.09, -0.33, 0.06, -0.48, 0.00], ['c', -0.18, -0.09, -0.27, -0.18, -0.33, -0.33], ['c', -0.09, -0.18, -0.06, -0.30, 0.12, -0.75], ['c', 0.66, -1.41, 1.02, -2.88, 1.08, -4.32], ['c', 0.00, -0.60, -0.03, -1.05, -0.18, -1.59], ['c', -0.30, -1.20, -0.99, -2.40, -2.25, -3.87], ['c', -0.42, -0.48, -1.53, -1.62, -2.19, -2.22], ['l', -0.45, -0.42], ['l', -0.03, 1.11], ['l', 0.00, 1.11], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -7.50], ['z'], ['m', 1.65, 0.09], ['c', -0.30, -0.30, -0.69, -0.72, -0.90, -0.87], ['l', -0.33, -0.33], ['l', 0.00, 0.15], ['c', 0.00, 0.30, 0.06, 0.81, 0.15, 1.26], ['c', 0.27, 1.29, 0.87, 2.61, 2.04, 4.29], ['c', 0.15, 0.24, 0.60, 0.87, 0.96, 1.38], ['l', 1.08, 1.53], ['l', 0.42, 0.63], ['c', 0.03, 0.00, 0.12, -0.36, 0.21, -0.72], ['c', 0.06, -0.33, 0.06, -1.20, 0.00, -1.62], ['c', -0.33, -1.71, -1.44, -3.48, -3.63, -5.70], ['z']], w: 6.693, h: 26.337 },\n\t'flags.u32nd': { d: [['M', -0.42, 11.25], ['l', 0.00, -11.25], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.00, 0.36], ['c', 0.09, 1.68, 0.69, 3.27, 2.07, 5.46], ['l', 0.87, 1.35], ['c', 1.02, 1.62, 1.47, 2.37, 1.86, 3.18], ['c', 0.48, 1.02, 0.78, 1.92, 0.93, 2.88], ['c', 0.06, 0.48, 0.06, 1.50, 0.00, 1.89], ['c', -0.09, 0.42, -0.21, 0.87, -0.36, 1.26], ['l', -0.12, 0.30], ['l', 0.15, 0.39], ['c', 0.69, 1.56, 0.84, 2.88, 0.54, 4.38], ['c', -0.09, 0.45, -0.27, 1.08, -0.45, 1.47], ['l', -0.12, 0.24], ['l', 0.18, 0.36], ['c', 0.33, 0.72, 0.57, 1.56, 0.69, 2.34], ['c', 0.12, 1.02, -0.06, 2.52, -0.42, 3.84], ['c', -0.27, 0.93, -0.75, 2.13, -0.93, 2.31], ['c', -0.18, 0.15, -0.45, 0.18, -0.66, 0.09], ['c', -0.18, -0.09, -0.27, -0.18, -0.33, -0.33], ['c', -0.09, -0.18, -0.06, -0.30, 0.06, -0.60], ['c', 0.21, -0.36, 0.42, -0.90, 0.57, -1.38], ['c', 0.51, -1.41, 0.69, -3.06, 0.48, -4.08], ['c', -0.15, -0.81, -0.57, -1.68, -1.20, -2.55], ['c', -0.72, -0.99, -1.83, -2.13, -3.30, -3.33], ['l', -0.48, -0.42], ['l', -0.03, 1.53], ['l', 0.00, 1.56], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -11.25], ['z'], ['m', 1.26, -3.96], ['c', -0.27, -0.30, -0.54, -0.60, -0.66, -0.72], ['l', -0.18, -0.21], ['l', 0.00, 0.42], ['c', 0.06, 0.87, 0.24, 1.74, 0.66, 2.67], ['c', 0.36, 0.87, 0.96, 1.86, 1.92, 3.18], ['c', 0.21, 0.33, 0.63, 0.87, 0.87, 1.23], ['c', 0.27, 0.39, 0.60, 0.84, 0.75, 1.08], ['l', 0.27, 0.39], ['l', 0.03, -0.12], ['c', 0.12, -0.45, 0.15, -1.05, 0.09, -1.59], ['c', -0.27, -1.86, -1.38, -3.78, -3.75, -6.33], ['z'], ['m', -0.27, 6.09], ['c', -0.27, -0.21, -0.48, -0.42, -0.51, -0.45], ['c', -0.06, -0.03, -0.06, -0.03, -0.06, 0.21], ['c', 0.00, 0.90, 0.30, 2.04, 0.81, 3.09], ['c', 0.48, 1.02, 0.96, 1.77, 2.37, 3.63], ['c', 0.60, 0.78, 1.05, 1.44, 1.29, 1.77], ['c', 0.06, 0.12, 0.15, 0.21, 0.15, 0.18], ['c', 0.03, -0.03, 0.18, -0.57, 0.24, -0.87], ['c', 0.06, -0.45, 0.06, -1.32, -0.03, -1.74], ['c', -0.09, -0.48, -0.24, -0.90, -0.51, -1.44], ['c', -0.66, -1.35, -1.83, -2.70, -3.75, -4.38], ['z']], w: 6.697, h: 32.145 },\n\t'flags.u64th': { d: [['M', -0.42, 15.00], ['l', 0.00, -15.00], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.00, 0.36], ['c', 0.06, 1.20, 0.39, 2.37, 1.02, 3.66], ['c', 0.39, 0.81, 0.84, 1.56, 1.80, 3.09], ['c', 0.81, 1.26, 1.05, 1.68, 1.35, 2.22], ['c', 0.87, 1.50, 1.35, 2.79, 1.56, 4.08], ['c', 0.06, 0.54, 0.06, 1.56, -0.03, 2.04], ['c', -0.09, 0.48, -0.21, 0.99, -0.36, 1.35], ['l', -0.12, 0.27], ['l', 0.12, 0.27], ['c', 0.09, 0.15, 0.21, 0.45, 0.27, 0.66], ['c', 0.69, 1.89, 0.63, 3.66, -0.18, 5.46], ['l', -0.18, 0.39], ['l', 0.15, 0.33], ['c', 0.30, 0.66, 0.51, 1.44, 0.63, 2.10], ['c', 0.06, 0.48, 0.06, 1.35, 0.00, 1.71], ['c', -0.15, 0.57, -0.42, 1.20, -0.78, 1.68], ['l', -0.21, 0.27], ['l', 0.18, 0.33], ['c', 0.57, 1.05, 0.93, 2.13, 1.02, 3.18], ['c', 0.06, 0.72, 0.00, 1.83, -0.21, 2.79], ['c', -0.18, 1.02, -0.63, 2.34, -1.02, 3.09], ['c', -0.15, 0.33, -0.48, 0.45, -0.78, 0.30], ['c', -0.18, -0.09, -0.27, -0.18, -0.33, -0.33], ['c', -0.09, -0.18, -0.06, -0.30, 0.03, -0.54], ['c', 0.75, -1.50, 1.23, -3.45, 1.17, -4.89], ['c', -0.06, -1.02, -0.42, -2.01, -1.17, -3.15], ['c', -0.48, -0.72, -1.02, -1.35, -1.89, -2.22], ['c', -0.57, -0.57, -1.56, -1.50, -1.92, -1.77], ['l', -0.12, -0.09], ['l', 0.00, 1.68], ['l', 0.00, 1.68], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -15.00], ['z'], ['m', 0.93, -8.07], ['c', -0.27, -0.30, -0.48, -0.54, -0.51, -0.54], ['c', 0.00, 0.00, 0.00, 0.69, 0.03, 1.02], ['c', 0.15, 1.47, 0.75, 2.94, 2.04, 4.83], ['l', 1.08, 1.53], ['c', 0.39, 0.57, 0.84, 1.20, 0.99, 1.44], ['c', 0.15, 0.24, 0.30, 0.45, 0.30, 0.45], ['c', 0.00, 0.00, 0.03, -0.09, 0.06, -0.21], ['c', 0.36, -1.59, -0.15, -3.33, -1.47, -5.40], ['c', -0.63, -0.93, -1.35, -1.83, -2.52, -3.12], ['z'], ['m', 0.06, 6.72], ['c', -0.24, -0.21, -0.48, -0.42, -0.51, -0.45], ['l', -0.06, -0.06], ['l', 0.00, 0.33], ['c', 0.00, 1.20, 0.30, 2.34, 0.93, 3.60], ['c', 0.45, 0.90, 0.96, 1.68, 2.25, 3.51], ['c', 0.39, 0.54, 0.84, 1.17, 1.02, 1.44], ['c', 0.21, 0.33, 0.33, 0.51, 0.33, 0.48], ['c', 0.06, -0.09, 0.21, -0.63, 0.30, -0.99], ['c', 0.06, -0.33, 0.06, -0.45, 0.06, -0.96], ['c', 0.00, -0.60, -0.03, -0.84, -0.18, -1.35], ['c', -0.30, -1.08, -1.02, -2.28, -2.13, -3.57], ['c', -0.39, -0.45, -1.44, -1.47, -2.01, -1.98], ['z'], ['m', 0.00, 6.72], ['c', -0.24, -0.21, -0.48, -0.39, -0.51, -0.42], ['l', -0.06, -0.06], ['l', 0.00, 0.33], ['c', 0.00, 1.41, 0.45, 2.82, 1.38, 4.35], ['c', 0.42, 0.72, 0.72, 1.14, 1.86, 2.73], ['c', 0.36, 0.45, 0.75, 0.99, 0.87, 1.20], ['c', 0.15, 0.21, 0.30, 0.36, 0.30, 0.36], ['c', 0.06, 0.00, 0.30, -0.48, 0.39, -0.75], ['c', 0.09, -0.36, 0.12, -0.63, 0.12, -1.05], ['c', -0.06, -1.05, -0.45, -2.04, -1.20, -3.18], ['c', -0.57, -0.87, -1.11, -1.53, -2.07, -2.49], ['c', -0.36, -0.33, -0.84, -0.78, -1.08, -1.02], ['z']], w: 6.682, h: 39.694 },\n\t'flags.d8th': { d: [['M', 5.67, -21.63], ['c', 0.24, -0.12, 0.54, -0.06, 0.69, 0.15], ['c', 0.06, 0.06, 0.21, 0.36, 0.39, 0.66], ['c', 0.84, 1.77, 1.26, 3.36, 1.32, 5.10], ['c', 0.03, 1.29, -0.21, 2.37, -0.81, 3.63], ['c', -0.60, 1.23, -1.26, 2.13, -3.21, 4.38], ['c', -1.35, 1.53, -1.86, 2.19, -2.40, 2.97], ['c', -0.63, 0.93, -1.11, 1.92, -1.38, 2.79], ['c', -0.15, 0.54, -0.27, 1.35, -0.27, 1.80], ['l', 0.00, 0.15], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -3.75], ['l', 0.00, -3.75], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.48, -0.30], ['c', 1.83, -1.11, 3.12, -2.10, 4.17, -3.12], ['c', 0.78, -0.81, 1.32, -1.53, 1.71, -2.31], ['c', 0.45, -0.93, 0.60, -1.74, 0.51, -2.88], ['c', -0.12, -1.56, -0.63, -3.18, -1.47, -4.68], ['c', -0.12, -0.21, -0.15, -0.33, -0.06, -0.51], ['c', 0.06, -0.15, 0.15, -0.24, 0.33, -0.33], ['z']], w: 8.492, h: 21.691 },\n\t'flags.ugrace': { d: [['M', 6.03, 6.93], ['c', 0.15, -0.09, 0.33, -0.06, 0.51, 0.00], ['c', 0.15, 0.09, 0.21, 0.15, 0.30, 0.33], ['c', 0.09, 0.18, 0.06, 0.39, -0.03, 0.54], ['c', -0.06, 0.15, -10.89, 8.88, -11.07, 8.97], ['c', -0.15, 0.09, -0.33, 0.06, -0.48, 0.00], ['c', -0.18, -0.09, -0.24, -0.15, -0.33, -0.33], ['c', -0.09, -0.18, -0.06, -0.39, 0.03, -0.54], ['c', 0.06, -0.15, 10.89, -8.88, 11.07, -8.97], ['z']], w: 12.019, h: 9.954 },\n\t'flags.dgrace': { d: [['M', -6.06, -15.93], ['c', 0.18, -0.09, 0.33, -0.12, 0.48, -0.06], ['c', 0.18, 0.09, 14.01, 8.04, 14.10, 8.10], ['c', 0.12, 0.12, 0.18, 0.33, 0.18, 0.51], ['c', -0.03, 0.21, -0.15, 0.39, -0.36, 0.48], ['c', -0.18, 0.09, -0.33, 0.12, -0.48, 0.06], ['c', -0.18, -0.09, -14.01, -8.04, -14.10, -8.10], ['c', -0.12, -0.12, -0.18, -0.33, -0.18, -0.51], ['c', 0.03, -0.21, 0.15, -0.39, 0.36, -0.48], ['z']], w: 15.12, h: 9.212 },\n\t'flags.d16th': { d: [['M', 6.84, -22.53], ['c', 0.27, -0.12, 0.57, -0.06, 0.72, 0.15], ['c', 0.15, 0.15, 0.33, 0.87, 0.45, 1.56], ['c', 0.06, 0.33, 0.06, 1.35, 0.00, 1.65], ['c', -0.06, 0.33, -0.15, 0.78, -0.27, 1.11], ['c', -0.12, 0.33, -0.45, 0.96, -0.66, 1.32], ['l', -0.18, 0.27], ['l', 0.09, 0.18], ['c', 0.48, 1.02, 0.72, 2.25, 0.69, 3.30], ['c', -0.06, 1.23, -0.42, 2.28, -1.26, 3.45], ['c', -0.57, 0.87, -0.99, 1.32, -3.00, 3.39], ['c', -1.56, 1.56, -2.22, 2.40, -2.76, 3.45], ['c', -0.42, 0.84, -0.66, 1.80, -0.66, 2.55], ['l', 0.00, 0.15], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -7.50], ['l', 0.00, -7.50], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.00, 1.14], ['l', 0.00, 1.11], ['l', 0.27, -0.15], ['c', 1.11, -0.57, 1.77, -0.99, 2.52, -1.47], ['c', 2.37, -1.56, 3.69, -3.15, 4.05, -4.83], ['c', 0.03, -0.18, 0.03, -0.39, 0.03, -0.78], ['c', 0.00, -0.60, -0.03, -0.93, -0.24, -1.50], ['c', -0.06, -0.18, -0.12, -0.39, -0.15, -0.45], ['c', -0.03, -0.24, 0.12, -0.48, 0.36, -0.60], ['z'], ['m', -0.63, 7.50], ['c', -0.06, -0.18, -0.15, -0.36, -0.15, -0.36], ['c', -0.03, 0.00, -0.03, 0.03, -0.06, 0.06], ['c', -0.06, 0.12, -0.96, 1.02, -1.95, 1.98], ['c', -0.63, 0.57, -1.26, 1.17, -1.44, 1.35], ['c', -1.53, 1.62, -2.28, 2.85, -2.55, 4.32], ['c', -0.03, 0.18, -0.03, 0.54, -0.06, 0.99], ['l', 0.00, 0.69], ['l', 0.18, -0.09], ['c', 0.93, -0.54, 2.10, -1.29, 2.82, -1.83], ['c', 0.69, -0.51, 1.02, -0.81, 1.53, -1.29], ['c', 1.86, -1.89, 2.37, -3.66, 1.68, -5.82], ['z']], w: 8.475, h: 22.591 },\n\t'flags.d32nd': { d: [['M', 6.84, -29.13], ['c', 0.27, -0.12, 0.57, -0.06, 0.72, 0.15], ['c', 0.12, 0.12, 0.27, 0.63, 0.36, 1.11], ['c', 0.33, 1.59, 0.06, 3.06, -0.81, 4.47], ['l', -0.18, 0.27], ['l', 0.09, 0.15], ['c', 0.12, 0.24, 0.33, 0.69, 0.45, 1.05], ['c', 0.63, 1.83, 0.45, 3.57, -0.57, 5.22], ['l', -0.18, 0.30], ['l', 0.15, 0.27], ['c', 0.42, 0.87, 0.60, 1.71, 0.57, 2.61], ['c', -0.06, 1.29, -0.48, 2.46, -1.35, 3.78], ['c', -0.54, 0.81, -0.93, 1.29, -2.46, 3.00], ['c', -0.51, 0.54, -1.05, 1.17, -1.26, 1.41], ['c', -1.56, 1.86, -2.25, 3.36, -2.37, 5.01], ['l', 0.00, 0.33], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -11.25], ['l', 0.00, -11.25], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.00, 1.35], ['l', 0.03, 1.35], ['l', 0.78, -0.39], ['c', 1.38, -0.69, 2.34, -1.26, 3.24, -1.92], ['c', 1.38, -1.02, 2.28, -2.13, 2.64, -3.21], ['c', 0.15, -0.48, 0.18, -0.72, 0.18, -1.29], ['c', 0.00, -0.57, -0.06, -0.90, -0.24, -1.47], ['c', -0.06, -0.18, -0.12, -0.39, -0.15, -0.45], ['c', -0.03, -0.24, 0.12, -0.48, 0.36, -0.60], ['z'], ['m', -0.63, 7.20], ['c', -0.09, -0.18, -0.12, -0.21, -0.12, -0.15], ['c', -0.03, 0.09, -1.02, 1.08, -2.04, 2.04], ['c', -1.17, 1.08, -1.65, 1.56, -2.07, 2.04], ['c', -0.84, 0.96, -1.38, 1.86, -1.68, 2.76], ['c', -0.21, 0.57, -0.27, 0.99, -0.30, 1.65], ['l', 0.00, 0.54], ['l', 0.66, -0.33], ['c', 3.57, -1.86, 5.49, -3.69, 5.94, -5.70], ['c', 0.06, -0.39, 0.06, -1.20, -0.03, -1.65], ['c', -0.06, -0.39, -0.24, -0.90, -0.36, -1.20], ['z'], ['m', -0.06, 7.20], ['c', -0.06, -0.15, -0.12, -0.33, -0.15, -0.45], ['l', -0.06, -0.18], ['l', -0.18, 0.21], ['l', -1.83, 1.83], ['c', -0.87, 0.90, -1.77, 1.80, -1.95, 2.01], ['c', -1.08, 1.29, -1.62, 2.31, -1.89, 3.51], ['c', -0.06, 0.30, -0.06, 0.51, -0.09, 0.93], ['l', 0.00, 0.57], ['l', 0.09, -0.06], ['c', 0.75, -0.45, 1.89, -1.26, 2.52, -1.74], ['c', 0.81, -0.66, 1.74, -1.53, 2.22, -2.16], ['c', 1.26, -1.53, 1.68, -3.06, 1.32, -4.47], ['z']], w: 8.385, h: 29.191 },\n\t'flags.d64th': { d: [['M', 7.08, -32.88], ['c', 0.30, -0.12, 0.66, -0.03, 0.78, 0.24], ['c', 0.18, 0.33, 0.27, 2.10, 0.15, 2.64], ['c', -0.09, 0.39, -0.21, 0.78, -0.39, 1.08], ['l', -0.15, 0.30], ['l', 0.09, 0.27], ['c', 0.03, 0.12, 0.09, 0.45, 0.12, 0.69], ['c', 0.27, 1.44, 0.18, 2.55, -0.30, 3.60], ['l', -0.12, 0.33], ['l', 0.06, 0.42], ['c', 0.27, 1.35, 0.33, 2.82, 0.21, 3.63], ['c', -0.12, 0.60, -0.30, 1.23, -0.57, 1.80], ['l', -0.15, 0.27], ['l', 0.03, 0.42], ['c', 0.06, 1.02, 0.06, 2.70, 0.03, 3.06], ['c', -0.15, 1.47, -0.66, 2.76, -1.74, 4.41], ['c', -0.45, 0.69, -0.75, 1.11, -1.74, 2.37], ['c', -1.05, 1.38, -1.50, 1.98, -1.95, 2.73], ['c', -0.93, 1.50, -1.38, 2.82, -1.44, 4.20], ['l', 0.00, 0.42], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -15.00], ['l', 0.00, -15.00], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.00, 1.86], ['l', 0.00, 1.89], ['c', 0.00, 0.00, 0.21, -0.03, 0.45, -0.09], ['c', 2.22, -0.39, 4.08, -1.11, 5.19, -2.01], ['c', 0.63, -0.54, 1.02, -1.14, 1.20, -1.80], ['c', 0.06, -0.30, 0.06, -1.14, -0.03, -1.65], ['c', -0.03, -0.18, -0.06, -0.39, -0.09, -0.48], ['c', -0.03, -0.24, 0.12, -0.48, 0.36, -0.60], ['z'], ['m', -0.45, 6.15], ['c', -0.03, -0.18, -0.06, -0.42, -0.06, -0.54], ['l', -0.03, -0.18], ['l', -0.33, 0.30], ['c', -0.42, 0.36, -0.87, 0.72, -1.68, 1.29], ['c', -1.98, 1.38, -2.25, 1.59, -2.85, 2.16], ['c', -0.75, 0.69, -1.23, 1.44, -1.47, 2.19], ['c', -0.15, 0.45, -0.18, 0.63, -0.21, 1.35], ['l', 0.00, 0.66], ['l', 0.39, -0.18], ['c', 1.83, -0.90, 3.45, -1.95, 4.47, -2.91], ['c', 0.93, -0.90, 1.53, -1.83, 1.74, -2.82], ['c', 0.06, -0.33, 0.06, -0.87, 0.03, -1.32], ['z'], ['m', -0.27, 4.86], ['c', -0.03, -0.21, -0.06, -0.36, -0.06, -0.36], ['c', 0.00, -0.03, -0.12, 0.09, -0.24, 0.24], ['c', -0.39, 0.48, -0.99, 1.08, -2.16, 2.19], ['c', -1.47, 1.38, -1.92, 1.83, -2.46, 2.49], ['c', -0.66, 0.87, -1.08, 1.74, -1.29, 2.58], ['c', -0.09, 0.42, -0.15, 0.87, -0.15, 1.44], ['l', 0.00, 0.54], ['l', 0.48, -0.33], ['c', 1.50, -1.02, 2.58, -1.89, 3.51, -2.82], ['c', 1.47, -1.47, 2.25, -2.85, 2.40, -4.26], ['c', 0.03, -0.39, 0.03, -1.17, -0.03, -1.71], ['z'], ['m', -0.66, 7.68], ['c', 0.03, -0.15, 0.03, -0.60, 0.03, -0.99], ['l', 0.00, -0.72], ['l', -0.27, 0.33], ['l', -1.74, 1.98], ['c', -1.77, 1.92, -2.43, 2.76, -2.97, 3.90], ['c', -0.51, 1.02, -0.72, 1.77, -0.75, 2.91], ['c', 0.00, 0.63, 0.00, 0.63, 0.06, 0.60], ['c', 0.03, -0.03, 0.30, -0.27, 0.63, -0.54], ['c', 0.66, -0.60, 1.86, -1.80, 2.31, -2.31], ['c', 1.65, -1.89, 2.52, -3.54, 2.70, -5.16], ['z']], w: 8.485, h: 32.932 },\n\t'clefs.C': { d: [['M', 0.06, -14.94], ['l', 0.09, -0.06], ['l', 1.92, 0.00], ['l', 1.92, 0.00], ['l', 0.09, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 14.85], ['l', 0.00, 14.82], ['l', -0.06, 0.09], ['l', -0.09, 0.06], ['l', -1.92, 0.00], ['l', -1.92, 0.00], ['l', -0.09, -0.06], ['l', -0.06, -0.09], ['l', 0.00, -14.82], ['l', 0.00, -14.85], ['z'], ['m', 5.37, 0.00], ['c', 0.09, -0.06, 0.09, -0.06, 0.57, -0.06], ['c', 0.45, 0.00, 0.45, 0.00, 0.54, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 7.14], ['l', 0.00, 7.11], ['l', 0.09, -0.06], ['c', 0.18, -0.18, 0.72, -0.84, 0.96, -1.20], ['c', 0.30, -0.45, 0.66, -1.17, 0.84, -1.65], ['c', 0.36, -0.90, 0.57, -1.83, 0.60, -2.79], ['c', 0.03, -0.48, 0.03, -0.54, 0.09, -0.63], ['c', 0.12, -0.18, 0.36, -0.21, 0.54, -0.12], ['c', 0.18, 0.09, 0.21, 0.15, 0.24, 0.66], ['c', 0.06, 0.87, 0.21, 1.56, 0.57, 2.22], ['c', 0.51, 1.02, 1.26, 1.68, 2.22, 1.92], ['c', 0.21, 0.06, 0.33, 0.06, 0.78, 0.06], ['c', 0.45, 0.00, 0.57, 0.00, 0.84, -0.06], ['c', 0.45, -0.12, 0.81, -0.33, 1.08, -0.60], ['c', 0.57, -0.57, 0.87, -1.41, 0.99, -2.88], ['c', 0.06, -0.54, 0.06, -3.00, 0.00, -3.57], ['c', -0.21, -2.58, -0.84, -3.87, -2.16, -4.50], ['c', -0.48, -0.21, -1.17, -0.36, -1.77, -0.36], ['c', -0.69, 0.00, -1.29, 0.27, -1.50, 0.72], ['c', -0.06, 0.15, -0.06, 0.21, -0.06, 0.42], ['c', 0.00, 0.24, 0.00, 0.30, 0.06, 0.45], ['c', 0.12, 0.24, 0.24, 0.39, 0.63, 0.66], ['c', 0.42, 0.30, 0.57, 0.48, 0.69, 0.72], ['c', 0.06, 0.15, 0.06, 0.21, 0.06, 0.48], ['c', 0.00, 0.39, -0.03, 0.63, -0.21, 0.96], ['c', -0.30, 0.60, -0.87, 1.08, -1.50, 1.26], ['c', -0.27, 0.06, -0.87, 0.06, -1.14, 0.00], ['c', -0.78, -0.24, -1.44, -0.87, -1.65, -1.68], ['c', -0.12, -0.42, -0.09, -1.17, 0.09, -1.71], ['c', 0.51, -1.65, 1.98, -2.82, 3.81, -3.09], ['c', 0.84, -0.09, 2.46, 0.03, 3.51, 0.27], ['c', 2.22, 0.57, 3.69, 1.80, 4.44, 3.75], ['c', 0.36, 0.93, 0.57, 2.13, 0.57, 3.36], ['c', 0.00, 1.44, -0.48, 2.73, -1.38, 3.81], ['c', -1.26, 1.50, -3.27, 2.43, -5.28, 2.43], ['c', -0.48, 0.00, -0.51, 0.00, -0.75, -0.09], ['c', -0.15, -0.03, -0.48, -0.21, -0.78, -0.36], ['c', -0.69, -0.36, -0.87, -0.42, -1.26, -0.42], ['c', -0.27, 0.00, -0.30, 0.00, -0.51, 0.09], ['c', -0.57, 0.30, -0.81, 0.90, -0.81, 2.10], ['c', 0.00, 1.23, 0.24, 1.83, 0.81, 2.13], ['c', 0.21, 0.09, 0.24, 0.09, 0.51, 0.09], ['c', 0.39, 0.00, 0.57, -0.06, 1.26, -0.42], ['c', 0.30, -0.15, 0.63, -0.33, 0.78, -0.36], ['c', 0.24, -0.09, 0.27, -0.09, 0.75, -0.09], ['c', 2.01, 0.00, 4.02, 0.93, 5.28, 2.40], ['c', 0.90, 1.11, 1.38, 2.40, 1.38, 3.84], ['c', 0.00, 1.50, -0.30, 2.88, -0.84, 3.96], ['c', -0.78, 1.59, -2.19, 2.64, -4.17, 3.15], ['c', -1.05, 0.24, -2.67, 0.36, -3.51, 0.27], ['c', -1.83, -0.27, -3.30, -1.44, -3.81, -3.09], ['c', -0.18, -0.54, -0.21, -1.29, -0.09, -1.74], ['c', 0.15, -0.60, 0.63, -1.20, 1.23, -1.47], ['c', 0.36, -0.18, 0.57, -0.21, 0.99, -0.21], ['c', 0.42, 0.00, 0.63, 0.03, 1.02, 0.21], ['c', 0.42, 0.21, 0.84, 0.63, 1.05, 1.05], ['c', 0.18, 0.36, 0.21, 0.60, 0.21, 0.96], ['c', 0.00, 0.30, 0.00, 0.36, -0.06, 0.51], ['c', -0.12, 0.24, -0.27, 0.42, -0.69, 0.72], ['c', -0.57, 0.42, -0.69, 0.63, -0.69, 1.08], ['c', 0.00, 0.24, 0.00, 0.30, 0.06, 0.45], ['c', 0.12, 0.21, 0.30, 0.39, 0.57, 0.54], ['c', 0.42, 0.18, 0.87, 0.21, 1.53, 0.15], ['c', 1.08, -0.15, 1.80, -0.57, 2.34, -1.32], ['c', 0.54, -0.75, 0.84, -1.83, 0.99, -3.51], ['c', 0.06, -0.57, 0.06, -3.03, 0.00, -3.57], ['c', -0.12, -1.47, -0.42, -2.31, -0.99, -2.88], ['c', -0.27, -0.27, -0.63, -0.48, -1.08, -0.60], ['c', -0.27, -0.06, -0.39, -0.06, -0.84, -0.06], ['c', -0.45, 0.00, -0.57, 0.00, -0.78, 0.06], ['c', -1.14, 0.27, -2.01, 1.17, -2.46, 2.49], ['c', -0.21, 0.57, -0.30, 0.99, -0.33, 1.65], ['c', -0.03, 0.51, -0.06, 0.57, -0.24, 0.66], ['c', -0.12, 0.06, -0.27, 0.06, -0.39, 0.00], ['c', -0.21, -0.09, -0.21, -0.15, -0.24, -0.75], ['c', -0.09, -1.92, -0.78, -3.72, -2.01, -5.19], ['c', -0.18, -0.21, -0.36, -0.42, -0.39, -0.45], ['l', -0.09, -0.06], ['l', 0.00, 7.11], ['l', 0.00, 7.14], ['l', -0.06, 0.09], ['c', -0.09, 0.06, -0.09, 0.06, -0.54, 0.06], ['c', -0.48, 0.00, -0.48, 0.00, -0.57, -0.06], ['l', -0.06, -0.09], ['l', 0.00, -14.82], ['l', 0.00, -14.85], ['z']], w: 20.31, h: 29.97 },\n\t'clefs.F': { d: [['M', 6.30, -7.80], ['c', 0.36, -0.03, 1.65, 0.00, 2.13, 0.03], ['c', 3.60, 0.42, 6.03, 2.10, 6.93, 4.86], ['c', 0.27, 0.84, 0.36, 1.50, 0.36, 2.58], ['c', 0.00, 0.90, -0.03, 1.35, -0.18, 2.16], ['c', -0.78, 3.78, -3.54, 7.08, -8.37, 9.96], ['c', -1.74, 1.05, -3.87, 2.13, -6.18, 3.12], ['c', -0.39, 0.18, -0.75, 0.33, -0.81, 0.36], ['c', -0.06, 0.03, -0.15, 0.06, -0.18, 0.06], ['c', -0.15, 0.00, -0.33, -0.18, -0.33, -0.33], ['c', 0.00, -0.15, 0.06, -0.21, 0.51, -0.48], ['c', 3.00, -1.77, 5.13, -3.21, 6.84, -4.74], ['c', 0.51, -0.45, 1.59, -1.50, 1.95, -1.95], ['c', 1.89, -2.19, 2.88, -4.32, 3.15, -6.78], ['c', 0.06, -0.42, 0.06, -1.77, 0.00, -2.19], ['c', -0.24, -2.01, -0.93, -3.63, -2.04, -4.71], ['c', -0.63, -0.63, -1.29, -1.02, -2.07, -1.20], ['c', -1.62, -0.39, -3.36, 0.15, -4.56, 1.44], ['c', -0.54, 0.60, -1.05, 1.47, -1.32, 2.22], ['l', -0.09, 0.21], ['l', 0.24, -0.12], ['c', 0.39, -0.21, 0.63, -0.24, 1.11, -0.24], ['c', 0.30, 0.00, 0.45, 0.00, 0.66, 0.06], ['c', 1.92, 0.48, 2.85, 2.55, 1.95, 4.38], ['c', -0.45, 0.99, -1.41, 1.62, -2.46, 1.71], ['c', -1.47, 0.09, -2.91, -0.87, -3.39, -2.25], ['c', -0.18, -0.57, -0.21, -1.32, -0.03, -2.28], ['c', 0.39, -2.25, 1.83, -4.20, 3.81, -5.19], ['c', 0.69, -0.36, 1.59, -0.60, 2.37, -0.69], ['z'], ['m', 11.58, 2.52], ['c', 0.84, -0.21, 1.71, 0.30, 1.89, 1.14], ['c', 0.30, 1.17, -0.72, 2.19, -1.89, 1.89], ['c', -0.99, -0.21, -1.50, -1.32, -1.02, -2.25], ['c', 0.18, -0.39, 0.60, -0.69, 1.02, -0.78], ['z'], ['m', 0.00, 7.50], ['c', 0.84, -0.21, 1.71, 0.30, 1.89, 1.14], ['c', 0.21, 0.87, -0.30, 1.71, -1.14, 1.89], ['c', -0.87, 0.21, -1.71, -0.30, -1.89, -1.14], ['c', -0.21, -0.84, 0.30, -1.71, 1.14, -1.89], ['z']], w: 20.153, h: 23.142 },\n\t'clefs.G': { d: [['M', 9.69, -37.41], ['c', 0.09, -0.09, 0.24, -0.06, 0.36, 0.00], ['c', 0.12, 0.09, 0.57, 0.60, 0.96, 1.11], ['c', 1.77, 2.34, 3.21, 5.85, 3.57, 8.73], ['c', 0.21, 1.56, 0.03, 3.27, -0.45, 4.86], ['c', -0.69, 2.31, -1.92, 4.47, -4.23, 7.44], ['c', -0.30, 0.39, -0.57, 0.72, -0.60, 0.75], ['c', -0.03, 0.06, 0.00, 0.15, 0.18, 0.78], ['c', 0.54, 1.68, 1.38, 4.44, 1.68, 5.49], ['l', 0.09, 0.42], ['l', 0.39, 0.00], ['c', 1.47, 0.09, 2.76, 0.51, 3.96, 1.29], ['c', 1.83, 1.23, 3.06, 3.21, 3.39, 5.52], ['c', 0.09, 0.45, 0.12, 1.29, 0.06, 1.74], ['c', -0.09, 1.02, -0.33, 1.83, -0.75, 2.73], ['c', -0.84, 1.71, -2.28, 3.06, -4.02, 3.72], ['l', -0.33, 0.12], ['l', 0.03, 1.26], ['c', 0.00, 1.74, -0.06, 3.63, -0.21, 4.62], ['c', -0.45, 3.06, -2.19, 5.49, -4.47, 6.21], ['c', -0.57, 0.18, -0.90, 0.21, -1.59, 0.21], ['c', -0.69, 0.00, -1.02, -0.03, -1.65, -0.21], ['c', -1.14, -0.27, -2.13, -0.84, -2.94, -1.65], ['c', -0.99, -0.99, -1.56, -2.16, -1.71, -3.54], ['c', -0.09, -0.81, 0.06, -1.53, 0.45, -2.13], ['c', 0.63, -0.99, 1.83, -1.56, 3.00, -1.53], ['c', 1.50, 0.09, 2.64, 1.32, 2.73, 2.94], ['c', 0.06, 1.47, -0.93, 2.70, -2.37, 2.97], ['c', -0.45, 0.06, -0.84, 0.03, -1.29, -0.09], ['l', -0.21, -0.09], ['l', 0.09, 0.12], ['c', 0.39, 0.54, 0.78, 0.93, 1.32, 1.26], ['c', 1.35, 0.87, 3.06, 1.02, 4.35, 0.36], ['c', 1.44, -0.72, 2.52, -2.28, 2.97, -4.35], ['c', 0.15, -0.66, 0.24, -1.50, 0.30, -3.03], ['c', 0.03, -0.84, 0.03, -2.94, 0.00, -3.00], ['c', -0.03, 0.00, -0.18, 0.00, -0.36, 0.03], ['c', -0.66, 0.12, -0.99, 0.12, -1.83, 0.12], ['c', -1.05, 0.00, -1.71, -0.06, -2.61, -0.30], ['c', -4.02, -0.99, -7.11, -4.35, -7.80, -8.46], ['c', -0.12, -0.66, -0.12, -0.99, -0.12, -1.83], ['c', 0.00, -0.84, 0.00, -1.14, 0.15, -1.92], ['c', 0.36, -2.28, 1.41, -4.62, 3.30, -7.29], ['l', 2.79, -3.60], ['c', 0.54, -0.66, 0.96, -1.20, 0.96, -1.23], ['c', 0.00, -0.03, -0.09, -0.33, -0.18, -0.69], ['c', -0.96, -3.21, -1.41, -5.28, -1.59, -7.68], ['c', -0.12, -1.38, -0.15, -3.09, -0.06, -3.96], ['c', 0.33, -2.67, 1.38, -5.07, 3.12, -7.08], ['c', 0.36, -0.42, 0.99, -1.05, 1.17, -1.14], ['z'], ['m', 2.01, 4.71], ['c', -0.15, -0.30, -0.30, -0.54, -0.30, -0.54], ['c', -0.03, 0.00, -0.18, 0.09, -0.30, 0.21], ['c', -2.40, 1.74, -3.87, 4.20, -4.26, 7.11], ['c', -0.06, 0.54, -0.06, 1.41, -0.03, 1.89], ['c', 0.09, 1.29, 0.48, 3.12, 1.08, 5.22], ['c', 0.15, 0.42, 0.24, 0.78, 0.24, 0.81], ['c', 0.00, 0.03, 0.84, -1.11, 1.23, -1.68], ['c', 1.89, -2.73, 2.88, -5.07, 3.15, -7.53], ['c', 0.09, -0.57, 0.12, -1.74, 0.06, -2.37], ['c', -0.09, -1.23, -0.27, -1.92, -0.87, -3.12], ['z'], ['m', -2.94, 20.70], ['c', -0.21, -0.72, -0.39, -1.32, -0.42, -1.32], ['c', 0.00, 0.00, -1.20, 1.47, -1.86, 2.37], ['c', -2.79, 3.63, -4.02, 6.30, -4.35, 9.30], ['c', -0.03, 0.21, -0.03, 0.69, -0.03, 1.08], ['c', 0.00, 0.69, 0.00, 0.75, 0.06, 1.11], ['c', 0.12, 0.54, 0.27, 0.99, 0.51, 1.47], ['c', 0.69, 1.38, 1.83, 2.55, 3.42, 3.42], ['c', 0.96, 0.54, 2.07, 0.90, 3.21, 1.08], ['c', 0.78, 0.12, 2.04, 0.12, 2.94, -0.03], ['c', 0.51, -0.06, 0.45, -0.03, 0.42, -0.30], ['c', -0.24, -3.33, -0.72, -6.33, -1.62, -10.08], ['c', -0.09, -0.39, -0.18, -0.75, -0.18, -0.78], ['c', -0.03, -0.03, -0.42, 0.00, -0.81, 0.09], ['c', -0.90, 0.18, -1.65, 0.57, -2.22, 1.14], ['c', -0.72, 0.72, -1.08, 1.65, -1.05, 2.64], ['c', 0.06, 0.96, 0.48, 1.83, 1.23, 2.58], ['c', 0.36, 0.36, 0.72, 0.63, 1.17, 0.90], ['c', 0.33, 0.18, 0.36, 0.21, 0.42, 0.33], ['c', 0.18, 0.42, -0.18, 0.90, -0.60, 0.87], ['c', -0.18, -0.03, -0.84, -0.36, -1.26, -0.63], ['c', -0.78, -0.51, -1.38, -1.11, -1.86, -1.83], ['c', -1.77, -2.70, -0.99, -6.42, 1.71, -8.19], ['c', 0.30, -0.21, 0.81, -0.48, 1.17, -0.63], ['c', 0.30, -0.09, 1.02, -0.30, 1.14, -0.30], ['c', 0.06, 0.00, 0.09, 0.00, 0.09, -0.03], ['c', 0.03, -0.03, -0.51, -1.92, -1.23, -4.26], ['z'], ['m', 3.78, 7.41], ['c', -0.18, -0.03, -0.36, -0.06, -0.39, -0.06], ['c', -0.03, 0.00, 0.00, 0.21, 0.18, 1.02], ['c', 0.75, 3.18, 1.26, 6.30, 1.50, 9.09], ['c', 0.06, 0.72, 0.00, 0.69, 0.51, 0.42], ['c', 0.78, -0.36, 1.44, -0.96, 1.98, -1.77], ['c', 1.08, -1.62, 1.20, -3.69, 0.30, -5.55], ['c', -0.81, -1.62, -2.31, -2.79, -4.08, -3.15], ['z']], w: 19.051, h: 57.057 },\n\t'clefs.perc': { d: [['M', 5.07, -7.44], ['l', 0.09, -0.06], ['l', 1.53, 0.00], ['l', 1.53, 0.00], ['l', 0.09, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 7.35], ['l', 0.00, 7.32], ['l', -0.06, 0.09], ['l', -0.09, 0.06], ['l', -1.53, 0.00], ['l', -1.53, 0.00], ['l', -0.09, -0.06], ['l', -0.06, -0.09], ['l', 0.00, -7.32], ['l', 0.00, -7.35], ['z'], ['m', 6.63, 0.00], ['l', 0.09, -0.06], ['l', 1.53, 0.00], ['l', 1.53, 0.00], ['l', 0.09, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 7.35], ['l', 0.00, 7.32], ['l', -0.06, 0.09], ['l', -0.09, 0.06], ['l', -1.53, 0.00], ['l', -1.53, 0.00], ['l', -0.09, -0.06], ['l', -0.06, -0.09], ['l', 0.00, -7.32], ['l', 0.00, -7.35], ['z']], w: 21, h: 14.97 },\n\t'tab.big': { d: [['M', 20.16, -21.66], ['c', 0.24, -0.09, 0.66, 0.09, 0.78, 0.36], ['c', 0.09, 0.21, 0.09, 0.24, -0.18, 0.54], ['c', -0.78, 0.81, -1.86, 1.44, -2.94, 1.71], ['c', -0.87, 0.24, -1.71, 0.24, -2.55, 0.03], ['l', -0.06, -0.03], ['l', -0.18, 0.99], ['c', -0.33, 1.98, -0.75, 4.26, -0.96, 5.04], ['c', -0.42, 1.65, -1.26, 3.18, -2.28, 4.14], ['c', -0.57, 0.57, -1.17, 0.90, -1.86, 1.08], ['c', -0.18, 0.06, -0.33, 0.06, -0.66, 0.06], ['c', -0.54, 0.00, -0.78, -0.03, -1.23, -0.27], ['c', -0.39, -0.18, -0.66, -0.39, -1.38, -0.99], ['c', -0.30, -0.24, -0.66, -0.51, -0.75, -0.57], ['c', -0.21, -0.15, -0.27, -0.24, -0.24, -0.45], ['c', 0.06, -0.27, 0.36, -0.60, 0.60, -0.66], ['c', 0.18, -0.03, 0.33, 0.06, 0.90, 0.57], ['c', 0.48, 0.42, 0.72, 0.57, 0.93, 0.69], ['c', 0.66, 0.33, 1.38, 0.21, 1.95, -0.36], ['c', 0.63, -0.60, 1.05, -1.62, 1.23, -3.00], ['c', 0.03, -0.18, 0.09, -0.66, 0.09, -1.11], ['c', 0.09, -1.56, 0.33, -3.81, 0.57, -5.49], ['c', 0.06, -0.33, 0.09, -0.63, 0.09, -0.63], ['c', -0.03, -0.03, -0.81, -0.12, -1.02, -0.12], ['c', -0.57, 0.00, -1.32, 0.12, -1.80, 0.33], ['c', -0.87, 0.30, -1.35, 0.78, -1.50, 1.41], ['c', -0.18, 0.63, 0.09, 1.26, 0.66, 1.65], ['c', 0.12, 0.06, 0.15, 0.12, 0.18, 0.24], ['c', 0.09, 0.27, 0.06, 0.57, -0.09, 0.75], ['c', -0.03, 0.06, -0.12, 0.09, -0.27, 0.15], ['c', -0.72, 0.21, -1.44, 0.15, -2.10, -0.18], ['c', -0.54, -0.27, -0.96, -0.66, -1.20, -1.14], ['c', -0.39, -0.75, -0.33, -1.74, 0.15, -2.52], ['c', 0.27, -0.42, 0.84, -0.93, 1.41, -1.23], ['c', 1.17, -0.57, 2.88, -0.90, 4.80, -0.90], ['c', 0.69, 0.00, 0.78, 0.00, 1.08, 0.06], ['c', 0.45, 0.09, 1.11, 0.30, 2.07, 0.60], ['c', 1.47, 0.48, 1.83, 0.57, 2.55, 0.54], ['c', 1.02, -0.06, 2.04, -0.45, 2.94, -1.11], ['c', 0.12, -0.09, 0.24, -0.18, 0.27, -0.18], ['z'], ['m', -5.88, 13.05], ['c', 0.21, -0.03, 0.81, 0.00, 1.08, 0.06], ['c', 0.48, 0.12, 0.90, 0.42, 0.99, 0.69], ['c', 0.03, 0.09, 0.03, 0.15, 0.00, 0.27], ['c', 0.00, 0.09, -0.03, 0.57, -0.06, 1.08], ['c', -0.09, 2.19, -0.24, 5.76, -0.39, 8.28], ['c', -0.06, 1.53, -0.06, 1.77, 0.03, 2.01], ['c', 0.09, 0.18, 0.15, 0.24, 0.30, 0.30], ['c', 0.24, 0.12, 0.54, 0.06, 1.23, -0.27], ['c', 0.57, -0.27, 0.66, -0.30, 0.75, -0.24], ['c', 0.09, 0.06, 0.18, 0.30, 0.18, 0.45], ['c', 0.00, 0.33, -0.15, 0.51, -0.45, 0.63], ['c', -0.12, 0.03, -0.39, 0.15, -0.60, 0.27], ['c', -1.17, 0.60, -1.38, 0.69, -1.80, 0.72], ['c', -0.45, 0.03, -0.78, -0.09, -1.08, -0.39], ['c', -0.39, -0.42, -0.66, -1.20, -1.02, -3.12], ['c', -0.24, -1.23, -0.36, -2.07, -0.54, -3.75], ['l', 0.00, -0.18], ['l', -0.36, 0.45], ['c', -0.60, 0.75, -1.32, 1.59, -1.95, 2.25], ['c', -0.15, 0.18, -0.27, 0.30, -0.27, 0.33], ['c', 0.00, 0.00, 0.06, 0.09, 0.15, 0.18], ['c', 0.24, 0.33, 0.60, 0.57, 1.05, 0.69], ['c', 0.18, 0.06, 0.30, 0.06, 0.69, 0.06], ['l', 0.48, 0.03], ['l', 0.06, 0.12], ['c', 0.15, 0.27, 0.03, 0.72, -0.21, 0.90], ['c', -0.18, 0.12, -0.93, 0.27, -1.41, 0.27], ['c', -0.84, 0.00, -1.59, -0.30, -1.98, -0.84], ['l', -0.12, -0.15], ['l', -0.45, 0.42], ['c', -0.99, 0.87, -1.53, 1.32, -2.16, 1.74], ['c', -0.78, 0.51, -1.50, 0.84, -2.10, 0.93], ['c', -0.69, 0.12, -1.20, 0.03, -1.95, -0.42], ['c', -0.21, -0.12, -0.51, -0.27, -0.66, -0.36], ['c', -0.24, -0.12, -0.30, -0.18, -0.33, -0.24], ['c', -0.12, -0.27, 0.15, -0.78, 0.45, -0.93], ['c', 0.24, -0.12, 0.33, -0.09, 0.90, 0.18], ['c', 0.60, 0.30, 0.84, 0.39, 1.20, 0.36], ['c', 0.87, -0.09, 1.77, -0.69, 3.24, -2.31], ['c', 2.67, -2.85, 4.59, -5.94, 5.70, -9.15], ['c', 0.15, -0.45, 0.24, -0.63, 0.42, -0.81], ['c', 0.21, -0.24, 0.60, -0.45, 0.99, -0.51], ['z'], ['m', -3.99, 16.05], ['c', 0.18, 0.00, 0.69, -0.03, 1.17, 0.00], ['c', 3.27, 0.03, 5.37, 0.75, 6.00, 2.07], ['c', 0.45, 0.99, 0.12, 2.40, -0.81, 3.42], ['c', -0.24, 0.27, -0.57, 0.57, -0.84, 0.75], ['c', -0.09, 0.06, -0.18, 0.09, -0.18, 0.12], ['c', 0.00, 0.00, 0.18, 0.03, 0.42, 0.09], ['c', 1.23, 0.30, 2.01, 0.81, 2.37, 1.59], ['c', 0.27, 0.54, 0.30, 1.32, 0.09, 2.10], ['c', -0.12, 0.36, -0.45, 1.05, -0.69, 1.35], ['c', -0.87, 1.17, -2.10, 1.92, -3.54, 2.25], ['c', -0.36, 0.06, -0.48, 0.06, -0.96, 0.06], ['c', -0.45, 0.00, -0.66, 0.00, -0.84, -0.03], ['c', -0.84, -0.18, -1.47, -0.51, -2.07, -1.11], ['c', -0.33, -0.33, -0.45, -0.51, -0.45, -0.63], ['c', 0.00, -0.06, 0.03, -0.15, 0.06, -0.24], ['c', 0.18, -0.33, 0.69, -0.60, 0.93, -0.48], ['c', 0.03, 0.03, 0.15, 0.12, 0.27, 0.24], ['c', 0.39, 0.42, 0.99, 0.57, 1.62, 0.45], ['c', 1.05, -0.21, 1.98, -1.02, 2.31, -2.01], ['c', 0.48, -1.53, -0.48, -2.55, -2.58, -2.67], ['c', -0.21, 0.00, -0.36, -0.03, -0.42, -0.06], ['c', -0.15, -0.09, -0.21, -0.51, -0.06, -0.78], ['c', 0.12, -0.27, 0.24, -0.33, 0.60, -0.36], ['c', 0.57, -0.06, 1.11, -0.42, 1.50, -0.99], ['c', 0.48, -0.72, 0.54, -1.59, 0.18, -2.31], ['c', -0.12, -0.21, -0.45, -0.54, -0.69, -0.69], ['c', -0.33, -0.21, -0.93, -0.45, -1.35, -0.51], ['l', -0.12, -0.03], ['l', -0.06, 0.48], ['c', -0.54, 2.94, -1.14, 6.24, -1.29, 6.75], ['c', -0.33, 1.35, -0.93, 2.61, -1.65, 3.60], ['c', -0.30, 0.36, -0.81, 0.90, -1.14, 1.14], ['c', -0.30, 0.24, -0.84, 0.48, -1.14, 0.57], ['c', -0.33, 0.09, -0.96, 0.09, -1.26, 0.03], ['c', -0.45, -0.12, -0.87, -0.39, -1.53, -0.96], ['c', -0.24, -0.15, -0.51, -0.39, -0.63, -0.48], ['c', -0.30, -0.21, -0.33, -0.33, -0.21, -0.63], ['c', 0.12, -0.18, 0.27, -0.36, 0.42, -0.45], ['c', 0.27, -0.12, 0.36, -0.09, 0.87, 0.33], ['c', 0.78, 0.60, 1.08, 0.75, 1.65, 0.72], ['c', 0.45, -0.03, 0.81, -0.21, 1.17, -0.54], ['c', 0.87, -0.90, 1.38, -2.85, 1.38, -5.37], ['c', 0.00, -0.60, 0.03, -1.11, 0.12, -2.04], ['c', 0.06, -0.69, 0.24, -2.01, 0.33, -2.58], ['c', 0.06, -0.24, 0.06, -0.42, 0.06, -0.42], ['c', 0.00, 0.00, -0.12, 0.03, -0.21, 0.09], ['c', -1.44, 0.57, -2.16, 1.65, -1.74, 2.55], ['c', 0.09, 0.15, 0.18, 0.24, 0.27, 0.33], ['c', 0.24, 0.21, 0.30, 0.27, 0.33, 0.39], ['c', 0.06, 0.24, 0.00, 0.63, -0.15, 0.78], ['c', -0.09, 0.12, -0.54, 0.21, -0.96, 0.24], ['c', -1.02, 0.03, -2.01, -0.48, -2.43, -1.32], ['c', -0.21, -0.45, -0.27, -0.90, -0.15, -1.44], ['c', 0.06, -0.27, 0.21, -0.66, 0.39, -0.93], ['c', 0.87, -1.29, 3.00, -2.22, 5.64, -2.43], ['z']], w: 19.643, h: 43.325 },\n\t'tab.tiny': { d: [['M', 16.02, -17.25], ['c', 0.12, -0.09, 0.15, -0.09, 0.27, -0.09], ['c', 0.21, 0.03, 0.51, 0.30, 0.51, 0.45], ['c', 0.00, 0.06, -0.12, 0.18, -0.30, 0.36], ['c', -1.11, 1.08, -2.55, 1.59, -3.84, 1.41], ['c', -0.15, -0.03, -0.33, -0.06, -0.39, -0.09], ['c', -0.06, -0.03, -0.09, -0.03, -0.12, -0.03], ['c', 0.00, 0.00, -0.06, 0.42, -0.15, 0.93], ['c', -0.33, 2.01, -0.66, 3.69, -0.84, 4.26], ['c', -0.42, 1.41, -1.23, 2.67, -2.16, 3.33], ['c', -0.27, 0.18, -0.75, 0.42, -0.99, 0.48], ['c', -0.30, 0.09, -0.72, 0.09, -1.02, 0.06], ['c', -0.45, -0.09, -0.84, -0.33, -1.53, -0.90], ['c', -0.21, -0.18, -0.51, -0.39, -0.63, -0.48], ['c', -0.27, -0.21, -0.30, -0.24, -0.30, -0.36], ['c', 0.00, -0.12, 0.09, -0.36, 0.18, -0.45], ['c', 0.09, -0.09, 0.27, -0.18, 0.36, -0.18], ['c', 0.12, 0.00, 0.30, 0.12, 0.66, 0.45], ['c', 0.57, 0.51, 0.87, 0.69, 1.23, 0.72], ['c', 0.93, 0.06, 1.68, -0.78, 1.98, -2.37], ['c', 0.09, -0.39, 0.15, -0.75, 0.18, -1.53], ['c', 0.06, -0.99, 0.24, -2.79, 0.42, -4.05], ['c', 0.03, -0.30, 0.06, -0.57, 0.06, -0.60], ['c', 0.00, -0.06, -0.03, -0.09, -0.15, -0.12], ['c', -0.90, -0.18, -2.13, 0.06, -2.76, 0.57], ['c', -0.36, 0.30, -0.51, 0.60, -0.51, 1.02], ['c', 0.00, 0.45, 0.15, 0.75, 0.48, 0.99], ['c', 0.06, 0.06, 0.15, 0.18, 0.18, 0.24], ['c', 0.12, 0.24, 0.03, 0.63, -0.15, 0.69], ['c', -0.24, 0.12, -0.60, 0.15, -0.90, 0.15], ['c', -0.36, -0.03, -0.57, -0.09, -0.87, -0.24], ['c', -0.78, -0.36, -1.23, -1.11, -1.20, -1.92], ['c', 0.12, -1.53, 1.74, -2.49, 4.62, -2.70], ['c', 1.20, -0.09, 1.47, -0.03, 3.33, 0.57], ['c', 0.90, 0.30, 1.14, 0.36, 1.56, 0.39], ['c', 0.45, 0.00, 0.93, -0.06, 1.38, -0.21], ['c', 0.51, -0.18, 0.81, -0.33, 1.41, -0.75], ['z'], ['m', -4.68, 10.38], ['c', 0.39, -0.06, 0.84, 0.00, 1.20, 0.15], ['c', 0.24, 0.12, 0.36, 0.21, 0.45, 0.36], ['l', 0.09, 0.09], ['l', -0.06, 1.41], ['c', -0.09, 2.19, -0.18, 3.96, -0.27, 5.49], ['c', -0.03, 0.78, -0.06, 1.59, -0.06, 1.86], ['c', 0.00, 0.42, 0.00, 0.48, 0.06, 0.57], ['c', 0.06, 0.18, 0.18, 0.24, 0.36, 0.27], ['c', 0.18, 0.00, 0.39, -0.06, 0.84, -0.27], ['c', 0.45, -0.21, 0.54, -0.24, 0.63, -0.18], ['c', 0.12, 0.12, 0.15, 0.54, 0.03, 0.69], ['c', -0.03, 0.03, -0.15, 0.12, -0.27, 0.18], ['c', -0.15, 0.03, -0.30, 0.12, -0.36, 0.15], ['c', -0.87, 0.45, -1.02, 0.51, -1.26, 0.57], ['c', -0.33, 0.09, -0.60, 0.06, -0.84, -0.06], ['c', -0.42, -0.18, -0.63, -0.60, -0.87, -1.44], ['c', -0.30, -1.23, -0.57, -2.97, -0.66, -4.08], ['c', 0.00, -0.18, -0.03, -0.30, -0.03, -0.33], ['l', -0.06, 0.06], ['c', -0.18, 0.27, -1.11, 1.38, -1.68, 2.01], ['l', -0.33, 0.33], ['l', 0.06, 0.09], ['c', 0.06, 0.15, 0.27, 0.33, 0.48, 0.42], ['c', 0.27, 0.18, 0.51, 0.24, 0.96, 0.27], ['l', 0.39, 0.00], ['l', 0.03, 0.12], ['c', 0.12, 0.21, 0.03, 0.57, -0.15, 0.69], ['c', -0.03, 0.03, -0.21, 0.09, -0.36, 0.15], ['c', -0.27, 0.06, -0.39, 0.06, -0.75, 0.06], ['c', -0.48, 0.00, -0.75, -0.03, -1.08, -0.21], ['c', -0.21, -0.12, -0.51, -0.36, -0.57, -0.48], ['l', -0.03, -0.09], ['l', -0.39, 0.36], ['c', -1.47, 1.35, -2.49, 1.98, -3.42, 2.13], ['c', -0.54, 0.09, -0.96, -0.03, -1.62, -0.39], ['c', -0.21, -0.15, -0.45, -0.27, -0.54, -0.30], ['c', -0.18, -0.09, -0.21, -0.21, -0.12, -0.45], ['c', 0.06, -0.27, 0.33, -0.48, 0.54, -0.48], ['c', 0.03, 0.00, 0.27, 0.09, 0.48, 0.21], ['c', 0.48, 0.24, 0.69, 0.27, 0.99, 0.27], ['c', 0.60, -0.06, 1.17, -0.42, 2.10, -1.35], ['c', 2.22, -2.22, 4.02, -4.98, 4.95, -7.59], ['c', 0.21, -0.57, 0.30, -0.78, 0.48, -0.93], ['c', 0.15, -0.15, 0.42, -0.27, 0.66, -0.33], ['z'], ['m', -3.06, 12.84], ['c', 0.27, -0.03, 1.68, 0.00, 2.01, 0.03], ['c', 1.92, 0.18, 3.15, 0.69, 3.63, 1.50], ['c', 0.18, 0.33, 0.24, 0.51, 0.21, 0.93], ['c', 0.00, 0.45, -0.06, 0.72, -0.24, 1.11], ['c', -0.24, 0.51, -0.69, 1.02, -1.17, 1.35], ['c', -0.21, 0.15, -0.21, 0.15, -0.12, 0.18], ['c', 0.72, 0.15, 1.11, 0.30, 1.50, 0.57], ['c', 0.39, 0.24, 0.63, 0.57, 0.75, 0.96], ['c', 0.09, 0.30, 0.09, 0.96, 0.00, 1.29], ['c', -0.15, 0.57, -0.39, 1.05, -0.78, 1.50], ['c', -0.66, 0.75, -1.62, 1.32, -2.61, 1.53], ['c', -0.27, 0.06, -0.42, 0.06, -0.84, 0.06], ['c', -0.48, 0.00, -0.57, 0.00, -0.81, -0.06], ['c', -0.60, -0.18, -1.05, -0.42, -1.47, -0.81], ['c', -0.36, -0.39, -0.42, -0.51, -0.30, -0.75], ['c', 0.12, -0.21, 0.39, -0.39, 0.60, -0.39], ['c', 0.09, 0.00, 0.15, 0.03, 0.33, 0.18], ['c', 0.12, 0.12, 0.27, 0.24, 0.36, 0.27], ['c', 0.96, 0.48, 2.46, -0.33, 2.82, -1.50], ['c', 0.24, -0.81, -0.03, -1.44, -0.69, -1.77], ['c', -0.39, -0.21, -1.02, -0.33, -1.53, -0.33], ['c', -0.18, 0.00, -0.21, 0.00, -0.27, -0.09], ['c', -0.06, -0.09, -0.06, -0.30, -0.03, -0.48], ['c', 0.06, -0.18, 0.18, -0.36, 0.33, -0.36], ['c', 0.39, -0.06, 0.51, -0.09, 0.72, -0.18], ['c', 0.69, -0.36, 1.11, -1.23, 0.99, -2.01], ['c', -0.09, -0.51, -0.42, -0.90, -0.93, -1.17], ['c', -0.24, -0.12, -0.60, -0.27, -0.87, -0.30], ['c', -0.09, -0.03, -0.09, -0.03, -0.12, 0.12], ['c', 0.00, 0.09, -0.21, 1.11, -0.42, 2.25], ['c', -0.66, 3.75, -0.72, 3.99, -1.26, 5.07], ['c', -0.90, 1.89, -2.25, 2.85, -3.48, 2.61], ['c', -0.39, -0.09, -0.69, -0.27, -1.38, -0.84], ['c', -0.63, -0.51, -0.63, -0.48, -0.63, -0.60], ['c', 0.00, -0.18, 0.18, -0.48, 0.39, -0.57], ['c', 0.21, -0.12, 0.30, -0.09, 0.81, 0.33], ['c', 0.15, 0.15, 0.39, 0.30, 0.54, 0.36], ['c', 0.18, 0.12, 0.27, 0.12, 0.48, 0.15], ['c', 0.99, 0.06, 1.71, -0.78, 2.04, -2.46], ['c', 0.12, -0.66, 0.18, -1.14, 0.21, -2.22], ['c', 0.03, -1.23, 0.12, -2.25, 0.36, -3.63], ['c', 0.03, -0.24, 0.06, -0.45, 0.06, -0.48], ['c', -0.06, -0.03, -0.66, 0.27, -0.90, 0.42], ['c', -0.06, 0.06, -0.21, 0.18, -0.33, 0.30], ['c', -0.57, 0.57, -0.60, 1.35, -0.06, 1.74], ['c', 0.18, 0.12, 0.24, 0.24, 0.21, 0.51], ['c', -0.03, 0.30, -0.15, 0.42, -0.57, 0.48], ['c', -1.11, 0.24, -2.22, -0.42, -2.43, -1.38], ['c', -0.09, -0.45, 0.03, -1.02, 0.30, -1.47], ['c', 0.18, -0.24, 0.60, -0.63, 0.90, -0.84], ['c', 0.90, -0.60, 2.28, -1.02, 3.69, -1.11], ['z']], w: 15.709, h: 34.656 },\n\t'timesig.common': { d: [['M', 6.66, -7.83], ['c', 0.72, -0.06, 1.41, -0.03, 1.98, 0.09], ['c', 1.20, 0.27, 2.34, 0.96, 3.09, 1.92], ['c', 0.63, 0.81, 1.08, 1.86, 1.14, 2.73], ['c', 0.06, 1.02, -0.51, 1.92, -1.44, 2.22], ['c', -0.24, 0.09, -0.30, 0.09, -0.63, 0.09], ['c', -0.33, 0.00, -0.42, 0.00, -0.63, -0.06], ['c', -0.66, -0.24, -1.14, -0.63, -1.41, -1.20], ['c', -0.15, -0.30, -0.21, -0.51, -0.24, -0.90], ['c', -0.06, -1.08, 0.57, -2.04, 1.56, -2.37], ['c', 0.18, -0.06, 0.27, -0.06, 0.63, -0.06], ['l', 0.45, 0.00], ['c', 0.06, 0.03, 0.09, 0.03, 0.09, 0.00], ['c', 0.00, 0.00, -0.09, -0.12, -0.24, -0.27], ['c', -1.02, -1.11, -2.55, -1.68, -4.08, -1.50], ['c', -1.29, 0.15, -2.04, 0.69, -2.40, 1.74], ['c', -0.36, 0.93, -0.42, 1.89, -0.42, 5.37], ['c', 0.00, 2.97, 0.06, 3.96, 0.24, 4.77], ['c', 0.24, 1.08, 0.63, 1.68, 1.41, 2.07], ['c', 0.81, 0.39, 2.16, 0.45, 3.18, 0.09], ['c', 1.29, -0.45, 2.37, -1.53, 3.03, -2.97], ['c', 0.15, -0.33, 0.33, -0.87, 0.39, -1.17], ['c', 0.09, -0.24, 0.15, -0.36, 0.30, -0.39], ['c', 0.21, -0.03, 0.42, 0.15, 0.39, 0.36], ['c', -0.06, 0.39, -0.42, 1.38, -0.69, 1.89], ['c', -0.96, 1.80, -2.49, 2.94, -4.23, 3.18], ['c', -0.99, 0.12, -2.58, -0.06, -3.63, -0.45], ['c', -0.96, -0.36, -1.71, -0.84, -2.40, -1.50], ['c', -1.11, -1.11, -1.80, -2.61, -2.04, -4.56], ['c', -0.06, -0.60, -0.06, -2.01, 0.00, -2.61], ['c', 0.24, -1.95, 0.90, -3.45, 2.01, -4.56], ['c', 0.69, -0.66, 1.44, -1.11, 2.37, -1.47], ['c', 0.63, -0.24, 1.47, -0.42, 2.22, -0.48], ['z']], w: 13.038, h: 15.689 },\n\t'timesig.cut': { d: [['M', 6.24, -10.44], ['c', 0.09, -0.06, 0.09, -0.06, 0.48, -0.06], ['c', 0.36, 0.00, 0.36, 0.00, 0.45, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 1.23], ['l', 0.00, 1.26], ['l', 0.27, 0.00], ['c', 1.26, 0.00, 2.49, 0.45, 3.48, 1.29], ['c', 1.05, 0.87, 1.80, 2.28, 1.89, 3.48], ['c', 0.06, 1.02, -0.51, 1.92, -1.44, 2.22], ['c', -0.24, 0.09, -0.30, 0.09, -0.63, 0.09], ['c', -0.33, 0.00, -0.42, 0.00, -0.63, -0.06], ['c', -0.66, -0.24, -1.14, -0.63, -1.41, -1.20], ['c', -0.15, -0.30, -0.21, -0.51, -0.24, -0.90], ['c', -0.06, -1.08, 0.57, -2.04, 1.56, -2.37], ['c', 0.18, -0.06, 0.27, -0.06, 0.63, -0.06], ['l', 0.45, 0.00], ['c', 0.06, 0.03, 0.09, 0.03, 0.09, 0.00], ['c', 0.00, -0.03, -0.45, -0.51, -0.66, -0.69], ['c', -0.87, -0.69, -1.83, -1.05, -2.94, -1.11], ['l', -0.42, 0.00], ['l', 0.00, 7.17], ['l', 0.00, 7.14], ['l', 0.42, 0.00], ['c', 0.69, -0.03, 1.23, -0.18, 1.86, -0.51], ['c', 1.05, -0.51, 1.89, -1.47, 2.46, -2.70], ['c', 0.15, -0.33, 0.33, -0.87, 0.39, -1.17], ['c', 0.09, -0.24, 0.15, -0.36, 0.30, -0.39], ['c', 0.21, -0.03, 0.42, 0.15, 0.39, 0.36], ['c', -0.03, 0.24, -0.21, 0.78, -0.39, 1.20], ['c', -0.96, 2.37, -2.94, 3.90, -5.13, 3.90], ['l', -0.30, 0.00], ['l', 0.00, 1.26], ['l', 0.00, 1.23], ['l', -0.06, 0.09], ['c', -0.09, 0.06, -0.09, 0.06, -0.45, 0.06], ['c', -0.39, 0.00, -0.39, 0.00, -0.48, -0.06], ['l', -0.06, -0.09], ['l', 0.00, -1.29], ['l', 0.00, -1.29], ['l', -0.21, -0.03], ['c', -1.23, -0.21, -2.31, -0.63, -3.21, -1.29], ['c', -0.15, -0.09, -0.45, -0.36, -0.66, -0.57], ['c', -1.11, -1.11, -1.80, -2.61, -2.04, -4.56], ['c', -0.06, -0.60, -0.06, -2.01, 0.00, -2.61], ['c', 0.24, -1.95, 0.93, -3.45, 2.04, -4.59], ['c', 0.42, -0.39, 0.78, -0.66, 1.26, -0.93], ['c', 0.75, -0.45, 1.65, -0.75, 2.61, -0.90], ['l', 0.21, -0.03], ['l', 0.00, -1.29], ['l', 0.00, -1.29], ['z'], ['m', -0.06, 10.44], ['c', 0.00, -5.58, 0.00, -6.99, -0.03, -6.99], ['c', -0.15, 0.00, -0.63, 0.27, -0.87, 0.45], ['c', -0.45, 0.36, -0.75, 0.93, -0.93, 1.77], ['c', -0.18, 0.81, -0.24, 1.80, -0.24, 4.74], ['c', 0.00, 2.97, 0.06, 3.96, 0.24, 4.77], ['c', 0.24, 1.08, 0.66, 1.68, 1.41, 2.07], ['c', 0.12, 0.06, 0.30, 0.12, 0.33, 0.15], ['l', 0.09, 0.00], ['l', 0.00, -6.96], ['z']], w: 13.038, h: 20.97 },\n\t'timesig.imperfectum': { d: [['M', 13, -5], ['a', 8, 8, 0, 1, 0, 0, 10]], w: 13.038, h: 20.97 },\n\t'timesig.imperfectum2': { d: [['M', 13, -5], ['a', 8, 8, 0, 1, 0, 0, 10]], w: 13.038, h: 20.97 },\n\t'timesig.perfectum': { d: [['M', 13, -5], ['a', 8, 8, 0, 1, 0, 0, 10]], w: 13.038, h: 20.97 },\n\t'timesig.perfectum2': { d: [['M', 13, -5], ['a', 8, 8, 0, 1, 0, 0, 10]], w: 13.038, h: 20.97 },\n\t'f': { d: [['M', 9.93, -14.28], ['c', 1.53, -0.18, 2.88, 0.45, 3.12, 1.50], ['c', 0.12, 0.51, 0.00, 1.32, -0.27, 1.86], ['c', -0.15, 0.30, -0.42, 0.57, -0.63, 0.69], ['c', -0.69, 0.36, -1.56, 0.03, -1.83, -0.69], ['c', -0.09, -0.24, -0.09, -0.69, 0.00, -0.87], ['c', 0.06, -0.12, 0.21, -0.24, 0.45, -0.42], ['c', 0.42, -0.24, 0.57, -0.45, 0.60, -0.72], ['c', 0.03, -0.33, -0.09, -0.39, -0.63, -0.42], ['c', -0.30, 0.00, -0.45, 0.00, -0.60, 0.03], ['c', -0.81, 0.21, -1.35, 0.93, -1.74, 2.46], ['c', -0.06, 0.27, -0.48, 2.25, -0.48, 2.31], ['c', 0.00, 0.03, 0.39, 0.03, 0.90, 0.03], ['c', 0.72, 0.00, 0.90, 0.00, 0.99, 0.06], ['c', 0.42, 0.15, 0.45, 0.72, 0.03, 0.90], ['c', -0.12, 0.06, -0.24, 0.06, -1.17, 0.06], ['l', -1.05, 0.00], ['l', -0.78, 2.55], ['c', -0.45, 1.41, -0.87, 2.79, -0.96, 3.06], ['c', -0.87, 2.37, -2.37, 4.74, -3.78, 5.91], ['c', -1.05, 0.90, -2.04, 1.23, -3.09, 1.08], ['c', -1.11, -0.18, -1.89, -0.78, -2.04, -1.59], ['c', -0.12, -0.66, 0.15, -1.71, 0.54, -2.19], ['c', 0.69, -0.75, 1.86, -0.54, 2.22, 0.39], ['c', 0.06, 0.15, 0.09, 0.27, 0.09, 0.48], ['c', 0.00, 0.24, -0.03, 0.27, -0.12, 0.42], ['c', -0.03, 0.09, -0.15, 0.18, -0.27, 0.27], ['c', -0.09, 0.06, -0.27, 0.21, -0.36, 0.27], ['c', -0.24, 0.18, -0.36, 0.36, -0.39, 0.60], ['c', -0.03, 0.33, 0.09, 0.39, 0.63, 0.42], ['c', 0.42, 0.00, 0.63, -0.03, 0.90, -0.15], ['c', 0.60, -0.30, 0.96, -0.96, 1.38, -2.64], ['c', 0.09, -0.42, 0.63, -2.55, 1.17, -4.77], ['l', 1.02, -4.08], ['c', 0.00, -0.03, -0.36, -0.03, -0.81, -0.03], ['c', -0.72, 0.00, -0.81, 0.00, -0.93, -0.06], ['c', -0.42, -0.18, -0.39, -0.75, 0.03, -0.90], ['c', 0.09, -0.06, 0.27, -0.06, 1.05, -0.06], ['l', 0.96, 0.00], ['l', 0.00, -0.09], ['c', 0.06, -0.18, 0.30, -0.72, 0.51, -1.17], ['c', 1.20, -2.46, 3.30, -4.23, 5.34, -4.50], ['z']], w: 16.155, h: 19.445 },\n\t'm': { d: [['M', 2.79, -8.91], ['c', 0.09, 0.00, 0.30, -0.03, 0.45, -0.03], ['c', 0.24, 0.03, 0.30, 0.03, 0.45, 0.12], ['c', 0.36, 0.15, 0.63, 0.54, 0.75, 1.02], ['l', 0.03, 0.21], ['l', 0.33, -0.30], ['c', 0.69, -0.69, 1.38, -1.02, 2.07, -1.02], ['c', 0.27, 0.00, 0.33, 0.00, 0.48, 0.06], ['c', 0.21, 0.09, 0.48, 0.36, 0.63, 0.60], ['c', 0.03, 0.09, 0.12, 0.27, 0.18, 0.42], ['c', 0.03, 0.15, 0.09, 0.27, 0.12, 0.27], ['c', 0.00, 0.00, 0.09, -0.09, 0.18, -0.21], ['c', 0.33, -0.39, 0.87, -0.81, 1.29, -0.99], ['c', 0.78, -0.33, 1.47, -0.21, 2.01, 0.33], ['c', 0.30, 0.33, 0.48, 0.69, 0.60, 1.14], ['c', 0.09, 0.42, 0.06, 0.54, -0.54, 3.06], ['c', -0.33, 1.29, -0.57, 2.40, -0.57, 2.43], ['c', 0.00, 0.12, 0.09, 0.21, 0.21, 0.21], ['c', 0.24, 0.00, 0.75, -0.30, 1.20, -0.72], ['c', 0.45, -0.39, 0.60, -0.45, 0.78, -0.27], ['c', 0.18, 0.18, 0.09, 0.36, -0.45, 0.87], ['c', -1.05, 0.96, -1.83, 1.47, -2.58, 1.71], ['c', -0.93, 0.33, -1.53, 0.21, -1.80, -0.33], ['c', -0.06, -0.15, -0.06, -0.21, -0.06, -0.45], ['c', 0.00, -0.24, 0.03, -0.48, 0.60, -2.82], ['c', 0.42, -1.71, 0.60, -2.64, 0.63, -2.79], ['c', 0.03, -0.57, -0.30, -0.75, -0.84, -0.48], ['c', -0.24, 0.12, -0.54, 0.39, -0.66, 0.63], ['c', -0.03, 0.09, -0.42, 1.38, -0.90, 3.00], ['c', -0.90, 3.15, -0.84, 3.00, -1.14, 3.15], ['l', -0.15, 0.09], ['l', -0.78, 0.00], ['c', -0.60, 0.00, -0.78, 0.00, -0.84, -0.06], ['c', -0.09, -0.03, -0.18, -0.18, -0.18, -0.27], ['c', 0.00, -0.03, 0.36, -1.38, 0.84, -2.97], ['c', 0.57, -2.04, 0.81, -2.97, 0.84, -3.12], ['c', 0.03, -0.54, -0.30, -0.72, -0.84, -0.45], ['c', -0.24, 0.12, -0.57, 0.42, -0.66, 0.63], ['c', -0.06, 0.09, -0.51, 1.44, -1.05, 2.97], ['c', -0.51, 1.56, -0.99, 2.85, -0.99, 2.91], ['c', -0.06, 0.12, -0.21, 0.24, -0.36, 0.30], ['c', -0.12, 0.06, -0.21, 0.06, -0.90, 0.06], ['c', -0.60, 0.00, -0.78, 0.00, -0.84, -0.06], ['c', -0.09, -0.03, -0.18, -0.18, -0.18, -0.27], ['c', 0.00, -0.03, 0.45, -1.38, 0.99, -2.97], ['c', 1.05, -3.18, 1.05, -3.18, 0.93, -3.45], ['c', -0.12, -0.27, -0.39, -0.30, -0.72, -0.15], ['c', -0.54, 0.27, -1.14, 1.17, -1.56, 2.40], ['c', -0.06, 0.15, -0.15, 0.30, -0.18, 0.36], ['c', -0.21, 0.21, -0.57, 0.27, -0.72, 0.09], ['c', -0.09, -0.09, -0.06, -0.21, 0.06, -0.63], ['c', 0.48, -1.26, 1.26, -2.46, 2.01, -3.21], ['c', 0.57, -0.54, 1.20, -0.87, 1.83, -1.02], ['z']], w: 14.687, h: 9.126 },\n\t'p': { d: [['M', 1.92, -8.70], ['c', 0.27, -0.09, 0.81, -0.06, 1.11, 0.03], ['c', 0.54, 0.18, 0.93, 0.51, 1.17, 0.99], ['c', 0.09, 0.15, 0.15, 0.33, 0.18, 0.36], ['l', 0.00, 0.12], ['l', 0.30, -0.27], ['c', 0.66, -0.60, 1.35, -1.02, 2.13, -1.20], ['c', 0.21, -0.06, 0.33, -0.06, 0.78, -0.06], ['c', 0.45, 0.00, 0.51, 0.00, 0.84, 0.09], ['c', 1.29, 0.33, 2.07, 1.32, 2.25, 2.79], ['c', 0.09, 0.81, -0.09, 2.01, -0.45, 2.79], ['c', -0.54, 1.26, -1.86, 2.55, -3.18, 3.03], ['c', -0.45, 0.18, -0.81, 0.24, -1.29, 0.24], ['c', -0.69, -0.03, -1.35, -0.18, -1.86, -0.45], ['c', -0.30, -0.15, -0.51, -0.18, -0.69, -0.09], ['c', -0.09, 0.03, -0.18, 0.09, -0.18, 0.12], ['c', -0.09, 0.12, -1.05, 2.94, -1.05, 3.06], ['c', 0.00, 0.24, 0.18, 0.48, 0.51, 0.63], ['c', 0.18, 0.06, 0.54, 0.15, 0.75, 0.15], ['c', 0.21, 0.00, 0.36, 0.06, 0.42, 0.18], ['c', 0.12, 0.18, 0.06, 0.42, -0.12, 0.54], ['c', -0.09, 0.03, -0.15, 0.03, -0.78, 0.00], ['c', -1.98, -0.15, -3.81, -0.15, -5.79, 0.00], ['c', -0.63, 0.03, -0.69, 0.03, -0.78, 0.00], ['c', -0.24, -0.15, -0.24, -0.57, 0.03, -0.66], ['c', 0.06, -0.03, 0.48, -0.09, 0.99, -0.12], ['c', 0.87, -0.06, 1.11, -0.09, 1.35, -0.21], ['c', 0.18, -0.06, 0.33, -0.18, 0.39, -0.30], ['c', 0.06, -0.12, 3.24, -9.42, 3.27, -9.60], ['c', 0.06, -0.33, 0.03, -0.57, -0.15, -0.69], ['c', -0.09, -0.06, -0.12, -0.06, -0.30, -0.06], ['c', -0.69, 0.06, -1.53, 1.02, -2.28, 2.61], ['c', -0.09, 0.21, -0.21, 0.45, -0.27, 0.51], ['c', -0.09, 0.12, -0.33, 0.24, -0.48, 0.24], ['c', -0.18, 0.00, -0.36, -0.15, -0.36, -0.30], ['c', 0.00, -0.24, 0.78, -1.83, 1.26, -2.55], ['c', 0.72, -1.11, 1.47, -1.74, 2.28, -1.92], ['z'], ['m', 5.37, 1.47], ['c', -0.27, -0.12, -0.75, -0.03, -1.14, 0.21], ['c', -0.75, 0.48, -1.47, 1.68, -1.89, 3.15], ['c', -0.45, 1.47, -0.42, 2.34, 0.00, 2.70], ['c', 0.45, 0.39, 1.26, 0.21, 1.83, -0.36], ['c', 0.51, -0.51, 0.99, -1.68, 1.38, -3.27], ['c', 0.30, -1.17, 0.33, -1.74, 0.15, -2.13], ['c', -0.09, -0.15, -0.15, -0.21, -0.33, -0.30], ['z']], w: 14.689, h: 13.127 },\n\t'r': { d: [['M', 6.33, -9.12], ['c', 0.27, -0.03, 0.93, 0.00, 1.20, 0.06], ['c', 0.84, 0.21, 1.23, 0.81, 1.02, 1.53], ['c', -0.24, 0.75, -0.90, 1.17, -1.56, 0.96], ['c', -0.33, -0.09, -0.51, -0.30, -0.66, -0.75], ['c', -0.03, -0.12, -0.09, -0.24, -0.12, -0.30], ['c', -0.09, -0.15, -0.30, -0.24, -0.48, -0.24], ['c', -0.57, 0.00, -1.38, 0.54, -1.65, 1.08], ['c', -0.06, 0.15, -0.33, 1.17, -0.90, 3.27], ['c', -0.57, 2.31, -0.81, 3.12, -0.87, 3.21], ['c', -0.03, 0.06, -0.12, 0.15, -0.18, 0.21], ['l', -0.12, 0.06], ['l', -0.81, 0.03], ['c', -0.69, 0.00, -0.81, 0.00, -0.90, -0.03], ['c', -0.09, -0.06, -0.18, -0.21, -0.18, -0.30], ['c', 0.00, -0.06, 0.39, -1.62, 0.90, -3.51], ['c', 0.84, -3.24, 0.87, -3.45, 0.87, -3.72], ['c', 0.00, -0.21, 0.00, -0.27, -0.03, -0.36], ['c', -0.12, -0.15, -0.21, -0.24, -0.42, -0.24], ['c', -0.24, 0.00, -0.45, 0.15, -0.78, 0.42], ['c', -0.33, 0.36, -0.45, 0.54, -0.72, 1.14], ['c', -0.03, 0.12, -0.21, 0.24, -0.36, 0.27], ['c', -0.12, 0.00, -0.15, 0.00, -0.24, -0.06], ['c', -0.18, -0.12, -0.18, -0.21, -0.06, -0.54], ['c', 0.21, -0.57, 0.42, -0.93, 0.78, -1.32], ['c', 0.54, -0.51, 1.20, -0.81, 1.95, -0.87], ['c', 0.81, -0.03, 1.53, 0.30, 1.92, 0.87], ['l', 0.12, 0.18], ['l', 0.09, -0.09], ['c', 0.57, -0.45, 1.41, -0.84, 2.19, -0.96], ['z']], w: 9.41, h: 9.132 },\n\t's': { d: [['M', 4.47, -8.73], ['c', 0.09, 0.00, 0.36, -0.03, 0.57, -0.03], ['c', 0.75, 0.03, 1.29, 0.24, 1.71, 0.63], ['c', 0.51, 0.54, 0.66, 1.26, 0.36, 1.83], ['c', -0.24, 0.42, -0.63, 0.57, -1.11, 0.42], ['c', -0.33, -0.09, -0.60, -0.36, -0.60, -0.57], ['c', 0.00, -0.03, 0.06, -0.21, 0.15, -0.39], ['c', 0.12, -0.21, 0.15, -0.33, 0.18, -0.48], ['c', 0.00, -0.24, -0.06, -0.48, -0.15, -0.60], ['c', -0.15, -0.21, -0.42, -0.24, -0.75, -0.15], ['c', -0.27, 0.06, -0.48, 0.18, -0.69, 0.36], ['c', -0.39, 0.39, -0.51, 0.96, -0.33, 1.38], ['c', 0.09, 0.21, 0.42, 0.51, 0.78, 0.72], ['c', 1.11, 0.69, 1.59, 1.11, 1.89, 1.68], ['c', 0.21, 0.39, 0.24, 0.78, 0.15, 1.29], ['c', -0.18, 1.20, -1.17, 2.16, -2.52, 2.52], ['c', -1.02, 0.24, -1.95, 0.12, -2.70, -0.42], ['c', -0.72, -0.51, -0.99, -1.47, -0.60, -2.19], ['c', 0.24, -0.48, 0.72, -0.63, 1.17, -0.42], ['c', 0.33, 0.18, 0.54, 0.45, 0.57, 0.81], ['c', 0.00, 0.21, -0.03, 0.30, -0.33, 0.51], ['c', -0.33, 0.24, -0.39, 0.42, -0.27, 0.69], ['c', 0.06, 0.15, 0.21, 0.27, 0.45, 0.33], ['c', 0.30, 0.09, 0.87, 0.09, 1.20, 0.00], ['c', 0.75, -0.21, 1.23, -0.72, 1.29, -1.35], ['c', 0.03, -0.42, -0.15, -0.81, -0.54, -1.20], ['c', -0.24, -0.24, -0.48, -0.42, -1.41, -1.02], ['c', -0.69, -0.42, -1.05, -0.93, -1.05, -1.47], ['c', 0.00, -0.39, 0.12, -0.87, 0.30, -1.23], ['c', 0.27, -0.57, 0.78, -1.05, 1.38, -1.35], ['c', 0.24, -0.12, 0.63, -0.27, 0.90, -0.30], ['z']], w: 6.632, h: 8.758 },\n\t'z': { d: [['M', 2.64, -7.95], ['c', 0.36, -0.09, 0.81, -0.03, 1.71, 0.27], ['c', 0.78, 0.21, 0.96, 0.27, 1.74, 0.30], ['c', 0.87, 0.06, 1.02, 0.03, 1.38, -0.21], ['c', 0.21, -0.15, 0.33, -0.15, 0.48, -0.06], ['c', 0.15, 0.09, 0.21, 0.30, 0.15, 0.45], ['c', -0.03, 0.06, -1.26, 1.26, -2.76, 2.67], ['l', -2.73, 2.55], ['l', 0.54, 0.03], ['c', 0.54, 0.03, 0.72, 0.03, 2.01, 0.15], ['c', 0.36, 0.03, 0.90, 0.06, 1.20, 0.09], ['c', 0.66, 0.00, 0.81, -0.03, 1.02, -0.24], ['c', 0.30, -0.30, 0.39, -0.72, 0.27, -1.23], ['c', -0.06, -0.27, -0.06, -0.27, -0.03, -0.39], ['c', 0.15, -0.30, 0.54, -0.27, 0.69, 0.03], ['c', 0.15, 0.33, 0.27, 1.02, 0.27, 1.50], ['c', 0.00, 1.47, -1.11, 2.70, -2.52, 2.79], ['c', -0.57, 0.03, -1.02, -0.09, -2.01, -0.51], ['c', -1.02, -0.42, -1.23, -0.48, -2.13, -0.54], ['c', -0.81, -0.06, -0.96, -0.03, -1.26, 0.18], ['c', -0.12, 0.06, -0.24, 0.12, -0.27, 0.12], ['c', -0.27, 0.00, -0.45, -0.30, -0.36, -0.51], ['c', 0.03, -0.06, 1.32, -1.32, 2.91, -2.79], ['l', 2.88, -2.73], ['c', -0.03, 0.00, -0.21, 0.03, -0.42, 0.06], ['c', -0.21, 0.03, -0.78, 0.09, -1.23, 0.12], ['c', -1.11, 0.12, -1.23, 0.15, -1.95, 0.27], ['c', -0.72, 0.15, -1.17, 0.18, -1.29, 0.09], ['c', -0.27, -0.18, -0.21, -0.75, 0.12, -1.26], ['c', 0.39, -0.60, 0.93, -1.02, 1.59, -1.20], ['z']], w: 8.573, h: 8.743 },\n\t'+': { d: [['M', 3.48, -9.3], ['c', 0.18, -0.09, 0.36, -0.09, 0.54, 0.00], ['c', 0.18, 0.09, 0.24, 0.15, 0.33, 0.30], ['l', 0.06, 0.15], ['l', 0.00, 1.29], ['l', 0.00, 1.29], ['l', 1.29, 0.00], ['c', 1.23, 0.00, 1.29, 0.00, 1.41, 0.06], ['c', 0.06, 0.03, 0.15, 0.09, 0.18, 0.12], ['c', 0.12, 0.09, 0.21, 0.33, 0.21, 0.48], ['c', 0.00, 0.15, -0.09, 0.39, -0.21, 0.48], ['c', -0.03, 0.03, -0.12, 0.09, -0.18, 0.12], ['c', -0.12, 0.06, -0.18, 0.06, -1.41, 0.06], ['l', -1.29, 0.00], ['l', 0.00, 1.29], ['c', 0.00, 1.23, 0.00, 1.29, -0.06, 1.41], ['c', -0.09, 0.18, -0.15, 0.24, -0.30, 0.33], ['c', -0.21, 0.09, -0.39, 0.09, -0.57, 0.00], ['c', -0.18, -0.09, -0.24, -0.15, -0.33, -0.33], ['c', -0.06, -0.12, -0.06, -0.18, -0.06, -1.41], ['l', 0.00, -1.29], ['l', -1.29, 0.00], ['c', -1.23, 0.00, -1.29, 0.00, -1.41, -0.06], ['c', -0.18, -0.09, -0.24, -0.15, -0.33, -0.33], ['c', -0.09, -0.18, -0.09, -0.36, 0.00, -0.54], ['c', 0.09, -0.18, 0.15, -0.24, 0.33, -0.33], ['l', 0.15, -0.06], ['l', 1.26, 0.00], ['l', 1.29, 0.00], ['l', 0.00, -1.29], ['c', 0.00, -1.23, 0.00, -1.29, 0.06, -1.41], ['c', 0.09, -0.18, 0.15, -0.24, 0.33, -0.33], ['z']], w: 7.507, h: 7.515 },\n\t',': { d: [['M', 1.85, -3.36], ['c', 0.57, -0.15, 1.17, 0.03, 1.59, 0.45], ['c', 0.45, 0.45, 0.60, 0.96, 0.51, 1.89], ['c', -0.09, 1.23, -0.42, 2.46, -0.99, 3.93], ['c', -0.30, 0.72, -0.72, 1.62, -0.78, 1.68], ['c', -0.18, 0.21, -0.51, 0.18, -0.66, -0.06], ['c', -0.03, -0.06, -0.06, -0.15, -0.06, -0.18], ['c', 0.00, -0.06, 0.12, -0.33, 0.24, -0.63], ['c', 0.84, -1.80, 1.02, -2.61, 0.69, -3.24], ['c', -0.12, -0.24, -0.27, -0.36, -0.75, -0.60], ['c', -0.36, -0.15, -0.42, -0.21, -0.60, -0.39], ['c', -0.69, -0.69, -0.69, -1.71, 0.00, -2.40], ['c', 0.21, -0.21, 0.51, -0.39, 0.81, -0.45], ['z']], w: 3.452, h: 8.143 },\n\t'-': { d: [['M', 0.18, -5.34], ['c', 0.09, -0.06, 0.15, -0.06, 2.31, -0.06], ['c', 2.46, 0.00, 2.37, 0.00, 2.46, 0.21], ['c', 0.12, 0.21, 0.03, 0.42, -0.15, 0.54], ['c', -0.09, 0.06, -0.15, 0.06, -2.28, 0.06], ['c', -2.16, 0.00, -2.22, 0.00, -2.31, -0.06], ['c', -0.27, -0.15, -0.27, -0.54, -0.03, -0.69], ['z']], w: 5.001, h: 0.81 },\n\t'.': { d: [['M', 1.32, -3.36], ['c', 1.05, -0.27, 2.10, 0.57, 2.10, 1.65], ['c', 0.00, 1.08, -1.05, 1.92, -2.10, 1.65], ['c', -0.90, -0.21, -1.50, -1.14, -1.26, -2.04], ['c', 0.12, -0.63, 0.63, -1.11, 1.26, -1.26], ['z']], w: 3.413, h: 3.402 },\n\t'scripts.wedge': { d: [['M', -3.66, -7.44], ['c', 0.06, -0.09, 0.00, -0.09, 0.81, 0.03], ['c', 1.86, 0.30, 3.84, 0.30, 5.73, 0.00], ['c', 0.78, -0.12, 0.72, -0.12, 0.78, -0.03], ['c', 0.15, 0.15, 0.12, 0.24, -0.24, 0.60], ['c', -0.93, 0.93, -1.98, 2.76, -2.67, 4.62], ['c', -0.30, 0.78, -0.51, 1.71, -0.51, 2.13], ['c', 0.00, 0.15, 0.00, 0.18, -0.06, 0.27], ['c', -0.12, 0.09, -0.24, 0.09, -0.36, 0.00], ['c', -0.06, -0.09, -0.06, -0.12, -0.06, -0.27], ['c', 0.00, -0.42, -0.21, -1.35, -0.51, -2.13], ['c', -0.69, -1.86, -1.74, -3.69, -2.67, -4.62], ['c', -0.36, -0.36, -0.39, -0.45, -0.24, -0.60], ['z']], w: 7.49, h: 7.752 },\n\t'scripts.thumb': { d: [['M', -0.54, -3.69], ['c', 0.15, -0.03, 0.36, -0.06, 0.51, -0.06], ['c', 1.44, 0.00, 2.58, 1.11, 2.94, 2.85], ['c', 0.09, 0.48, 0.09, 1.32, 0.00, 1.80], ['c', -0.27, 1.41, -1.08, 2.43, -2.16, 2.73], ['l', -0.18, 0.06], ['l', 0.00, 0.12], ['c', 0.03, 0.06, 0.06, 0.45, 0.09, 0.87], ['c', 0.03, 0.57, 0.03, 0.78, 0.00, 0.84], ['c', -0.09, 0.27, -0.39, 0.48, -0.66, 0.48], ['c', -0.27, 0.00, -0.57, -0.21, -0.66, -0.48], ['c', -0.03, -0.06, -0.03, -0.27, 0.00, -0.84], ['c', 0.03, -0.42, 0.06, -0.81, 0.09, -0.87], ['l', 0.00, -0.12], ['l', -0.18, -0.06], ['c', -1.08, -0.30, -1.89, -1.32, -2.16, -2.73], ['c', -0.09, -0.48, -0.09, -1.32, 0.00, -1.80], ['c', 0.15, -0.84, 0.51, -1.53, 1.02, -2.04], ['c', 0.39, -0.39, 0.84, -0.63, 1.35, -0.75], ['z'], ['m', 1.05, 0.90], ['c', -0.15, -0.09, -0.21, -0.09, -0.45, -0.12], ['c', -0.15, 0.00, -0.30, 0.03, -0.39, 0.03], ['c', -0.57, 0.18, -0.90, 0.72, -1.08, 1.74], ['c', -0.06, 0.48, -0.06, 1.80, 0.00, 2.28], ['c', 0.15, 0.90, 0.42, 1.44, 0.90, 1.65], ['c', 0.18, 0.09, 0.21, 0.09, 0.51, 0.09], ['c', 0.30, 0.00, 0.33, 0.00, 0.51, -0.09], ['c', 0.48, -0.21, 0.75, -0.75, 0.90, -1.65], ['c', 0.03, -0.27, 0.03, -0.54, 0.03, -1.14], ['c', 0.00, -0.60, 0.00, -0.87, -0.03, -1.14], ['c', -0.15, -0.90, -0.45, -1.44, -0.90, -1.65], ['z']], w: 5.955, h: 9.75 },\n\t'scripts.open': { d: [['M', -0.54, -3.69], ['c', 0.15, -0.03, 0.36, -0.06, 0.51, -0.06], ['c', 1.44, 0.00, 2.58, 1.11, 2.94, 2.85], ['c', 0.09, 0.48, 0.09, 1.32, 0.00, 1.80], ['c', -0.33, 1.74, -1.47, 2.85, -2.91, 2.85], ['c', -1.44, 0.00, -2.58, -1.11, -2.91, -2.85], ['c', -0.09, -0.48, -0.09, -1.32, 0.00, -1.80], ['c', 0.15, -0.84, 0.51, -1.53, 1.02, -2.04], ['c', 0.39, -0.39, 0.84, -0.63, 1.35, -0.75], ['z'], ['m', 1.11, 0.90], ['c', -0.21, -0.09, -0.27, -0.09, -0.51, -0.12], ['c', -0.30, 0.00, -0.42, 0.03, -0.66, 0.15], ['c', -0.24, 0.12, -0.51, 0.39, -0.66, 0.63], ['c', -0.54, 0.93, -0.63, 2.64, -0.21, 3.81], ['c', 0.21, 0.54, 0.51, 0.90, 0.93, 1.11], ['c', 0.21, 0.09, 0.24, 0.09, 0.54, 0.09], ['c', 0.30, 0.00, 0.33, 0.00, 0.54, -0.09], ['c', 0.42, -0.21, 0.72, -0.57, 0.93, -1.11], ['c', 0.36, -0.99, 0.36, -2.37, 0.00, -3.36], ['c', -0.21, -0.54, -0.51, -0.90, -0.90, -1.11], ['z']], w: 5.955, h: 7.5 },\n\t'scripts.longphrase': { d: [['M', 1.47, -15.09], ['c', 0.36, -0.09, 0.66, -0.18, 0.69, -0.18], ['c', 0.06, 0.00, 0.06, 0.54, 0.06, 11.25], ['l', 0.00, 11.25], ['l', -0.63, 0.15], ['c', -0.66, 0.18, -1.44, 0.39, -1.50, 0.39], ['c', -0.03, 0.00, -0.03, -3.39, -0.03, -11.25], ['l', 0.00, -11.25], ['l', 0.36, -0.09], ['c', 0.21, -0.06, 0.66, -0.18, 1.05, -0.27], ['z']], w: 2.16, h: 23.04 },\n\t'scripts.mediumphrase': { d: [['M', 1.47, -7.59], ['c', 0.36, -0.09, 0.66, -0.18, 0.69, -0.18], ['c', 0.06, 0.00, 0.06, 0.39, 0.06, 7.50], ['l', 0.00, 7.50], ['l', -0.63, 0.15], ['c', -0.66, 0.18, -1.44, 0.39, -1.50, 0.39], ['c', -0.03, 0.00, -0.03, -2.28, -0.03, -7.50], ['l', 0.00, -7.50], ['l', 0.36, -0.09], ['c', 0.21, -0.06, 0.66, -0.18, 1.05, -0.27], ['z']], w: 2.16, h: 15.54 },\n\t'scripts.shortphrase': { d: [['M', 1.47, -7.59], ['c', 0.36, -0.09, 0.66, -0.18, 0.69, -0.18], ['c', 0.06, 0.00, 0.06, 0.21, 0.06, 3.75], ['l', 0.00, 3.75], ['l', -0.42, 0.09], ['c', -0.57, 0.18, -1.65, 0.45, -1.71, 0.45], ['c', -0.03, 0.00, -0.03, -0.72, -0.03, -3.75], ['l', 0.00, -3.75], ['l', 0.36, -0.09], ['c', 0.21, -0.06, 0.66, -0.18, 1.05, -0.27], ['z']], w: 2.16, h: 8.04 },\n\t'scripts.snap': { d: [['M', 4.50, -3.39], ['c', 0.36, -0.03, 0.96, -0.03, 1.35, 0.00], ['c', 1.56, 0.15, 3.15, 0.90, 4.20, 2.01], ['c', 0.24, 0.27, 0.33, 0.42, 0.33, 0.60], ['c', 0.00, 0.27, 0.03, 0.24, -2.46, 2.22], ['c', -1.29, 1.02, -2.40, 1.86, -2.49, 1.92], ['c', -0.18, 0.09, -0.30, 0.09, -0.48, 0.00], ['c', -0.09, -0.06, -1.20, -0.90, -2.49, -1.92], ['c', -2.49, -1.98, -2.46, -1.95, -2.46, -2.22], ['c', 0.00, -0.18, 0.09, -0.33, 0.33, -0.60], ['c', 1.05, -1.08, 2.64, -1.86, 4.17, -2.01], ['z'], ['m', 1.29, 1.17], ['c', -1.47, -0.15, -2.97, 0.30, -4.14, 1.20], ['l', -0.18, 0.15], ['l', 0.06, 0.09], ['c', 0.15, 0.12, 3.63, 2.85, 3.66, 2.85], ['c', 0.03, 0.00, 3.51, -2.73, 3.66, -2.85], ['l', 0.06, -0.09], ['l', -0.18, -0.15], ['c', -0.84, -0.66, -1.89, -1.08, -2.94, -1.20], ['z']], w: 10.38, h: 6.84 }\n};\n\n// Custom characters that weren't generated from the font:\nglyphs['noteheads.slash.whole'] = { d: [['M', 5, -5], ['l', 1, 1], ['l', -5, 5], ['l', -1, -1], ['z'], ['m', 4, 6], ['l', -5, -5], ['l', 2, -2], ['l', 5, 5], ['z'], ['m', 0, -2], ['l', 1, 1], ['l', -5, 5], ['l', -1, -1], ['z'], ['m', -4, 6], ['l', -5, -5], ['l', 2, -2], ['l', 5, 5], ['z']], w: 10.81, h: 15.63 };\n\nglyphs['noteheads.slash.quarter'] = { d: [['M', 9, -6], ['l', 0, 4], ['l', -9, 9], ['l', 0, -4], ['z']], w: 9, h: 9 };\n\nglyphs['noteheads.harmonic.quarter'] = { d: [['M', 3.63, -4.02], ['c', 0.09, -0.06, 0.18, -0.09, 0.24, -0.03], ['c', 0.03, 0.03, 0.87, 0.93, 1.83, 2.01], ['c', 1.50, 1.65, 1.80, 1.98, 1.80, 2.04], ['c', 0.00, 0.06, -0.30, 0.39, -1.80, 2.04], ['c', -0.96, 1.08, -1.80, 1.98, -1.83, 2.01], ['c', -0.06, 0.06, -0.15, 0.03, -0.24, -0.03], ['c', -0.12, -0.09, -3.54, -3.84, -3.60, -3.93], ['c', -0.03, -0.03, -0.03, -0.09, -0.03, -0.15], ['c', 0.03, -0.06, 3.45, -3.84, 3.63, -3.96], ['z']], w: 7.5, h: 8.165 };\n\nglyphs['noteheads.triangle.quarter'] = { d: [['M', 0, 4], ['l', 9, 0], ['l', -4.5, -9], ['z']], w: 9, h: 9 };\n\nvar pathClone = function (pathArray) {\n\tvar res = [];\n\tfor (var i = 0, ii = pathArray.length; i < ii; i++) {\n\t\tres[i] = [];\n\t\tfor (var j = 0, jj = pathArray[i].length; j < jj; j++) {\n\t\t\tres[i][j] = pathArray[i][j];\n\t\t}\n\t}\n\treturn res;\n};\n\nvar pathScale = function (pathArray, kx, ky) {\n\tfor (var i = 0, ii = pathArray.length; i < ii; i++) {\n\t\tvar p = pathArray[i];\n\t\tvar j, jj;\n\t\tfor (j = 1, jj = p.length; j < jj; j++) {\n\t\t\tp[j] *= (j % 2) ? kx : ky;\n\t\t}\n\t}\n};\n\nvar Glyphs = {\n\tprintSymbol: function (x, y, symb, paper, attrs) {\n\t\tif (!glyphs[symb]) return null;\n\t\tvar pathArray = pathClone(glyphs[symb].d);\n\t\tpathArray[0][1] += x;\n\t\tpathArray[0][2] += y;\n\t\tvar path = \"\";\n\t\tfor (var i = 0; i < pathArray.length; i++)\n\t\t\tpath += pathArray[i].join(\" \");\n\t\tattrs.path = path;\n\t\treturn paper.path(attrs);\n\t},\n\n\tgetPathForSymbol: function (x, y, symb, scalex, scaley) {\n\t\tscalex = scalex || 1;\n\t\tscaley = scaley || 1;\n\t\tif (!glyphs[symb]) return null;\n\t\tvar pathArray = pathClone(glyphs[symb].d);\n\t\tif (scalex !== 1 || scaley !== 1) pathScale(pathArray, scalex, scaley);\n\t\tpathArray[0][1] += x;\n\t\tpathArray[0][2] += y;\n\n\t\treturn pathArray;\n\t},\n\n\tgetSymbolWidth: function (symbol) {\n\t\tif (glyphs[symbol]) return glyphs[symbol].w;\n\t\treturn 0;\n\t},\n\n\tsymbolHeightInPitches: function (symbol) {\n\t\tvar height = glyphs[symbol] ? glyphs[symbol].h : 0;\n\t\treturn height / spacing.STEP;\n\t},\n\n\tgetSymbolAlign: function (symbol) {\n\t\tif (symbol.substring(0, 7) === \"scripts\" &&\n\t\t\tsymbol !== \"scripts.roll\") {\n\t\t\treturn \"center\";\n\t\t}\n\t\treturn \"left\";\n\t},\n\n\tgetYCorr: function (symbol) {\n\t\tswitch (symbol) {\n\t\t\tcase \"0\":\n\t\t\tcase \"1\":\n\t\t\tcase \"2\":\n\t\t\tcase \"3\":\n\t\t\tcase \"4\":\n\t\t\tcase \"5\":\n\t\t\tcase \"6\":\n\t\t\tcase \"7\":\n\t\t\tcase \"8\":\n\t\t\tcase \"9\":\n\t\t\tcase \"+\": return -2;\n\t\t\tcase \"timesig.common\":\n\t\t\tcase \"timesig.cut\": return 0;\n\t\t\tcase \"flags.d32nd\": return -1;\n\t\t\tcase \"flags.d64th\": return -2;\n\t\t\tcase \"flags.u32nd\": return 1;\n\t\t\tcase \"flags.u64th\": return 3;\n\t\t\tcase \"rests.whole\": return 1;\n\t\t\tcase \"rests.half\": return -1;\n\t\t\tcase \"rests.8th\": return -1;\n\t\t\tcase \"rests.quarter\": return -1;\n\t\t\tcase \"rests.16th\": return -1;\n\t\t\tcase \"rests.32nd\": return -1;\n\t\t\tcase \"rests.64th\": return -1;\n\t\t\tcase \"f\":\n\t\t\tcase \"m\":\n\t\t\tcase \"p\":\n\t\t\tcase \"s\":\n\t\t\tcase \"z\":\n\t\t\t\treturn -4;\n\t\t\tcase \"scripts.trill\":\n\t\t\tcase \"scripts.upbow\":\n\t\t\tcase \"scripts.downbow\":\n\t\t\t\treturn -2;\n\t\t\tcase \"scripts.ufermata\":\n\t\t\tcase \"scripts.wedge\":\n\t\t\tcase \"scripts.roll\":\n\t\t\tcase \"scripts.shortphrase\":\n\t\t\tcase \"scripts.longphrase\":\n\t\t\t\treturn -1;\n\t\t\tcase \"scripts.dfermata\":\n\t\t\t\treturn 1;\n\t\t\tdefault: return 0;\n\t\t}\n\t},\n\tsetSymbol: function (name, path) {\n\t\tglyphs[name] = path;\n\t}\n};\n\nmodule.exports = Glyphs; // we need the glyphs for layout information\n","function germanNote(note) {\n\tswitch (note) {\n\t\tcase \"B#\": return \"H#\";\n\t\tcase \"B♯\": return \"H♯\";\n\t\tcase \"B\": return \"H\";\n\t\tcase \"Bb\": return \"B\";\n\t\tcase \"B♭\": return \"B\";\n\t}\n\treturn note;\n}\n\nfunction translateChord(chordString, jazzchords, germanAlphabet) {\n\tvar lines = chordString.split(\"\\n\");\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tlet chord = lines[i];\n\t\t// If the chord isn't in a recognizable format then just skip it.\n\t\tlet reg = chord.match(/^([ABCDEFG][♯♭]?)?([^\\/]+)?(\\/([ABCDEFG][#b♯♭]?))?/);\n\t\tif (!reg) {\n\t\t\tcontinue;\n\t\t}\n\t\tlet baseChord = reg[1] || \"\";\n\t\tlet modifier = reg[2] || \"\";\n\t\tlet bassNote = reg[4] || \"\";\n\t\tif (germanAlphabet) {\n\t\t\tbaseChord = germanNote(baseChord);\n\t\t\tbassNote = germanNote(bassNote);\n\t\t}\n\t\t// This puts markers in the pieces of the chord that are read by the svg creator.\n\t\t// After the main part of the chord (the letter, a sharp or flat, and \"m\") a marker is added. Before a slash a marker is added.\n\t\tconst marker = jazzchords ? \"\\x03\" : \"\";\n\t\tconst bass = bassNote ? \"/\" + bassNote : \"\";\n\t\tlines[i] = [baseChord, modifier, bass].join(marker);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nmodule.exports = translateChord;\n","var drawTempo = require('./tempo');\nvar drawRelativeElement = require('./relative');\nvar spacing = require('../helpers/spacing');\nvar setClass = require('../helpers/set-class');\nvar elementGroup = require('./group-elements');\n\nfunction drawAbsolute(renderer, params, bartop, selectables, staffPos) {\n\tif (params.invisible) return;\n\tvar isTempo = params.children.length > 0 && params.children[0].type === \"TempoElement\";\n\tparams.elemset = [];\n\telementGroup.beginGroup(renderer.paper, renderer.controller);\n\tfor (var i = 0; i < params.children.length; i++) {\n\t\tvar child = params.children[i];\n\t\tswitch (child.type) {\n\t\t\tcase \"TempoElement\":\n\t\t\t\tdrawTempo(renderer, child);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tvar el = drawRelativeElement(renderer, child, bartop);\n\t\t\t\tif (child.type === \"symbol\" && child.c && child.c.indexOf('notehead') >= 0) {\n\t\t\t\t\tel.setAttribute('class', 'abcjs-notehead')\n\t\t\t\t}\n\t\t}\n\t}\n\tvar klass = params.type;\n\tif (params.type === 'note' || params.type === 'rest') {\n\t\tparams.counters = renderer.controller.classes.getCurrent();\n\t\tklass += ' d' + Math.round(params.durationClass * 1000) / 1000;\n\t\tklass = klass.replace(/\\./g, '-');\n\t\tif (params.abcelem.pitches) {\n\t\t\tfor (var j = 0; j < params.abcelem.pitches.length; j++) {\n\t\t\t\tklass += ' p' + params.abcelem.pitches[j].pitch;\n\t\t\t}\n\t\t}\n\t}\n\tvar g = elementGroup.endGroup(klass, params.type);\n\tif (g) {\n\t\t// TODO-PER-HACK! This corrects the classes because the tablature is not being created at the right time.\n\t\tif (params.cloned) {\n\t\t\tparams.cloned.overrideClasses = g.className.baseVal\n\t\t}\n\t\tif (params.overrideClasses) {\n\t\t\tvar type = g.classList && g.classList.length > 0 ? g.classList[0] + ' ' : ''\n\t\t\tg.setAttribute(\"class\", type + params.overrideClasses)\n\t\t}\n\t\tif (isTempo) {\n\t\t\tparams.startChar = params.abcelem.startChar;\n\t\t\tparams.endChar = params.abcelem.endChar;\n\t\t\tselectables.add(params, g, false, staffPos);\n\t\t} else {\n\t\t\tparams.elemset.push(g);\n\t\t\tvar isSelectable = false;\n\t\t\tif (params.type === 'note' || params.type === 'tabNumber') {\n\t\t\t\tisSelectable = true;\n\t\t\t}\n\t\t\tselectables.add(params, g, isSelectable, staffPos);\n\t\t}\n\t} else if (params.elemset.length > 0)\n\t\tselectables.add(params, params.elemset[0], params.type === 'note', staffPos);\n\t// If there was no output, then don't add to the selectables. This happens when using the \"y\" spacer, for instance.\n\n\tif (params.klass)\n\t\tsetClass(params.elemset, \"mark\", \"\", \"#00ff00\");\n\tif (params.hint)\n\t\tsetClass(params.elemset, \"abcjs-hint\", \"\", null);\n\tparams.abcelem.abselem = params;\n\n\tif (params.heads && params.heads.length > 0) {\n\t\tparams.notePositions = [];\n\t\tfor (var jj = 0; jj < params.heads.length; jj++) {\n\t\t\tparams.notePositions.push({\n\t\t\t\tx: params.heads[jj].x + params.heads[jj].w / 2,\n\t\t\t\ty: staffPos.zero - params.heads[jj].pitch * spacing.STEP\n\t\t\t});\n\t\t}\n\t}\n}\n\nmodule.exports = drawAbsolute;\n","var printPath = require('./print-path');\nvar roundNumber = require(\"./round-number\");\n\nfunction drawBeam(renderer, params) {\n\tif (params.beams.length === 0) return;\n\n\tvar pathString = \"\";\n\tfor (var i = 0; i < params.beams.length; i++) {\n\t\tvar beam = params.beams[i];\n\t\tif (beam.split) {\n\t\t\tvar slope = getSlope(renderer, beam.startX, beam.startY, beam.endX, beam.endY);\n\t\t\tvar xes = [];\n\t\t\tfor (var j = 0; j < beam.split.length; j += 2) {\n\t\t\t\txes.push([beam.split[j], beam.split[j + 1]]);\n\t\t\t}\n\t\t\tfor (j = 0; j < xes.length; j++) {\n\t\t\t\tvar y1 = getY(beam.startX, beam.startY, slope, xes[j][0]);\n\t\t\t\tvar y2 = getY(beam.startX, beam.startY, slope, xes[j][1]);\n\t\t\t\tpathString += draw(renderer, xes[j][0], y1, xes[j][1], y2, beam.dy);\n\t\t\t}\n\t\t} else\n\t\t\tpathString += draw(renderer, beam.startX, beam.startY, beam.endX, beam.endY, beam.dy);\n\t}\n\tvar durationClass = (\"abcjs-d\" + params.duration).replace(/\\./g, \"-\");\n\tvar klasses = renderer.controller.classes.generate('beam-elem ' + durationClass);\n\tvar el = printPath(renderer, {\n\t\tpath: pathString,\n\t\tstroke: \"none\",\n\t\tfill: renderer.foregroundColor,\n\t\t'class': klasses\n\t});\n\treturn [el];\n}\n\nfunction draw(renderer, startX, startY, endX, endY, dy) {\n\t// the X coordinates are actual coordinates, but the Y coordinates are in pitches.\n\tstartY = roundNumber(renderer.calcY(startY));\n\tendY = roundNumber(renderer.calcY(endY));\n\tstartX = roundNumber(startX);\n\tendX = roundNumber(endX);\n\tvar startY2 = roundNumber(startY + dy);\n\tvar endY2 = roundNumber(endY + dy);\n\treturn \"M\" + startX + \" \" + startY + \" L\" + endX + \" \" + endY +\n\t\t\"L\" + endX + \" \" + endY2 + \" L\" + startX + \" \" + startY2 + \"z\";\n}\n\nfunction getSlope(renderer, startX, startY, endX, endY) {\n\treturn (endY - startY) / (endX - startX);\n}\n\nfunction getY(startX, startY, slope, currentX) {\n\tvar x = currentX - startX;\n\treturn startY + x * slope;\n}\n\nmodule.exports = drawBeam;\n","var sprintf = require('./sprintf');\nvar spacing = require('../helpers/spacing');\nvar renderText = require('./text');\n\nfunction drawBrace(renderer, params, selectables) {\n\t// The absoluteY number is the spot where the note on the first ledger line is drawn (i.e. middle C if treble clef)\n\t// The STEP offset here moves it to the top and bottom lines\n\tvar startY = params.startVoice.staff.absoluteY - spacing.STEP * 10;\n\tif (params.endVoice && params.endVoice.staff)\n\t\tparams.endY = params.endVoice.staff.absoluteY - spacing.STEP * 2;\n\telse if (params.lastContinuedVoice && params.lastContinuedVoice.staff)\n\t\tparams.endY = params.lastContinuedVoice.staff.absoluteY - spacing.STEP * 2;\n\telse\n\t\tparams.endY = params.startVoice.staff.absoluteY - spacing.STEP * 2;\n\treturn draw(renderer, params.x, startY, params.endY, params.type, params.header, selectables);\n}\n\nfunction straightPath(renderer, xLeft, yTop, yBottom, type) {\n\txLeft += spacing.STEP;\n\tvar xLineWidth = spacing.STEP * 0.75;\n\tvar yOverlap = spacing.STEP * 0.75;\n\tvar height = yBottom - yTop;\n\t// Straight line\n\tvar pathString = sprintf(\"M %f %f l %f %f l %f %f l %f %f z\",\n\t\txLeft, yTop - yOverlap, // top left line\n\t\t0, height + yOverlap * 2, // bottom left line\n\t\txLineWidth, 0, // bottom right line\n\t\t0, - (height + yOverlap * 2) // top right line\n\t);\n\t// Top arm\n\tvar wCurve = spacing.STEP * 2;\n\tvar hCurve = spacing.STEP;\n\tpathString += sprintf(\"M %f %f q %f %f %f %f q %f %f %f %f z\",\n\t\txLeft + xLineWidth, yTop - yOverlap, // top left arm\n\t\twCurve * 0.6, hCurve * 0.2,\n\t\twCurve, -hCurve, // right point\n\t\t-wCurve * 0.1, hCurve * 0.3,\n\t\t-wCurve, hCurve + spacing.STEP // left bottom\n\t);\n\t// Bottom arm\n\tpathString += sprintf(\"M %f %f q %f %f %f %f q %f %f %f %f z\",\n\t\txLeft + xLineWidth, yTop + yOverlap + height, // bottom left arm\n\t\twCurve * 0.6, -hCurve * 0.2,\n\t\twCurve, hCurve, // right point\n\t\t-wCurve * 0.1, -hCurve * 0.3,\n\t\t-wCurve, -hCurve - spacing.STEP // left bottom\n\t);\n\treturn renderer.paper.path({ path: pathString, stroke: renderer.foregroundColor, fill: renderer.foregroundColor, 'class': renderer.controller.classes.generate(type), \"data-name\": type });\n}\n\nfunction curvyPath(renderer, xLeft, yTop, yBottom, type) {\n\tvar yHeight = yBottom - yTop;\n\n\tvar pathString = curve(xLeft,\n\t\tyTop,\n\t\t[7.5, -8, 21, 0, 18.5, -10.5, 7.5],\n\t\t[0, yHeight / 5.5, yHeight / 3.14, yHeight / 2, yHeight / 2.93, yHeight / 4.88, 0]);\n\n\tpathString += curve(xLeft,\n\t\tyTop,\n\t\t[0, 17.5, -7.5, 6.6, -5, 20, 0],\n\t\t[yHeight / 2, yHeight / 1.46, yHeight / 1.22, yHeight, yHeight / 1.19, yHeight / 1.42, yHeight / 2]);\n\n\treturn renderer.paper.path({ path: pathString, stroke: renderer.foregroundColor, fill: renderer.foregroundColor, 'class': renderer.controller.classes.generate(type), \"data-name\": type });\n}\n\nfunction curve(xLeft, yTop, xCurve, yCurve) {\n\treturn sprintf(\"M %f %f C %f %f %f %f %f %f C %f %f %f %f %f %f z\",\n\t\txLeft + xCurve[0], yTop + yCurve[0],\n\t\txLeft + xCurve[1], yTop + yCurve[1],\n\t\txLeft + xCurve[2], yTop + yCurve[2],\n\t\txLeft + xCurve[3], yTop + yCurve[3],\n\t\txLeft + xCurve[4], yTop + yCurve[4],\n\t\txLeft + xCurve[5], yTop + yCurve[5],\n\t\txLeft + xCurve[6], yTop + yCurve[6]);\n}\n\nvar draw = function (renderer, xLeft, yTop, yBottom, type, header, selectables) {//Tony\n\tvar ret;\n\tif (header) {\n\t\trenderer.paper.openGroup({ klass: renderer.controller.classes.generate(\"staff-extra voice-name\"), \"data-name\": type });\n\t\tvar position = yTop + (yBottom - yTop) / 2;\n\t\tposition = position - renderer.controller.getTextSize.baselineToCenter(header, \"voicefont\", 'staff-extra voice-name', 0, 1);\n\n\t\trenderText(renderer, {\n\t\t\tx: renderer.padding.left,\n\t\t\ty: position,\n\t\t\ttext: header,\n\t\t\ttype: 'voicefont',\n\t\t\tklass: 'staff-extra voice-name',\n\t\t\tanchor: 'start',\n\t\t\tcenterVertically: true\n\t\t});\n\t}\n\tif (type === \"brace\")\n\t\tret = curvyPath(renderer, xLeft, yTop, yBottom, type);\n\telse if (type === \"bracket\")\n\t\tret = straightPath(renderer, xLeft, yTop, yBottom, type);\n\tif (header) {\n\t\tret = renderer.paper.closeGroup();\n\t}\n\tselectables.wrapSvgEl({ el_type: type, startChar: -1, endChar: -1 }, ret);\n\n\treturn ret;\n};\nmodule.exports = drawBrace;\n","var sprintf = require('./sprintf');\nvar printPath = require('./print-path');\nvar roundNumber = require(\"./round-number\");\n\nfunction drawCrescendo(renderer, params, selectables) {\n\tif (params.pitch === undefined)\n\t\twindow.console.error(\"Crescendo Element y-coordinate not set.\");\n\tvar y = renderer.calcY(params.pitch) + 4; // This is the top pixel to use (it is offset a little so that it looks good with the volume marks.)\n\tvar height = 8;\n\n\t// TODO-PER: This is just a quick hack to make the dynamic marks not crash if they are mismatched. See the slur treatment for the way to get the beginning and end.\n\tvar left = params.anchor1 ? params.anchor1.x : 0;\n\tvar right = params.anchor2 ? params.anchor2.x : 800;\n\n\tvar el;\n\tif (params.dir === \"<\") {\n\t\tel = drawLine(renderer, y + height / 2, y, y + height / 2, y + height, left, right);\n\t} else {\n\t\tel = drawLine(renderer, y, y + height / 2, y + height, y + height / 2, left, right);\n\t}\n\tselectables.wrapSvgEl({ el_type: \"dynamicDecoration\", startChar: -1, endChar: -1 }, el);\n\treturn [el];\n}\n\nvar drawLine = function (renderer, y1, y2, y3, y4, left, right) {\n\ty1 = roundNumber(y1);\n\ty2 = roundNumber(y2);\n\ty3 = roundNumber(y3);\n\ty4 = roundNumber(y4);\n\tleft = roundNumber(left);\n\tright = roundNumber(right);\n\n\tvar pathString = sprintf(\"M %f %f L %f %f M %f %f L %f %f\",\n\t\tleft, y1, right, y2, left, y3, right, y4);\n\treturn printPath(renderer, { path: pathString, highlight: \"stroke\", stroke: renderer.foregroundColor, 'class': renderer.controller.classes.generate('dynamics decoration'), \"data-name\": \"dynamics\" });\n};\n\nmodule.exports = drawCrescendo;\n","function printDebugBox(renderer, attr, comment) {\n\tvar box = renderer.paper.rectBeneath(attr);\n\tif (comment)\n\t\trenderer.paper.text(comment, { x: 0, y: attr.y + 7, \"text-anchor\": \"start\", \"font-size\": \"14px\", fill: \"rgba(0,0,255,.4)\", stroke: \"rgba(0,0,255,.4)\" });\n\treturn box;\n}\n\nmodule.exports = printDebugBox;\n","var drawStaffGroup = require('./staff-group');\nvar setPaperSize = require('./set-paper-size');\nvar nonMusic = require('./non-music');\nvar spacing = require('../helpers/spacing');\nvar Selectables = require('./selectables');\n\nfunction draw(renderer, classes, abcTune, width, maxWidth, responsive, scale, selectTypes, tuneNumber, lineOffset) {\n\tvar selectables = new Selectables(renderer.paper, selectTypes, tuneNumber);\n\tvar groupClasses = {}\n\tif (classes.shouldAddClasses)\n\t\tgroupClasses.klass = \"abcjs-meta-top\"\n\trenderer.paper.openGroup(groupClasses)\n\trenderer.moveY(renderer.padding.top);\n\tnonMusic(renderer, abcTune.topText, selectables);\n\trenderer.paper.closeGroup()\n\trenderer.moveY(renderer.spacing.music);\n\tvar staffgroups = [];\n\tfor (var line = 0; line < abcTune.lines.length; line++) {\n\t\tclasses.incrLine();\n\t\tvar abcLine = abcTune.lines[line];\n\t\tif (abcLine.staff) {\n\t\t\tif (classes.shouldAddClasses)\n\t\t\t\tgroupClasses.klass = \"abcjs-staff-wrapper abcjs-l\" + classes.lineNumber\n\t\t\trenderer.paper.openGroup(groupClasses)\n\t\t\tif (abcLine.vskip) {\n\t\t\t\trenderer.moveY(abcLine.vskip);\n\t\t\t}\n\t\t\tif (staffgroups.length >= 1)\n\t\t\t\taddStaffPadding(renderer, renderer.spacing.staffSeparation, staffgroups[staffgroups.length - 1], abcLine.staffGroup);\n\t\t\tvar staffgroup = engraveStaffLine(renderer, abcLine.staffGroup, selectables, line);\n\t\t\tstaffgroup.line = lineOffset + line; // If there are non-music lines then the staffgroup array won't line up with the line array, so this keeps track.\n\t\t\tstaffgroups.push(staffgroup);\n\t\t\trenderer.paper.closeGroup()\n\t\t} else if (abcLine.nonMusic) {\n\t\t\tif (classes.shouldAddClasses)\n\t\t\t\tgroupClasses.klass = \"abcjs-non-music\"\n\t\t\trenderer.paper.openGroup(groupClasses)\n\t\t\tnonMusic(renderer, abcLine.nonMusic, selectables);\n\t\t\trenderer.paper.closeGroup()\n\t\t}\n\t}\n\n\tclasses.reset();\n\tif (abcTune.bottomText && abcTune.bottomText.rows && abcTune.bottomText.rows.length > 0) {\n\t\tif (classes.shouldAddClasses)\n\t\t\tgroupClasses.klass = \"abcjs-meta-bottom\"\n\t\trenderer.paper.openGroup(groupClasses)\n\t\trenderer.moveY(24); // TODO-PER: Empirically discovered. What variable should this be?\n\t\tnonMusic(renderer, abcTune.bottomText, selectables);\n\t\trenderer.paper.closeGroup()\n\t}\n\tsetPaperSize(renderer, maxWidth, scale, responsive);\n\treturn { staffgroups: staffgroups, selectables: selectables.getElements() };\n}\n\nfunction engraveStaffLine(renderer, staffGroup, selectables, lineNumber) {\n\tdrawStaffGroup(renderer, staffGroup, selectables, lineNumber);\n\tvar height = staffGroup.height * spacing.STEP;\n\trenderer.y += height;\n\treturn staffGroup;\n}\n\nfunction addStaffPadding(renderer, staffSeparation, lastStaffGroup, thisStaffGroup) {\n\tvar lastStaff = lastStaffGroup.staffs[lastStaffGroup.staffs.length - 1];\n\tvar lastBottomLine = -(lastStaff.bottom - 2); // The 2 is because the scale goes to 2 below the last line.\n\tvar nextTopLine = thisStaffGroup.staffs[0].top - 10; // Because 10 represents the top line.\n\tvar naturalSeparation = nextTopLine + lastBottomLine; // This is how far apart they'd be without extra spacing\n\tvar separationInPixels = naturalSeparation * spacing.STEP;\n\tif (separationInPixels < staffSeparation)\n\t\trenderer.moveY(staffSeparation - separationInPixels);\n}\n\nmodule.exports = draw;\n","var printSymbol = require('./print-symbol');\n\nfunction drawDynamics(renderer, params, selectables) {\n\tif (params.pitch === undefined)\n\t\twindow.console.error(\"Dynamic Element y-coordinate not set.\");\n\tvar scalex = 1;\n\tvar scaley = 1;\n\tvar el = printSymbol(renderer, params.anchor.x, params.pitch, params.dec, {\n\t\tscalex: scalex,\n\t\tscaley: scaley,\n\t\tklass: renderer.controller.classes.generate('decoration dynamics'),\n\t\tfill: renderer.foregroundColor,\n\t\tstroke: \"none\",\n\t\tname: \"dynamics\"\n\t});\n\tselectables.wrapSvgEl({ el_type: \"dynamicDecoration\", startChar: -1, endChar: -1, decoration: params.dec }, el);\n\treturn [el];\n}\n\nmodule.exports = drawDynamics;\n","var sprintf = require('./sprintf');\nvar renderText = require('./text');\nvar printPath = require('./print-path');\nvar roundNumber = require(\"./round-number\");\n\nfunction drawEnding(renderer, params, linestartx, lineendx, selectables) {\n\tif (params.pitch === undefined)\n\t\twindow.console.error(\"Ending Element y-coordinate not set.\");\n\tvar y = roundNumber(renderer.calcY(params.pitch));\n\tvar height = 20;\n\tvar pathString = '';\n\n\tif (params.anchor1) {\n\t\tlinestartx = roundNumber(params.anchor1.x + params.anchor1.w);\n\t\tpathString += sprintf(\"M %f %f L %f %f \",\n\t\t\tlinestartx, y, linestartx, roundNumber(y + height));\n\t}\n\n\tif (params.anchor2) {\n\t\tlineendx = roundNumber(params.anchor2.x);\n\t\tpathString += sprintf(\"M %f %f L %f %f \",\n\t\t\tlineendx, y, lineendx, roundNumber(y + height));\n\t}\n\n\tpathString += sprintf(\"M %f %f L %f %f \",\n\t\tlinestartx, y, lineendx, y);\n\n\trenderer.paper.openGroup({ klass: renderer.controller.classes.generate(\"ending\"), \"data-name\": \"ending\" });\n\tprintPath(renderer, { path: pathString, stroke: renderer.foregroundColor, fill: renderer.foregroundColor, \"data-name\": \"line\" });\n\tif (params.anchor1)\n\t\trenderText(renderer, {\n\t\t\tx: roundNumber(linestartx + 5),\n\t\t\ty: roundNumber(renderer.calcY(params.pitch - 0.5)),\n\t\t\ttext: params.text,\n\t\t\ttype: 'repeatfont',\n\t\t\tklass: 'ending',\n\t\t\tanchor: \"start\",\n\t\t\tnoClass: true,\n\t\t\tname: params.text\n\t\t});\n\tvar g = renderer.paper.closeGroup();\n\tselectables.wrapSvgEl({ el_type: \"ending\", startChar: -1, endChar: -1 }, g);\n\treturn [g];\n}\n\nmodule.exports = drawEnding;\n","var sprintf = require('./sprintf');\nvar printPath = require('./print-path');\nvar roundNumber = require(\"./round-number\");\n\nfunction drawGlissando(renderer, params, selectables) {\n\tif (!params.anchor1 || !params.anchor2 || !params.anchor1.heads || !params.anchor2.heads || params.anchor1.heads.length === 0 || params.anchor2.heads.length === 0)\n\t\twindow.console.error(\"Glissando Element not set.\");\n\n\tvar margin = 4;\n\tvar leftY = renderer.calcY(params.anchor1.heads[0].pitch)\n\tvar rightY = renderer.calcY(params.anchor2.heads[0].pitch)\n\tvar leftX = params.anchor1.x + params.anchor1.w / 2\n\tvar rightX = params.anchor2.x + params.anchor2.w / 2\n\t\n\tvar len = lineLength(leftX, leftY, rightX, rightY)\n\tvar marginLeft = params.anchor1.w / 2 + margin\n\tvar marginRight = params.anchor2.w / 2 + margin\n\tvar s = slope(leftX, leftY, rightX, rightY)\n\tvar leftYAdj = getY(leftY, s, marginLeft)\n\tvar rightYAdj = getY(rightY, s, -marginRight)\n\tvar num = numSquigglies(len - marginLeft - marginRight)\n\n\tvar el = drawSquiggly(renderer, leftX + marginLeft, leftYAdj, num, s)\n\tselectables.wrapSvgEl({ el_type: \"glissando\", startChar: -1, endChar: -1 }, el);\n\treturn [el];\n}\n\nfunction lineLength(leftX, leftY, rightX, rightY) {\n\t// The length from notehead center to notehead center.\n\tvar w = rightX - leftX\n\tvar h = rightY - leftY\n\treturn Math.sqrt(w * w + h * h)\n}\n\nfunction slope(leftX, leftY, rightX, rightY) {\n\treturn (rightY - leftY) / (rightX - leftX)\n}\n\nfunction getY(y, slope, xOfs) {\n\treturn roundNumber(y + (xOfs) * slope);\n}\n\nfunction numSquigglies(length) {\n\tvar endLen = 5; // The width of the end - that is, the non repeating part\n\treturn Math.max(2, Math.floor((length - endLen * 2) / 6));\n}\n\nvar leftStart = [[3.5, -4.8]]\nvar right = [[1.5, -1], [.3, -.3], [-3.5, 3.8]]\nvar leftEnd = [[-1.5, 2]]\nvar top = [[3, 4], [3, -4]]\nvar bottom = [[-3, 4], [-3, -4]]\n\nfunction segment(arr, slope) {\n\tvar ret = \"\";\n\tfor (var i = 0; i < arr.length; i++) {\n\t\tret += 'l' + arr[i][0] + ' ' + getY(arr[i][1], slope, arr[i][0])\n\t}\n\treturn ret\n}\n\nvar drawSquiggly = function (renderer, x, y, num, slope) {\n\tvar p = sprintf(\"M %f %f\", x, y);\n\tp += segment(leftStart, slope)\n\tvar i\n\tfor (i = 0; i < num; i++) {\n\t\tp += segment(top, slope)\n\t}\n\tp += segment(right, slope)\n\tfor (i = 0; i < num; i++)\n\t\tp += segment(bottom, slope)\n\tp += segment(leftEnd, slope) + 'z'\n\treturn printPath(renderer, { path: p, highlight: \"stroke\", stroke: renderer.foregroundColor, 'class': renderer.controller.classes.generate('decoration'), \"data-name\": \"glissando\" });\n}\n\nmodule.exports = drawGlissando;\n","/**\n * Begin a group of glyphs that will always be moved, scaled and highlighted together\n */\n\nvar roundNumber = require(\"./round-number\");\n\nfunction Group() {\n\tthis.ingroup = false;\n}\n\nGroup.prototype.beginGroup = function (paper, controller) {\n\tthis.paper = paper;\n\tthis.controller = controller;\n\tthis.path = [];\n\tthis.lastM = [0, 0];\n\tthis.ingroup = true;\n\tthis.paper.openGroup();\n};\n\nGroup.prototype.isInGroup = function () {\n\treturn this.ingroup;\n}\n\nGroup.prototype.addPath = function (path) {\n\tpath = path || [];\n\tif (path.length === 0) return;\n\tpath[0][0] = \"m\";\n\tpath[0][1] = roundNumber(path[0][1] - this.lastM[0]);\n\tpath[0][2] = roundNumber(path[0][2] - this.lastM[1]);\n\tthis.lastM[0] += path[0][1];\n\tthis.lastM[1] += path[0][2];\n\tthis.path.push(path[0]);\n\tfor (var i = 1, ii = path.length; i < ii; i++) {\n\t\tif (path[i][0] === \"m\") {\n\t\t\tthis.lastM[0] += path[i][1];\n\t\t\tthis.lastM[1] += path[i][2];\n\t\t}\n\t\tthis.path.push(path[i]);\n\t}\n};\n\n/**\n * End a group of glyphs that will always be moved, scaled and highlighted together\n */\nGroup.prototype.endGroup = function (klass, name) {\n\tthis.ingroup = false;\n\t//if (this.path.length === 0) return null;\n\tvar path = \"\";\n\tfor (var i = 0; i < this.path.length; i++)\n\t\tpath += this.path[i].join(\" \");\n\tthis.path = [];\n\n\tvar ret = this.paper.closeGroup();\n\tif (ret) {\n\t\tret.setAttribute(\"class\", this.controller.classes.generate(klass))\n\t\tret.setAttribute(\"fill\", this.controller.renderer.foregroundColor)\n\t\tret.setAttribute(\"stroke\", \"none\")\n\t\tret.setAttribute(\"data-name\", name)\n\t}\n\treturn ret;\n};\n\n// There is just a singleton of this object.\nvar elementGroup = new Group();\n\nmodule.exports = elementGroup;\n","var drawSeparator = require('./separator');\nvar renderText = require('./text');\n\nfunction nonMusic(renderer, obj, selectables) {\n\tfor (var i = 0; i < obj.rows.length; i++) {\n\t\tvar row = obj.rows[i];\n\t\tif (row.absmove) {\n\t\t\trenderer.absolutemoveY(row.absmove);\n\t\t} else if (row.move) {\n\t\t\trenderer.moveY(row.move);\n\t\t} else if (row.text || row.phrases) {\n\t\t\tvar x = row.left ? row.left : 0;\n\t\t\tvar el = renderText(renderer, {\n\t\t\t\tx: x,\n\t\t\t\ty: renderer.y,\n\t\t\t\ttext: row.text,\n\t\t\t\tphrases: row.phrases,\n\t\t\t\t'dominant-baseline': row['dominant-baseline'],\n\t\t\t\ttype: row.font,\n\t\t\t\tklass: row.klass,\n\t\t\t\tname: row.name,\n\t\t\t\tanchor: row.anchor\n\t\t\t});\n\t\t\tif (row.absElemType) {\n\t\t\t\tselectables.wrapSvgEl({\n\t\t\t\t\tel_type: row.absElemType,\n\t\t\t\t\tname: row.name,\n\t\t\t\t\tstartChar: row.startChar,\n\t\t\t\t\tendChar: row.endChar,\n\t\t\t\t\ttext: row.text\n\t\t\t\t}, el);\n\t\t\t}\n\t\t} else if (row.separator) {\n\t\t\tdrawSeparator(renderer, row.separator)\n\t\t} else if (row.startGroup) {\n\t\t\trenderer.paper.openGroup({ klass: row.klass, \"data-name\": row.name });\n\t\t} else if (row.endGroup) {\n\t\t\t// TODO-PER: also create a history element with the title \"row.endGroup\"\n\t\t\tvar g = renderer.paper.closeGroup();\n\t\t\tif (row.absElemType)\n\t\t\t\tselectables.wrapSvgEl({\n\t\t\t\t\tel_type: row.absElemType,\n\t\t\t\t\tname: row.name,\n\t\t\t\t\tstartChar: row.startChar,\n\t\t\t\t\tendChar: row.endChar,\n\t\t\t\t\ttext: \"\"\n\t\t\t\t}, g);\n\t\t}\n\t}\n}\n\nmodule.exports = nonMusic;\n","var sprintf = require('./sprintf');\nvar roundNumber = require(\"./round-number\");\n\nfunction printLine(renderer, x1, x2, y, klass, name, dy) {\n\tvar fill = renderer.foregroundColor;\n\tx1 = roundNumber(x1);\n\tx2 = roundNumber(x2);\n\tvar y1 = roundNumber(y - dy);\n\tvar y2 = roundNumber(y + dy);\n\t// TODO-PER: This fixes a firefox bug where it isn't displayed\n\tif (renderer.firefox112) {\n\t\ty += dy / 2; // Because the y coordinate is the edge of where the line goes but the width widens from the middle.\n\t\tvar attr = {\n\t\t\tx1: x1,\n\t\t\tx2: x2,\n\t\t\ty1: y,\n\t\t\ty2: y,\n\t\t\tstroke: renderer.foregroundColor,\n\t\t\t'stroke-width': Math.abs(dy*2)\n\t\t}\n\t\tif (klass)\n\t\t\tattr['class'] = klass;\n\t\tif (name)\n\t\t\tattr['data-name'] = name;\n\t\t\n\t\treturn renderer.paper.lineToBack(attr);\n\t}\n\n\tvar pathString = sprintf(\"M %f %f L %f %f L %f %f L %f %f z\", x1, y1, x2, y1,\n\t\tx2, y2, x1, y2);\n\tvar options = { path: pathString, stroke: \"none\", fill: fill };\n\tif (name)\n\t\toptions['data-name'] = name;\n\tif (klass)\n\t\toptions['class'] = klass;\n\tvar ret = renderer.paper.pathToBack(options);\n\n\treturn ret;\n}\n\nmodule.exports = printLine;\n\n","function printPath(renderer, attrs, params) {\n\tvar ret = renderer.paper.path(attrs);\n\n\treturn ret;\n}\n\nmodule.exports = printPath;\n","var elementGroup = require('./group-elements');\nvar roundNumber = require(\"./round-number\");\n\nfunction printStem(renderer, x, dx, y1, y2, klass, name) {\n\tif (dx < 0 || y1 < y2) { // correct path \"handedness\" for intersection with other elements\n\t\tvar tmp = roundNumber(y2);\n\t\ty2 = roundNumber(y1);\n\t\ty1 = tmp;\n\t} else {\n\t\ty1 = roundNumber(y1);\n\t\ty2 = roundNumber(y2);\n\t}\n\tx = roundNumber(x);\n\tvar x2 = roundNumber(x + dx);\n\t// TODO-PER: This fixes a firefox bug where it isn't displayed\n\tif (renderer.firefox112) {\n\t\tx += dx / 2; // Because the x coordinate is the edge of where the line goes but the width widens from the middle.\n\t\tvar attr = {\n\t\t\tx1: x,\n\t\t\tx2: x,\n\t\t\ty1: y1,\n\t\t\ty2: y2,\n\t\t\tstroke: renderer.foregroundColor,\n\t\t\t'stroke-width': Math.abs(dx)\n\t\t}\n\t\tif (klass)\n\t\t\tattr['class'] = klass;\n\t\tif (name)\n\t\t\tattr['data-name'] = name;\n\t\t\n\t\treturn renderer.paper.lineToBack(attr);\n\t}\n\tvar pathArray = [[\"M\", x, y1], [\"L\", x, y2], [\"L\", x2, y2], [\"L\", x2, y1], [\"z\"]];\n\tvar attr = { path: \"\" };\n\tfor (var i = 0; i < pathArray.length; i++)\n\t\tattr.path += pathArray[i].join(\" \");\n\tif (klass)\n\t\tattr['class'] = klass;\n\tif (name)\n\t\tattr['data-name'] = name;\n\tif (!elementGroup.isInGroup()) {\n\t\tattr.stroke = \"none\";\n\t\tattr.fill = renderer.foregroundColor;\n\t}\n\treturn renderer.paper.pathToBack(attr);\n}\n\nmodule.exports = printStem;\n","var renderText = require('./text');\nvar glyphs = require('../creation/glyphs');\nvar elementGroup = require('./group-elements');\n\n/**\n * assumes this.y is set appropriately\n * if symbol is a multichar string without a . (as in scripts.staccato) 1 symbol per char is assumed\n * not scaled if not in printgroup\n */\nfunction printSymbol(renderer, x, offset, symbol, options) {\n\t// TODO-PER: what happened to scalex, and scaley? That might have been a bug introduced in refactoring\n\tvar el;\n\tvar ycorr;\n\tif (!symbol) return null;\n\tif (symbol.length > 1 && symbol.indexOf(\".\") < 0) {\n\t\tvar groupClass = elementGroup.isInGroup() ? '' : options.klass // If this is already in a group then don't repeat the classes for the sub-group)\n\t\trenderer.paper.openGroup({ \"data-name\": options.name, klass: groupClass });\n\t\tvar dx = 0;\n\t\tfor (var i = 0; i < symbol.length; i++) {\n\t\t\tvar s = symbol[i];\n\t\t\tycorr = glyphs.getYCorr(s);\n\t\t\tel = glyphs.printSymbol(x + dx, renderer.calcY(offset + ycorr), s, renderer.paper, { stroke: options.stroke, fill: options.fill });\n\t\t\tif (el) {\n\t\t\t\tif (i < symbol.length - 1)\n\t\t\t\t\tdx += kernSymbols(s, symbol[i + 1], glyphs.getSymbolWidth(s));\n\t\t\t} else {\n\t\t\t\trenderText(renderer, { x: x, y: renderer.y, text: \"no symbol:\" + symbol, type: \"debugfont\", klass: 'debug-msg', anchor: 'start' }, false);\n\t\t\t}\n\t\t}\n\t\tvar g = renderer.paper.closeGroup();\n\t\treturn g;\n\t} else {\n\t\tycorr = glyphs.getYCorr(symbol);\n\t\tif (elementGroup.isInGroup()) {\n\t\t\tel = glyphs.printSymbol(x, renderer.calcY(offset + ycorr), symbol, renderer.paper, { \"data-name\": options.name });\n\t\t} else {\n\t\t\tel = glyphs.printSymbol(x, renderer.calcY(offset + ycorr), symbol, renderer.paper, { klass: options.klass, stroke: options.stroke, fill: options.fill, \"data-name\": options.name });\n\t\t}\n\t\tif (el) {\n\t\t\treturn el;\n\t\t}\n\t\trenderText(renderer, { x: x, y: renderer.y, text: \"no symbol:\" + symbol, type: \"debugfont\", klass: 'debug-msg', anchor: 'start' }, false);\n\t\treturn null;\n\t}\n}\n\nfunction kernSymbols(lastSymbol, thisSymbol, lastSymbolWidth) {\n\t// This is just some adjustments to make it look better.\n\tvar width = lastSymbolWidth;\n\tif (lastSymbol === 'f' && thisSymbol === 'f')\n\t\twidth = width * 2 / 3;\n\tif (lastSymbol === 'p' && thisSymbol === 'p')\n\t\twidth = width * 5 / 6;\n\tif (lastSymbol === 'f' && thisSymbol === 'z')\n\t\twidth = width * 5 / 8;\n\treturn width;\n}\n\nmodule.exports = printSymbol;\n","var renderText = require('./text');\nvar printStem = require('./print-stem');\nvar printStaffLine = require('./staff-line');\nvar printSymbol = require('./print-symbol');\n\nfunction drawRelativeElement(renderer, params, bartop) {\n\tif (params.pitch === undefined)\n\t\twindow.console.error(params.type + \" Relative Element y-coordinate not set.\");\n\tvar y = renderer.calcY(params.pitch);\n\tswitch (params.type) {\n\t\tcase \"symbol\":\n\t\t\tif (params.c === null) return null;\n\t\t\tvar klass = \"symbol\";\n\t\t\tif (params.klass) klass += \" \" + params.klass;\n\t\t\tparams.graphelem = printSymbol(renderer, params.x, params.pitch, params.c, {\n\t\t\t\tscalex: params.scalex,\n\t\t\t\tscaley: params.scaley,\n\t\t\t\tklass: renderer.controller.classes.generate(klass),\n\t\t\t\t//\t\t\t\tfill:\"none\",\n\t\t\t\t//\t\t\t\tstroke: renderer.foregroundColor,\n\t\t\t\tname: params.name\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"debug\":\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: renderer.calcY(15), text: \"\" + params.c, type: \"debugfont\", klass: renderer.controller.classes.generate('debug-msg'), anchor: 'start', centerVertically: false, dim: params.dim }, false);\n\t\t\tbreak;\n\t\tcase \"tabNumber\":\n\t\t\tvar hAnchor = \"middle\";\n\t\t\tvar tabFont = \"tabnumberfont\";\n\t\t\tvar tabClass = 'abcjs-tab-number';\n\t\t\tif (params.isGrace) {\n\t\t\t\ttabFont = \"tabgracefont\";\n\t\t\t\ty += 2.5;\n\t\t\t\ttabClass = 'tab-grace'\n\t\t\t}\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: y, text: \"\" + params.c, type: tabFont, klass: renderer.controller.classes.generate(tabClass), anchor: hAnchor, centerVertically: false, dim: params.dim, cursor: 'default' }, false);\n\t\t\tbreak;\n\t\tcase \"barNumber\":\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: y, text: \"\" + params.c, type: \"measurefont\", klass: renderer.controller.classes.generate('bar-number'), anchor: \"middle\", dim: params.dim, name: \"bar-number\" }, true);\n\t\t\tbreak;\n\t\tcase \"lyric\":\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: y, text: params.c, type: \"vocalfont\", klass: renderer.controller.classes.generate('lyric'), anchor: \"middle\", dim: params.dim, name: \"lyric\" }, false);\n\t\t\tbreak;\n\t\tcase \"chord\":\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: y, text: params.c, type: 'gchordfont', klass: renderer.controller.classes.generate(\"chord\"), anchor: \"middle\", dim: params.dim, lane: params.getLane(), name: \"chord\" }, false);\n\t\t\tbreak;\n\t\tcase \"decoration\":\n\t\t\t// The +6 is to compensate for the placement of text in svg: to be on the same row as symbols, the y-coord needs to compensate for the center line.\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: y + 6, text: params.c, type: 'annotationfont', klass: renderer.controller.classes.generate(\"annotation\"), anchor: params.anchor, centerVertically: true, dim: params.dim }, false);\n\t\t\tbreak;\n\t\tcase \"text\":\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: y, text: params.c, type: 'annotationfont', klass: renderer.controller.classes.generate(\"annotation\"), anchor: \"start\", centerVertically: params.centerVertically, dim: params.dim, lane: params.getLane(), name: \"annotation\" }, false);\n\t\t\tbreak;\n\t\tcase \"multimeasure-text\":\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x + params.w / 2, y: y, text: params.c, type: 'tempofont', klass: renderer.controller.classes.generate(\"rest\"), anchor: \"middle\", centerVertically: false, dim: params.dim }, false);\n\t\t\tbreak;\n\t\tcase \"part\":\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: y, text: params.c, type: 'partsfont', klass: renderer.controller.classes.generate(\"part\"), anchor: \"start\", dim: params.dim, name: params.c }, true);\n\t\t\tbreak;\n\t\tcase \"bar\":\n\t\t\tparams.graphelem = printStem(renderer, params.x, params.linewidth + renderer.lineThickness, y, (bartop) ? bartop : renderer.calcY(params.pitch2), null, \"bar\"); break; // bartop can't be 0\n\t\tcase \"stem\":\n\t\t\tvar stemWidth = params.linewidth > 0 ? params.linewidth + renderer.lineThickness : params.linewidth - renderer.lineThickness\n\t\t\tparams.graphelem = printStem(renderer, params.x, stemWidth, y, renderer.calcY(params.pitch2), 'abcjs-stem', 'stem'); break;\n\t\tcase \"ledger\":\n\t\t\tparams.graphelem = printStaffLine(renderer, params.x, params.x + params.w, params.pitch, \"abcjs-ledger\", \"ledger\", 0.35 + renderer.lineThickness); break;\n\t}\n\tif (params.scalex !== 1 && params.graphelem) {\n\t\tscaleExistingElem(renderer.paper, params.graphelem, params.scalex, params.scaley, params.x, y);\n\t}\n\treturn params.graphelem;\n}\n\nfunction scaleExistingElem(paper, elem, scaleX, scaleY, x, y) {\n\tpaper.setAttributeOnElement(elem, { style: \"transform:scale(\" + scaleX + \",\" + scaleY + \");transform-origin:\" + x + \"px \" + y + \"px;\" });\n}\n\nmodule.exports = drawRelativeElement;\n","function roundNumber(x) {\n\treturn parseFloat(x.toFixed(2));\n}\n\nmodule.exports = roundNumber;\n","var highlight = require('../interactive/highlight');\nvar unhighlight = require('../interactive/unhighlight');\n\nfunction Selectables(paper, selectTypes, tuneNumber) {\n\tthis.elements = [];\n\tthis.paper = paper;\n\tthis.tuneNumber = tuneNumber;\n\tthis.selectTypes = selectTypes;\n}\n\nSelectables.prototype.getElements = function () {\n\treturn this.elements;\n};\n\nSelectables.prototype.add = function (absEl, svgEl, isNoteOrTabNumber, staffPos) {\n\tif (!this.canSelect(absEl))\n\t\treturn;\n\tvar params;\n\tif (this.selectTypes === undefined)\n\t\tparams = { selectable: false, \"data-index\": this.elements.length }; // This is the old behavior.\n\telse\n\t\tparams = { selectable: true, tabindex: 0, \"data-index\": this.elements.length };\n\tthis.paper.setAttributeOnElement(svgEl, params);\n\tvar sel = { absEl: absEl, svgEl: svgEl, isDraggable: isNoteOrTabNumber };\n\tif (staffPos !== undefined)\n\t\tsel.staffPos = staffPos;\n\tthis.elements.push(sel);\n\n};\n\nSelectables.prototype.canSelect = function (absEl) {\n\tif (this.selectTypes === false)\n\t\treturn false;\n\tif (!absEl || !absEl.abcelem)\n\t\treturn false;\n\tif (this.selectTypes === true)\n\t\treturn true;\n\tif (this.selectTypes === undefined) {\n\t\t// by default, only notes and tab numbers can be clicked.\n\t\tif (absEl.abcelem.el_type === 'note' || absEl.abcelem.el_type === 'tabNumber') {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\treturn this.selectTypes.indexOf(absEl.abcelem.el_type) >= 0;\n};\n\nSelectables.prototype.wrapSvgEl = function (abcelem, el) {\n\tvar absEl = {\n\t\ttuneNumber: this.tuneNumber,\n\t\tabcelem: abcelem,\n\t\telemset: [el],\n\t\thighlight: highlight,\n\t\tunhighlight: unhighlight\n\t};\n\tthis.add(absEl, el, false);\n};\n\nmodule.exports = Selectables;\n","function drawSeparator(renderer, width) {\n\tvar fill = \"rgba(0,0,0,255)\";\n\tvar stroke = \"rgba(0,0,0,0)\";\n\tvar y = Math.round(renderer.y);\n\tvar staffWidth = renderer.controller.width;\n\tvar x1 = (staffWidth - width) / 2;\n\tvar x2 = x1 + width;\n\tvar pathString = 'M ' + x1 + ' ' + y +\n\t\t' L ' + x2 + ' ' + y +\n\t\t' L ' + x2 + ' ' + (y + 1) +\n\t\t' L ' + x1 + ' ' + (y + 1) +\n\t\t' L ' + x1 + ' ' + y + ' z';\n\trenderer.paper.pathToBack({ path: pathString, stroke: stroke, fill: fill, 'class': renderer.controller.classes.generate('defined-text') });\n}\n\nmodule.exports = drawSeparator;\n","function setPaperSize(renderer, maxwidth, scale, responsive) {\n\tvar w = (maxwidth + renderer.padding.left + renderer.padding.right) * scale;\n\tvar h = (renderer.y + renderer.padding.bottom) * scale;\n\tif (renderer.isPrint)\n\t\th = Math.max(h, 1056); // 11in x 72pt/in x 1.33px/pt\n\t// TODO-PER: We are letting the page get as long as it needs now, but eventually that should go to a second page.\n\n\t// for accessibility\n\tif (renderer.ariaLabel !== '') {\n\t\tvar text = \"Sheet Music\";\n\t\tif (renderer.abctune && renderer.abctune.metaText && renderer.abctune.metaText.title)\n\t\t\ttext += \" for \\\"\" + renderer.abctune.metaText.title + '\"';\n\t\trenderer.paper.setTitle(text);\n\t\tvar label = renderer.ariaLabel ? renderer.ariaLabel : text;\n\t\trenderer.paper.setAttribute(\"aria-label\", label);\n\t}\n\n\t// for dragging - don't select during drag\n\tvar styles = [\n\t\t\"-webkit-touch-callout: none;\",\n\t\t\"-webkit-user-select: none;\",\n\t\t\"-khtml-user-select: none;\",\n\t\t\"-moz-user-select: none;\",\n\t\t\"-ms-user-select: none;\",\n\t\t\"user-select: none;\"\n\t];\n\trenderer.paper.insertStyles(\".abcjs-dragging-in-progress text, .abcjs-dragging-in-progress tspan {\" + styles.join(\" \") + \"}\");\n\n\tvar parentStyles = { overflow: \"hidden\" };\n\tif (responsive === 'resize') {\n\t\trenderer.paper.setResponsiveWidth(w, h);\n\t} else {\n\t\tparentStyles.width = \"\";\n\t\tparentStyles.height = h + \"px\";\n\t\tif (scale < 1) {\n\t\t\tparentStyles.width = w + \"px\";\n\t\t\trenderer.paper.setSize(w / scale, h / scale);\n\t\t} else\n\t\t\trenderer.paper.setSize(w, h);\n\t}\n\trenderer.paper.setScale(scale);\n\trenderer.paper.setParentStyles(parentStyles);\n}\n\nmodule.exports = setPaperSize;\n","/**\n * sprintf() for JavaScript v.0.4\n *\n Copyright (c) 2007-present, Alexandru Mărășteanu \n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n * Neither the name of this software nor the names of its contributors may be\n used to endorse or promote products derived from this software without\n specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n//function str_repeat(i, m) { for (var o = []; m > 0; o[--m] = i); return(o.join('')); }\n\nvar sprintf = function () {\n\tvar i = 0, a, f = arguments[i++], o = [], m, p, c, x;\n\twhile (f) {\n\t\tif (m = /^[^\\x25]+/.exec(f)) o.push(m[0]);\n\t\telse if (m = /^\\x25{2}/.exec(f)) o.push('%');\n\t\telse if (m = /^\\x25(?:(\\d+)\\$)?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-fosuxX])/.exec(f)) {\n\t\t\tif (((a = arguments[m[1] || i++]) == null) || (a == undefined)) throw (\"Too few arguments.\");\n\t\t\tif (/[^s]/.test(m[7]) && (typeof (a) != 'number'))\n\t\t\t\tthrow (\"Expecting number but found \" + typeof (a));\n\t\t\tswitch (m[7]) {\n\t\t\t\tcase 'b': a = a.toString(2); break;\n\t\t\t\tcase 'c': a = String.fromCharCode(a); break;\n\t\t\t\tcase 'd': a = parseInt(a); break;\n\t\t\t\tcase 'e': a = m[6] ? a.toExponential(m[6]) : a.toExponential(); break;\n\t\t\t\tcase 'f': a = m[6] ? parseFloat(a).toFixed(m[6]) : parseFloat(a); break;\n\t\t\t\tcase 'o': a = a.toString(8); break;\n\t\t\t\tcase 's': a = ((a = String(a)) && m[6] ? a.substring(0, m[6]) : a); break;\n\t\t\t\tcase 'u': a = Math.abs(a); break;\n\t\t\t\tcase 'x': a = a.toString(16); break;\n\t\t\t\tcase 'X': a = a.toString(16).toUpperCase(); break;\n\t\t\t}\n\t\t\ta = (/[def]/.test(m[7]) && m[2] && a > 0 ? '+' + a : a);\n\t\t\tc = m[3] ? m[3] == '0' ? '0' : m[3][1] : ' ';\n\t\t\tx = m[5] - String(a).length;\n\t\t\tp = m[5] ? str_repeat(c, x) : '';\n\t\t\to.push(m[4] ? a + p : p + a);\n\t\t}\n\t\telse throw (\"Huh ?!\");\n\t\tf = f.substring(m[0].length);\n\t}\n\treturn o.join('');\n};\n\nmodule.exports = sprintf;\n","var spacing = require('../helpers/spacing');\nvar drawBrace = require('./brace');\nvar drawVoice = require('./voice');\nvar printStaff = require('./staff');\nvar printDebugBox = require('./debug-box');\nvar printStem = require('./print-stem');\nvar nonMusic = require('./non-music');\n\nfunction drawStaffGroup(renderer, params, selectables, lineNumber) {\n\t// We enter this method with renderer.y pointing to the topmost coordinate that we're allowed to draw.\n\t// All of the children that will be drawn have a relative \"pitch\" set, where zero is the first ledger line below the staff.\n\t// renderer.y will be offset at the beginning of each staff by the amount required to make the relative pitch work.\n\t// If there are multiple staves, then renderer.y will be incremented for each new staff.\n\n\tvar colorIndex;\n\n\t// An invisible marker is useful to be able to find where each system starts.\n\t//addInvisibleMarker(renderer, \"abcjs-top-of-system\");\n\n\tvar startY = renderer.y; // So that it can be restored after we're done.\n\t// Set the absolute Y position for each staff here, so the voice drawing below can just use if.\n\tfor (var j = 0; j < params.staffs.length; j++) {\n\t\tvar staff1 = params.staffs[j];\n\t\t//renderer.printHorizontalLine(50, renderer.y, \"start\");\n\t\trenderer.moveY(spacing.STEP, staff1.top);\n\t\tstaff1.absoluteY = renderer.y;\n\t\tif (renderer.showDebug) {\n\t\t\tif (renderer.showDebug.indexOf(\"box\") >= 0 && staff1.voices) {\n\t\t\t\tboxAllElements(renderer, params.voices, staff1.voices);\n\t\t\t}\n\t\t\tif (renderer.showDebug.indexOf(\"grid\") >= 0) {\n\t\t\t\trenderer.paper.dottedLine({ x1: renderer.padding.left, x2: renderer.padding.left + renderer.controller.width, y1: startY, y2: startY, stroke: \"#0000ff\" });\n\t\t\t\tprintDebugBox(renderer,\n\t\t\t\t\t{\n\t\t\t\t\t\tx: renderer.padding.left,\n\t\t\t\t\t\ty: renderer.calcY(staff1.originalTop),\n\t\t\t\t\t\twidth: renderer.controller.width,\n\t\t\t\t\t\theight: renderer.calcY(staff1.originalBottom) - renderer.calcY(staff1.originalTop),\n\t\t\t\t\t\tfill: renderer.foregroundColor,\n\t\t\t\t\t\tstroke: renderer.foregroundColor,\n\t\t\t\t\t\t\"fill-opacity\": 0.1,\n\t\t\t\t\t\t\"stroke-opacity\": 0.1\n\t\t\t\t\t});\n\t\t\t\tcolorIndex = 0;\n\t\t\t\tdebugPrintGridItem(staff1, 'chordHeightAbove');\n\t\t\t\tdebugPrintGridItem(staff1, 'chordHeightBelow');\n\t\t\t\tdebugPrintGridItem(staff1, 'dynamicHeightAbove');\n\t\t\t\tdebugPrintGridItem(staff1, 'dynamicHeightBelow');\n\t\t\t\tdebugPrintGridItem(staff1, 'endingHeightAbove');\n\t\t\t\tdebugPrintGridItem(staff1, 'lyricHeightAbove');\n\t\t\t\tdebugPrintGridItem(staff1, 'lyricHeightBelow');\n\t\t\t\tdebugPrintGridItem(staff1, 'partHeightAbove');\n\t\t\t\tdebugPrintGridItem(staff1, 'tempoHeightAbove');\n\t\t\t\tdebugPrintGridItem(staff1, 'volumeHeightAbove');\n\t\t\t\tdebugPrintGridItem(staff1, 'volumeHeightBelow');\n\t\t\t}\n\t\t}\n\t\trenderer.moveY(spacing.STEP, -staff1.bottom);\n\t\tif (renderer.showDebug) {\n\t\t\tif (renderer.showDebug.indexOf(\"grid\") >= 0) {\n\t\t\t\trenderer.paper.dottedLine({\n\t\t\t\t\tx1: renderer.padding.left,\n\t\t\t\t\tx2: renderer.padding.left + renderer.controller.width,\n\t\t\t\t\ty1: renderer.y,\n\t\t\t\t\ty2: renderer.y,\n\t\t\t\t\tstroke: \"#0000aa\"\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\tvar topLine; // these are to connect multiple staves. We need to remember where they are.\n\tvar bottomLine;\n\n\tvar linePitch = 2;\n\tvar bartop = 0;\n\tfor (var i = 0; i < params.voices.length; i++) {\n\t\tvar staff = params.voices[i].staff;\n\t\tvar tabName = params.voices[i].tabNameInfos;\n\t\trenderer.y = staff.absoluteY;\n\t\trenderer.controller.classes.incrVoice();\n\t\t//renderer.y = staff.y;\n\t\t// offset for starting the counting at middle C\n\t\tif (!params.voices[i].duplicate) {\n\t\t\t//\t\t\trenderer.moveY(spacing.STEP, staff.top);\n\t\t\tif (!topLine) topLine = renderer.calcY(10);\n\t\t\tbottomLine = renderer.calcY(linePitch);\n\t\t\tif (staff.lines !== 0) {\n\t\t\t\tif (staff.linePitch) {\n\t\t\t\t\tlinePitch = staff.linePitch;\n\t\t\t\t}\n\t\t\t\trenderer.controller.classes.newMeasure();\n\t\t\t\tvar lines = printStaff(renderer, params.startx, params.w, staff.lines, staff.linePitch, 0.35);\n\t\t\t\tbottomLine = lines[1];\n\t\t\t\tstaff.bottomLine = bottomLine;\n\t\t\t\tstaff.topLine = lines[0];\n\t\t\t\t// rework bartop when tabs are present with current staff\n\t\t\t\tif (staff.hasTab) {\n\t\t\t\t\t// do not link to staff above (ugly looking)\n\t\t\t\t\tbartop = staff.topLine;\n\t\t\t\t}\n\t\t\t\tif (staff.hasStaff) {\n\t\t\t\t\t// this is a tab\n\t\t\t\t\tbartop = staff.hasStaff.topLine;\n\t\t\t\t\tparams.voices[i].barto = true;\n\t\t\t\t\tparams.voices[i].topLine = topLine;\n\t\t\t\t}\n\n\t\t\t}\n\t\t\tprintBrace(renderer, staff.absoluteY, params.brace, i, selectables);\n\t\t\tprintBrace(renderer, staff.absoluteY, params.bracket, i, selectables);\n\t\t}\n\t\tdrawVoice(renderer, params.voices[i], bartop, selectables, {\n\t\t\ttop: startY,\n\t\t\tzero: renderer.y,\n\t\t\theight: params.height * spacing.STEP\n\t\t});\n\t\tvar tabNameHeight = 0;\n\t\tif (tabName) {\n\t\t\t// print tab infos on staffBottom\n\t\t\tvar r = { rows: [] };\n\t\t\tr.rows.push({ absmove: bottomLine + 2 });\n\t\t\tvar leftMargin = 8;\n\t\t\tr.rows.push({ left: params.startx + leftMargin, text: tabName.name, font: 'tablabelfont', klass: 'text instrument-name', anchor: 'start' });\n\t\t\tr.rows.push({ move: tabName.textSize.height });\n\t\t\tnonMusic(renderer, r);\n\t\t\ttabNameHeight = tabName.textSize.height;\n\t\t}\n\n\t\trenderer.controller.classes.newMeasure();\n\t\tif (!params.voices[i].duplicate) {\n\t\t\tbartop = renderer.calcY(2 + tabNameHeight); // This connects the bar lines between two different staves.\n\t\t\t//\t\t\tif (staff.bottom < 0)\n\t\t\t//\t\t\t\trenderer.moveY(spacing.STEP, -staff.bottom);\n\t\t}\n\t}\n\trenderer.controller.classes.newMeasure();\n\n\t// connect all the staves together with a vertical line\n\tvar staffSize = params.staffs.length;\n\tif (staffSize > 1) {\n\t\ttopLine = params.staffs[0].topLine;\n\t\tbottomLine = params.staffs[staffSize - 1].bottomLine;\n\t\tprintStem(renderer, params.startx, 0.6, topLine, bottomLine, null);\n\t}\n\trenderer.y = startY;\n\n\tfunction debugPrintGridItem(staff, key) {\n\t\tvar colors = [\"rgb(207,27,36)\", \"rgb(168,214,80)\", \"rgb(110,161,224)\", \"rgb(191,119,218)\", \"rgb(195,30,151)\",\n\t\t\t\"rgb(31,170,177)\", \"rgb(220,166,142)\"];\n\t\tif (staff.positionY && staff.positionY[key]) {\n\t\t\tvar height = staff.specialY[key] * spacing.STEP;\n\t\t\tif (key === \"chordHeightAbove\" && staff.specialY.chordLines && staff.specialY.chordLines.above)\n\t\t\t\theight *= staff.specialY.chordLines.above;\n\t\t\tif (key === \"chordHeightBelow\" && staff.specialY.chordLines && staff.specialY.chordLines.below)\n\t\t\t\theight *= staff.specialY.chordLines.below;\n\t\t\tprintDebugBox(renderer,\n\t\t\t\t{\n\t\t\t\t\tx: renderer.padding.left,\n\t\t\t\t\ty: renderer.calcY(staff.positionY[key]),\n\t\t\t\t\twidth: renderer.controller.width,\n\t\t\t\t\theight: height,\n\t\t\t\t\tfill: colors[colorIndex],\n\t\t\t\t\tstroke: colors[colorIndex],\n\t\t\t\t\t\"fill-opacity\": 0.4,\n\t\t\t\t\t\"stroke-opacity\": 0.4\n\t\t\t\t},\n\t\t\t\tkey.substr(0, 4));\n\t\t\tcolorIndex += 1; if (colorIndex > 6) colorIndex = 0;\n\t\t}\n\t}\n}\n\nfunction printBrace(renderer, absoluteY, brace, index, selectables) {\n\tif (brace) {\n\t\tfor (var i = 0; i < brace.length; i++) {\n\t\t\tif (brace[i].isStartVoice(index)) {\n\t\t\t\tbrace[i].startY = absoluteY - spacing.STEP * 10;\n\t\t\t\tbrace[i].elemset = drawBrace(renderer, brace[i], selectables);\n\t\t\t}\n\t\t}\n\t}\n}\n\n// function addInvisibleMarker(renderer, className) {\n// \tvar y = Math.round(renderer.y);\n// \trenderer.paper.pathToBack({path:\"M 0 \" + y + \" L 0 0\", stroke:\"none\", fill:\"none\", \"stroke-opacity\": 0, \"fill-opacity\": 0, 'class': renderer.controller.classes.generate(className), 'data-vertical': y });\n// }\n\nfunction boxAllElements(renderer, voices, which) {\n\tfor (var i = 0; i < which.length; i++) {\n\t\tvar children = voices[which[i]].children;\n\t\tfor (var j = 0; j < children.length; j++) {\n\t\t\tvar elem = children[j];\n\t\t\tvar coords = elem.getFixedCoords();\n\t\t\tif (elem.invisible || coords.t === undefined || coords.b === undefined)\n\t\t\t\tcontinue;\n\t\t\tvar height = (coords.t - coords.b) * spacing.STEP;\n\t\t\tprintDebugBox(renderer,\n\t\t\t\t{\n\t\t\t\t\tx: coords.x,\n\t\t\t\t\ty: renderer.calcY(coords.t),\n\t\t\t\t\twidth: coords.w,\n\t\t\t\t\theight: height,\n\t\t\t\t\tfill: \"#88e888\",\n\t\t\t\t\t\"fill-opacity\": 0.4,\n\t\t\t\t\tstroke: \"#4aa93d\",\n\t\t\t\t\t\"stroke-opacity\": 0.8\n\t\t\t\t});\n\n\t\t\tfor (var k = 0; k < elem.children.length; k++) {\n\t\t\t\tvar relElem = elem.children[k];\n\t\t\t\tvar chord = relElem.getChordDim();\n\t\t\t\tif (chord) {\n\t\t\t\t\tvar y = renderer.calcY(relElem.pitch);\n\t\t\t\t\ty += relElem.dim.font.size * relElem.getLane();\n\t\t\t\t\tprintDebugBox(renderer,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tx: chord.left,\n\t\t\t\t\t\t\ty: y,\n\t\t\t\t\t\t\twidth: chord.right - chord.left,\n\t\t\t\t\t\t\theight: relElem.dim.font.size,\n\t\t\t\t\t\t\tfill: \"none\",\n\t\t\t\t\t\t\tstroke: \"#4aa93d\",\n\t\t\t\t\t\t\t\"stroke-opacity\": 0.8\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nmodule.exports = drawStaffGroup;\n","var printLine = require('./print-line');\n\nfunction printStaffLine(renderer, x1, x2, pitch, klass, name, dy) {\n\tvar y = renderer.calcY(pitch);\n\treturn printLine(renderer, x1, x2, y, klass, name, dy);\n}\n\nmodule.exports = printStaffLine;\n\n","var printStaffLine = require('./staff-line');\n\nfunction printStaff(renderer, startx, endx, numLines, linePitch, dy) {\n\tvar klass = \"abcjs-top-line\";\n\tvar pitch = 2;\n\tif (linePitch) {\n\t\tpitch = linePitch;\n\t}\n\trenderer.paper.openGroup({ prepend: true, klass: renderer.controller.classes.generate(\"abcjs-staff\") });\n\t// If there is one line, it is the B line. Otherwise, the bottom line is the E line.\n\tvar firstYLine = 0;\n\tvar lastYLine = 0;\n\tif (numLines === 1) {\n\t\tprintStaffLine(renderer, startx, endx, 6, klass, null, dy + renderer.lineThickness);\n\t\tfirstYLine = renderer.calcY(10);\n\t\tlastYLine = renderer.calcY(2);\n\t} else {\n\n\t\tfor (var i = numLines - 1; i >= 0; i--) {\n\t\t\tvar curpitch = (i + 1) * pitch;\n\t\t\tlastYLine = renderer.calcY(curpitch);\n\t\t\tif (firstYLine === 0) {\n\t\t\t\tfirstYLine = lastYLine;\n\t\t\t}\n\t\t\tprintStaffLine(renderer, startx, endx, curpitch, klass, null, dy + renderer.lineThickness);\n\t\t\tklass = undefined;\n\t\t}\n\t}\n\trenderer.paper.closeGroup();\n\treturn [firstYLine, lastYLine];\n}\n\nmodule.exports = printStaff;\n","var drawRelativeElement = require('./relative');\nvar renderText = require('./text');\n\nfunction drawTempo(renderer, params) {\n\tvar x = params.x;\n\tif (params.pitch === undefined)\n\t\twindow.console.error(\"Tempo Element y-coordinate not set.\");\n\n\t//var tempoGroup;\n\tparams.tempo.el_type = \"tempo\";\n\t//\trenderer.wrapInAbsElem(params.tempo, \"abcjs-tempo\", function () {\n\t//renderer.paper.openGroup({klass: renderer.controller.classes.generate(\"tempo wha\")});\n\t// The text is aligned with extra room for descenders but numbers look like they are a little too high, so bump it a little.\n\tvar descenderHeight = 2;\n\tvar y = renderer.calcY(params.pitch) + 2;\n\tvar text;\n\tvar size;\n\tif (params.tempo.preString) {\n\t\ttext = renderText(renderer, { x: x, y: y, text: params.tempo.preString, type: 'tempofont', klass: 'abcjs-tempo', anchor: \"start\", noClass: true, name: \"pre\" }, true);\n\t\tsize = renderer.controller.getTextSize.calc(params.tempo.preString, 'tempofont', 'tempo', text);\n\t\tvar preWidth = size.width;\n\t\tvar charWidth = preWidth / params.tempo.preString.length; // Just get some average number to increase the spacing.\n\t\tx += preWidth + charWidth;\n\t}\n\tif (params.note) {\n\t\tparams.note.setX(x);\n\t\tfor (var i = 0; i < params.note.children.length; i++)\n\t\t\tdrawRelativeElement(renderer, params.note.children[i], x);\n\t\tx += (params.note.w + 5);\n\t\tvar str = \"= \" + params.tempo.bpm;\n\t\ttext = renderText(renderer, { x: x, y: y, text: str, type: 'tempofont', klass: 'abcjs-tempo', anchor: \"start\", noClass: true, name: \"beats\" });\n\t\tsize = renderer.controller.getTextSize.calc(str, 'tempofont', 'tempo', text);\n\t\tvar postWidth = size.width;\n\t\tvar charWidth2 = postWidth / str.length; // Just get some average number to increase the spacing.\n\t\tx += postWidth + charWidth2;\n\t}\n\tif (params.tempo.postString) {\n\t\trenderText(renderer, { x: x, y: y, text: params.tempo.postString, type: 'tempofont', klass: 'abcjs-tempo', anchor: \"start\", noClass: true, name: \"post\" }, true);\n\t}\n\t//tempoGroup = renderer.paper.closeGroup();\n\t//\t});\n\t//return [tempoGroup];\n}\n\nmodule.exports = drawTempo;\n","var roundNumber = require(\"./round-number\");\n\nfunction renderText(renderer, params, alreadyInGroup) {\n\tvar y = params.y;\n\n\t// TODO-PER: Probably need to merge the regular text and rich text better. At the least, rich text loses the font box.\n\tif (params.phrases) {\n\t\t//richTextLine = function (phrases, x, y, klass, anchor, target)\n\t\tvar elem = renderer.paper.richTextLine(params.phrases, params.x, params.y, params.klass, params.anchor);\n\t\treturn elem;\n\t}\n\n\tif (params.lane) {\n\t\tvar laneMargin = params.dim.font.size * 0.25;\n\t\ty += (params.dim.font.size + laneMargin) * params.lane;\n\t}\n\n\tvar hash;\n\tif (params.dim) {\n\t\thash = params.dim;\n\t\thash.attr.class = params.klass;\n\t} else\n\t\thash = renderer.controller.getFontAndAttr.calc(params.type, params.klass);\n\tif (params.anchor)\n\t\thash.attr[\"text-anchor\"] = params.anchor;\n\tif (params['dominant-baseline'])\n\t\thash.attr[\"dominant-baseline\"] = params['dominant-baseline'];\n\thash.attr.x = params.x;\n\thash.attr.y = y;\n\tif (!params.centerVertically)\n\t\thash.attr.y += hash.font.size;\n\tif (params.type === 'debugfont') {\n\t\tconsole.log(\"Debug msg: \" + params.text);\n\t\thash.attr.stroke = \"#ff0000\";\n\t}\n\tif (params.cursor) {\n\t\thash.attr.cursor = params.cursor;\n\t}\n\n\tvar text = params.text.replace(/\\n\\n/g, \"\\n \\n\");\n\ttext = text.replace(/^\\n/, \"\\xA0\\n\");\n\n\tif (hash.font.box) {\n\t\tif (!alreadyInGroup)\n\t\t\trenderer.paper.openGroup({ klass: hash.attr['class'], fill: renderer.foregroundColor, \"data-name\": params.name });\n\t\tif (hash.attr[\"text-anchor\"] === \"end\") {\n\t\t\thash.attr.x -= hash.font.padding;\n\t\t} else if (hash.attr[\"text-anchor\"] === \"start\") {\n\t\t\thash.attr.x += hash.font.padding;\n\t\t}\n\t\thash.attr.y += hash.font.padding;\n\t\tdelete hash.attr['class'];\n\t}\n\tif (params.noClass)\n\t\tdelete hash.attr['class'];\n\thash.attr.x = roundNumber(hash.attr.x);\n\thash.attr.y = roundNumber(hash.attr.y);\n\tif (params.name)\n\t\thash.attr[\"data-name\"] = params.name;\n\tvar elem = renderer.paper.text(text, hash.attr);\n\tif (hash.font.box) {\n\t\tvar size = elem.getBBox();\n\n\t\tvar delta = 0;\n\t\tif (hash.attr[\"text-anchor\"] === \"middle\") {\n\t\t\tdelta = size.width / 2 + hash.font.padding;\n\t\t} else if (hash.attr[\"text-anchor\"] === \"end\") {\n\t\t\tdelta = size.width + hash.font.padding * 2;\n\t\t}\n\t\tvar deltaY = 0;\n\t\tif (params.centerVertically) {\n\t\t\tdeltaY = size.height - hash.font.padding;\n\t\t}\n\t\trenderer.paper.rect({ \"data-name\": \"box\", x: Math.round(params.x - delta), y: Math.round(y - deltaY), width: Math.round(size.width + hash.font.padding * 2), height: Math.round(size.height + hash.font.padding * 2) });\n\t\tif (!alreadyInGroup)\n\t\t\telem = renderer.paper.closeGroup();\n\t}\n\treturn elem;\n}\n\nmodule.exports = renderText;\n","var sprintf = require('./sprintf');\nvar roundNumber = require(\"./round-number\");\n\nfunction drawTie(renderer, params, linestartx, lineendx, selectables) {\n\tlayout(params, linestartx, lineendx);\n\n\tvar klass = '';\n\tif (params.anchor1) {\n\t\tklass += 'abcjs-start-m' + params.anchor1.parent.counters.measure + '-n' + params.anchor1.parent.counters.note;\n\t} else\n\t\tklass += 'abcjs-start-edge';\n\tif (params.anchor2) {\n\t\tklass += ' abcjs-end-m' + params.anchor2.parent.counters.measure + '-n' + params.anchor2.parent.counters.note;\n\t} else\n\t\tklass += ' abcjs-end-edge';\n\tif (params.hint)\n\t\tklass = \"abcjs-hint\";\n\tvar fudgeY = params.fixedY ? 1.5 : 0; // TODO-PER: This just compensates for drawArc, which contains too much knowledge of ties and slurs.\n\tvar el = drawArc(renderer, params.startX, params.endX, params.startY + fudgeY, params.endY + fudgeY, params.above, klass, params.isTie, params.dotted);\n\tvar startChar = -1\n\t// This gets the start and end points of the contents of the slur. We assume that the parenthesis are just to the outside of that.\n\tif (params.anchor1 && !params.isTie)\n\t\tstartChar = params.anchor1.parent.abcelem.startChar - 1\n\tvar endChar = -1\n\tif (params.anchor2 && !params.isTie)\n\t\tendChar = params.anchor2.parent.abcelem.endChar + 1\n\n\tselectables.wrapSvgEl({ el_type: \"slur\", startChar: startChar, endChar: endChar }, el);\n\treturn [el];\n}\n\n// TODO-PER: I think params part should have been done earlier in the layout pass.\nvar layout = function (params, lineStartX, lineEndX) {\n\t// We now have all of the input variables set, so we can figure out the start and ending x,y coordinates, and finalize the direction of the arc.\n\n\t// Ties and slurs are handled a little differently, so do calculations for them separately.\n\tif (!params.anchor1 || !params.anchor2)\n\t\tparams.isTie = true; // if the slur goes off the end of the line, then draw it like a tie\n\telse if (params.anchor1.pitch === params.anchor2.pitch && params.internalNotes.length === 0)\n\t\tparams.isTie = true;\n\telse\n\t\tparams.isTie = false;\n\n\tif (params.isTie) {\n\t\tparams.calcTieDirection();\n\t\tparams.calcX(lineStartX, lineEndX);\n\t\tparams.calcTieY();\n\n\t} else {\n\t\tparams.calcSlurDirection();\n\t\tparams.calcX(lineStartX, lineEndX);\n\t\tparams.calcSlurY();\n\t}\n\tparams.avoidCollisionAbove();\n};\n\nvar drawArc = function (renderer, x1, x2, pitch1, pitch2, above, klass, isTie, dotted) {\n\t// If it is a tie vs. a slur, draw it shallower.\n\tvar spacing = isTie ? 1.2 : 1.5;\n\n\tx1 = roundNumber(x1 + 6);\n\tx2 = roundNumber(x2 + 4);\n\tpitch1 = pitch1 + ((above) ? spacing : -spacing);\n\tpitch2 = pitch2 + ((above) ? spacing : -spacing);\n\tvar y1 = roundNumber(renderer.calcY(pitch1));\n\tvar y2 = roundNumber(renderer.calcY(pitch2));\n\n\t//unit direction vector\n\tvar dx = x2 - x1;\n\tvar dy = y2 - y1;\n\tvar norm = Math.sqrt(dx * dx + dy * dy);\n\tvar ux = dx / norm;\n\tvar uy = dy / norm;\n\n\tvar flatten = norm / 3.5;\n\tvar maxFlatten = isTie ? 10 : 25; // If it is a tie vs. a slur, draw it shallower.\n\tvar curve = ((above) ? -1 : 1) * Math.min(maxFlatten, Math.max(4, flatten));\n\n\tvar controlx1 = roundNumber(x1 + flatten * ux - curve * uy);\n\tvar controly1 = roundNumber(y1 + flatten * uy + curve * ux);\n\tvar controlx2 = roundNumber(x2 - flatten * ux - curve * uy);\n\tvar controly2 = roundNumber(y2 - flatten * uy + curve * ux);\n\tvar thickness = 2;\n\tif (klass)\n\t\tklass += ' slur';\n\telse\n\t\tklass = 'slur';\n\tklass += isTie ? ' tie' : ' legato';\n\tvar ret;\n\tif (dotted) {\n\t\tklass += ' dotted';\n\t\tvar pathString2 = sprintf(\"M %f %f C %f %f %f %f %f %f\", x1, y1,\n\t\t\tcontrolx1, controly1, controlx2, controly2, x2, y2);\n\t\tret = renderer.paper.path({ path: pathString2, stroke: renderer.foregroundColor, fill: \"none\", 'stroke-dasharray': \"5 5\", 'class': renderer.controller.classes.generate(klass), \"data-name\": isTie ? \"tie\" : \"slur\" });\n\t} else {\n\t\tvar pathString = sprintf(\"M %f %f C %f %f %f %f %f %f C %f %f %f %f %f %f z\", x1, y1,\n\t\t\tcontrolx1, controly1, controlx2, controly2, x2, y2,\n\t\t\troundNumber(controlx2 - thickness * uy), roundNumber(controly2 + thickness * ux), roundNumber(controlx1 - thickness * uy), roundNumber(controly1 + thickness * ux), x1, y1);\n\t\tret = renderer.paper.path({ path: pathString, stroke: \"none\", fill: renderer.foregroundColor, 'class': renderer.controller.classes.generate(klass), \"data-name\": isTie ? \"tie\" : \"slur\" });\n\t}\n\n\treturn ret;\n};\n\nmodule.exports = drawTie;\n","var sprintf = require('./sprintf');\nvar renderText = require('./text');\nvar printPath = require('./print-path');\nvar roundNumber = require(\"./round-number\");\n\nfunction drawTriplet(renderer, params, selectables) {\n\trenderer.paper.openGroup({ klass: renderer.controller.classes.generate('triplet ' + params.durationClass), \"data-name\": \"triplet\" });\n\tif (!params.hasBeam) {\n\t\tdrawBracket(renderer, params.anchor1.x, params.startNote, params.anchor2.x + params.anchor2.w, params.endNote);\n\t}\n\t// HACK: adjust the position of \"3\". It is too high in all cases so we fudge it by subtracting 1 here.\n\trenderText(renderer, { x: params.xTextPos, y: renderer.calcY(params.yTextPos - 1), text: \"\" + params.number, type: 'tripletfont', anchor: \"middle\", centerVertically: true, noClass: true, name: \"\" + params.number }, true);\n\tvar g = renderer.paper.closeGroup();\n\tselectables.wrapSvgEl({ el_type: \"triplet\", startChar: -1, endChar: -1 }, g);\n\treturn g;\n}\n\nfunction drawLine(l, t, r, b) {\n\treturn sprintf(\"M %f %f L %f %f\", roundNumber(l), roundNumber(t), roundNumber(r), roundNumber(b));\n}\n\nfunction drawBracket(renderer, x1, y1, x2, y2) {\n\ty1 = renderer.calcY(y1);\n\ty2 = renderer.calcY(y2);\n\tvar bracketHeight = 5;\n\n\t// Draw vertical lines at the beginning and end\n\tvar pathString = \"\";\n\tpathString += drawLine(x1, y1, x1, y1 + bracketHeight);\n\tpathString += drawLine(x2, y2, x2, y2 + bracketHeight);\n\n\t// figure out midpoints to draw the broken line.\n\tvar midX = x1 + (x2 - x1) / 2;\n\t//var midY = y1 + (y2-y1)/2;\n\tvar gapWidth = 8;\n\tvar slope = (y2 - y1) / (x2 - x1);\n\tvar leftEndX = midX - gapWidth;\n\tvar leftEndY = y1 + (leftEndX - x1) * slope;\n\tpathString += drawLine(x1, y1, leftEndX, leftEndY);\n\tvar rightStartX = midX + gapWidth;\n\tvar rightStartY = y1 + (rightStartX - x1) * slope;\n\tpathString += drawLine(rightStartX, rightStartY, x2, y2);\n\tprintPath(renderer, { path: pathString, stroke: renderer.foregroundColor, \"data-name\": \"triplet-bracket\" });\n}\n\nmodule.exports = drawTriplet;\n","var drawGlissando = require('./glissando');\nvar drawCrescendo = require('./crescendo');\nvar drawDynamics = require('./dynamics');\nvar drawTriplet = require('./triplet');\nvar drawEnding = require('./ending');\nvar drawTie = require('./tie');\nvar drawBeam = require('./beam');\nvar renderText = require('./text');\nvar drawAbsolute = require('./absolute');\n\nfunction drawVoice(renderer, params, bartop, selectables, staffPos) {\n\tvar width = params.w - 1;\n\trenderer.staffbottom = params.staff.bottom;\n\tvar saveColor = renderer.foregroundColor\n\tif (params.color)\n\t\trenderer.foregroundColor = params.color\n\n\tif (params.header) { // print voice name\n\t\tvar textEl = renderText(renderer, { x: renderer.padding.left, y: renderer.calcY(params.headerPosition), text: params.header, type: 'voicefont', klass: 'staff-extra voice-name', anchor: 'start', centerVertically: true, name: \"voice-name\" }, true);\n\t\tselectables.wrapSvgEl({ el_type: \"voiceName\", startChar: -1, endChar: -1, text: params.header }, textEl);\n\t}\n\n\tvar i;\n\tvar child;\n\tvar foundNote = false;\n\tfor (i = 0; i < params.children.length; i++) {\n\t\tchild = params.children[i];\n\t\tif (child.type === 'note' || child.type === 'rest')\n\t\t\tfoundNote = true;\n\t\tvar justInitializedMeasureNumber = false;\n\t\tif (child.type !== 'staff-extra' && !renderer.controller.classes.isInMeasure()) {\n\t\t\trenderer.controller.classes.startMeasure();\n\t\t\tjustInitializedMeasureNumber = true;\n\t\t}\n\t\tif (params.staff.isTabStaff) {\n\t\t\tchild.invisible = false;\n\t\t\tif (child.type == 'bar') {\n\t\t\t\tif (child.abcelem.lastBar) {\n\t\t\t\t\tbartop = params.topLine;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdrawAbsolute(renderer, child, (params.barto || i === params.children.length - 1) ? bartop : 0, selectables, staffPos);\n\n\t\tif (child.type === 'note' || isNonSpacerRest(child))\n\t\t\trenderer.controller.classes.incrNote();\n\t\tif (child.type === 'bar' && !justInitializedMeasureNumber && foundNote) {\n\t\t\trenderer.controller.classes.incrMeasure();\n\t\t}\n\t}\n\n\trenderer.controller.classes.startMeasure();\n\n\tfor (i = 0; i < params.beams.length; i++) {\n\t\tvar beam = params.beams[i];\n\t\tif (beam === 'bar') {\n\t\t\trenderer.controller.classes.incrMeasure();\n\t\t} else\n\t\t\tdrawBeam(renderer, beam, selectables); // beams must be drawn first for proper printing of triplets, slurs and ties.\n\t}\n\n\trenderer.controller.classes.startMeasure();\n\tfor (i = 0; i < params.otherchildren.length; i++) {\n\t\tchild = params.otherchildren[i];\n\t\tif (child === 'bar') {\n\t\t\trenderer.controller.classes.incrMeasure();\n\t\t} else {\n\t\t\tswitch (child.type) {\n\t\t\t\tcase \"GlissandoElem\":\n\t\t\t\t\tchild.elemset = drawGlissando(renderer, child, selectables);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"CrescendoElem\":\n\t\t\t\t\tchild.elemset = drawCrescendo(renderer, child, selectables);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"DynamicDecoration\":\n\t\t\t\t\tchild.elemset = drawDynamics(renderer, child, selectables);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"TripletElem\":\n\t\t\t\t\tdrawTriplet(renderer, child, selectables);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"EndingElem\":\n\t\t\t\t\tchild.elemset = drawEnding(renderer, child, params.startx + 10, width, selectables);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"TieElem\":\n\t\t\t\t\tchild.elemset = drawTie(renderer, child, params.startx + 10, width, selectables);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.log(child);\n\t\t\t\t\tdrawAbsolute(renderer, child, params.startx + 10, width, selectables, staffPos);\n\t\t\t}\n\t\t}\n\t}\n\trenderer.foregroundColor = saveColor\n\n}\n\nfunction isNonSpacerRest(elem) {\n\tif (elem.type !== 'rest')\n\t\treturn false;\n\tif (elem.abcelem && elem.abcelem.rest && elem.abcelem.rest.type !== 'spacer')\n\t\treturn true;\n\treturn false;\n}\n\nmodule.exports = drawVoice;\n","// abc_engraver_controller.js: Controls the engraving process of an ABCJS abstract syntax tree as produced by ABCJS/parse\n\n/*global Math */\n\nvar spacing = require('./helpers/spacing');\nvar AbstractEngraver = require('./creation/abstract-engraver');\nvar Renderer = require('./renderer');\nvar FreeText = require('./creation/elements/free-text');\nvar Separator = require('./creation/elements/separator');\nvar Subtitle = require('./creation/elements/subtitle');\nvar TopText = require('./creation/elements/top-text');\nvar BottomText = require('./creation/elements/bottom-text');\nvar setupSelection = require('./interactive/selection');\nvar layout = require('./layout/layout');\nvar Classes = require('./helpers/classes');\nvar GetFontAndAttr = require('./helpers/get-font-and-attr');\nvar GetTextSize = require('./helpers/get-text-size');\nvar draw = require('./draw/draw');\nvar tablatures = require('../api/abc_tablatures');\nvar findSelectableElement = require('./interactive/find-selectable-element');\n\n/**\n * @class\n * Controls the engraving process, from ABCJS Abstract Syntax Tree (ABCJS AST) to rendered score sheet\n *\n * Call engraveABC to run the process. This creates a graphelems ABCJS Abstract Engraving Structure (ABCJS AES) that can be accessed through this.staffgroups\n * this data structure is first laid out (giving the graphelems x and y coordinates) and then drawn onto the renderer\n * each ABCJS AES represents a single staffgroup - all elements that are not in a staffgroup are rendered directly by the controller\n *\n * elements in ABCJS AES know their \"source data\" in the ABCJS AST, and their \"target shape\"\n * in the renderer for highlighting purposes\n *\n */\nvar EngraverController = function (paper, params) {\n\tparams = params || {};\n\tthis.findSelectableElement = findSelectableElement;\n\tthis.oneSvgPerLine = params.oneSvgPerLine;\n\tthis.selectionColor = params.selectionColor;\n\tthis.dragColor = params.dragColor ? params.dragColor : params.selectionColor;\n\tthis.dragging = !!params.dragging;\n\tthis.selectTypes = params.selectTypes;\n\tthis.responsive = params.responsive;\n\tthis.space = 3 * spacing.SPACE;\n\tthis.initialClef = params.initialClef;\n\tthis.timeBasedLayout = params.timeBasedLayout;\n\tthis.expandToWidest = !!params.expandToWidest;\n\tthis.scale = params.scale ? parseFloat(params.scale) : 0;\n\tthis.classes = new Classes({ shouldAddClasses: params.add_classes });\n\tif (!(this.scale > 0.1))\n\t\tthis.scale = undefined;\n\n\tif (params.staffwidth) {\n\t\t// Note: Normally all measurements to the engraver are in POINTS. However, if a person is formatting for the\n\t\t// screen and directly inputting the width, then it is more logical to have the measurement in pixels.\n\t\tthis.staffwidthScreen = params.staffwidth;\n\t\tthis.staffwidthPrint = params.staffwidth;\n\t} else {\n\t\tthis.staffwidthScreen = 740; // TODO-PER: Not sure where this number comes from, but this is how it's always been.\n\t\tthis.staffwidthPrint = 680; // The number of pixels in 8.5\", after 1cm of margin has been removed.\n\t}\n\tthis.listeners = [];\n\tif (params.clickListener)\n\t\tthis.addSelectListener(params.clickListener);\n\n\tthis.renderer = new Renderer(paper);\n\tthis.renderer.setPaddingOverride(params);\n\tif (params.showDebug)\n\t\tthis.renderer.showDebug = params.showDebug;\n\tif (params.jazzchords)\n\t\tthis.jazzchords = params.jazzchords;\n\tif (params.accentAbove)\n\t\tthis.accentAbove = params.accentAbove;\n\tif (params.germanAlphabet)\n\t\tthis.germanAlphabet = params.germanAlphabet;\n\tif (params.lineThickness)\n\t\tthis.lineThickness = params.lineThickness;\n\tthis.renderer.controller = this; // TODO-GD needed for highlighting\n\tthis.renderer.foregroundColor = params.foregroundColor ? params.foregroundColor : \"currentColor\";\n\tif (params.ariaLabel !== undefined)\n\t\tthis.renderer.ariaLabel = params.ariaLabel;\n\tthis.renderer.minPadding = params.minPadding ? params.minPadding : 0;\n\n\tthis.reset();\n};\n\nEngraverController.prototype.reset = function () {\n\tthis.selected = [];\n\tthis.staffgroups = [];\n\tif (this.engraver)\n\t\tthis.engraver.reset();\n\tthis.engraver = null;\n\tthis.renderer.reset();\n\tthis.dragTarget = null;\n\tthis.dragIndex = -1;\n\tthis.dragMouseStart = { x: -1, y: -1 };\n\tthis.dragYStep = 0;\n\tif (this.lineThickness)\n\t\tthis.renderer.setLineThickness(this.lineThickness)\n};\n\n/**\n * run the engraving process\n */\nEngraverController.prototype.engraveABC = function (abctunes, tuneNumber, lineOffset) {\n\tif (abctunes[0] === undefined) {\n\t\tabctunes = [abctunes];\n\t}\n\tthis.reset();\n\n\tfor (var i = 0; i < abctunes.length; i++) {\n\t\tif (tuneNumber === undefined)\n\t\t\ttuneNumber = i;\n\t\tthis.getFontAndAttr = new GetFontAndAttr(abctunes[i].formatting, this.classes);\n\t\tthis.getTextSize = new GetTextSize(this.getFontAndAttr, this.renderer.paper);\n\t\tthis.engraveTune(abctunes[i], tuneNumber, lineOffset);\n\t}\n};\n\n/**\n * Some of the items on the page are not scaled, so adjust them in the opposite direction of scaling to cancel out the scaling.\n */\nEngraverController.prototype.adjustNonScaledItems = function (scale) {\n\tthis.width /= scale;\n\tthis.renderer.adjustNonScaledItems(scale);\n};\n\nEngraverController.prototype.getMeasureWidths = function (abcTune) {\n\tthis.reset();\n\tthis.getFontAndAttr = new GetFontAndAttr(abcTune.formatting, this.classes);\n\tthis.getTextSize = new GetTextSize(this.getFontAndAttr, this.renderer.paper);\n\tvar origJazzChords = this.jazzchords\n\n\tthis.setupTune(abcTune, 0);\n\tthis.constructTuneElements(abcTune);\n\t// layout() sets the x-coordinate of the abcTune element here:\n\t// abcTune.lines[0].staffGroup.voices[0].children[0].x\n\tlayout(this.renderer, abcTune, 0, this.space, this.timeBasedLayout);\n\n\tvar ret = [];\n\tvar section;\n\n\tvar needNewSection = true;\n\tfor (var i = 0; i < abcTune.lines.length; i++) {\n\t\tvar abcLine = abcTune.lines[i];\n\t\tif (abcLine.staff) {\n\t\t\tif (needNewSection) {\n\t\t\t\tsection = {\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tmeasureWidths: [],\n\t\t\t\t\t//height: this.renderer.padding.top + this.renderer.spacing.music + this.renderer.padding.bottom + 24, // the 24 is the empirical value added to the bottom of all tunes.\n\t\t\t\t\ttotal: 0\n\t\t\t\t};\n\t\t\t\tret.push(section);\n\t\t\t\tneedNewSection = false;\n\t\t\t}\n\t\t\t// At this point, the voices are laid out so that the bar lines are even with each other. So we just need to get the placement of the first voice.\n\t\t\tif (abcLine.staffGroup.voices.length > 0) {\n\t\t\t\tvar voice = abcLine.staffGroup.voices[0];\n\t\t\t\tvar foundNotStaffExtra = false;\n\t\t\t\tvar lastXPosition = 0;\n\t\t\t\tfor (var k = 0; k < voice.children.length; k++) {\n\t\t\t\t\tvar child = voice.children[k];\n\t\t\t\t\tif (!foundNotStaffExtra && !child.isClef && !child.isKeySig) {\n\t\t\t\t\t\tfoundNotStaffExtra = true;\n\t\t\t\t\t\tsection.left = child.x;\n\t\t\t\t\t\tlastXPosition = child.x;\n\t\t\t\t\t}\n\t\t\t\t\tif (child.type === 'bar') {\n\t\t\t\t\t\tsection.measureWidths.push(child.x - lastXPosition);\n\t\t\t\t\t\tsection.total += (child.x - lastXPosition);\n\t\t\t\t\t\tlastXPosition = child.x;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t//section.height += calcHeight(abcLine.staffGroup) * spacing.STEP;\n\t\t} else\n\t\t\tneedNewSection = true;\n\t}\n\tthis.jazzchords = origJazzChords\n\treturn ret;\n};\n\nEngraverController.prototype.setupTune = function (abcTune, tuneNumber) {\n\tthis.classes.reset();\n\n\tif (abcTune.formatting.jazzchords !== undefined)\n\t\tthis.jazzchords = abcTune.formatting.jazzchords;\n\tif (abcTune.formatting.accentAbove !== undefined)\n\t\tthis.accentAbove = abcTune.formatting.accentAbove;\n\n\tthis.renderer.newTune(abcTune);\n\tthis.engraver = new AbstractEngraver(this.getTextSize, tuneNumber, {\n\t\tbagpipes: abcTune.formatting.bagpipes,\n\t\tflatbeams: abcTune.formatting.flatbeams,\n\t\tgraceSlurs: abcTune.formatting.graceSlurs !== false, // undefined is the default, which is true\n\t\tpercmap: abcTune.formatting.percmap,\n\t\tinitialClef: this.initialClef,\n\t\tjazzchords: this.jazzchords,\n\t\ttimeBasedLayout: this.timeBasedLayout,\n\t\taccentAbove: this.accentAbove,\n\t\tgermanAlphabet: this.germanAlphabet\n\t});\n\tthis.engraver.setStemHeight(this.renderer.spacing.stemHeight);\n\tthis.engraver.measureLength = abcTune.getMeterFraction().num / abcTune.getMeterFraction().den;\n\tif (abcTune.formatting.staffwidth) {\n\t\tthis.width = abcTune.formatting.staffwidth * 1.33; // The width is expressed in pt; convert to px.\n\t} else {\n\t\tthis.width = this.renderer.isPrint ? this.staffwidthPrint : this.staffwidthScreen;\n\t}\n\n\tvar scale = abcTune.formatting.scale ? abcTune.formatting.scale : this.scale;\n\tif (this.responsive === \"resize\") // The resizing will mess with the scaling, so just don't do it explicitly.\n\t\tscale = undefined;\n\tif (scale === undefined) scale = this.renderer.isPrint ? 0.75 : 1;\n\tthis.adjustNonScaledItems(scale);\n\treturn scale;\n};\n\nEngraverController.prototype.constructTuneElements = function (abcTune) {\n\tabcTune.topText = new TopText(abcTune.metaText, abcTune.metaTextInfo, abcTune.formatting, abcTune.lines, this.width, this.renderer.isPrint, this.renderer.padding.left, this.renderer.spacing, this.classes.shouldAddClasses, this.getTextSize);\n\n\t// Generate the raw staff line data\n\tvar i;\n\tvar abcLine;\n\tvar hasPrintedTempo = false;\n\tvar hasSeenNonSubtitle = false;\n\tfor (i = 0; i < abcTune.lines.length; i++) {\n\t\tabcLine = abcTune.lines[i];\n\t\tif (abcLine.staff) {\n\t\t\thasSeenNonSubtitle = true;\n\t\t\tabcLine.staffGroup = this.engraver.createABCLine(abcLine.staff, !hasPrintedTempo ? abcTune.metaText.tempo : null, i);\n\t\t\thasPrintedTempo = true;\n\t\t} else if (abcLine.subtitle) {\n\t\t\t// If the subtitle is at the top, then it was already accounted for. So skip all subtitles until the first non-subtitle line.\n\t\t\tif (hasSeenNonSubtitle) {\n\t\t\t\tvar center = this.width / 2 + this.renderer.padding.left;\n\t\t\t\tabcLine.nonMusic = new Subtitle(this.renderer.spacing.subtitle, abcTune.formatting, abcLine.subtitle, center, this.renderer.padding.left, this.getTextSize);\n\t\t\t}\n\t\t} else if (abcLine.text !== undefined) {\n\t\t\thasSeenNonSubtitle = true;\n\t\t\tabcLine.nonMusic = new FreeText(abcLine.text, abcLine.vskip, this.getFontAndAttr, this.renderer.padding.left, this.width, this.getTextSize);\n\t\t} else if (abcLine.separator !== undefined && abcLine.separator.lineLength) {\n\t\t\thasSeenNonSubtitle = true;\n\t\t\tabcLine.nonMusic = new Separator(abcLine.separator.spaceAbove, abcLine.separator.lineLength, abcLine.separator.spaceBelow);\n\t\t}\n\t}\n\tabcTune.bottomText = new BottomText(abcTune.metaText, this.width, this.renderer.isPrint, this.renderer.padding.left, this.renderer.spacing, this.classes.shouldAddClasses, this.getTextSize);\n};\n\nEngraverController.prototype.engraveTune = function (abcTune, tuneNumber, lineOffset) {\n\n\tvar origJazzChords = this.jazzchords\n\tvar scale = this.setupTune(abcTune, tuneNumber);\n \n\t// Create all of the element objects that will appear on the page.\n\tthis.constructTuneElements(abcTune);\n \n\t//Set the top text now that we know the width\n \n\t// Do all the positioning, both horizontally and vertically\n\tvar maxWidth = layout(this.renderer, abcTune, this.width, this.space, this.expandToWidest, this.timeBasedLayout);\n \n\t//Set the top text now that we know the width\n\tif (this.expandToWidest && maxWidth > this.width + 1) {\n \n\t\tabcTune.topText = new TopText(abcTune.metaText, abcTune.metaTextInfo, abcTune.formatting, abcTune.lines, maxWidth, this.renderer.isPrint, this.renderer.padding.left, this.renderer.spacing, this.classes.shouldAddClasses, this.getTextSize);\n \n\t\tif ((abcTune.lines)&&(abcTune.lines.length > 0)){\n\t\t\tvar nlines = abcTune.lines.length;\n\n\t\t\tfor (var i=0;i 0)){\n\t\t\t\t\t\tvar nRows = entry.nonMusic.rows.length;\n\t\t\t\t\t\tfor (var j=0;j0)){\n\t\t\t\t\t\t\t\t\t\tif (entry.text[0].center){\n\t\t\t\t\t\t\t\t\t\t\tthisRow.left = (maxWidth/2) + this.renderer.padding.left;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Deal with tablature for staff\n\tif (abcTune.tablatures) {\n\t tablatures.layoutTablatures(this.renderer, abcTune);\n\t}\n \n\t// Do all the writing to the SVG\n\tvar ret = draw(this.renderer, this.classes, abcTune, this.width, maxWidth, this.responsive, scale, this.selectTypes, tuneNumber, lineOffset);\n\tthis.staffgroups = ret.staffgroups;\n\tthis.selectables = ret.selectables;\n\tif (this.oneSvgPerLine) {\n\t var div = this.renderer.paper.svg.parentNode;\n\t this.svgs = splitSvgIntoLines(this.renderer, div, abcTune.metaText.title, this.responsive, scale);\n\t} else {\n\t this.svgs = [this.renderer.paper.svg];\n\t}\n\tsetupSelection(this, this.svgs);\n\t\n\tthis.jazzchords = origJazzChords\n};\n\nfunction splitSvgIntoLines(renderer, output, title, responsive, scale) {\n\t// Each line is a top level in the svg. To split it into separate\n\t// svgs iterate through each of those and put them in a new svg. Since\n\t// they are placed absolutely, the viewBox needs to be manipulated to\n\t// get the correct vertical positioning.\n\t// We copy all the attributes from the original svg except for the aria-label\n\t// since we want that to include a count. And the height is now a fraction of the original svg.\n\tif (!title) title = \"Untitled\"\n\tvar source = output.querySelector(\"svg\")\n\tif (responsive === 'resize')\n\t\toutput.style.paddingBottom = ''\n\tvar style = source.querySelector(\"style\")\n\tvar width = responsive === 'resize' ? source.viewBox.baseVal.width : source.getAttribute(\"width\")\n\tvar sections = output.querySelectorAll(\"svg > g\") // each section is a line, or the top matter or the bottom matter, or text that has been inserted.\n\tvar nextTop = 0 // There are often gaps between the elements for spacing, so the actual top and height needs to be inferred.\n\tvar wrappers = [] // Create all the elements and place them at once because we use the current svg to get data. It would disappear after placing the first line.\n\tvar svgs = []\n\tfor (var i = 0; i < sections.length; i++) {\n\t\tvar section = sections[i]\n\t\tvar box = section.getBBox()\n\t\tvar gapBetweenLines = box.y - nextTop // take the margin into account\n\t\tvar height = box.height + gapBetweenLines;\n\t\tvar wrapper = document.createElement(\"div\");\n\t\tvar divStyles = \"overflow: hidden;\"\n\t\tif (responsive !== 'resize')\n\t\t\tdivStyles += \"height:\" + (height * scale) + \"px;\"\n\t\twrapper.setAttribute(\"style\", divStyles)\n\t\tvar svg = duplicateSvg(source)\n\t\tvar fullTitle = \"Sheet Music for \\\"\" + title + \"\\\" section \" + (i + 1)\n\t\tsvg.setAttribute(\"aria-label\", fullTitle)\n\t\tif (responsive !== 'resize')\n\t\t\tsvg.setAttribute(\"height\", height)\n\t\tif (responsive === 'resize')\n\t\t\tsvg.style.position = ''\n\t\t// TODO-PER: Hack! Not sure why this is needed.\n\t\tvar viewBoxHeight = renderer.firefox112 ? height+1 : height\n\t\tsvg.setAttribute(\"viewBox\", \"0 \" + nextTop + \" \" + width + \" \" + viewBoxHeight)\n\t\tsvg.appendChild(style.cloneNode(true))\n\t\tvar titleEl = document.createElement(\"title\")\n\t\ttitleEl.innerText = fullTitle\n\t\tsvg.appendChild(titleEl)\n\t\tsvg.appendChild(section)\n\n\t\twrapper.appendChild(svg)\n\t\tsvgs.push(svg)\n\t\toutput.appendChild(wrapper)\n\t\t//wrappers.push(wrapper)\n\t\tnextTop = box.y + box.height\n\t}\n\t// for (i = 0; i < wrappers.length; i++)\n\t// \toutput.appendChild(wrappers[i])\n\toutput.removeChild(source)\n\treturn svgs;\n}\n\nfunction duplicateSvg(source) {\n\tvar svgNS = \"http://www.w3.org/2000/svg\";\n\tvar svg = document.createElementNS(svgNS, \"svg\");\n\tfor (var i = 0; i < source.attributes.length; i++) {\n\t\tvar attr = source.attributes[i];\n\t\tif (attr.name !== \"height\" && attr.name != \"aria-label\")\n\t\t\tsvg.setAttribute(attr.name, attr.value)\n\t}\n\treturn svg;\n}\n\nEngraverController.prototype.getDim = function (historyEl) {\n\t// Get the dimensions on demand because the getBBox call is expensive.\n\tif (!historyEl.dim) {\n\t\tvar box = historyEl.svgEl.getBBox();\n\t\thistoryEl.dim = { left: Math.round(box.x), top: Math.round(box.y), right: Math.round(box.x + box.width), bottom: Math.round(box.y + box.height) };\n\t}\n\treturn historyEl.dim;\n};\n\nEngraverController.prototype.addSelectListener = function (clickListener) {\n\tthis.listeners[this.listeners.length] = clickListener;\n};\n\nmodule.exports = EngraverController;\n","var Classes = function Classes(options) {\n\tthis.shouldAddClasses = options.shouldAddClasses;\n\tthis.reset();\n}\n\nClasses.prototype.reset = function () {\n\tthis.lineNumber = null;\n\tthis.voiceNumber = null;\n\tthis.measureNumber = null;\n\tthis.measureTotalPerLine = [];\n\tthis.noteNumber = null;\n}\n\nClasses.prototype.incrLine = function () {\n\tif (this.lineNumber === null)\n\t\tthis.lineNumber = 0;\n\telse\n\t\tthis.lineNumber++;\n\tthis.voiceNumber = null;\n\tthis.measureNumber = null;\n\tthis.noteNumber = null;\n};\n\nClasses.prototype.incrVoice = function () {\n\tif (this.voiceNumber === null)\n\t\tthis.voiceNumber = 0;\n\telse\n\t\tthis.voiceNumber++;\n\tthis.measureNumber = null;\n\tthis.noteNumber = null;\n};\n\nClasses.prototype.isInMeasure = function () {\n\treturn this.measureNumber !== null;\n};\n\nClasses.prototype.newMeasure = function () {\n\tif (this.measureNumber)\n\t\tthis.measureTotalPerLine[this.lineNumber] = this.measureNumber;\n\tthis.measureNumber = null;\n\tthis.noteNumber = null;\n};\n\nClasses.prototype.startMeasure = function () {\n\tthis.measureNumber = 0;\n\tthis.noteNumber = 0;\n};\n\nClasses.prototype.incrMeasure = function () {\n\tthis.measureNumber++;\n\tthis.noteNumber = 0;\n};\n\nClasses.prototype.incrNote = function () {\n\tthis.noteNumber++;\n};\n\nClasses.prototype.measureTotal = function () {\n\tvar total = 0;\n\tfor (var i = 0; i < this.lineNumber; i++)\n\t\ttotal += this.measureTotalPerLine[i] ? this.measureTotalPerLine[i] : 0; // This can be null when non-music things are present.\n\tif (this.measureNumber)\n\t\ttotal += this.measureNumber;\n\treturn total;\n};\n\nClasses.prototype.getCurrent = function (c) {\n\treturn {\n\t\tline: this.lineNumber,\n\t\tmeasure: this.measureNumber,\n\t\tmeasureTotal: this.measureTotal(),\n\t\tvoice: this.voiceNumber,\n\t\tnote: this.noteNumber\n\t};\n};\n\nClasses.prototype.generate = function (c) {\n\tif (!this.shouldAddClasses)\n\t\treturn \"\";\n\tvar ret = [];\n\tif (c && c.length > 0) ret.push(c);\n\tif (c === \"abcjs-tab-number\") // TODO-PER-HACK! straighten out the tablature\n\t\treturn ret.join(' ')\n\tif (c === \"text instrument-name\")\n\t\treturn \"abcjs-text abcjs-instrument-name\"\n\tif (this.lineNumber !== null) ret.push(\"l\" + this.lineNumber);\n\tif (this.measureNumber !== null) ret.push(\"m\" + this.measureNumber);\n\tif (this.measureNumber !== null) ret.push(\"mm\" + this.measureTotal()); // measureNumber is null between measures so this is still the test for measureTotal\n\tif (this.voiceNumber !== null) ret.push(\"v\" + this.voiceNumber);\n\tif (c && (c.indexOf('note') >= 0 || c.indexOf('rest') >= 0 || c.indexOf('lyric') >= 0) && this.noteNumber !== null) ret.push(\"n\" + this.noteNumber);\n\t// add a prefix to all classes that abcjs adds.\n\tif (ret.length > 0) {\n\t\tret = ret.join(' '); // Some strings are compound classes - that is, specify more than one class in a string.\n\t\tret = ret.split(' ');\n\t\tfor (var i = 0; i < ret.length; i++) {\n\t\t\tif (ret[i].indexOf('abcjs-') !== 0 && ret[i].length > 0) // if the prefix doesn't already exist and the class is not blank.\n\t\t\t\tret[i] = 'abcjs-' + ret[i];\n\t\t}\n\t}\n\treturn ret.join(' ');\n};\n\n\nmodule.exports = Classes;\n","var GetFontAndAttr = function GetFontAndAttr(formatting, classes) {\n\tthis.formatting = formatting;\n\tthis.classes = classes;\n};\n\nGetFontAndAttr.prototype.updateFonts = function (fontOverrides) {\n\tif (fontOverrides.gchordfont)\n\t\tthis.formatting.gchordfont = fontOverrides.gchordfont;\n\tif (fontOverrides.tripletfont)\n\t\tthis.formatting.tripletfont = fontOverrides.tripletfont;\n\tif (fontOverrides.annotationfont)\n\t\tthis.formatting.annotationfont = fontOverrides.annotationfont;\n\tif (fontOverrides.vocalfont)\n\t\tthis.formatting.vocalfont = fontOverrides.vocalfont;\n};\n\nGetFontAndAttr.prototype.getFamily = function (type) {\n\tif (type[0] === '\"' && type[type.length-1] === '\"') {\n\t\treturn type.substring(1, type.length-1)\n\t}\n\treturn type\n};\n\nGetFontAndAttr.prototype.calc = function (type, klass) {\n\tvar font;\n\tif (typeof type === 'string') {\n\t\tfont = this.formatting[type];\n\t\t// Raphael deliberately changes the font units to pixels for some reason, so we need to change points to pixels here.\n\t\tif (font)\n\t\t\tfont = { face: font.face, size: Math.round(font.size * 4 / 3), decoration: font.decoration, style: font.style, weight: font.weight, box: font.box };\n\t\telse\n\t\t\tfont = { face: \"Arial\", size: Math.round(12 * 4 / 3), decoration: \"underline\", style: \"normal\", weight: \"normal\" };\n\t} else\n\t\tfont = { face: type.face, size: Math.round(type.size * 4 / 3), decoration: type.decoration, style: type.style, weight: type.weight, box: type.box };\n\tvar paddingPercent = this.formatting.fontboxpadding ? this.formatting.fontboxpadding : 0.1\n\tfont.padding = font.size * paddingPercent;\n\n\tvar attr = {\n\t\t\"font-size\": font.size, 'font-style': font.style,\n\t\t\"font-family\": this.getFamily(font.face), 'font-weight': font.weight, 'text-decoration': font.decoration,\n\t\t'class': this.classes.generate(klass)\n\t};\n\treturn { font: font, attr: attr };\n};\n\nmodule.exports = GetFontAndAttr;\n","var GetTextSize = function GetTextSize(getFontAndAttr, svg) {\n\tthis.getFontAndAttr = getFontAndAttr;\n\tthis.svg = svg;\n};\n\nGetTextSize.prototype.updateFonts = function (fontOverrides) {\n\tthis.getFontAndAttr.updateFonts(fontOverrides);\n};\n\nGetTextSize.prototype.attr = function (type, klass) {\n\treturn this.getFontAndAttr.calc(type, klass);\n};\n\nGetTextSize.prototype.getFamily = function (type) {\n\tif (type[0] === '\"' && type[type.length-1] === '\"') {\n\t\treturn type.substring(1, type.length-1)\n\t}\n\treturn type\n};\n\nGetTextSize.prototype.calc = function (text, type, klass, el) {\n\tvar hash;\n\t// This can be passed in either a string or a font. If it is a string it names one of the standard fonts.\n\tif (typeof type === 'string')\n\t\thash = this.attr(type, klass);\n\telse {\n\t\thash = {\n\t\t\tfont: {\n\t\t\t\tface: type.face,\n\t\t\t\tsize: type.size,\n\t\t\t\tdecoration: type.decoration,\n\t\t\t\tstyle: type.style,\n\t\t\t\tweight: type.weight\n\t\t\t},\n\t\t\tattr: {\n\t\t\t\t\"font-size\": type.size,\n\t\t\t\t\"font-style\": type.style,\n\t\t\t\t\"font-family\": this.getFamily(type.face),\n\t\t\t\t\"font-weight\": type.weight,\n\t\t\t\t\"text-decoration\": type.decoration,\n\t\t\t\t\"class\": this.getFontAndAttr.classes.generate(klass)\n\t\t\t}\n\t\t}\n\t}\n\tvar size = this.svg.getTextSize(text, hash.attr, el);\n\tif (hash.font.box) {\n\t\t// Add padding and an equal margin to each side.\n\t\treturn { height: size.height + hash.font.padding * 4, width: size.width + hash.font.padding * 4 };\n\t}\n\treturn size;\n};\n\nGetTextSize.prototype.baselineToCenter = function (text, type, klass, index, total) {\n\t// This is for the case where SVG wants to use the baseline of the first line as the Y coordinate.\n\t// If there are multiple lines of text or there is an array of text then that will not be centered so this adjusts it.\n\tvar height = this.calc(text, type, klass).height;\n\tvar fontHeight = this.attr(type, klass).font.size;\n\n\treturn height * 0.5 + (total - index - 2) * fontHeight;\n};\n\n\nmodule.exports = GetTextSize;\n","var setClass = function (elemset, addClass, removeClass, color) {\n\tif (!elemset)\n\t\treturn;\n\tfor (var i = 0; i < elemset.length; i++) {\n\t\tvar el = elemset[i];\n\t\tvar attr = el.getAttribute(\"highlight\");\n\t\tif (!attr) attr = \"fill\";\n\t\tel.setAttribute(attr, color);\n\t\tvar kls = el.getAttribute(\"class\");\n\t\tif (!kls) kls = \"\";\n\t\tkls = kls.replace(removeClass, \"\");\n\t\tkls = kls.replace(addClass, \"\");\n\t\tif (addClass.length > 0) {\n\t\t\tif (kls.length > 0 && kls[kls.length - 1] !== ' ') kls += \" \";\n\t\t\tkls += addClass;\n\t\t}\n\t\tel.setAttribute(\"class\", kls);\n\t}\n};\n\nmodule.exports = setClass;\n","var spacing = {};\n\nspacing.FONTEM = 360;\nspacing.FONTSIZE = 30;\nspacing.STEP = spacing.FONTSIZE * 93 / 720;\nspacing.SPACE = 10;\nspacing.TOPNOTE = 15;\nspacing.STAVEHEIGHT = 100;\nspacing.INDENT = 50;\n\nmodule.exports = spacing;\n","function findNumber(klass, match, target, name) {\n\tif (klass.indexOf(match) === 0) {\n\t\tvar value = klass.replace(match, '');\n\t\tvar num = parseInt(value, 10);\n\t\tif ('' + num === value)\n\t\t\ttarget[name] = num;\n\t}\n}\n\nfunction createAnalysis(target, ev) {\n\tvar classes = [];\n\tif (target.absEl.elemset) {\n\t\tvar classObj = {};\n\t\tfor (var j = 0; j < target.absEl.elemset.length; j++) {\n\t\t\tvar es = target.absEl.elemset[j];\n\t\t\tif (es) {\n\t\t\t\tvar klass = es.getAttribute(\"class\").split(' ');\n\t\t\t\tfor (var k = 0; k < klass.length; k++)\n\t\t\t\t\tclassObj[klass[k]] = true;\n\t\t\t}\n\t\t}\n\t\tfor (var kk = 0; kk < Object.keys(classObj).length; kk++)\n\t\t\tclasses.push(Object.keys(classObj)[kk]);\n\t}\n\tvar analysis = {};\n\tfor (var ii = 0; ii < classes.length; ii++) {\n\t\tfindNumber(classes[ii], \"abcjs-v\", analysis, \"voice\");\n\t\tfindNumber(classes[ii], \"abcjs-l\", analysis, \"line\");\n\t\tfindNumber(classes[ii], \"abcjs-m\", analysis, \"measure\");\n\t}\n\tif (target.staffPos)\n\t\tanalysis.staffPos = target.staffPos;\n\tvar closest = ev.target;\n\twhile (closest && closest.dataset && !closest.dataset.name && closest.tagName.toLowerCase() !== 'svg')\n\t\tclosest = closest.parentNode;\n\tvar parent = ev.target;\n\twhile (parent && parent.dataset && !parent.dataset.index && parent.tagName.toLowerCase() !== 'svg')\n\t\tparent = parent.parentNode;\n\tif (parent && parent.dataset) {\n\t\tanalysis.name = parent.dataset.name;\n\t\tanalysis.clickedName = closest.dataset.name;\n\t\tanalysis.parentClasses = parent.classList;\n\t}\n\tif (closest && closest.classList)\n\t\tanalysis.clickedClasses = closest.classList;\n\tanalysis.selectableElement = target.svgEl;\n\treturn {classes: classes, analysis: analysis}\n}\n\nmodule.exports = createAnalysis;\n","var createAnalysis = require('./create-analysis');\n\nfunction findSelectableElement(event) {\n\tvar selectable = event\n\twhile (selectable && selectable.attributes && selectable.tagName.toLowerCase() !== 'svg' && !selectable.attributes.selectable) {\n\t\tselectable = selectable.parentNode\n\t}\n\tif (selectable && selectable.attributes && selectable.attributes.selectable) {\n\t\tvar index = selectable.attributes['data-index'].nodeValue\n\t\tif (index) {\n\t\t\tindex = parseInt(index, 10)\n\t\t\tif (index >= 0 && index < this.selectables.length) {\n\t\t\t\tvar element = this.selectables[index]\n\t\t\t\tvar ret = createAnalysis(element, event)\n\t\t\t\tret.index = index\n\t\t\t\tret.element = element\n\t\t\t\treturn ret\n\t\t\t}\n\t\t}\n\t}\n\treturn null\n}\n\nmodule.exports = findSelectableElement;\n","var setClass = require('../helpers/set-class');\n\nvar highlight = function (klass, color) {\n\tif (klass === undefined)\n\t\tklass = \"abcjs-note_selected\";\n\tif (color === undefined)\n\t\tcolor = \"#ff0000\";\n\tsetClass(this.elemset, klass, \"\", color);\n};\n\nmodule.exports = highlight;\n","var spacing = require('../helpers/spacing');\nvar createAnalysis = require('./create-analysis');\n\nfunction setupSelection(engraver, svgs) {\n\tengraver.rangeHighlight = rangeHighlight;\n\tif (engraver.dragging) {\n\t\tfor (var h = 0; h < engraver.selectables.length; h++) {\n\t\t\tvar hist = engraver.selectables[h];\n\t\t\tif (hist.svgEl.getAttribute(\"selectable\") === \"true\") {\n\t\t\t\thist.svgEl.setAttribute(\"tabindex\", 0);\n\t\t\t\thist.svgEl.setAttribute(\"data-index\", h);\n\t\t\t\thist.svgEl.addEventListener(\"keydown\", keyboardDown.bind(engraver));\n\t\t\t\thist.svgEl.addEventListener(\"keyup\", keyboardSelection.bind(engraver));\n\t\t\t\thist.svgEl.addEventListener(\"focus\", elementFocused.bind(engraver));\n\t\t\t}\n\t\t}\n\t}\n\tfor (var i = 0; i < svgs.length; i++) {\n\t\tsvgs[i].addEventListener('touchstart', mouseDown.bind(engraver), { passive: true });\n\t\tsvgs[i].addEventListener('touchmove', mouseMove.bind(engraver), { passive: true });\n\t\tsvgs[i].addEventListener('touchend', mouseUp.bind(engraver), { passive: true });\n\t\tsvgs[i].addEventListener('mousedown', mouseDown.bind(engraver));\n\t\tsvgs[i].addEventListener('mousemove', mouseMove.bind(engraver));\n\t\tsvgs[i].addEventListener('mouseup', mouseUp.bind(engraver));\n\t}\n}\n\nfunction getCoord(ev) {\n\tvar scaleX = 1;\n\tvar scaleY = 1;\n\tvar svg = ev.target.closest('svg')\n\tvar yOffset = 0\n\n\t// when renderer.options.responsive === 'resize' the click coords are in relation to the HTML\n\t// element, we need to convert to the SVG viewBox coords\n\tif (svg && svg.viewBox && svg.viewBox.baseVal) { // Firefox passes null to this when no viewBox is given\n\t\t// Chrome makes these values null when no viewBox is given.\n\t\tif (svg.viewBox.baseVal.width !== 0)\n\t\t\tscaleX = svg.viewBox.baseVal.width / svg.clientWidth\n\t\tif (svg.viewBox.baseVal.height !== 0)\n\t\t\tscaleY = svg.viewBox.baseVal.height / svg.clientHeight\n\t\tyOffset = svg.viewBox.baseVal.y\n\t}\n\n\tvar svgClicked = ev.target && ev.target.tagName === \"svg\";\n\tvar x;\n\tvar y;\n\tif (svgClicked) {\n\t\tx = ev.offsetX;\n\t\ty = ev.offsetY;\n\t} else {\n\t\tx = ev.layerX;\n\t\ty = ev.layerY;\n\t}\n\n\tx = x * scaleX;\n\ty = y * scaleY;\n\t//console.log(x, y)\n\n\treturn [x, y + yOffset];\n}\n\nfunction elementFocused(ev) {\n\t// If there had been another element focused and is being dragged, then report that before setting the new element up.\n\tif (this.dragMechanism === \"keyboard\" && this.dragYStep !== 0 && this.dragTarget)\n\t\tnotifySelect.bind(this)(this.dragTarget, this.dragYStep, this.selectables.length, this.dragIndex, ev);\n\n\tthis.dragYStep = 0;\n}\n\nfunction keyboardDown(ev) {\n\t// Swallow the up and down arrow events - they will be used for dragging with the keyboard\n\tswitch (ev.keyCode) {\n\t\tcase 38:\n\t\tcase 40:\n\t\t\tev.preventDefault();\n\t}\n}\n\nfunction keyboardSelection(ev) {\n\t// \"this\" is the EngraverController because of the bind(this) when setting the event listener.\n\tvar handled = false;\n\tvar index = ev.target.dataset.index;\n\tswitch (ev.keyCode) {\n\t\tcase 13:\n\t\tcase 32:\n\t\t\thandled = true;\n\t\t\tthis.dragTarget = this.selectables[index];\n\t\t\tthis.dragIndex = index;\n\t\t\tthis.dragMechanism = \"keyboard\";\n\t\t\tmouseUp.bind(this)(ev);\n\t\t\tbreak;\n\t\tcase 38: // arrow up\n\t\t\thandled = true;\n\t\t\tthis.dragTarget = this.selectables[index];\n\t\t\tthis.dragIndex = index;\n\t\t\tif (this.dragTarget && this.dragTarget.isDraggable) {\n\t\t\t\tif (this.dragging && this.dragTarget.isDraggable)\n\t\t\t\t\tthis.dragTarget.absEl.highlight(undefined, this.dragColor);\n\t\t\t\tthis.dragYStep--;\n\t\t\t\tthis.dragTarget.svgEl.setAttribute(\"transform\", \"translate(0,\" + (this.dragYStep * spacing.STEP) + \")\");\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 40: // arrow down\n\t\t\thandled = true;\n\t\t\tthis.dragTarget = this.selectables[index];\n\t\t\tthis.dragIndex = index;\n\t\t\tthis.dragMechanism = \"keyboard\";\n\t\t\tif (this.dragTarget && this.dragTarget.isDraggable) {\n\t\t\t\tif (this.dragging && this.dragTarget.isDraggable)\n\t\t\t\t\tthis.dragTarget.absEl.highlight(undefined, this.dragColor);\n\t\t\t\tthis.dragYStep++;\n\t\t\t\tthis.dragTarget.svgEl.setAttribute(\"transform\", \"translate(0,\" + (this.dragYStep * spacing.STEP) + \")\");\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 9: // tab\n\t\t\t// This is losing focus - if there had been dragging, then do the callback\n\t\t\tif (this.dragYStep !== 0) {\n\t\t\t\tmouseUp.bind(this)(ev);\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\t//console.log(ev);\n\t\t\tbreak;\n\t}\n\tif (handled)\n\t\tev.preventDefault();\n}\n\nfunction findElementInHistory(selectables, el) {\n\tif (!el)\n\t\treturn -1;\n\tfor (var i = 0; i < selectables.length; i++) {\n\t\tif (el.dataset.index === selectables[i].svgEl.dataset.index)\n\t\t\treturn i;\n\t}\n\treturn -1;\n}\n\nfunction findElementByCoord(self, x, y) {\n\tvar minDistance = 9999999;\n\tvar closestIndex = -1;\n\tfor (var i = 0; i < self.selectables.length && minDistance > 0; i++) {\n\t\tvar el = self.selectables[i];\n\n\t\tself.getDim(el);\n\t\tif (el.dim.left < x && el.dim.right > x && el.dim.top < y && el.dim.bottom > y) {\n\t\t\t// See if it is a direct hit on an element - if so, definitely take it (there are no overlapping elements)\n\t\t\tclosestIndex = i;\n\t\t\tminDistance = 0;\n\t\t} else if (el.dim.top < y && el.dim.bottom > y) {\n\t\t\t// See if it is the same vertical as the element. Then the distance is the x difference\n\t\t\tvar horiz = Math.min(Math.abs(el.dim.left - x), Math.abs(el.dim.right - x));\n\t\t\tif (horiz < minDistance) {\n\t\t\t\tminDistance = horiz;\n\t\t\t\tclosestIndex = i;\n\t\t\t}\n\t\t} else if (el.dim.left < x && el.dim.right > x) {\n\t\t\t// See if it is the same horizontal as the element. Then the distance is the y difference\n\t\t\tvar vert = Math.min(Math.abs(el.dim.top - y), Math.abs(el.dim.bottom - y));\n\t\t\tif (vert < minDistance) {\n\t\t\t\tminDistance = vert;\n\t\t\t\tclosestIndex = i;\n\t\t\t}\n\t\t} else {\n\t\t\t// figure out the distance to this element.\n\t\t\tvar dx = Math.abs(x - el.dim.left) > Math.abs(x - el.dim.right) ? Math.abs(x - el.dim.right) : Math.abs(x - el.dim.left);\n\t\t\tvar dy = Math.abs(y - el.dim.top) > Math.abs(y - el.dim.bottom) ? Math.abs(y - el.dim.bottom) : Math.abs(y - el.dim.top);\n\t\t\tvar hypotenuse = Math.sqrt(dx * dx + dy * dy);\n\t\t\tif (hypotenuse < minDistance) {\n\t\t\t\tminDistance = hypotenuse;\n\t\t\t\tclosestIndex = i;\n\t\t\t}\n\t\t}\n\t}\n\treturn (closestIndex >= 0 && minDistance <= 12) ? closestIndex : -1;\n}\n\nfunction getBestMatchCoordinates(dim, ev, scale) {\n\t// Different browsers have conflicting meanings for the coordinates that are returned.\n\t// If the item we want is clicked on directly, then we will just see what is the best match.\n\t// This seems like less of a hack than browser sniffing.\n\tif (dim.x <= ev.offsetX && dim.x + dim.width >= ev.offsetX &&\n\t\tdim.y <= ev.offsetY && dim.y + dim.height >= ev.offsetY)\n\t\treturn [ev.offsetX, ev.offsetY];\n\t// Firefox returns a weird value for offset, but layer is correct.\n\t// Safari and Chrome return the correct value for offset, but layer is multiplied by the scale (that is, if it were rendered with { scale: 2 })\n\t// For instance (if scale is 2):\n\t// Firefox: { offsetY: 5, layerY: 335 }\n\t// Others: {offsetY: 335, layerY: 670} (there could be a little rounding, so the number might not be exactly 2x)\n\t// So, if layerY/scale is approx. offsetY, then use offsetY, otherwise use layerY\n\tvar epsilon = Math.abs(ev.layerY / scale - ev.offsetY);\n\tif (epsilon < 3)\n\t\treturn [ev.offsetX, ev.offsetY];\n\telse\n\t\treturn [ev.layerX, ev.layerY];\n}\n\nfunction getTarget(target) {\n\t// This searches up the dom for the first item containing the attribute \"selectable\", or stopping at the SVG.\n\tif (!target)\n\t\treturn null;\n\tif (target.tagName === \"svg\")\n\t\treturn target;\n\n\tif (!target.getAttribute)\n\t\treturn null;\t\n\tvar found = target.getAttribute(\"selectable\");\n\twhile (!found) {\n\t\tif (!target.parentElement)\n\t\t\tfound = true;\n\t\telse {\n\t\t\ttarget = target.parentElement;\n\t\t\tif (target.tagName === \"svg\")\n\t\t\t\tfound = true;\n\t\t\telse\n\t\t\t\tfound = target.getAttribute(\"selectable\");\n\t\t}\n\t}\n\treturn target;\n}\n\nfunction getMousePosition(self, ev) {\n\t// if the user clicked exactly on an element that we're interested in, then we already have the answer.\n\t// This is more reliable than the calculations because firefox returns different coords for offsetX, offsetY\n\tvar x;\n\tvar y;\n\tvar box;\n\tvar clickedOn = findElementInHistory(self.selectables, getTarget(ev.target));\n\tif (clickedOn >= 0) {\n\t\t// There was a direct hit on an element.\n\t\tbox = getBestMatchCoordinates(self.selectables[clickedOn].svgEl.getBBox(), ev, self.scale);\n\t\tx = box[0];\n\t\ty = box[1];\n\t\t//console.log(\"clicked on\", clickedOn, x, y, self.selectables[clickedOn].svgEl.getBBox(), ev.target.getBBox());\n\t} else {\n\t\t// See if they clicked close to an element.\n\t\tbox = getCoord(ev);\n\t\tx = box[0];\n\t\ty = box[1];\n\t\tclickedOn = findElementByCoord(self, x, y);\n\t\t//console.log(\"clicked near\", clickedOn, x, y, printEl(ev.target));\n\t}\n\treturn { x: x, y: y, clickedOn: clickedOn };\n}\n\nfunction attachMissingTouchEventAttributes(touchEv) {\n\tif (!touchEv || !touchEv.target || !touchEv.touches || touchEv.touches.length < 1)\n\t\treturn\n\tvar rect = touchEv.target.getBoundingClientRect();\n\tvar offsetX = touchEv.touches[0].pageX - rect.left;\n\tvar offsetY = touchEv.touches[0].pageY - rect.top;\n\n\ttouchEv.touches[0].offsetX = offsetX;\n\ttouchEv.touches[0].offsetY = offsetY;\n\n\ttouchEv.touches[0].layerX = touchEv.touches[0].pageX;\n\ttouchEv.touches[0].layerY = touchEv.touches[0].pageY;\n}\n\nfunction mouseDown(ev) {\n\t// \"this\" is the EngraverController because of the bind(this) when setting the event listener.\n\tvar _ev = ev;\n\tif (ev.type === 'touchstart') {\n\t\tattachMissingTouchEventAttributes(ev);\n\t\tif (ev.touches.length > 0)\n\t\t\t_ev = ev.touches[0];\n\t}\n\n\tvar positioning = getMousePosition(this, _ev);\n\n\t// Only start dragging if the user clicked close enough to an element and clicked with the main mouse button.\n\tif (positioning.clickedOn >= 0 && (ev.type === 'touchstart' || ev.button === 0) && this.selectables[positioning.clickedOn]) {\n\t\tthis.dragTarget = this.selectables[positioning.clickedOn];\n\t\tthis.dragIndex = positioning.clickedOn;\n\t\tthis.dragMechanism = \"mouse\";\n\t\tthis.dragMouseStart = { x: positioning.x, y: positioning.y };\n\t\tif (this.dragging && this.dragTarget.isDraggable) {\n\t\t\taddGlobalClass(this.renderer.paper, \"abcjs-dragging-in-progress\");\n\t\t\tthis.dragTarget.absEl.highlight(undefined, this.dragColor);\n\t\t}\n\t}\n}\n\nfunction mouseMove(ev) {\n\tvar _ev = ev;\n\tif (ev.type === 'touchmove') {\n\t\tattachMissingTouchEventAttributes(ev);\n\t\tif (ev.touches.length > 0)\n\t\t\t_ev = ev.touches[0];\n\t}\n\tthis.lastTouchMove = ev;\n\t// \"this\" is the EngraverController because of the bind(this) when setting the event listener.\n\n\tif (!this.dragTarget || !this.dragging || !this.dragTarget.isDraggable || this.dragMechanism !== 'mouse' || !this.dragMouseStart)\n\t\treturn;\n\n\tvar positioning = getMousePosition(this, _ev);\n\n\tvar yDist = Math.round((positioning.y - this.dragMouseStart.y) / spacing.STEP);\n\tif (yDist !== this.dragYStep) {\n\t\tthis.dragYStep = yDist;\n\t\tthis.dragTarget.svgEl.setAttribute(\"transform\", \"translate(0,\" + (yDist * spacing.STEP) + \")\");\n\t}\n}\n\nfunction mouseUp(ev) {\n\t// \"this\" is the EngraverController because of the bind(this) when setting the event listener.\n\tvar _ev = ev;\n\tif (ev.type === 'touchend' && this.lastTouchMove) {\n\t\tattachMissingTouchEventAttributes(this.lastTouchMove);\n\t\tif (this.lastTouchMove && this.lastTouchMove.touches && this.lastTouchMove.touches.length > 0)\n\t\t\t_ev = this.lastTouchMove.touches[0];\n\t}\n\n\tif (!this.dragTarget)\n\t\treturn;\n\n\tclearSelection.bind(this)();\n\tif (this.dragTarget.absEl && this.dragTarget.absEl.highlight) {\n\t\tthis.selected = [this.dragTarget.absEl];\n\t\tthis.dragTarget.absEl.highlight(undefined, this.selectionColor);\n\t}\n\n\tnotifySelect.bind(this)(this.dragTarget, this.dragYStep, this.selectables.length, this.dragIndex, _ev);\n\tif (this.dragTarget.svgEl && this.dragTarget.svgEl.focus) {\n\t\tthis.dragTarget.svgEl.focus();\n\t\tthis.dragTarget = null;\n\t\tthis.dragIndex = -1;\n\t}\n\tremoveGlobalClass(this.renderer.svg, \"abcjs-dragging-in-progress\");\n}\n\nfunction setSelection(dragIndex) {\n\tif (dragIndex >= 0 && dragIndex < this.selectables.length) {\n\t\tthis.dragTarget = this.selectables[dragIndex];\n\t\tthis.dragIndex = dragIndex;\n\t\tthis.dragMechanism = \"keyboard\";\n\t\tmouseUp.bind(this)({ target: this.dragTarget.svgEl });\n\t}\n}\n\n\nfunction notifySelect(target, dragStep, dragMax, dragIndex, ev) {\n\tvar ret = createAnalysis(target, ev)\n\tvar classes = ret.classes\n\tvar analysis = ret.analysis\n\n\tfor (var i = 0; i < this.listeners.length; i++) {\n\t\tthis.listeners[i](target.absEl.abcelem, target.absEl.tuneNumber, classes.join(' '), analysis, { step: dragStep, max: dragMax, index: dragIndex, setSelection: setSelection.bind(this) }, ev);\n\t}\n}\n\nfunction clearSelection() {\n\tfor (var i = 0; i < this.selected.length; i++) {\n\t\tthis.selected[i].unhighlight(undefined, this.renderer.foregroundColor);\n\t}\n\tthis.selected = [];\n}\n\nfunction rangeHighlight(start, end) {\n\tclearSelection.bind(this)();\n\tfor (var line = 0; line < this.staffgroups.length; line++) {\n\t\tvar voices = this.staffgroups[line].voices;\n\t\tfor (var voice = 0; voice < voices.length; voice++) {\n\t\t\tvar elems = voices[voice].children;\n\t\t\tfor (var elem = 0; elem < elems.length; elem++) {\n\t\t\t\t// Since the user can highlight more than an element, or part of an element, a hit is if any of the endpoints\n\t\t\t\t// is inside the other range.\n\t\t\t\tvar elStart = elems[elem].abcelem.startChar;\n\t\t\t\tvar elEnd = elems[elem].abcelem.endChar;\n\t\t\t\tif ((end > elStart && start < elEnd) || ((end === start) && end === elEnd)) {\n\t\t\t\t\t//\t\tif (elems[elem].abcelem.startChar>=start && elems[elem].abcelem.endChar<=end) {\n\t\t\t\t\tthis.selected[this.selected.length] = elems[elem];\n\t\t\t\t\telems[elem].highlight(undefined, this.selectionColor);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction getClassSet(el) {\n\tvar oldClass = el.getAttribute('class');\n\tif (!oldClass)\n\t\toldClass = \"\";\n\tvar klasses = oldClass.split(\" \");\n\tvar obj = {};\n\tfor (var i = 0; i < klasses.length; i++)\n\t\tobj[klasses[i]] = true;\n\treturn obj;\n}\n\nfunction setClassSet(el, klassSet) {\n\tvar klasses = [];\n\tfor (var key in klassSet) {\n\t\tif (klassSet.hasOwnProperty(key))\n\t\t\tklasses.push(key);\n\t}\n\tel.setAttribute('class', klasses.join(' '));\n}\n\nfunction addGlobalClass(svg, klass) {\n\tif (svg) {\n\t\tvar obj = getClassSet(svg.svg);\n\t\tobj[klass] = true;\n\t\tsetClassSet(svg.svg, obj);\n\t}\n}\n\nfunction removeGlobalClass(svg, klass) {\n\tif (svg) {\n\t\tvar obj = getClassSet(svg.svg);\n\t\tdelete obj[klass];\n\t\tsetClassSet(svg.svg, obj);\n\t}\n}\n\nmodule.exports = setupSelection;\n","var setClass = require('../helpers/set-class');\n\nvar unhighlight = function (klass, color) {\n\tif (klass === undefined)\n\t\tklass = \"abcjs-note_selected\";\n\tif (color === undefined)\n\t\tcolor = \"#000000\";\n\tsetClass(this.elemset, \"\", klass, color);\n};\n\nmodule.exports = unhighlight;\n","var RelativeElement = require('../creation/elements/relative-element');\nvar spacing = require('../helpers/spacing');\nvar getBarYAt = require('./get-bar-y-at');\n\nvar layoutBeam = function (beam) {\n\tif (beam.elems.length === 0 || beam.allrests) return;\n\n\tvar dy = calcDy(beam.stemsUp, beam.isgrace); // This is the width of the beam line.\n\n\t// create the main beam\n\tvar firstElement = beam.elems[0];\n\tvar lastElement = beam.elems[beam.elems.length - 1];\n\tvar minStemHeight = 0; // The following is to leave space for \"!///!\" marks.\n\tvar referencePitch = beam.stemsUp ? firstElement.abcelem.maxpitch : firstElement.abcelem.minpitch;\n\tminStemHeight = minStem(firstElement, beam.stemsUp, referencePitch, minStemHeight);\n\tminStemHeight = minStem(lastElement, beam.stemsUp, referencePitch, minStemHeight);\n\tminStemHeight = Math.max(beam.stemHeight, minStemHeight + 3); // TODO-PER: The 3 is the width of a 16th beam. The actual height of the beam should be used instead.\n\tvar yPos = calcYPos(beam.average, beam.elems.length, minStemHeight, beam.stemsUp, firstElement.abcelem.averagepitch, lastElement.abcelem.averagepitch, beam.isflat, beam.min, beam.max, beam.isgrace);\n\tvar xPos = calcXPos(beam.stemsUp, firstElement, lastElement);\n\tbeam.addBeam({ startX: xPos[0], endX: xPos[1], startY: yPos[0], endY: yPos[1], dy: dy });\n\n\t// create the rest of the beams (in the case of 1/16th notes, etc.\n\tvar beams = createAdditionalBeams(beam.elems, beam.stemsUp, beam.beams[0], beam.isgrace, dy);\n\tfor (var i = 0; i < beams.length; i++)\n\t\tbeam.addBeam(beams[i]);\n\n\t// Now that the main beam is defined, we know how tall the stems should be, so create them and attach them to the original notes.\n\tcreateStems(beam.elems, beam.stemsUp, beam.beams[0], dy, beam.mainNote);\n};\n\nvar getDurlog = function (duration) {\n\t// TODO-PER: This is a hack to prevent a Chrome lockup. Duration should have been defined already,\n\t// but there's definitely a case where it isn't. [Probably something to do with triplets.]\n\tif (duration === undefined) {\n\t\treturn 0;\n\t}\n\t// console.log(\"getDurlog: \" + duration);\n\treturn Math.floor(Math.log(duration) / Math.log(2));\n};\n\n//\n// private functions\n//\nfunction minStem(element, stemsUp, referencePitch, minStemHeight) {\n\tif (!element.children)\n\t\treturn minStemHeight;\n\tfor (var i = 0; i < element.children.length; i++) {\n\t\tvar elem = element.children[i];\n\t\tif (stemsUp && elem.top !== undefined && elem.c === \"flags.ugrace\")\n\t\t\tminStemHeight = Math.max(minStemHeight, elem.top - referencePitch);\n\t\telse if (!stemsUp && elem.bottom !== undefined && elem.c === \"flags.ugrace\")\n\t\t\tminStemHeight = Math.max(minStemHeight, referencePitch - elem.bottom + 7); // The extra 7 is because we are measuring the slash from the top.\n\t}\n\treturn minStemHeight;\n}\n\nfunction calcSlant(leftAveragePitch, rightAveragePitch, numStems, isFlat) {\n\tif (isFlat)\n\t\treturn 0;\n\tvar slant = leftAveragePitch - rightAveragePitch;\n\tvar maxSlant = numStems / 2;\n\n\tif (slant > maxSlant) slant = maxSlant;\n\tif (slant < -maxSlant) slant = -maxSlant;\n\treturn slant;\n}\n\nfunction calcDy(asc, isGrace) {\n\tvar dy = (asc) ? spacing.STEP : -spacing.STEP;\n\tif (isGrace) dy = dy * 0.4;\n\treturn dy;\n}\n\nfunction calcXPos(asc, firstElement, lastElement) {\n\tvar starthead = firstElement.heads[asc ? 0 : firstElement.heads.length - 1];\n\tvar endhead = lastElement.heads[asc ? 0 : lastElement.heads.length - 1];\n\tvar startX = starthead.x;\n\tif (asc) startX += starthead.w - 0.6;\n\tvar endX = endhead.x;\n\tendX += (asc) ? endhead.w : 0.6;\n\treturn [startX, endX];\n}\n\nfunction calcYPos(average, numElements, stemHeight, asc, firstAveragePitch, lastAveragePitch, isFlat, minPitch, maxPitch, isGrace) {\n\tvar barpos = stemHeight - 2; // (isGrace)? 5:7;\n\tvar barminpos = stemHeight - 2;\n\tvar pos = Math.round(asc ? Math.max(average + barpos, maxPitch + barminpos) : Math.min(average - barpos, minPitch - barminpos));\n\n\tvar slant = calcSlant(firstAveragePitch, lastAveragePitch, numElements, isFlat);\n\tvar startY = pos + Math.floor(slant / 2);\n\tvar endY = pos + Math.floor(-slant / 2);\n\n\t// If the notes are too high or too low, make the beam go down to the middle\n\tif (!isGrace) {\n\t\tif (asc && pos < 6) {\n\t\t\tstartY = 6;\n\t\t\tendY = 6;\n\t\t} else if (!asc && pos > 6) {\n\t\t\tstartY = 6;\n\t\t\tendY = 6;\n\t\t}\n\t}\n\n\treturn [startY, endY];\n}\n\nfunction createStems(elems, asc, beam, dy, mainNote) {\n\tfor (var i = 0; i < elems.length; i++) {\n\t\tvar elem = elems[i];\n\t\tif (elem.abcelem.rest)\n\t\t\tcontinue;\n\t\t// TODO-PER: This is odd. If it is a regular beam then elems is an array of AbsoluteElements, if it is a grace beam then it is an array of objects , so we directly attach the element to the parent. We tell it if is a grace note because they are passed in as a generic object instead of an AbsoluteElement.\n\t\tvar isGrace = elem.addExtra ? false : true;\n\t\tvar parent = isGrace ? mainNote : elem;\n\t\tvar furthestHead = elem.heads[(asc) ? 0 : elem.heads.length - 1];\n\t\tvar ovalDelta = 1 / 5;//(isGrace)?1/3:1/5;\n\t\tvar pitch = furthestHead.pitch + ((asc) ? ovalDelta : -ovalDelta);\n\t\tvar dx = asc ? furthestHead.w : 0; // down-pointing stems start on the left side of the note, up-pointing stems start on the right side, so we offset by the note width.\n\t\tif (!isGrace)\n\t\t\tdx += furthestHead.dx;\n\t\tvar x = furthestHead.x + dx; // this is now the actual x location in pixels.\n\t\tvar bary = getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, x);\n\t\tvar lineWidth = (asc) ? -0.6 : 0.6;\n\t\tif (!asc)\n\t\t\tbary -= (dy / 2) / spacing.STEP;\t// TODO-PER: This is just a fudge factor so the down-pointing stems don't overlap.\n\t\tif (isGrace)\n\t\t\tdx += elem.heads[0].dx;\n\t\t// TODO-PER-HACK: One type of note head has a different placement of the stem. This should be more generically calculated:\n\t\tif (furthestHead.c === 'noteheads.slash.quarter') {\n\t\t\tif (asc)\n\t\t\t\tpitch += 1;\n\t\t\telse\n\t\t\t\tpitch -= 1;\n\t\t}\n\t\tvar stem = new RelativeElement(null, dx, 0, pitch, {\n\t\t\t\"type\": \"stem\",\n\t\t\t\"pitch2\": bary,\n\t\t\tlinewidth: lineWidth\n\t\t});\n\t\tstem.setX(parent.x); // This is after the x coordinates were set, so we have to set it directly.\n\t\tparent.addRight(stem);\n\t}\n\n}\n\nfunction createAdditionalBeams(elems, asc, beam, isGrace, dy) {\n\tvar beams = [];\n\tvar auxBeams = []; // auxbeam will be {x, y, durlog, single} auxbeam[0] should match with durlog=-4 (16th) (j=-4-durlog)\n\tfor (var i = 0; i < elems.length; i++) {\n\t\tvar elem = elems[i];\n\t\tif (elem.abcelem.rest)\n\t\t\tcontinue;\n\t\tvar furthestHead = elem.heads[(asc) ? 0 : elem.heads.length - 1];\n\t\tvar x = furthestHead.x + ((asc) ? furthestHead.w : 0);\n\t\tvar bary = getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, x);\n\n\t\tvar sy = (asc) ? -1.5 : 1.5;\n\t\tif (isGrace) sy = sy * 2 / 3; // This makes the second beam on grace notes closer to the first one.\n\t\tvar duration = elem.abcelem.duration; // get the duration via abcelem because of triplets\n\t\tif (duration === 0) duration = 0.25; // if this is stemless, then we use quarter note as the duration.\n\t\tfor (var durlog = getDurlog(duration); durlog < -3; durlog++) {\n\t\t\tvar index = -4 - durlog;\n\t\t\tif (auxBeams[index]) {\n\t\t\t\tauxBeams[index].single = false;\n\t\t\t} else {\n\t\t\t\tauxBeams[index] = {\n\t\t\t\t\tx: x + ((asc) ? -0.6 : 0), y: bary + sy * (index + 1),\n\t\t\t\t\tdurlog: durlog, single: true\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (i > 0 && elem.abcelem.beambr && elem.abcelem.beambr <= (index + 1)) {\n\t\t\t\tif (!auxBeams[index].split)\n\t\t\t\t\tauxBeams[index].split = [auxBeams[index].x];\n\t\t\t\tvar xPos = calcXPos(asc, elems[i - 1], elem);\n\t\t\t\tif (auxBeams[index].split[auxBeams[index].split.length - 1] >= xPos[0]) {\n\t\t\t\t\t// the reduction in beams leaves a note unattached so create a small flag for it.\n\t\t\t\t\txPos[0] += elem.w;\n\t\t\t\t}\n\t\t\t\tauxBeams[index].split.push(xPos[0]);\n\t\t\t\tauxBeams[index].split.push(xPos[1]);\n\t\t\t}\n\t\t}\n\n\t\tfor (var j = auxBeams.length - 1; j >= 0; j--) {\n\t\t\tif (i === elems.length - 1 || getDurlog(elems[i + 1].abcelem.duration) > (-j - 4)) {\n\n\t\t\t\tvar auxBeamEndX = x;\n\t\t\t\tvar auxBeamEndY = bary + sy * (j + 1);\n\n\n\t\t\t\tif (auxBeams[j].single) {\n\t\t\t\t\tauxBeamEndX = (i === 0) ? x + 5 : x - 5;\n\t\t\t\t\tauxBeamEndY = getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, auxBeamEndX) + sy * (j + 1);\n\t\t\t\t}\n\t\t\t\tvar b = { startX: auxBeams[j].x, endX: auxBeamEndX, startY: auxBeams[j].y, endY: auxBeamEndY, dy: dy }\n\t\t\t\tif (auxBeams[j].split !== undefined) {\n\t\t\t\t\tvar split = auxBeams[j].split;\n\t\t\t\t\tif (b.endX <= split[split.length - 1]) {\n\t\t\t\t\t\t// the reduction in beams leaves the last note by itself, so create a little flag for it\n\t\t\t\t\t\tsplit[split.length - 1] -= elem.w;\n\t\t\t\t\t}\n\t\t\t\t\tsplit.push(b.endX);\n\t\t\t\t\tb.split = auxBeams[j].split;\n\t\t\t\t}\n\t\t\t\tbeams.push(b);\n\t\t\t\tauxBeams = auxBeams.slice(0, j);\n\t\t\t}\n\t\t}\n\t}\n\treturn beams;\n}\n\nmodule.exports = layoutBeam;\n","function getBarYAt(startx, starty, endx, endy, x) {\n\treturn starty + (endy - starty) / (endx - startx) * (x - startx);\n}\n\nmodule.exports = getBarYAt;\n\n","function getLeftEdgeOfStaff(renderer, getTextSize, voices, brace, bracket) {\n\tvar x = renderer.padding.left;\n\n\t// find out how much space will be taken up by voice headers\n\tvar voiceheaderw = 0;\n\tvar i;\n\tvar size;\n\tfor (i = 0; i < voices.length; i++) {\n\t\tif (voices[i].header) {\n\t\t\tsize = getTextSize.calc(voices[i].header, 'voicefont', '');\n\t\t\tvoiceheaderw = Math.max(voiceheaderw, size.width);\n\t\t}\n\t}\n\tvoiceheaderw = addBraceSize(voiceheaderw, brace, getTextSize);\n\tvoiceheaderw = addBraceSize(voiceheaderw, bracket, getTextSize);\n\n\tif (voiceheaderw) {\n\t\t// Give enough spacing to the right - we use the width of an A for the amount of spacing.\n\t\tvar sizeW = getTextSize.calc(\"A\", 'voicefont', '');\n\t\tvoiceheaderw += sizeW.width;\n\t}\n\tx += voiceheaderw;\n\n\tvar ofs = 0;\n\tofs = setBraceLocation(brace, x, ofs);\n\tofs = setBraceLocation(bracket, x, ofs);\n\treturn x + ofs;\n}\n\nfunction addBraceSize(voiceheaderw, brace, getTextSize) {\n\tif (brace) {\n\t\tfor (var i = 0; i < brace.length; i++) {\n\t\t\tif (brace[i].header) {\n\t\t\t\tvar size = getTextSize.calc(brace[i].header, 'voicefont', '');\n\t\t\t\tvoiceheaderw = Math.max(voiceheaderw, size.width);\n\t\t\t}\n\t\t}\n\t}\n\treturn voiceheaderw;\n}\n\nfunction setBraceLocation(brace, x, ofs) {\n\tif (brace) {\n\t\tfor (var i = 0; i < brace.length; i++) {\n\t\t\tsetLocation(x, brace[i]);\n\t\t\tofs = Math.max(ofs, brace[i].getWidth());\n\t\t}\n\t}\n\treturn ofs;\n}\n\nfunction setLocation(x, element) {\n\telement.x = x;\n}\n\nmodule.exports = getLeftEdgeOfStaff;\n","var getLeftEdgeOfStaff = require('./get-left-edge-of-staff');\n\nfunction layoutInGrid(renderer, staffGroup, timeBasedLayout) {\n\tvar leftEdge = getLeftEdgeOfStaff(renderer, staffGroup.getTextSize, staffGroup.voices, staffGroup.brace, staffGroup.bracket);\n\tvar ret = getTotalDuration(staffGroup, timeBasedLayout.minPadding)\n\tvar totalDuration = ret.totalDuration\n\tvar minSpacing = ret.minSpacing\n\tvar totalWidth = minSpacing * totalDuration\n\tif (timeBasedLayout.minWidth)\n\t\ttotalWidth = Math.max(totalWidth, timeBasedLayout.minWidth)\n\tvar leftAlignPadding = timeBasedLayout.minPadding ? timeBasedLayout.minPadding/2 : 2 // If the padding isn't specified still give it some\n\n\tstaffGroup.startx = leftEdge\n\tstaffGroup.w = totalWidth + leftEdge\n\tfor (var i = 0; i < staffGroup.voices.length; i++) {\n\t\tvar voice = staffGroup.voices[i]\n\t\tvoice.startx = leftEdge\n\t\tvoice.w = totalWidth + leftEdge\n\n\t\tvar x = leftEdge\n\t\tvar afterFixedLeft = false\n\t\tvar durationUnit = 0\n\t\tfor (var j = 0; j < voice.children.length; j++) {\n\t\t\tvar child = voice.children[j]\n\t\t\tif (!afterFixedLeft) {\n\t\t\t\tif (child.duration !== 0) {\n\t\t\t\t\t// We got to the first music element on the line\n\t\t\t\t\tafterFixedLeft = true\n\t\t\t\t\tdurationUnit = (totalWidth + leftEdge - x) / totalDuration\n\t\t\t\t\tstaffGroup.gridStart = x\n\t\t\t\t} else {\n\t\t\t\t\t// We are still doing the preliminary stuff - clef, time sig, etc.\n\t\t\t\t\tchild.x = x\n\t\t\t\t\tx += child.w + child.minspacing\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (afterFixedLeft) {\n\t\t\t\tif (timeBasedLayout.align === 'center')\n\t\t\t\t\tchild.x = x + (child.duration * durationUnit) / 2 - child.w / 2\n\t\t\t\telse {\n\t\t\t\t\t// left align with padding - but no padding for barlines, they should be right aligned.\n\t\t\t\t\t// TODO-PER: it looks better to move bar lines one pixel to right. Not sure why.\n\t\t\t\t\tif (child.duration === 0) {\n\t\t\t\t\t\tchild.x = x + 1 - child.w\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// child.extraw has the width of the accidentals - push the note to the right to take that into consideration. It will be 0 if there is nothing to the left.\n\t\t\t\t\t\tchild.x = x + leftAlignPadding - child.extraw\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tx += child.duration * durationUnit\n\t\t\t}\n\t\t\tfor (var k = 0; k < child.children.length; k++) {\n\t\t\t\tvar grandchild = child.children[k]\n\t\t\t\t// some elements don't have a dx - Tempo, for instance\n\t\t\t\tvar dx = grandchild.dx ? grandchild.dx : 0\n\t\t\t\tgrandchild.x = child.x + dx\n\t\t\t}\n\t\t}\n\t\tstaffGroup.gridEnd = x\n\t}\n\treturn totalWidth\n}\n\nfunction getTotalDuration(staffGroup, timeBasedLayout) {\n\tvar maxSpacing = 0\n\tvar maxCount = 0\n\tfor (var i = 0; i < staffGroup.voices.length; i++) {\n\t\tvar count = 0\n\t\tvar voice = staffGroup.voices[i]\n\t\tfor (var j = 0; j < voice.children.length; j++) {\n\t\t\tvar element = voice.children[j]\n\t\t\tcount += element.duration\n\t\t\tif (element.duration) {\n\t\t\t\tvar width = (element.w+timeBasedLayout) / element.duration\n\t\t\t\tmaxSpacing = Math.max(maxSpacing, width)\n\t\t\t}\n\t\t}\n\t\tmaxCount = Math.max(maxCount, count)\n\t}\n\treturn { totalDuration: maxCount, minSpacing: maxSpacing}\n}\n\nmodule.exports = layoutInGrid;\n","var layoutVoice = require('./voice');\nvar setUpperAndLowerElements = require('./set-upper-and-lower-elements');\nvar layoutStaffGroup = require('./staff-group');\nvar getLeftEdgeOfStaff = require('./get-left-edge-of-staff');\nvar layoutInGrid = require('./layout-in-grid');\n\n// This sets the \"x\" attribute on all the children in abctune.lines\n// It also sets the \"w\" and \"startx\" attributes on \"voices\"\n// It also sets the \"w\" and \"startx\" attributes on \"voices.children\"\nvar layout = function (renderer, abctune, width, space, expandToWidest, timeBasedLayout) {\n\tvar i;\n\tvar abcLine;\n\t// Adjust the x-coordinates to their absolute positions\n\tvar maxWidth = width;\n\tfor (i = 0; i < abctune.lines.length; i++) {\n\t\tabcLine = abctune.lines[i];\n\t\tif (abcLine.staff) {\n\t\t\t// console.log(\"=== line\", i)\n\t\t\tvar thisWidth;\n\t\t\tif (timeBasedLayout !== undefined)\n\t\t\t\tthisWidth = layoutInGrid(renderer, abcLine.staffGroup, timeBasedLayout);\n\t\t\telse\n\t\t\t\tthisWidth = setXSpacing(renderer, maxWidth, space, abcLine.staffGroup, abctune.formatting, i === abctune.lines.length - 1, false);\n\t\t\t// console.log(thisWidth, maxWidth)\n\t\t\tif (Math.round(thisWidth) > Math.round(maxWidth)) { // to take care of floating point weirdness\n\t\t\t\tmaxWidth = thisWidth\n\t\t\t\tif (expandToWidest)\n\t\t\t\t\ti = -1 // do the calculations over with the new width\n\t\t\t}\n\t\t}\n\t}\n\n\t// Layout the beams and add the stems to the beamed notes.\n\tfor (i = 0; i < abctune.lines.length; i++) {\n\t\tabcLine = abctune.lines[i];\n\t\tif (abcLine.staffGroup && abcLine.staffGroup.voices) {\n\t\t\tfor (var j = 0; j < abcLine.staffGroup.voices.length; j++)\n\t\t\t\tlayoutVoice(abcLine.staffGroup.voices[j]);\n\t\t\tsetUpperAndLowerElements(renderer, abcLine.staffGroup);\n\t\t}\n\t}\n\n\t// Set the staff spacing\n\t// TODO-PER: we should have been able to do this by the time we called setUpperAndLowerElements, but for some reason the \"bottom\" element seems to be set as a side effect of setting the X spacing.\n\tfor (i = 0; i < abctune.lines.length; i++) {\n\t\tabcLine = abctune.lines[i];\n\t\tif (abcLine.staffGroup) {\n\t\t\tabcLine.staffGroup.setHeight();\n\t\t}\n\t}\n\treturn maxWidth;\n}\n// Do the x-axis positioning for a single line (a group of related staffs)\nvar setXSpacing = function (renderer, width, space, staffGroup, formatting, isLastLine, debug) {\n\tvar leftEdge = getLeftEdgeOfStaff(renderer, staffGroup.getTextSize, staffGroup.voices, staffGroup.brace, staffGroup.bracket);\n\tvar newspace = space;\n\t//dumpGroup(\"before\", staffGroup)\n\tfor (var it = 0; it < 8; it++) { // TODO-PER: shouldn't need multiple passes, but each pass gets it closer to the right spacing. (Only affects long lines: normal lines break out of this loop quickly.)\n\t\t// console.log(\"iteration\", it)\n\t\tvar ret = layoutStaffGroup(newspace, renderer.minPadding, debug, staffGroup, leftEdge);\n\t\tnewspace = calcHorizontalSpacing(isLastLine, formatting.stretchlast, width + renderer.padding.left, staffGroup.w, newspace, ret.spacingUnits, ret.minSpace, renderer.padding.left + renderer.padding.right);\n\t\tif (debug)\n\t\t\tconsole.log(\"setXSpace\", it, staffGroup.w, newspace, staffGroup.minspace);\n\t\tif (newspace === null) break;\n\t}\n\t//dumpGroup(\"after\",staffGroup)\n\tcenterWholeRests(staffGroup.voices);\n\treturn staffGroup.w - leftEdge\n};\n\nfunction replacer(key, value) {\n\t// Filtering out properties\n\tif (key === 'parent') {\n\t\treturn 'parent';\n\t}\n\tif (key === 'beam') {\n\t\treturn 'beam';\n\t}\n\treturn value;\n}\n\nfunction dumpGroup(label, staffGroup) {\n\tconsole.log(\"=================== \" + label + \" =========================\")\n\tconsole.log(staffGroup)\n\tconsole.log(JSON.stringify(staffGroup, replacer, \"\\t\"))\n}\n\nfunction calcHorizontalSpacing(isLastLine, stretchLast, targetWidth, lineWidth, spacing, spacingUnits, minSpace, padding) {\n\tif (isLastLine) {\n\t\tif (stretchLast === undefined) {\n\t\t\tif (lineWidth / targetWidth < 0.66) return null; // keep this for backward compatibility. The break isn't quite the same for some reason.\n\t\t} else {\n\t\t\t// \"Stretch the last music line of a tune when it lacks less than the float fraction of the page width.\"\n\t\t\tvar lack = 1 - (lineWidth + padding) / targetWidth;\n\t\t\tvar stretch = lack < stretchLast;\n\t\t\tif (!stretch) return null; // don't stretch last line too much\n\t\t}\n\t}\n\tif (Math.abs(targetWidth - lineWidth) < 2) return null; // if we are already near the target width, we're done.\n\tvar relSpace = spacingUnits * spacing;\n\tvar constSpace = lineWidth - relSpace;\n\tif (spacingUnits > 0) {\n\t\tspacing = (targetWidth - constSpace) / spacingUnits;\n\t\tif (spacing * minSpace > 50) {\n\t\t\tspacing = 50 / minSpace;\n\t\t}\n\t\treturn spacing;\n\t}\n\treturn null;\n}\n\nfunction centerWholeRests(voices) {\n\t// whole rests are a special case: if they are by themselves in a measure, then they should be centered.\n\t// (If they are not by themselves, that is probably a user error, but we'll just center it between the two items to either side of it.)\n\tfor (var i = 0; i < voices.length; i++) {\n\t\tvar voice = voices[i];\n\t\t// Look through all of the elements except for the first and last. If the whole note appears there then there isn't anything to center it between anyway.\n\t\tfor (var j = 1; j < voice.children.length - 1; j++) {\n\t\t\tvar absElem = voice.children[j];\n\t\t\tif (absElem.abcelem.rest && (absElem.abcelem.rest.type === 'whole' || absElem.abcelem.rest.type === 'multimeasure')) {\n\t\t\t\tvar before = voice.children[j - 1];\n\t\t\t\tvar after = voice.children[j + 1];\n\t\t\t\tabsElem.center(before, after);\n\t\t\t}\n\t\t}\n\t}\n}\n\nmodule.exports = layout;\n","var spacing = require('../helpers/spacing');\n\nvar setUpperAndLowerElements = function (renderer, staffGroup) {\n\t// Each staff already has the top and bottom set, now we see if there are elements that are always on top and bottom, and resolve their pitch.\n\t// Also, get the overall height of all the staves in this group.\n\tvar lastStaffBottom;\n\tfor (var i = 0; i < staffGroup.staffs.length; i++) {\n\t\tvar staff = staffGroup.staffs[i];\n\t\t// the vertical order of elements that are above is: tempo, part, volume/dynamic, ending/chord, lyric\n\t\t// the vertical order of elements that are below is: lyric, chord, volume/dynamic\n\t\tvar positionY = {\n\t\t\ttempoHeightAbove: 0,\n\t\t\tpartHeightAbove: 0,\n\t\t\tvolumeHeightAbove: 0,\n\t\t\tdynamicHeightAbove: 0,\n\t\t\tendingHeightAbove: 0,\n\t\t\tchordHeightAbove: 0,\n\t\t\tlyricHeightAbove: 0,\n\n\t\t\tlyricHeightBelow: 0,\n\t\t\tchordHeightBelow: 0,\n\t\t\tvolumeHeightBelow: 0,\n\t\t\tdynamicHeightBelow: 0\n\t\t};\n\n\t\tif (renderer.showDebug && renderer.showDebug.indexOf(\"box\") >= 0) {\n\t\t\tstaff.originalTop = staff.top; // This is just being stored for debugging purposes.\n\t\t\tstaff.originalBottom = staff.bottom; // This is just being stored for debugging purposes.\n\t\t}\n\n\t\tincTop(staff, positionY, 'lyricHeightAbove');\n\t\tincTop(staff, positionY, 'chordHeightAbove', staff.specialY.chordLines.above);\n\t\tif (staff.specialY.endingHeightAbove) {\n\t\t\tif (staff.specialY.chordHeightAbove)\n\t\t\t\tstaff.top += 2;\n\t\t\telse\n\t\t\t\tstaff.top += staff.specialY.endingHeightAbove + margin;\n\t\t\tpositionY.endingHeightAbove = staff.top;\n\t\t}\n\t\tif (staff.specialY.dynamicHeightAbove && staff.specialY.volumeHeightAbove) {\n\t\t\tstaff.top += Math.max(staff.specialY.dynamicHeightAbove, staff.specialY.volumeHeightAbove) + margin;\n\t\t\tpositionY.dynamicHeightAbove = staff.top;\n\t\t\tpositionY.volumeHeightAbove = staff.top;\n\t\t} else {\n\t\t\tincTop(staff, positionY, 'dynamicHeightAbove');\n\t\t\tincTop(staff, positionY, 'volumeHeightAbove');\n\t\t}\n\t\tincTop(staff, positionY, 'partHeightAbove');\n\t\tincTop(staff, positionY, 'tempoHeightAbove');\n\n\t\tif (staff.specialY.lyricHeightBelow) {\n\t\t\tstaff.specialY.lyricHeightBelow += renderer.spacing.vocal / spacing.STEP;\n\t\t\tpositionY.lyricHeightBelow = staff.bottom;\n\t\t\tstaff.bottom -= (staff.specialY.lyricHeightBelow + margin);\n\t\t}\n\t\tif (staff.specialY.chordHeightBelow) {\n\t\t\tpositionY.chordHeightBelow = staff.bottom;\n\t\t\tvar hgt = staff.specialY.chordHeightBelow;\n\t\t\tif (staff.specialY.chordLines.below)\n\t\t\t\thgt *= staff.specialY.chordLines.below;\n\t\t\tstaff.bottom -= (hgt + margin);\n\t\t}\n\t\tif (staff.specialY.volumeHeightBelow && staff.specialY.dynamicHeightBelow) {\n\t\t\tpositionY.volumeHeightBelow = staff.bottom;\n\t\t\tpositionY.dynamicHeightBelow = staff.bottom;\n\t\t\tstaff.bottom -= (Math.max(staff.specialY.volumeHeightBelow, staff.specialY.dynamicHeightBelow) + margin);\n\t\t} else if (staff.specialY.volumeHeightBelow) {\n\t\t\tpositionY.volumeHeightBelow = staff.bottom; staff.bottom -= (staff.specialY.volumeHeightBelow + margin);\n\t\t} else if (staff.specialY.dynamicHeightBelow) {\n\t\t\tpositionY.dynamicHeightBelow = staff.bottom; staff.bottom -= (staff.specialY.dynamicHeightBelow + margin);\n\t\t}\n\n\t\tif (renderer.showDebug && renderer.showDebug.indexOf(\"box\") >= 0)\n\t\t\tstaff.positionY = positionY; // This is just being stored for debugging purposes.\n\n\t\tfor (var j = 0; j < staff.voices.length; j++) {\n\t\t\tvar voice = staffGroup.voices[staff.voices[j]];\n\t\t\tsetUpperAndLowerVoiceElements(positionY, voice, renderer.spacing);\n\t\t}\n\t\t// We might need a little space in between staves if the staves haven't been pushed far enough apart by notes or extra vertical stuff.\n\t\t// Only try to put in extra space if this isn't the top staff.\n\t\tif (lastStaffBottom !== undefined) {\n\t\t\tvar thisStaffTop = staff.top - 10;\n\t\t\tvar forcedSpacingBetween = lastStaffBottom + thisStaffTop;\n\t\t\tvar minSpacingInPitches = renderer.spacing.systemStaffSeparation / spacing.STEP;\n\t\t\tvar addedSpace = minSpacingInPitches - forcedSpacingBetween;\n\t\t\tif (addedSpace > 0)\n\t\t\t\tstaff.top += addedSpace;\n\t\t}\n\t\tstaff.top += renderer.spacing.staffTopMargin / spacing.STEP\n\n\t\tlastStaffBottom = 2 - staff.bottom; // the staff starts at position 2 and the bottom variable is negative. Therefore to find out how large the bottom is, we reverse the sign of the bottom, and add the 2 in.\n\n\t\t// Now we need a little margin on the top, so we'll just throw that in.\n\t\t//staff.top += 4;\n\t\t//console.log(\"Staff Y: \",i,heightInPitches,staff.top,staff.bottom);\n\t}\n\t//console.log(\"Staff Height: \",heightInPitches,this.height);\n};\n\nvar margin = 1;\nfunction incTop(staff, positionY, item, count) {\n\tif (staff.specialY[item]) {\n\t\tvar height = staff.specialY[item];\n\t\tif (count)\n\t\t\theight *= count;\n\t\tstaff.top += height + margin;\n\t\tpositionY[item] = staff.top;\n\t}\n}\n\nfunction setUpperAndLowerVoiceElements(positionY, voice, spacing) {\n\tvar i;\n\tvar abselem;\n\tfor (i = 0; i < voice.children.length; i++) {\n\t\tabselem = voice.children[i];\n\t\tsetUpperAndLowerAbsoluteElements(positionY, abselem, spacing);\n\t}\n\tfor (i = 0; i < voice.otherchildren.length; i++) {\n\t\tabselem = voice.otherchildren[i];\n\t\tswitch (abselem.type) {\n\t\t\tcase 'CrescendoElem':\n\t\t\t\tsetUpperAndLowerCrescendoElements(positionY, abselem);\n\t\t\t\tbreak;\n\t\t\tcase 'DynamicDecoration':\n\t\t\t\tsetUpperAndLowerDynamicElements(positionY, abselem);\n\t\t\t\tbreak;\n\t\t\tcase 'EndingElem':\n\t\t\t\tsetUpperAndLowerEndingElements(positionY, abselem);\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\n// For each of the relative elements that can't be placed in advance (because their vertical placement depends on everything\n// else on the line), this iterates through them and sets their pitch. By the time this is called, specialYResolved contains a\n// hash with the vertical placement (in pitch units) for each type.\n// TODO-PER: I think this needs to be separated by \"above\" and \"below\". How do we know that for dynamics at the point where they are being defined, though? We need a pass through all the relative elements to set \"above\" and \"below\".\nfunction setUpperAndLowerAbsoluteElements(specialYResolved, element, spacing) {\n\t// specialYResolved contains the actual pitch for each of the classes of elements.\n\tfor (var i = 0; i < element.children.length; i++) {\n\t\tvar child = element.children[i];\n\t\tfor (var key in element.specialY) { // for each class of element that needs to be placed vertically\n\t\t\tif (element.specialY.hasOwnProperty(key)) {\n\t\t\t\tif (child[key]) { // If this relative element has defined a height for this class of element\n\t\t\t\t\tchild.pitch = specialYResolved[key];\n\t\t\t\t\tif (child.top === undefined) { // TODO-PER: HACK! Not sure this is the right place to do this.\n\t\t\t\t\t\tif (child.type === 'TempoElement') {\n\t\t\t\t\t\t\tsetUpperAndLowerTempoElement(specialYResolved, child);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsetUpperAndLowerRelativeElements(specialYResolved, child, spacing);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telement.pushTop(child.top);\n\t\t\t\t\t\telement.pushBottom(child.bottom);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction setUpperAndLowerCrescendoElements(positionY, element) {\n\tif (element.dynamicHeightAbove)\n\t\telement.pitch = positionY.dynamicHeightAbove;\n\telse\n\t\telement.pitch = positionY.dynamicHeightBelow;\n}\n\nfunction setUpperAndLowerDynamicElements(positionY, element) {\n\tif (element.volumeHeightAbove)\n\t\telement.pitch = positionY.volumeHeightAbove;\n\telse\n\t\telement.pitch = positionY.volumeHeightBelow;\n}\n\nfunction setUpperAndLowerEndingElements(positionY, element) {\n\telement.pitch = positionY.endingHeightAbove - 2;\n}\n\nfunction setUpperAndLowerTempoElement(positionY, element) {\n\telement.pitch = positionY.tempoHeightAbove;\n\telement.top = positionY.tempoHeightAbove;\n\telement.bottom = positionY.tempoHeightAbove;\n\tif (element.note) {\n\t\tvar tempoPitch = element.pitch - element.totalHeightInPitches + 1; // The pitch we receive is the top of the allotted area: change that to practically the bottom.\n\t\telement.note.top = tempoPitch;\n\t\telement.note.bottom = tempoPitch;\n\t\tfor (var i = 0; i < element.note.children.length; i++) {\n\t\t\tvar child = element.note.children[i];\n\t\t\tchild.top += tempoPitch;\n\t\t\tchild.bottom += tempoPitch;\n\t\t\tchild.pitch += tempoPitch;\n\t\t\tif (child.pitch2 !== undefined)\n\t\t\t\tchild.pitch2 += tempoPitch;\n\t\t}\n\t}\n}\n\nfunction setUpperAndLowerRelativeElements(positionY, element, renderSpacing) {\n\tswitch (element.type) {\n\t\tcase \"part\":\n\t\t\telement.top = positionY.partHeightAbove + element.height;\n\t\t\telement.bottom = positionY.partHeightAbove;\n\t\t\tbreak;\n\t\tcase \"text\":\n\t\tcase \"chord\":\n\t\t\tif (element.chordHeightAbove) {\n\t\t\t\telement.top = positionY.chordHeightAbove;\n\t\t\t\telement.bottom = positionY.chordHeightAbove;\n\t\t\t} else {\n\t\t\t\telement.top = positionY.chordHeightBelow;\n\t\t\t\telement.bottom = positionY.chordHeightBelow;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"lyric\":\n\t\t\tif (element.lyricHeightAbove) {\n\t\t\t\telement.top = positionY.lyricHeightAbove;\n\t\t\t\telement.bottom = positionY.lyricHeightAbove;\n\t\t\t} else {\n\t\t\t\telement.top = positionY.lyricHeightBelow + renderSpacing.vocal / spacing.STEP;\n\t\t\t\telement.bottom = positionY.lyricHeightBelow + renderSpacing.vocal / spacing.STEP;\n\t\t\t\telement.pitch -= renderSpacing.vocal / spacing.STEP;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"debug\":\n\t\t\telement.top = positionY.chordHeightAbove;\n\t\t\telement.bottom = positionY.chordHeightAbove;\n\t\t\tbreak;\n\t}\n\tif (element.pitch === undefined || element.top === undefined)\n\t\tconsole.error(\"RelativeElement position not set.\", element.type, element.pitch, element.top, positionY);\n}\n\nmodule.exports = setUpperAndLowerElements;\n","var layoutVoiceElements = require('./voice-elements');\n\nfunction checkLastBarX(voices) {\n\tvar maxX = 0;\n\tfor (var i = 0; i < voices.length; i++) {\n\t\tvar curVoice = voices[i];\n\t\tif (curVoice.children.length > 0) {\n\t\t\tvar lastChild = curVoice.children.length - 1;\n\t\t\tvar maxChild = curVoice.children[lastChild];\n\t\t\tif (maxChild.abcelem.el_type === 'bar') {\n\t\t\t\tvar barX = maxChild.children[0].x;\n\t\t\t\tif (barX > maxX) {\n\t\t\t\t\tmaxX = barX;\n\t\t\t\t} else {\n\t\t\t\t\tmaxChild.children[0].x = maxX;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nvar layoutStaffGroup = function (spacing, minPadding, debug, staffGroup, leftEdge) {\n\tvar epsilon = 0.0000001; // Fudging for inexactness of floating point math.\n\tvar spacingunits = 0; // number of times we will have ended up using the spacing distance (as opposed to fixed width distances)\n\tvar minspace = 1000; // a big number to start off with - used to find out what the smallest space between two notes is -- GD 2014.1.7\n\n\tvar x = leftEdge;\n\tstaffGroup.startx = x;\n\tvar i;\n\n\tvar currentduration = 0;\n\tif (debug) console.log(\"init layout\", spacing);\n\tfor (i = 0; i < staffGroup.voices.length; i++) {\n\t\tlayoutVoiceElements.beginLayout(x, staffGroup.voices[i]);\n\t}\n\n\tvar spacingunit = 0; // number of spacingunits coming from the previously laid out element to this one\n\twhile (!finished(staffGroup.voices)) {\n\t\t// find first duration level to be laid out among candidates across voices\n\t\tcurrentduration = null; // candidate smallest duration level\n\t\tfor (i = 0; i < staffGroup.voices.length; i++) {\n\t\t\tif (!layoutVoiceElements.layoutEnded(staffGroup.voices[i]) && (!currentduration || getDurationIndex(staffGroup.voices[i]) < currentduration))\n\t\t\t\tcurrentduration = getDurationIndex(staffGroup.voices[i]);\n\t\t}\n\n\n\t\t// isolate voices at current duration level\n\t\tvar currentvoices = [];\n\t\tvar othervoices = [];\n\t\tfor (i = 0; i < staffGroup.voices.length; i++) {\n\t\t\tvar durationIndex = getDurationIndex(staffGroup.voices[i]);\n\t\t\t// PER: Because of the inexactness of JS floating point math, we just get close.\n\t\t\tif (durationIndex - currentduration > epsilon) {\n\t\t\t\tothervoices.push(staffGroup.voices[i]);\n\t\t\t\t//console.log(\"out: voice \",i);\n\t\t\t} else {\n\t\t\t\tcurrentvoices.push(staffGroup.voices[i]);\n\t\t\t\t//if (debug) console.log(\"in: voice \",i);\n\t\t\t}\n\t\t}\n\n\t\t// among the current duration level find the one which needs starting furthest right\n\t\tspacingunit = 0; // number of spacingunits coming from the previously laid out element to this one\n\t\tvar spacingduration = 0;\n\t\tfor (i = 0; i < currentvoices.length; i++) {\n\t\t\t//console.log(\"greatest spacing unit\", x, layoutVoiceElements.getNextX(currentvoices[i]), layoutVoiceElements.getSpacingUnits(currentvoices[i]), currentvoices[i].spacingduration);\n\t\t\tif (layoutVoiceElements.getNextX(currentvoices[i]) > x) {\n\t\t\t\tx = layoutVoiceElements.getNextX(currentvoices[i]);\n\t\t\t\tspacingunit = layoutVoiceElements.getSpacingUnits(currentvoices[i]);\n\t\t\t\tspacingduration = currentvoices[i].spacingduration;\n\t\t\t}\n\t\t}\n\t\tspacingunits += spacingunit;\n\t\tminspace = Math.min(minspace, spacingunit);\n\t\tif (debug) console.log(\"currentduration: \", currentduration, spacingunits, minspace);\n\n\t\tvar lastTopVoice = undefined;\n\t\tfor (i = 0; i < currentvoices.length; i++) {\n\t\t\tvar v = currentvoices[i];\n\t\t\tif (v.voicenumber === 0)\n\t\t\t\tlastTopVoice = i;\n\t\t\tvar topVoice = (lastTopVoice !== undefined && currentvoices[lastTopVoice].voicenumber !== v.voicenumber) ? currentvoices[lastTopVoice] : undefined;\n\t\t\tif (!isSameStaff(v, topVoice))\n\t\t\t\ttopVoice = undefined;\n\t\t\tvar voicechildx = layoutVoiceElements.layoutOneItem(x, spacing, v, minPadding, topVoice);\n\t\t\tvar dx = voicechildx - x;\n\t\t\tif (dx > 0) {\n\t\t\t\tx = voicechildx; //update x\n\t\t\t\tfor (var j = 0; j < i; j++) { // shift over all previously laid out elements\n\t\t\t\t\tlayoutVoiceElements.shiftRight(dx, currentvoices[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// remove the value of already counted spacing units in other voices (e.g. if a voice had planned to use up 5 spacing units but is not in line to be laid out at this duration level - where we've used 2 spacing units - then we must use up 3 spacing units, not 5)\n\t\tfor (i = 0; i < othervoices.length; i++) {\n\t\t\tothervoices[i].spacingduration -= spacingduration;\n\t\t\tlayoutVoiceElements.updateNextX(x, spacing, othervoices[i]); // adjust other voices expectations\n\t\t}\n\n\t\t// update indexes of currently laid out elems\n\t\tfor (i = 0; i < currentvoices.length; i++) {\n\t\t\tvar voice = currentvoices[i];\n\t\t\tlayoutVoiceElements.updateIndices(voice);\n\t\t}\n\t} // finished laying out\n\n\n\t// find the greatest remaining x as a base for the width\n\tfor (i = 0; i < staffGroup.voices.length; i++) {\n\t\tif (layoutVoiceElements.getNextX(staffGroup.voices[i]) > x) {\n\t\t\tx = layoutVoiceElements.getNextX(staffGroup.voices[i]);\n\t\t\tspacingunit = layoutVoiceElements.getSpacingUnits(staffGroup.voices[i]);\n\t\t}\n\t}\n\n\t// adjust lastBar when needed (multi staves)\n\tcheckLastBarX(staffGroup.voices);\n\t//console.log(\"greatest remaining\",spacingunit,x);\n\tspacingunits += spacingunit;\n\tstaffGroup.setWidth(x);\n\n\treturn { spacingUnits: spacingunits, minSpace: minspace };\n};\n\n\nfunction finished(voices) {\n\tfor (var i = 0; i < voices.length; i++) {\n\t\tif (!layoutVoiceElements.layoutEnded(voices[i])) return false;\n\t}\n\treturn true;\n}\n\nfunction getDurationIndex(element) {\n\treturn element.durationindex - (element.children[element.i] && (element.children[element.i].duration > 0) ? 0 : 0.0000005); // if the ith element doesn't have a duration (is not a note), its duration index is fractionally before. This enables CLEF KEYSIG TIMESIG PART, etc. to be laid out before we get to the first note of other voices\n}\n\nfunction isSameStaff(voice1, voice2) {\n\tif (!voice1 || !voice1.staff || !voice1.staff.voices || voice1.staff.voices.length === 0)\n\t\treturn false;\n\tif (!voice2 || !voice2.staff || !voice2.staff.voices || voice2.staff.voices.length === 0)\n\t\treturn false;\n\treturn (voice1.staff.voices[0] === voice2.staff.voices[0]);\n}\n\nmodule.exports = layoutStaffGroup;\n","var getBarYAt = require('./get-bar-y-at');\n\nfunction layoutTriplet(element) {\n\t// TODO end and beginning of line (PER: P.S. I'm not sure this can happen: I think the parser will always specify both the start and end points.)\n\tif (element.anchor1 && element.anchor2) {\n\t\telement.hasBeam = !!element.anchor1.parent.beam && element.anchor1.parent.beam === element.anchor2.parent.beam;\n\t\tvar beam = element.anchor1.parent.beam;\n\t\t// if hasBeam is true, then the first and last element in the triplet have the same beam.\n\t\t// We also need to check if the beam doesn't contain other notes so that `(3 dcdcc` will do a bracket.\n\t\tif (element.hasBeam && (beam.elems[0] !== element.anchor1.parent || beam.elems[beam.elems.length - 1] !== element.anchor2.parent))\n\t\t\telement.hasBeam = false;\n\n\t\tif (element.hasBeam) {\n\t\t\t// If there is a beam then we don't need to draw anything except the text. The beam could either be above or below.\n\t\t\tvar left = isAbove(beam) ? element.anchor1.x + element.anchor1.w : element.anchor1.x;\n\t\t\telement.yTextPos = heightAtMidpoint(left, element.anchor2.x, beam);\n\t\t\telement.yTextPos += isAbove(beam) ? 3 : -2; // This creates some space between the beam and the number.\n\t\t\telement.xTextPos = xAtMidpoint(left, element.anchor2.x);\n\t\t\telement.top = element.yTextPos + 1;\n\t\t\telement.bottom = element.yTextPos - 2;\n\t\t\tif (isAbove(beam))\n\t\t\t\telement.endingHeightAbove = 4;\n\t\t} else {\n\t\t\t// If there isn't a beam, then we need to draw the bracket and the text. The bracket is always above.\n\t\t\t// The bracket is never lower than the 'a' line, but is 4 pitches above the first and last notes. If there is\n\t\t\t// a tall note in the middle, the bracket is horizontal and above the highest note.\n\t\t\telement.startNote = Math.max(element.anchor1.parent.top, 9) + 4;\n\t\t\telement.endNote = Math.max(element.anchor2.parent.top, 9) + 4;\n\t\t\t// If it starts or ends on a rest, make the beam horizontal\n\t\t\tif (element.anchor1.parent.type === \"rest\" && element.anchor2.parent.type !== \"rest\")\n\t\t\t\telement.startNote = element.endNote;\n\t\t\telse if (element.anchor2.parent.type === \"rest\" && element.anchor1.parent.type !== \"rest\")\n\t\t\t\telement.endNote = element.startNote;\n\t\t\t// See if the middle note is really high.\n\t\t\tvar max = 0;\n\t\t\tfor (var i = 0; i < element.middleElems.length; i++) {\n\t\t\t\tmax = Math.max(max, element.middleElems[i].top);\n\t\t\t}\n\t\t\tmax += 4;\n\t\t\tif (max > element.startNote || max > element.endNote) {\n\t\t\t\telement.startNote = max;\n\t\t\t\telement.endNote = max;\n\t\t\t}\n\t\t\tif (element.flatBeams) {\n\t\t\t\telement.startNote = Math.max(element.startNote, element.endNote);\n\t\t\t\telement.endNote = Math.max(element.startNote, element.endNote);\n\t\t\t}\n\n\t\t\telement.yTextPos = element.startNote + (element.endNote - element.startNote) / 2;\n\t\t\telement.xTextPos = element.anchor1.x + (element.anchor2.x + element.anchor2.w - element.anchor1.x) / 2;\n\t\t\telement.top = element.yTextPos + 1;\n\t\t}\n\t}\n\tdelete element.middleElems;\n\tdelete element.flatBeams;\n}\n\nfunction isAbove(beam) {\n\treturn beam.stemsUp;\n}\n\n// We can't just use the entire beam for the calculation. The range has to be passed in, because the beam might extend into some unrelated notes. for instance, (3_a'f'e'f'2 when L:16\nfunction heightAtMidpoint(startX, endX, beam) {\n\tif (beam.beams.length === 0)\n\t\treturn 0;\n\tbeam = beam.beams[0];\n\tvar midPoint = startX + (endX - startX) / 2;\n\treturn getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, midPoint);\n}\n\nfunction xAtMidpoint(startX, endX) {\n\treturn startX + (endX - startX) / 2;\n}\n\nmodule.exports = layoutTriplet;\n","var VoiceElement = function VoiceElements() { }\n\nVoiceElement.beginLayout = function (startx, voice) {\n\tvoice.i = 0;\n\tvoice.durationindex = 0;\n\t//this.ii=this.children.length;\n\tvoice.startx = startx;\n\tvoice.minx = startx; // furthest left to where negatively positioned elements are allowed to go\n\tvoice.nextx = startx; // x position where the next element of this voice should be placed assuming no other voices and no fixed width constraints\n\tvoice.spacingduration = 0; // duration left to be laid out in current iteration (omitting additional spacing due to other aspects, such as bars, dots, sharps and flats)\n};\n\nVoiceElement.layoutEnded = function (voice) {\n\treturn (voice.i >= voice.children.length);\n};\n\nVoiceElement.getNextX = function (voice) {\n\treturn Math.max(voice.minx, voice.nextx);\n};\n\n// number of spacing units expected for next positioning\nVoiceElement.getSpacingUnits = function (voice) {\n\treturn Math.sqrt(voice.spacingduration * 8);\n};\n\n// Try to layout the element at index this.i\n// x - position to try to layout the element at\n// spacing - base spacing\n// can't call this function more than once per iteration\nVoiceElement.layoutOneItem = function (x, spacing, voice, minPadding, firstVoice) {\n\tvar child = voice.children[voice.i];\n\tif (!child) return 0;\n\tvar er = x - voice.minx; // available extrawidth to the left\n\tvar pad = voice.durationindex + child.duration > 0 ? minPadding : 0; // only add padding to the items that aren't fixed to the left edge.\n\t// See if this item overlaps the item in the first voice. If firstVoice is undefined then there's nothing to compare.\n\tif (child.abcelem.el_type === \"note\" && !child.abcelem.rest && voice.voicenumber !== 0 && firstVoice) {\n\t\tvar firstChild = firstVoice.children[firstVoice.i];\n\t\t// It overlaps if the either the child's top or bottom is inside the firstChild's or at least within 1\n\t\t// A special case is if the element is on the same line then it can share a note head, if the notehead is the same\n\t\tvar overlaps = firstChild &&\n\t\t\t((child.abcelem.maxpitch <= firstChild.abcelem.maxpitch + 1 && child.abcelem.maxpitch >= firstChild.abcelem.minpitch - 1) ||\n\t\t\t\t(child.abcelem.minpitch <= firstChild.abcelem.maxpitch + 1 && child.abcelem.minpitch >= firstChild.abcelem.minpitch - 1))\n\t\t// See if they can share a note head\n\t\tif (overlaps && child.abcelem.minpitch === firstChild.abcelem.minpitch && child.abcelem.maxpitch === firstChild.abcelem.maxpitch &&\n\t\t\tfirstChild.heads && firstChild.heads.length > 0 && child.heads && child.heads.length > 0 &&\n\t\t\tfirstChild.heads[0].c === child.heads[0].c)\n\t\t\toverlaps = false;\n\t\t// If this note overlaps the note in the first voice and we haven't moved the note yet (this can be called multiple times)\n\t\tif (overlaps) {\n\t\t\t// I think that firstChild should always have at least one note head, but defensively make sure.\n\t\t\t// There was a problem with this being called more than once so if a value is adjusted then it is saved so it is only adjusted once.\n\t\t\tvar firstChildNoteWidth = firstChild.heads && firstChild.heads.length > 0 ? firstChild.heads[0].realWidth : firstChild.fixed.w;\n\t\t\tif (!child.adjustedWidth)\n\t\t\t\tchild.adjustedWidth = firstChildNoteWidth + child.w;\n\t\t\tchild.w = child.adjustedWidth\n\t\t\tfor (var j = 0; j < child.children.length; j++) {\n\t\t\t\tvar relativeChild = child.children[j];\n\t\t\t\tif (relativeChild.name.indexOf(\"accidental\") < 0) {\n\t\t\t\t\tif (!relativeChild.adjustedWidth)\n\t\t\t\t\t\trelativeChild.adjustedWidth = relativeChild.dx + firstChildNoteWidth;\n\t\t\t\t\trelativeChild.dx = relativeChild.adjustedWidth\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t}\n\tvar extraWidth = getExtraWidth(child, pad);\n\tif (er < extraWidth) { // shift right by needed amount\n\t\t// There's an exception if a bar element is after a Part element, there is no shift.\n\t\tif (voice.i === 0 || child.type !== 'bar' || (voice.children[voice.i - 1].type !== 'part' && voice.children[voice.i - 1].type !== 'tempo'))\n\t\t\tx += extraWidth - er;\n\t}\n\tchild.setX(x);\n\n\tvoice.spacingduration = child.duration;\n\t//update minx\n\tvoice.minx = x + getMinWidth(child); // add necessary layout space\n\tif (voice.i !== voice.children.length - 1) voice.minx += child.minspacing; // add minimumspacing except on last elem\n\n\tthis.updateNextX(x, spacing, voice);\n\n\t// contribute to staff y position\n\t//this.staff.top = Math.max(child.top,this.staff.top);\n\t//this.staff.bottom = Math.min(child.bottom,this.staff.bottom);\n\n\treturn x; // where we end up having placed the child\n};\n\nVoiceElement.shiftRight = function (dx, voice) {\n\tvar child = voice.children[voice.i];\n\tif (!child) return;\n\tchild.setX(child.x + dx);\n\tvoice.minx += dx;\n\tvoice.nextx += dx;\n};\n\n// call when spacingduration has been updated\nVoiceElement.updateNextX = function (x, spacing, voice) {\n\tvoice.nextx = x + (spacing * this.getSpacingUnits(voice));\n};\n\nVoiceElement.updateIndices = function (voice) {\n\tif (!this.layoutEnded(voice)) {\n\t\tvoice.durationindex += voice.children[voice.i].duration;\n\t\tif (voice.children[voice.i].type === 'bar') voice.durationindex = Math.round(voice.durationindex * 64) / 64; // everytime we meet a barline, do rounding to nearest 64th\n\t\tvoice.i++;\n\t}\n};\n\nfunction getExtraWidth(child, minPadding) { // space needed to the left of the note\n\tvar padding = 0;\n\tif (child.type === 'note' || child.type === 'bar')\n\t\tpadding = minPadding;\n\treturn -child.extraw + padding;\n}\n\nfunction getMinWidth(child) { // absolute space taken to the right of the note\n\treturn child.w;\n}\n\nmodule.exports = VoiceElement;\n","var layoutBeam = require('./beam');\nvar getBarYAt = require('./get-bar-y-at');\nvar layoutTriplet = require('./triplet');\n\nvar layoutVoice = function (voice) {\n\tfor (var i = 0; i < voice.beams.length; i++) {\n\t\tif (voice.beams[i].type === 'BeamElem') {\n\t\t\tlayoutBeam(voice.beams[i]);\n\t\t\tmoveDecorations(voice.beams[i]);\n\t\t\t// The above will change the top and bottom of the abselem children, so see if we need to expand our range.\n\t\t\tfor (var j = 0; j < voice.beams[i].elems.length; j++) {\n\t\t\t\tvoice.adjustRange(voice.beams[i].elems[j]);\n\t\t\t}\n\t\t}\n\t}\n\tvoice.staff.specialY.chordLines = setLaneForChord(voice.children);\n\n\t// Now we can layout the triplets\n\tfor (i = 0; i < voice.otherchildren.length; i++) {\n\t\tvar child = voice.otherchildren[i];\n\t\tif (child.type === 'TripletElem') {\n\t\t\tlayoutTriplet(child);\n\t\t\tvoice.adjustRange(child);\n\t\t}\n\t}\n\tvoice.staff.top = Math.max(voice.staff.top, voice.top);\n\tvoice.staff.bottom = Math.min(voice.staff.bottom, voice.bottom);\n};\n\nfunction moveDecorations(beam) {\n\tvar padding = 1.5; // This is the vertical padding between elements, in pitches.\n\tfor (var ch = 0; ch < beam.elems.length; ch++) {\n\t\tvar child = beam.elems[ch];\n\t\tif (child.top) {\n\t\t\t// We now know where the ornaments should have been placed, so move them if they would overlap.\n\t\t\tvar top = yAtNote(child, beam);\n\t\t\tfor (var i = 0; i < child.children.length; i++) {\n\t\t\t\tvar el = child.children[i];\n\t\t\t\tif (el.klass === 'ornament' && el.position !== 'below') {\n\t\t\t\t\tif (el.bottom - padding < top) {\n\t\t\t\t\t\tvar distance = top - el.bottom + padding; // Find the distance that it needs to move and add a little margin so the element doesn't touch the beam.\n\t\t\t\t\t\tel.bottom += distance;\n\t\t\t\t\t\tel.top += distance;\n\t\t\t\t\t\tel.pitch += distance;\n\t\t\t\t\t\ttop = child.top = el.top;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction placeInLane(rightMost, relElem) {\n\t// These items are centered so figure the coordinates accordingly.\n\t// The font reports some extra space so the margin is built in.\n\tvar xCoords = relElem.getChordDim();\n\tif (xCoords) {\n\t\tfor (var i = 0; i < rightMost.length; i++) {\n\t\t\tvar fits = rightMost[i] < xCoords.left;\n\t\t\tif (fits) {\n\t\t\t\tif (i > 0)\n\t\t\t\t\trelElem.putChordInLane(i);\n\t\t\t\trightMost[i] = xCoords.right;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t// If we didn't return early, then we need a new row\n\t\trightMost.push(xCoords.right);\n\t\trelElem.putChordInLane(rightMost.length - 1);\n\t}\n}\n\nfunction setLaneForChord(absElems) {\n\t// Criteria:\n\t// 1) lane numbers start from the bottom so that as many items as possible are in lane 0, closest to the music.\n\t// 2) a chord can have more than one line (for instance \"C\\nD\") each line is a lane.\n\t// 3) if two adjoining items would touch then push the second one to the next lane.\n\t// 4) use as many lanes as is necessary to get everything to not touch.\n\t// 5) leave a margin between items, so use another lane if the chords would have less than a character's width.\n\t// 6) if the chord only has one character, allow it to be closer than if the chord has more than one character.\n\tvar rightMostAbove = [0];\n\tvar rightMostBelow = [0];\n\tvar i;\n\tvar j;\n\tvar relElem;\n\tfor (i = 0; i < absElems.length; i++) {\n\t\tfor (j = 0; j < absElems[i].children.length; j++) {\n\t\t\trelElem = absElems[i].children[j];\n\t\t\tif (relElem.chordHeightAbove) {\n\t\t\t\tplaceInLane(rightMostAbove, relElem);\n\t\t\t}\n\t\t}\n\t\tfor (j = absElems[i].children.length - 1; j >= 0; j--) {\n\t\t\trelElem = absElems[i].children[j];\n\t\t\tif (relElem.chordHeightBelow) {\n\t\t\t\tplaceInLane(rightMostBelow, relElem);\n\t\t\t}\n\t\t}\n\t}\n\t// If we used a second line, then we need to go back and set the first lines.\n\t// Also we need to flip the indexes of the names so that we can count from the top line.\n\tif (rightMostAbove.length > 1 || rightMostBelow.length > 1)\n\t\tsetLane(absElems, rightMostAbove.length, rightMostBelow.length);\n\treturn { above: rightMostAbove.length, below: rightMostBelow.length };\n}\n\nfunction numAnnotationsBelow(absElem) {\n\tvar count = 0;\n\tfor (var j = 0; j < absElem.children.length; j++) {\n\t\tvar relElem = absElem.children[j];\n\t\tif (relElem.chordHeightBelow)\n\t\t\tcount++;\n\t}\n\treturn count;\n}\n\nfunction setLane(absElems, numLanesAbove, numLanesBelow) {\n\tfor (var i = 0; i < absElems.length; i++) {\n\t\tvar below = numAnnotationsBelow(absElems[i]);\n\t\tfor (var j = 0; j < absElems[i].children.length; j++) {\n\t\t\tvar relElem = absElems[i].children[j];\n\t\t\tif (relElem.chordHeightAbove) {\n\t\t\t\trelElem.invertLane(numLanesAbove);\n\t\t\t\t// } else if (relElem.chordHeightBelow) {\n\t\t\t\t// \trelElem.invertLane(below);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction yAtNote(element, beam) {\n\tbeam = beam.beams[0];\n\treturn getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, element.x);\n}\n\n\nmodule.exports = layoutVoice;\n","// abc_renderer.js: API to render to SVG/Raphael/whatever rendering engine\n\n/*global Math */\n\nvar spacing = require('./helpers/spacing');\nvar Svg = require('./svg');\n\n/**\n * Implements the API for rendering ABCJS Abstract Rendering Structure to a canvas/paper (e.g. SVG, Raphael, etc)\n * @param {Object} paper\n */\nvar Renderer = function (paper) {\n\tthis.paper = new Svg(paper);\n\tthis.controller = null;\n\n\tthis.space = 3 * spacing.SPACE;\n\tthis.padding = {}; // renderer's padding is managed by the controller\n\tthis.reset();\n\tthis.firefox112 = navigator.userAgent.indexOf('Firefox/112.0') >= 0\n};\n\nRenderer.prototype.reset = function () {\n\n\tthis.paper.clear();\n\tthis.y = 0;\n\tthis.abctune = null;\n\tthis.path = null;\n\tthis.isPrint = false;\n\tthis.lineThickness = 0;\n\tthis.initVerticalSpace();\n};\n\nRenderer.prototype.newTune = function (abcTune) {\n\tthis.abctune = abcTune; // TODO-PER: this is just to get the font info.\n\tthis.setVerticalSpace(abcTune.formatting);\n\t//this.measureNumber = null;\n\t//this.noteNumber = null;\n\tthis.isPrint = abcTune.media === 'print';\n\tthis.setPadding(abcTune);\n};\n\nRenderer.prototype.setLineThickness = function (lineThickness) {\n\tthis.lineThickness = lineThickness\n};\n\nRenderer.prototype.setPaddingOverride = function (params) {\n\tthis.paddingOverride = {\n\t\ttop: params.paddingtop, bottom: params.paddingbottom,\n\t\tright: params.paddingright, left: params.paddingleft\n\t};\n};\n\nRenderer.prototype.setPadding = function (abctune) {\n\t// If the padding is set in the tune, then use that.\n\t// Otherwise, if the padding is set in the override, use that.\n\t// Otherwise, use the defaults (there are a different set of defaults for screen and print.)\n\tfunction setPaddingVariable(self, paddingKey, formattingKey, printDefault, screenDefault) {\n\t\tif (abctune.formatting[formattingKey] !== undefined)\n\t\t\tself.padding[paddingKey] = abctune.formatting[formattingKey];\n\t\telse if (self.paddingOverride[paddingKey] !== undefined)\n\t\t\tself.padding[paddingKey] = self.paddingOverride[paddingKey];\n\t\telse if (self.isPrint)\n\t\t\tself.padding[paddingKey] = printDefault;\n\t\telse\n\t\t\tself.padding[paddingKey] = screenDefault;\n\t}\n\t// 1cm x 0.393701in/cm x 72pt/in x 1.33px/pt = 38px\n\t// 1.8cm x 0.393701in/cm x 72pt/in x 1.33px/pt = 68px\n\tsetPaddingVariable(this, 'top', 'topmargin', 38, 15);\n\tsetPaddingVariable(this, 'bottom', 'botmargin', 38, 15);\n\tsetPaddingVariable(this, 'left', 'leftmargin', 68, 15);\n\tsetPaddingVariable(this, 'right', 'rightmargin', 68, 15);\n};\n\n/**\n * Some of the items on the page are not scaled, so adjust them in the opposite direction of scaling to cancel out the scaling.\n * @param {float} scale\n */\nRenderer.prototype.adjustNonScaledItems = function (scale) {\n\tthis.padding.top /= scale;\n\tthis.padding.bottom /= scale;\n\tthis.padding.left /= scale;\n\tthis.padding.right /= scale;\n\tthis.abctune.formatting.headerfont.size /= scale;\n\tthis.abctune.formatting.footerfont.size /= scale;\n};\n\n/**\n * Set the the values for all the configurable vertical space options.\n */\nRenderer.prototype.initVerticalSpace = function () {\n\t// conversion: 37.7953 = conversion factor for cm to px.\n\t// All of the following values are in px.\n\tthis.spacing = {\n\t\tcomposer: 7.56, // Set the vertical space above the composer.\n\t\tgraceBefore: 8.67, // Define the space before, inside and after the grace notes.\n\t\tgraceInside: 10.67,\n\t\tgraceAfter: 16,\n\t\tinfo: 0, // Set the vertical space above the infoline.\n\t\tlineSkipFactor: 1.1, // Set the factor for spacing between lines of text. (multiply this by the font size)\n\t\tmusic: 7.56, // Set the vertical space above the first staff.\n\t\tparagraphSkipFactor: 0.4, // Set the factor for spacing between text paragraphs. (multiply this by the font size)\n\t\tparts: 11.33, // Set the vertical space above a new part.\n\t\tslurHeight: 1.0, // Set the slur height factor.\n\t\tstaffSeparation: 61.33, // Do not put a staff system closer than from the previous system.\n\t\tstaffTopMargin: 0,\n\t\tstemHeight: 26.67 + 10, // Set the stem height.\n\t\tsubtitle: 3.78, // Set the vertical space above the subtitle.\n\t\tsystemStaffSeparation: 48, // Do not place the staves closer than inside a system. * This values applies to all staves when in the tune header. Otherwise, it applies to the next staff\n\t\ttext: 18.9, // Set the vertical space above the history.\n\t\ttitle: 7.56, // Set the vertical space above the title.\n\t\ttop: 30.24, //Set the vertical space above the tunes and on the top of the continuation pages.\n\t\tvocal: 0, // Set the vertical space above the lyrics under the staves.\n\t\twords: 0 // Set the vertical space above the lyrics at the end of the tune.\n\t};\n\t/*\n\tTODO-PER: Handle the x-coordinate spacing items, too.\nmaxshrink Default: 0.65\nSet how much to compress horizontally when music line breaks\nare automatic.\n must be between 0 (natural spacing)\nand 1 (max shrinking).\n\n// This next value is used to compute the natural spacing of\n// the notes. The base spacing of the crotchet is always\n// 40 pts. When the duration of a note type is twice the\n// duration of an other note type, its spacing is multiplied\n// by this factor.\n// The default value causes the note spacing to be multiplied\n// by 2 when its duration is multiplied by 4, i.e. the\n// space of the semibreve is 80 pts and the space of the\n// semiquaver is 20 pts.\n// Setting this value to 1 sets all note spacing to 40 pts.\nnoteSpacingFactor: 1.414, // Set the note spacing factor to (range 1..2).\n\nscale Default: 0.75 Set the page scale factor. Note that the header and footer are not scaled.\n\nstretchlast Default: 0.8\nStretch the last music line of a tune when it exceeds\nthe fraction of the page width.\n range is 0.0 to 1.0.\n\t */\n};\n\nRenderer.prototype.setVerticalSpace = function (formatting) {\n\t// conversion from pts to px 4/3\n\tif (formatting.staffsep !== undefined)\n\t\tthis.spacing.staffSeparation = formatting.staffsep * 4 / 3;\n\tif (formatting.composerspace !== undefined)\n\t\tthis.spacing.composer = formatting.composerspace * 4 / 3;\n\tif (formatting.partsspace !== undefined)\n\t\tthis.spacing.parts = formatting.partsspace * 4 / 3;\n\tif (formatting.textspace !== undefined)\n\t\tthis.spacing.text = formatting.textspace * 4 / 3;\n\tif (formatting.musicspace !== undefined)\n\t\tthis.spacing.music = formatting.musicspace * 4 / 3;\n\tif (formatting.titlespace !== undefined)\n\t\tthis.spacing.title = formatting.titlespace * 4 / 3;\n\tif (formatting.sysstaffsep !== undefined)\n\t\tthis.spacing.systemStaffSeparation = formatting.sysstaffsep * 4 / 3;\n\tif (formatting.stafftopmargin !== undefined)\n\t\tthis.spacing.staffTopMargin = formatting.stafftopmargin * 4 / 3;\n\tif (formatting.subtitlespace !== undefined)\n\t\tthis.spacing.subtitle = formatting.subtitlespace * 4 / 3;\n\tif (formatting.topspace !== undefined)\n\t\tthis.spacing.top = formatting.topspace * 4 / 3;\n\tif (formatting.vocalspace !== undefined)\n\t\tthis.spacing.vocal = formatting.vocalspace * 4 / 3;\n\tif (formatting.wordsspace !== undefined)\n\t\tthis.spacing.words = formatting.wordsspace * 4 / 3;\n};\n\n\n/**\n * Calculates the y for a given pitch value (relative to the stave the renderer is currently printing)\n * @param {number} ofs pitch value (bottom C on a G clef = 0, D=1, etc.)\n */\nRenderer.prototype.calcY = function (ofs) {\n\treturn this.y - ofs * spacing.STEP;\n};\n\nRenderer.prototype.moveY = function (em, numLines) {\n\tif (numLines === undefined) numLines = 1;\n\tthis.y += em * numLines;\n};\n\nRenderer.prototype.absolutemoveY = function (y) {\n\tthis.y = y;\n};\n\nmodule.exports = Renderer;\n","// abc_voice_element.js: Definition of the VoiceElement class.\n\n/*global module */\n\nvar svgNS = \"http://www.w3.org/2000/svg\";\n\nfunction Svg(wrapper) {\n\tthis.svg = createSvg();\n\tthis.currentGroup = [];\n\twrapper.appendChild(this.svg);\n}\n\nSvg.prototype.clear = function () {\n\tif (this.svg) {\n\t\tvar wrapper = this.svg.parentNode;\n\t\tthis.svg = createSvg();\n\t\tthis.currentGroup = [];\n\t\tif (wrapper) {\n\t\t\t// TODO-PER: If the wrapper is not present, then the underlying div was pulled out from under this instance. It's possible that is still useful (for creating the music off page?)\n\t\t\twrapper.innerHTML = \"\";\n\t\t\twrapper.appendChild(this.svg);\n\t\t}\n\t}\n};\n\nSvg.prototype.setTitle = function (title) {\n\tvar titleEl = document.createElement(\"title\");\n\tvar titleNode = document.createTextNode(title);\n\ttitleEl.appendChild(titleNode);\n\tthis.svg.insertBefore(titleEl, this.svg.firstChild);\n};\n\nSvg.prototype.setResponsiveWidth = function (w, h) {\n\t// this technique is from: http://thenewcode.com/744/Make-SVG-Responsive, thx to https://github.com/iantresman\n\tthis.svg.setAttribute(\"viewBox\", \"0 0 \" + w + \" \" + h);\n\tthis.svg.setAttribute(\"preserveAspectRatio\", \"xMinYMin meet\");\n\tthis.svg.removeAttribute(\"height\");\n\tthis.svg.removeAttribute(\"width\");\n\tthis.svg.style['display'] = \"inline-block\";\n\tthis.svg.style['position'] = \"absolute\";\n\tthis.svg.style['top'] = \"0\";\n\tthis.svg.style['left'] = \"0\";\n\n\tif (this.svg.parentNode) {\n\t\tvar cls = this.svg.parentNode.getAttribute(\"class\");\n\t\tif (!cls)\n\t\t\tthis.svg.parentNode.setAttribute(\"class\", \"abcjs-container\");\n\t\telse if (cls.indexOf(\"abcjs-container\") < 0)\n\t\t\tthis.svg.parentNode.setAttribute(\"class\", cls + \" abcjs-container\");\n\t\tthis.svg.parentNode.style['display'] = \"inline-block\";\n\t\tthis.svg.parentNode.style['position'] = \"relative\";\n\t\tthis.svg.parentNode.style['width'] = \"100%\";\n\t\t// PER: I changed the padding from 100% to this through trial and error.\n\t\t// The example was using a square image, but this music might be either wider or taller.\n\t\tvar padding = h / w * 100;\n\t\tthis.svg.parentNode.style['padding-bottom'] = padding + \"%\";\n\t\tthis.svg.parentNode.style['vertical-align'] = \"middle\";\n\t\tthis.svg.parentNode.style['overflow'] = \"hidden\";\n\t}\n};\n\nSvg.prototype.setSize = function (w, h) {\n\tthis.svg.setAttribute('width', w);\n\tthis.svg.setAttribute('height', h);\n};\n\nSvg.prototype.setAttribute = function (attr, value) {\n\tthis.svg.setAttribute(attr, value);\n};\n\nSvg.prototype.setScale = function (scale) {\n\tif (scale !== 1) {\n\t\tthis.svg.style.transform = \"scale(\" + scale + \",\" + scale + \")\";\n\t\tthis.svg.style['-ms-transform'] = \"scale(\" + scale + \",\" + scale + \")\";\n\t\tthis.svg.style['-webkit-transform'] = \"scale(\" + scale + \",\" + scale + \")\";\n\t\tthis.svg.style['transform-origin'] = \"0 0\";\n\t\tthis.svg.style['-ms-transform-origin-x'] = \"0\";\n\t\tthis.svg.style['-ms-transform-origin-y'] = \"0\";\n\t\tthis.svg.style['-webkit-transform-origin-x'] = \"0\";\n\t\tthis.svg.style['-webkit-transform-origin-y'] = \"0\";\n\t} else {\n\t\tthis.svg.style.transform = \"\";\n\t\tthis.svg.style['-ms-transform'] = \"\";\n\t\tthis.svg.style['-webkit-transform'] = \"\";\n\t}\n};\n\nSvg.prototype.insertStyles = function (styles) {\n\tvar el = document.createElementNS(svgNS, \"style\");\n\tel.textContent = styles;\n\tthis.svg.insertBefore(el, this.svg.firstChild); // prepend is not available on older browsers.\n\t//\tthis.svg.prepend(el);\n};\n\nSvg.prototype.setParentStyles = function (attr) {\n\t// This is needed to get the size right when there is scaling involved.\n\tfor (var key in attr) {\n\t\tif (attr.hasOwnProperty(key)) {\n\t\t\tif (this.svg.parentNode)\n\t\t\t\tthis.svg.parentNode.style[key] = attr[key];\n\t\t}\n\t}\n\t// This is the last thing that gets called, so delete the temporary SVG if one was created\n\tif (this.dummySvg) {\n\t\tvar body = document.querySelector('body');\n\t\tbody.removeChild(this.dummySvg);\n\t\tthis.dummySvg = null;\n\t}\n\n};\n\nfunction constructHLine(x1, y1, x2) {\n\tvar len = x2 - x1;\n\treturn \"M \" + x1 + \" \" + y1 +\n\t\t\" l \" + len + ' ' + 0 +\n\t\t\" l \" + 0 + \" \" + 1 + \" \" +\n\t\t\" l \" + (-len) + \" \" + 0 + \" \" + \" z \";\n}\n\nfunction constructVLine(x1, y1, y2) {\n\tvar len = y2 - y1;\n\treturn \"M \" + x1 + \" \" + y1 +\n\t\t\" l \" + 0 + ' ' + len +\n\t\t\" l \" + 1 + \" \" + 0 + \" \" +\n\t\t\" l \" + 0 + \" \" + (-len) + \" \" + \" z \";\n}\n\nSvg.prototype.rect = function (attr) {\n\t// This uses path instead of rect so that it can be hollow and the color changes with \"fill\" instead of \"stroke\".\n\tvar lines = [];\n\tvar x1 = attr.x;\n\tvar y1 = attr.y;\n\tvar x2 = attr.x + attr.width;\n\tvar y2 = attr.y + attr.height;\n\tlines.push(constructHLine(x1, y1, x2));\n\tlines.push(constructHLine(x1, y2, x2));\n\tlines.push(constructVLine(x2, y1, y2));\n\tlines.push(constructVLine(x1, y2, y1));\n\n\treturn this.path({ path: lines.join(\" \"), stroke: \"none\", \"data-name\": attr[\"data-name\"] });\n};\n\nSvg.prototype.dottedLine = function (attr) {\n\tvar el = document.createElementNS(svgNS, 'line');\n\tel.setAttribute(\"x1\", attr.x1);\n\tel.setAttribute(\"x2\", attr.x2);\n\tel.setAttribute(\"y1\", attr.y1);\n\tel.setAttribute(\"y2\", attr.y2);\n\tel.setAttribute(\"stroke\", attr.stroke);\n\tel.setAttribute(\"stroke-dasharray\", \"5,5\");\n\tthis.svg.insertBefore(el, this.svg.firstChild);\n};\n\nSvg.prototype.rectBeneath = function (attr) {\n\tvar el = document.createElementNS(svgNS, 'rect');\n\tel.setAttribute(\"x\", attr.x);\n\tel.setAttribute(\"width\", attr.width);\n\tel.setAttribute(\"y\", attr.y);\n\tel.setAttribute(\"height\", attr.height);\n\tif (attr.stroke)\n\t\tel.setAttribute(\"stroke\", attr.stroke);\n\tif (attr['stroke-opacity'])\n\t\tel.setAttribute(\"stroke-opacity\", attr['stroke-opacity']);\n\tif (attr.fill)\n\t\tel.setAttribute(\"fill\", attr.fill);\n\tif (attr['fill-opacity'])\n\t\tel.setAttribute(\"fill-opacity\", attr['fill-opacity']);\n\tthis.svg.insertBefore(el, this.svg.firstChild);\n};\n\nSvg.prototype.text = function (text, attr, target) {\n\tvar el = document.createElementNS(svgNS, 'text');\n\tel.setAttribute(\"stroke\", \"none\");\n\tfor (var key in attr) {\n\t\tif (attr.hasOwnProperty(key)) {\n\t\t\tel.setAttribute(key, attr[key]);\n\t\t}\n\t}\n\tvar lines = (\"\" + text).split(\"\\n\");\n\tfor (var i = 0; i < lines.length; i++) {\n\t\tvar line = document.createElementNS(svgNS, 'tspan');\n\t\tline.setAttribute(\"x\", attr.x ? attr.x : 0);\n\t\tif (i !== 0)\n\t\t\tline.setAttribute(\"dy\", \"1.2em\");\n\t\tif (lines[i].indexOf(\"\\x03\") !== -1) {\n\t\t\tvar parts = lines[i].split('\\x03')\n\t\t\tline.textContent = parts[0];\n\t\t\tif (parts[1]) {\n\t\t\t\tvar ts2 = document.createElementNS(svgNS, 'tspan');\n\t\t\t\tts2.setAttribute(\"dy\", \"-0.3em\");\n\t\t\t\tts2.setAttribute(\"style\", \"font-size:0.7em\");\n\t\t\t\tts2.textContent = parts[1];\n\t\t\t\tline.appendChild(ts2);\n\t\t\t}\n\t\t\tif (parts[2]) {\n\t\t\t\tvar dist = parts[1] ? \"0.4em\" : \"0.1em\";\n\t\t\t\tvar ts3 = document.createElementNS(svgNS, 'tspan');\n\t\t\t\tts3.setAttribute(\"dy\", dist);\n\t\t\t\tts3.setAttribute(\"style\", \"font-size:0.7em\");\n\t\t\t\tts3.textContent = parts[2];\n\t\t\t\tline.appendChild(ts3);\n\t\t\t}\n\t\t} else\n\t\t\tline.textContent = lines[i];\n\t\tel.appendChild(line);\n\t}\n\tif (target)\n\t\ttarget.appendChild(el);\n\telse\n\t\tthis.append(el);\n\treturn el;\n};\n\nSvg.prototype.richTextLine = function (phrases, x, y, klass, anchor, target) {\n\tvar el = document.createElementNS(svgNS, 'text');\n\tel.setAttribute(\"stroke\", \"none\");\n\tel.setAttribute(\"class\", klass);\n\tel.setAttribute(\"x\", x);\n\tel.setAttribute(\"y\", y);\n\tel.setAttribute(\"text-anchor\", anchor);\n\tel.setAttribute(\"dominant-baseline\", \"middle\");\n\n\tfor (var i = 0; i < phrases.length; i++) {\n\t\tvar phrase = phrases[i]\n\t\tvar tspan = document.createElementNS(svgNS, 'tspan');\n\t\tvar attrs = Object.keys(phrase.attrs)\n\t\tfor (var j = 0; j < attrs.length; j++) {\n\t\t\tvar value = phrase.attrs[attrs[j]]\n\t\t\tif (value !== '')\n\t\t\t\ttspan.setAttribute(attrs[j], value)\n\t\t}\n\t\ttspan.textContent = phrase.content;\n\n\t\tel.appendChild(tspan);\n\t}\n\n\tif (target)\n\t\ttarget.appendChild(el);\n\telse\n\t\tthis.append(el);\n\treturn el;\n}\n\nSvg.prototype.guessWidth = function (text, attr) {\n\tvar svg = this.createDummySvg();\n\tvar el = this.text(text, attr, svg);\n\tvar size;\n\ttry {\n\t\tsize = el.getBBox();\n\t\tif (isNaN(size.height) || !size.height) // TODO-PER: I don't think this can happen unless there isn't a browser at all.\n\t\t\tsize = { width: attr['font-size'] / 2, height: attr['font-size'] + 2 }; // Just a wild guess.\n\t\telse\n\t\t\tsize = { width: size.width, height: size.height };\n\t} catch (ex) {\n\t\tsize = { width: attr['font-size'] / 2, height: attr['font-size'] + 2 }; // Just a wild guess.\n\t}\n\tsvg.removeChild(el);\n\treturn size;\n};\n\nSvg.prototype.createDummySvg = function () {\n\tif (!this.dummySvg) {\n\t\tthis.dummySvg = createSvg();\n\t\tvar styles = [\n\t\t\t\"display: block !important;\",\n\t\t\t\"height: 1px;\",\n\t\t\t\"width: 1px;\",\n\t\t\t\"position: absolute;\"\n\t\t];\n\t\tthis.dummySvg.setAttribute('style', styles.join(\"\"));\n\t\tvar body = document.querySelector('body');\n\t\tbody.appendChild(this.dummySvg);\n\t}\n\n\treturn this.dummySvg;\n};\n\nvar sizeCache = {};\n\nSvg.prototype.getTextSize = function (text, attr, el) {\n\tif (typeof text === 'number')\n\t\ttext = '' + text;\n\tif (!text || text.match(/^\\s+$/))\n\t\treturn { width: 0, height: 0 };\n\tvar key;\n\tif (text.length < 20) {\n\t\t// The short text tends to be repetitive and getBBox is really slow, so lets cache.\n\t\tkey = text + JSON.stringify(attr);\n\t\tif (sizeCache[key])\n\t\t\treturn sizeCache[key];\n\t}\n\tvar removeLater = !el;\n\tif (!el)\n\t\tel = this.text(text, attr);\n\tvar size;\n\ttry {\n\t\tsize = el.getBBox();\n\t\tif (isNaN(size.height) || !size.height)\n\t\t\tsize = this.guessWidth(text, attr);\n\t\telse\n\t\t\tsize = { width: size.width, height: size.height };\n\t} catch (ex) {\n\t\tsize = this.guessWidth(text, attr);\n\t}\n\tif (removeLater) {\n\t\tif (this.currentGroup.length > 0)\n\t\t\tthis.currentGroup[0].removeChild(el);\n\t\telse\n\t\t\tthis.svg.removeChild(el);\n\t}\n\tif (key)\n\t\tsizeCache[key] = size;\n\treturn size;\n};\n\nSvg.prototype.openGroup = function (options) {\n\toptions = options ? options : {};\n\tvar el = document.createElementNS(svgNS, \"g\");\n\tif (options.klass)\n\t\tel.setAttribute(\"class\", options.klass);\n\tif (options.fill)\n\t\tel.setAttribute(\"fill\", options.fill);\n\tif (options.stroke)\n\t\tel.setAttribute(\"stroke\", options.stroke);\n\tif (options['data-name'])\n\t\tel.setAttribute(\"data-name\", options['data-name']);\n\n\tif (options.prepend)\n\t\tthis.prepend(el);\n\telse\n\t\tthis.append(el);\n\tthis.currentGroup.unshift(el);\n\treturn el;\n};\n\nSvg.prototype.closeGroup = function () {\n\tvar g = this.currentGroup.shift();\n\tif (g && g.children.length === 0) {\n\t\t// If nothing was added to the group it is because all the elements were invisible. We don't need the group, then.\n\t\tg.parentElement.removeChild(g);\n\t\treturn null;\n\t}\n\treturn g;\n};\n\nSvg.prototype.path = function (attr) {\n\tvar el = document.createElementNS(svgNS, \"path\");\n\tfor (var key in attr) {\n\t\tif (attr.hasOwnProperty(key)) {\n\t\t\tif (key === 'path')\n\t\t\t\tel.setAttributeNS(null, 'd', attr.path);\n\t\t\telse if (key === 'klass')\n\t\t\t\tel.setAttributeNS(null, \"class\", attr[key]);\n\t\t\telse if (attr[key] !== undefined)\n\t\t\t\tel.setAttributeNS(null, key, attr[key]);\n\t\t}\n\t}\n\tthis.append(el);\n\treturn el;\n};\n\nSvg.prototype.pathToBack = function (attr) {\n\tvar el = document.createElementNS(svgNS, \"path\");\n\tfor (var key in attr) {\n\t\tif (attr.hasOwnProperty(key)) {\n\t\t\tif (key === 'path')\n\t\t\t\tel.setAttributeNS(null, 'd', attr.path);\n\t\t\telse if (key === 'klass')\n\t\t\t\tel.setAttributeNS(null, \"class\", attr[key]);\n\t\t\telse\n\t\t\t\tel.setAttributeNS(null, key, attr[key]);\n\t\t}\n\t}\n\tthis.prepend(el);\n\treturn el;\n};\n\nSvg.prototype.lineToBack = function (attr) {\n\tvar el = document.createElementNS(svgNS, 'line');\n\tvar keys = Object.keys(attr)\n\tfor (var i = 0; i < keys.length; i++)\n\t\tel.setAttribute(keys[i], attr[keys[i]]);\n\tthis.prepend(el);\n\treturn el;\n};\n\n\nSvg.prototype.append = function (el) {\n\tif (this.currentGroup.length > 0)\n\t\tthis.currentGroup[0].appendChild(el);\n\telse\n\t\tthis.svg.appendChild(el);\n};\n\nSvg.prototype.prepend = function (el) {\n\t// The entire group is prepended, so don't prepend the individual elements.\n\tif (this.currentGroup.length > 0)\n\t\tthis.currentGroup[0].appendChild(el);\n\telse\n\t\tthis.svg.insertBefore(el, this.svg.firstChild);\n};\n\nSvg.prototype.setAttributeOnElement = function (el, attr) {\n\tfor (var key in attr) {\n\t\tif (attr.hasOwnProperty(key)) {\n\t\t\tel.setAttributeNS(null, key, attr[key]);\n\t\t}\n\t}\n};\n\nSvg.prototype.moveElementToChild = function (parent, child) {\n\tparent.appendChild(child);\n};\n\nfunction createSvg() {\n\tvar svg = document.createElementNS(svgNS, \"svg\");\n\tsvg.setAttributeNS(\"http://www.w3.org/2000/xmlns/\", \"xmlns:xlink\", \"http://www.w3.org/1999/xlink\");\n\tsvg.setAttribute('role', 'img'); // for accessibility\n\tsvg.setAttribute('fill', 'currentColor'); // for automatically picking up dark mode and high contrast\n\tsvg.setAttribute('stroke', 'currentColor'); // for automatically picking up dark mode and high contrast\n\treturn svg;\n}\n\n\nmodule.exports = Svg;\n","var version = '6.4.1';\n\nmodule.exports = version;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./index.js\");\n",""],"names":["version","require","animation","tuneBook","sequence","strTranspose","abcjs","signature","Object","keys","forEach","key","renderAbc","tuneMetrics","TimingCallbacks","glyphs","setGlyph","setSymbol","CreateSynth","instrumentIndexToName","pitchToNoteName","SynthSequence","CreateSynthControl","registerAudioContext","activeAudioContext","supportsAudio","playEvent","SynthController","getMidiFile","midiRenderer","synth","module","exports","timer","cursor","startAnimation","paper","tune","options","stop","undefined","showCursor","querySelector","document","createElement","className","style","position","appendChild","hideMeasures","elements","i","length","element","classList","contains","display","lastMeasure","disappearMeasuresAfter","selector","querySelectorAll","disappearMeasuresBefore","measureCallback","hideCurrentMeasure","hideFinishedMeasures","getLineAndMeasure","line","measureNumber","setCursor","range","measureStart","left","top","width","height","qpm","bpm","eventCallback","start","pauseAnimation","pause","stopAnimation","StringTablature","pluginTab","name","defaultTuning","isTabBig","tabSymbolOffset","abcTablatures","inited","plugins","register","plugin","tablature","setError","msg","warnings","warning","push","preparePlugins","tuneNumber","params","returned","nbPlugins","tabs","ii","args","instrument","tabName","visualTranspose","abcSrc","pluginInstance","classz","instance","tabType","layoutTablatures","renderer","abcTune","tablatures","staffLineCount","nTabs","kk","firstStaffOnly","suppress","lines","staff","curStaff","maxStaves","jj","tabPlugin","init","render","target","self","parseInt","tempo","metaText","getBpm","extraMeasuresAtBeginning","beatCallback","lineEndCallback","lineEndAnticipation","beatSubdivisions","joggerTimer","replaceTarget","newTarget","noteTimings","setTiming","lineEndTimings","getLineEndTimings","startTime","currentBeat","currentEvent","currentLine","currentTime","isPaused","isRunning","pausedPercent","justUnpaused","newSeekPercent","lastTimestamp","millisecondsPerBeat","lastMoment","milliseconds","totalBeats","Math","round","doTiming","timestamp","type","thisStartTime","leftEvent","endTimings","requestAnimationFrame","ret","doBeatCallback","ret2","promise","shouldStop","then","Promise","resolve","result","next","endMs","ev","max","debugInfo","offMs","gapMs","gapPx","endX","offPx","JOGGING_INTERVAL","animationJogger","performance","now","setTimeout","offsetPercent","units","setProgress","reset","reportNext","clearTimeout","currentMillisecond","percent","oldEvent","oldBeat","floor","timings","anticipation","callbackTimes","lastTop","timing","bottom","Parse","bookParser","tunebook","numberOfTunes","abc","tunes","split","num","TuneBook","book","parsed","header","prototype","getTuneById","id","getTuneByTitle","title","parseOnly","numTunes","output","callback","renderEngine","isArray","testObject","propertyIsEnumerable","currentTune","startingTune","abcParser","div","getElementById","parse","startPos","getTune","getWarnings","override","innerHTML","flattenTune","tuneObj","staves","j","k","voices","concat","measuresParser","lastChord","measureStartChord","fragStart","hasNotes","voice","elem","startChar","chord","el_type","frag","substring","endChar","measure","startEnding","endEnding","extractMeasures","arr","arr2","measures","hasPickup","getPickupLength","kkk","Tune","EngraverController","wrap","resizeDivs","resizeOuter","window","innerWidth","hasOwnProperty","outer","ofs","offsetLeft","addEventListener","e","renderOne","lineOffset","viewportHorizontal","scrollHorizontal","overflowX","overflowY","overflow","children","viewportVertical","engraver_controller","engraveABC","engraver","parent","parentNode","parserParams","engraverParams","renderParams","warnings_id","warning_id","highlight","clickListener","abcString","removeDiv","setAttribute","body","staffwidth","doLineWrapping","afterParsing","removeChild","widths","getMeasureWidths","calcLineWraps","reParse","revisedParams","explanation","sections","relativeMajor","key1sharp","acc","note","key2sharp","key3sharp","key4sharp","key5sharp","key6sharp","key7sharp","key1flat","key2flat","key3flat","key4flat","key5flat","key6flat","key7flat","keyAccidentals","newKey","JSON","stringify","modes","stepsFromC","keyReverse","createKeyReverse","allKeys","keyObj","toLowerCase","mode","match","maj","relativeMode","majorKey","group","regMode","thisMode","ind","indexOf","transposeKey","steps","fromC","parseCommon","spacing","flatten","delineTune","media","metaTextInfo","formatting","staffNum","voiceNum","lineNum","runningFonts","copy","dest","src","prop","attrs","copyTopInfo","copyBottomInfo","getBeatLength","meter","getMeterFraction","multiplier","den","computePickupLength","barLength","pickupLength","v","tripletMultiplier","el","isSpacer","rest","startTriplet","duration","endTriplet","getBarLength","getTotalTime","totalTime","getTotalBeats","millisecondsPerMeasure","bpmOverride","beatsPerMeasure","getBeatsPerMeasure","minutesPerMeasure","beatLen","barLen","getMeter","value","getKeySignature","getElementFromChar","char","addVerticalInfo","timingEvents","lastBarTop","lastBarBottom","lastEventTop","lastEventBottom","nextTop","nextBottom","makeSortedArray","hash","sort","a","b","diff","addElementToEvents","eventHash","voiceTimeMilliseconds","timeDivider","isTiedState","nextIsBar","hint","realDuration","durationClass","abcelem","es","elemset","isTiedToNext","startTie","startCharArray","endCharArray","x","w","midiPitches","cloneArray","midiGraceNotePitches","min","makeVoicesArray","voicesArr","tempos","staffgroups","staffs","firstStaff","middleC","absoluteY","STEP","lastStaff","isTabStaff","noteFound","tempoLocations","setupEvents","startingDelay","startingBpm","warp","time","maxVoiceTimeMilliseconds","voiceTime","startingRepeatElem","endingRepeatElem","tempoDone","thisMeasure","lastHash","barType","endRepeat","startRepeat","lastVoiceTimeMilliseconds","el2","element2","addEndPoints","addUsefulCallbackInfo","skipTies","index","staffGroup","lastEl","beatLength","statedBeatLength","measuresOfDelay","console","log","naturalBpm","beatsPerSecond","measureLength","setUpAudio","seq","percmap","midi","deline","findSelectableElement","selectables","getSelectableArray","inputLines","lineBreaks","outputLines","inMusicLine","currentMeter","currentKey","currentClef","currentVocalFont","currentGChordFont","currentTripletFont","currentAnnotationFont","inputLine","vskip","outputLine","s","inputStaff","outputStaff","objEqual","addMeterToVoices","addKeyToVoices","abbrevTitle","clef","addClefToVoices","vocalfont","addFontToVoices","gchordfont","tripletfont","annotationfont","outputVoice","inputVoice","cloneLine","replacer","unshift","font","input","inputValue","outputValue","keys2","CustomEvent","event","bubbles","cancelable","detail","evt","createEvent","initCustomEvent","Event","EditArea","textareaid","textarea","initialText","isDragging","addSelectionListener","listener","onmousemove","fireSelectionChanged","addChangeListener","changelistener","onkeyup","fireChanged","onmousedown","onmouseup","onchange","getSelection","selectionStart","end","selectionEnd","setSelection","setSelectionRange","createTextRange","collapse","moveEnd","moveStart","select","focus","getString","setString","str","getElem","gatherAbcParams","abcjsParams","midi_options","parser_options","render_options","Editor","editarea","indicate_changed","canvas_id","paper_id","insertBefore","selectionChangeCallback","clientClickListener","bind","cursorControl","generate_midi","generateDownload","midi_download_id","downloadMidi","generateInline","midi_id","inlineMidi","warningsdiv","generate_warnings","onchangeCallback","currentAbc","bReentry","parseABC","modelChanged","addClassName","hasClassName","elementClassName","RegExp","test","removeClassName","strip","replace","setReadOnly","readOnly","readonlyClass","removeAttribute","redrawMidi","midiPause","downloadMidiEl","inlineMidiEl","engravingEl","dispatchEvent","userAction","synthControl","load","setTune","timerId","disable","error","message","join","updateSelection","paramChanged","synthParamChanged","t","selection","rangeHighlight","setDirtyStyle","isDirty","bIsPaused","wasDirty","setNotDirty","classes","analysis","drag","mouseEvent","shouldPause","visualObj","pauseMidi","rendererFactory","create","baseDuration","commands","setGlobalInfo","tracks","startTrack","notePlacement","cmd","setText","text","pan","setChannel","setInstrument","channel","gapLengthInBeats","gap","pitch","volume","cents","addNotes","endTrack","getData","times","h","parseFloat","lastTime","events","distance","addRest","startNote","endNote","clone","source","destination","property","cloneHashOfHash","cloneHashOfArrayOfHash","startsWith","pattern","endsWith","d","lastIndexOf","last","parseDirective","ParseHeader","ParseMusic","Tokenizer","TuneBuilder","tuneBuilder","tokenizer","wordsContinuation","symbolContinuation","addPositioning","positioning","addFont","fonts","multilineVars","iChar","accidentals","root","origMeter","hasMainTitle","default_length","verticalPos","octave","next_note_duration","start_new_line","is_in_header","partForNextLine","tempoForNextLine","havent_set_length","macros","currBarNumber","barCounter","ignoredDecorations","score_is_present","inEnding","inTie","inTieChord","vocalPosition","dynamicPosition","chordPosition","ornamentPosition","volumePosition","openSlurs","freegchord","endingHoldOver","differentFont","defaultFonts","decoration","face","size","weight","addFormattingOptions","elType","measurefont","repeatfont","duplicateStartEndingHoldOvers","restoreStartEndingHoldOvers","addWarning","addWarningObject","warningObject","warningObjects","encode","warn","col_num","bad_char","clean_line","lineIndex","column","music","getWarningObjects","addWords","words","word_list","last_divider","addWord","word","syllable","translateString","divider","escNext","skip","to","inSlur","pitches","shift","lyric","addSymbols","parseLine","err","addDirective","getCurrentVoice","lineContinuation","parseMusic","parseHeader","regular","newline","startNewLine","symbols","appendLastMeasure","nextVoice","addHintMeasure","nextStaff","stave","nextStave","addHintMeasures","nextLine","strTune","switches","i2","substr","all","backslash","comment","padding","Array","pop","print","globalTranspose","setVisualTranspose","format","globalFormatting","header_only","stop_on_warning","wasInHeader","setRunningFont","cleanUp","barsperstaff","staffnonote","ph","pl","papersize","landscape","pagewidth","pageheight","hint_measures","wrapLines","barNumbers","directives","initialWhiteSpace","tuneStrings","pos","dir","arrDir","pure","initialize","tokenizer_","warn_","multilineVars_","tune_","tuneBuilder_","initializeFonts","historyfont","infofont","partsfont","textfont","wordsfont","composerfont","subtitlefont","tempofont","titlefont","footerfont","headerfont","voicefont","tablabelfont","tabnumberfont","tabgracefont","fontTypeCanHaveBox","fontTranslation","fontFace","getFontParameter","tokens","currentSetting","processNumberOnly","token","box","state","hyphenLast","currToken","psFont","getChangingFont","getGlobalFont","setScale","scratch","tok","isNaN","scale","drumNames","interpretPercMap","restOfString","sound","noteHead","getRequiredMeasurement","points","getMeasurement","used","oneParameterMeasurement","addMultilineVar","intt","addMultilineVarBool","addMultilineVarOneParamChoice","choices","choice","found","midiCmdParam0","midiCmdParam1String","midiCmdParam1Integer","midiCmdParam1Integer1OptionalInteger","midiCmdParam2Integer","midiCmdParam4Integer","midiCmdParam5Integer","midiCmdParam1String1Integer","midiCmdParamFraction","midiCmdParam1StringVariableIntegers","parseMidiCommand","midi_cmd","midi_params","drummap","p","hasBeginMusic","appendElement","parseFontChangeLine","textstr","textParts","setfont","textarr","whichFont","positionChoices","tokenize","stripComment","bagpipes","flatbeams","jazzchords","accentAbove","germanAlphabet","graceSlurs","lt","parseStretchLast","lineThickness","sl","stretchlast","titlecaps","titleleft","measurebox","voiceScale","currentVoice","floatt","changeVoiceScale","voiceColor","color","changeVoiceColor","addSpacing","addSeparator","spaceAbove","spaceBelow","lenLine","partsBox","setBarNumberImmediate","textBlock","addText","continueall","centerstr","addCentered","sfTokens","sfNum","addVoice","newStaff","bracket","brace","continueBar","numVoices","connectBarLines","openParen","openBracket","openBrace","justOpenParen","justOpenBracket","justOpenBrace","lastVoice","addContinueBar","ty","vc","continueId","pgNum","getInt","addNewPage","digits","subCmd","addMetaText","footerStr","getMeat","footerArr","footer","center","right","addMetaTextObj","formatHash","fontboxpadding","stafftopmargin","parseKeyVoice","setTitle","origSize","addSubtitle","setMeter","parseNum","parseFraction","totalLength","mv","calcTempo","relTempo","dur","resolveTempo","addUserDefinition","equals","before","after","legalChars","setDefaultLength","len","len_arr","n","tempoString","larghissimo","adagissimo","sostenuto","grave","largo","lento","larghetto","adagio","adagietto","andante","andantino","moderato","allegretto","allegro","animato","agitato","veloce","vivace","vivacissimo","allegrissimo","presto","prestissimo","setTempo","delaySet","preString","suppressBpm","postString","printTempo","letter_to_inline_header","startLine","ws","eatWhiteSpace","appendStartingElement","parseKey","foundClef","foundKey","fixKey","part","parseVoice","letter_to_body_header","metaTextHeaders","A","B","C","D","F","G","I","N","O","R","S","W","Z","field","restOfLine","addMetaTextArray","peekLine","toUpperCase","theReverser","transpose","standardKey","keyName","localTranspose","keySignature","clefLines","mid","calcMiddle","oct","fixClef","clefPos","deepCopyKey","E","c","f","g","addPosToKey","impliedNaturals","fixedKey","parseMiddle","normalizeAccidentals","accs","isInline","retPitch","getKeyPitch","retAcc","getSharpFlat","retMode","getMode","oldKey","keyCompensate","savedOrigKey","globalTransposeOrigKeySig","getKeyAccidentals2","explicitAccidentals","splice","getPitchFromTokens","stafflines","staffscale","setCurrentVoice","getToken","isNew","staffInfo","startStaff","addNextTokenToStaffInfo","attr","getVoiceToken","addNextTokenToVoiceInfo","getNextToken","addNextNoteTokenToVoiceInfo","noteToTransposition","oct2","stem","suppressChords","cue","vi","spacing_below_offset","subname","legalAccents","volumeDecorations","dynamicDecorations","accentPseudonyms","accentDynamicPseudonyms","nonDecorations","durations","rests","accMap","tripletQ","MusicParser","_tokenizer","_warn","_multilineVars","_tune","_tuneBuilder","_header","isInTie","overlayLevel","voiceIndex","startOfLine","isWhiteSpace","delayStartNewLine","tripletNotesLeft","retHeader","startI","retInlineHeader","letter_to_spacer","letter_to_chord","chordName","addedChord","ci","rel_position","skipWhiteSpace","force_end_beam_last","letter_to_accent","beambr","letter_to_grace","gracenotes","letter_to_bar","measureNotEmpty","bar","barFirstEndingNum","isFirstVoice","barNumber","letter_to_overlay","letter_to_open_slurs_and_triplets","consumed","startSlur","dottedSlur","triplet","tripletR","num_notes","chordStartChar","chordDuration","rememberEndBeam","done","accent","chordNote","getCoreNote","end_beam","endTie","setIsInTie","postChordDone","addEndBeam","endSlur","br2","getBrokenRhythm","fraction","getFraction","ch","core","accidental","midipitch","graceNotes","durationOfMeasure","getBrackettedSubstring","getFloat","y","gra","acciaccatura","endBeam","macro","includes","findIndex","curr_pos","getBarLine","orig_bar_len","ending","retRep","getTokenOf","scoreTranspose","targetKey","st","canHaveBrokenRhythm","isComplete","dottedTie","durationSetByPreviousNote","grace_notes","getNumber","addTieToLastNote","X","z","dblflat","flat","natural","sharp","dblsharp","quarterflat","quartersharp","finished","skipAlpha","firstThree","getClef","bExplicitOnly","strOrig","needsClef","strClef","isMatch","explicit","colons","getKeyAccidental","accTranslation","isLetter","isNumber","alphaUntilWhiteSpace","int2","float2","close","charMap","charMap1","charMap2","out","iSave","getTitleNumber","regex","exec","foundNumber","thePatterns","thisPattern","theTitleNumber","trim","substInChord","maxErrorChars","_matchChar","matchChar","esc","allNotes","transposeChordName","keyIndex","newKeyMinor","localTransposeVerticalMovement","localTransposePreferFlats","baseKey","thisKeyIndex","recognized","newKeyName","transposedKey","newKeySig","charCodeAt","ceil","pitchToLetter","accidentalChange","origPitch","newPitch","origKeySig","origPitchLetter","origAccidental","currentAccidental","delta","newPitchLetter","newAccidental","calcAccidental","accidentals2","accidentals3","actual","pitchIndex","noteName","allPitches","sharpChords","flatChords","sharpChordsFree","flatChordsFree","preferFlats","freeGCchord","extra1","bass","extra2","resolveOverlays","madeChanges","durationsPerLines","overlayVoice","hasOverlay","snip","durationThisBar","inOverlay","overlayDuration","snipStart","ov","direction","indexOfLastBar","findLastBar","fixTitles","firstMusicLine","hasATitle","currSlur","closeLine","simplifyMetaText","anyDeleted","hasAny","containsNotes","filter","wrapMusicLines","keepThis","containsNotesStrict","workingClef","cleanUpSlursInLine","addEndSlur","obj","chordPos","offNum","slurNum","addStartSlur","usedNums","nextNum","label","gg","ggg","fixClefPlacement","permanentItems","barNumThisLine","getNextMusicLine","cp","ss","vv","startElement","section","slice","potentialStartBeam","potentialEndBeam","vskipPending","getLastNote","getDuration","startBeam","hashParams","This","pushNote","hp","currStaff","mid2","endBeamHere","endBeamLast","hashParams2","pushLine","info","subtitle","newpage","lineLength","separator","createVoice","thisStaff","head","createStaff","setLineFont","createLine","isDifferent","lastElement","isFirstLine","currLine","isArrayOfStrings","notes","history","addRichTextToAnnotationsAndLyrics","l","linesBreakElements","findLineBreaks","addLineBreaks","lastKeySig","lastStem","currentBarNumber","action","ogLine","currVoice","lineBreakArray","lineBreakIndexes","lbai","lineCounter","lineStart","lbi","freeFormLineBreaks","lineBreakPoint","totals","totalThisLine","attemptedWidth","oldDistance","newDistance","newArr","oneTry","measureWidths","idealWidths","accumulator","lineAccumulator","lineWidths","lastVariance","highestVariance","startIndex","otherTries","measureWidth","thisVariance","abs","varianceIsClose","newWidths","newBreaks","optimizeLineWidths","numLines","total","idealWidth","otherTry","variances","aveVariance","lineWidth","attempts","smallest","smallestIndex","failed","variance","fixedMeasureLineBreaks","preferredMeasuresPerLine","thisWidth","getRevisedTuneParams","staffWidth","minSpacing","minSpacingLimit","maxSpacing","lastLineLimit","accumulatedLineBreaks","explanations","usableWidth","minLineSize","allowableVariance","minWidth","ff","reason","changes","transposeOneTune","changeAllKeySigs","transposeVoices","count","segment","destinationKey","transposeVoice","createKeyAccidentals","setLetterDistance","keyRoot","letterDistance","letters","measureAccidentals","transposedMeasureAccidentals","prefersFlats","newChord","replaceChord","parseNote","transposePitch","upper","replaceNote","grace","newGrace","replaceGrace","octaves","major","newMajor","newMode","origDistFromC","newDistFromC","adj","keyAcc","newNote","courtesy","regPitch","regNote","regOptionalNote","regSpace","reg","currentAcc","calcAdjustment","noteLen","trailingLen","leadingLen","regPreBracket","regOpenBracket","regCloseBracket","endLen","regOpenBrace","regCloseBrace","regPreBrace","regPreNote","thisAccidental","keyAccidental","measureAccidental","ChordTrack","pitchesToPerc","barAccidentals","startingTempo","startingMeter","tempoChangeFactor","currentInstrument","currentTrack","lastNoteDurationPosition","currentTrackName","lastEventTime","chordTrack","drumInstrument","lastBarTime","doBeatAccents","stressBeat1","stressBeatDown","stressBeatUp","beatFraction","nextVolume","nextVolumeDelta","slurCount","drumTrack","drumTrackFinished","drumDefinition","drumBars","normalBreakBetweenNotes","slurredBreakBetweenNotes","staccatoBreakBetweenNotes","percmap_","midiOptions","bassprog","bassvol","chordprog","chordvol","gchord","chordsOff","preProcess","setTranspose","setLastBarTime","voiceOff","voicesOff","trackName","writeNote","setKeySignature","getBeatFraction","alignDrumToMeter","setTempoChangeFactor","barEnd","writeDrum","setRhythmHead","timeToRealTime","program","normalizeDrumDefinition","gChordOn","beats","paramChange","finish","detuneOctave","findOctaves","addTrack","totalDuration","durationRounded","ties","timeCounter","tempoMultiplier","thisDuration","tie","item","calcBeat","currTime","distanceFromStart","processVolume","beat","barBeat","findNoteModifications","velocity","thisBreakBetweenNotes","noteModification","doModifiedNotes","noteTime","numNotes","pp","runningDuration","shortestNote","processChord","graces","processGraceNotes","writeGraceNotes","rt","ms","currentTrackMilliseconds","currentTrackWholeNotes","ePitches","actualPitch","adjustPitch","adjustForMicroTone","endType","realDur","getRealDuration","extractOctave","extractNote","lowercase","companionDuration","graceDuration","midiGrace","gp","durationInMeasures","quarterToneFactor","description","on","totalPlay","bars","playCount","measuresPerBeat","factor","measureLen","detuneCents","track","topEvent","topNote","centsToFactor","setAttributes","elm","Midi","trackstrings","trackcount","noteOnAndChannel","noteOffAndChannel","toHex","divisions","timeSignature","encodeString","noteWarped","trackInstrument","silencelength","tracklength","number","ccPrefix","toString","HALF_STEP","loudness","toDurationHex","bend","to7BitHex","embed","noplayer","data","link","href","firstChild","controller","autoplay","loop","enablejavascript","cmdType","nameArray","hex","sharpCount","flatCount","sig","dens","clocks","encodeHex","lower","higher","res","bits","PERCUSSION_PROGRAM","abctune","midiTranspose","channelExplicitlySet","drumPattern","drum","drumIntro","drumOn","drumOffAfterIntro","drumOff","rhythmHeadThisBar","crescendoSize","startingMidi","globals","drumbars","drumon","nobeataccents","interpretTempo","defaultQpm","startVoice","inCrescendo","inDiminuendo","durationCounter","tempoChanges","currentVolume","startRepeatPlaceholder","skipEndingPlaceholder","startingDrumSet","setDynamics","volumes","dynamicType","voiceNumber","numNotesToDecoration","endDec","endingVolume","n2","endDec2","voiceName","getTrackTitle","cl","addKey","addMeter","intro","drumoff","noteEventsInBar","tripletDurationTotal","tripletDurationCount","noteElem","durationTotal","chordVoiceOffThisBar","interpretMeter","drumChange","addIfDifferent","tacet","param","insertTempoChanges","pickups","insertPoint","counter","changePositions","lastTempo","noChordVoice","removeNaturals","newMeter","abcjsAudioContext","pow","chordTrackFinished","chordChannel","currentChords","chordLastBar","gChordTacet","hasRhythmHead","bassInstrument","chordInstrument","boomVolume","chickVolume","overridePattern","parseGChord","isRhythmHead","chick","note2","resolveChords","chordTrackEmpty","findChord","breakSynonyms","interpretChord","basses","chordTranspose","bass2","chordNotes","remaining","fifth","explicitBass","bassAcc","bassShift","boom","boom2","modifier","intervals","chordIntervals","M","m","noteLength","isEmpty","endTime","thisMeasureLength","portionOfAMeasure","currentChordsExpanded","expandCurrentChords","rhythmPatterns","beatsPresent","firstBoom","minLength","isBoom","newBass","resolvePitch","oo","currentChord","num8thNotes","chords","current","createNoteMap","map","nextNote","inst","loopImage","playImage","pauseImage","loadingImage","resetImage","Error","HTMLElement","ac","buildDom","attachListeners","isDisabled","add","remove","setWarp","resetAll","pushedButtons","button","pushPlay","startButton","pushLoop","loopButton","progressBackground","progressThumb","clientWidth","clock","totalSeconds","minutes","seconds","secondsFormatted","afterResume","isResumed","hasLoop","loopHandler","hasRestart","restartHandler","hasPlay","playHandler","playPromiseHandler","hasProgress","progressHandler","hasWarp","warpHandler","hasClock","html","repeatTitle","repeatAria","restartTitle","restartAria","playTitle","playAria","randomTitle","randomAria","warpTitle","warpAria","acResumerMiddleWare","playBtn","isPromise","needsInit","status","resume","response","doNext","getNote","downloadBuffer","placeNote","soundsCache","notSupportedMessage","originalSoundFontUrl","defaultSoundFontUrl","alternateSoundFontUrl","audioBufferPossible","directSource","startTimeSec","pausedTimeSec","audioBuffers","audioContext","debugCallback","_deviceCapable","reject","soundFontUrl","soundFontVolumeMultiplier","programOffsets","fadeLength","NaN","noteEnd","meterSize","flattened","sequenceCallback","callbackContext","onEnded","meterFraction","cached","errorNotes","pitchNumber","label2","batches","CHUNK","results","loaded","_loadBatch","batch","delay","promises","pending","oneResponse","which","newBatch","list","prime","fadeTimeSec","totalSamples","sampleRate","noteMapTracks","swing","addSwing","panDistances","setPan","uniqueSounds","noteMap","trackNumber","panDistance","allPromises","audioBuffer","createBuffer","key2","parts","resolveData","me","suspend","numTracks","panParam","panNumber","even","currLow","currHigh","resumePosition","_kickOffSound","seek","offset","elapsed","download","getAudioBuffer","getIsRunning","trackNum","createBufferSource","buffer","connect","onended","volumeIncrease","halfbeatLength","swingDuration","oldEventStart","URL","createObjectURL","bufferToWave","numOfChan","numberOfChannels","ArrayBuffer","view","DataView","channels","sample","setUint32","setUint16","getChannelData","setInt16","Blob","midiCreate","midiOutputType","decoded","Uint8Array","generateMidiDownloadLink","isFunction","functionToCheck","getType","call","midiParams","divClasses","downloadClass","preTextDownload","downloadLabel","filename","fileName","postTextDownload","svg","url","instrumentCache","xhr","XMLHttpRequest","noteUrl","open","responseType","onload","noteDecoded","maybePromise","decodeAudioData","onerror","send","notesInOrder","noteToMidi","midiToNote","pitchMap","f0","n0","s0","x0","f1","n1","s1","x1","f2","s2","x2","f3","n3","s3","x3","f4","n4","s4","x4","f5","n5","s5","x5","f6","n6","s6","x6","f7","n7","s7","x7","f8","n8","s8","x8","f9","n9","s9","x9","f10","n10","s10","x10","f11","n11","s11","x11","f12","n12","s12","x12","f13","n13","s13","x13","f14","n14","s14","x14","f15","n15","s15","x15","f16","n16","s16","x16","pitchObj","outputAudioBuffer","startArray","volumeMultiplier","ofsMs","noteEndSec","OfflineAC","OfflineAudioContext","webkitOfflineAudioContext","offlineCtx","noteBufferPromise","gainNode","createGain","createStereoPanner","panNode","setValueAtTime","gain","linearRampToValueAtTime","playbackRate","noteOff","fnResolve","oncomplete","renderedBuffer","copyToChannel","startRendering","toBuffer","fromBuffer","fromData","toData","midiGracePitches","appendNote","doPlay","AudioContext","webkitAudioContext","navigator","mozAudioContext","msAudioContext","aac","midiBuffer","currentTempo","control","isLooping","isStarted","isLoaded","isLoading","visualOptions","displayPlay","displayProgress","displayLoop","toggleLoop","displayRestart","restart","play","randomAccess","displayWarp","onWarp","audioParams","go","loadingResponse","subdivisions","onReady","notesStatus","destroy","runWhenReady","_play","sleep","fn","arg1","onStart","_randomAccess","background","getBoundingClientRect","offsetWidth","newWarp","wasPlaying","startPercent","onFinished","beatNumber","onBeat","onEvent","lineEvent","onLineEnd","getUrl","click","revokeObjectURL","starts","instrumentNumber","TabNote","TabNotes","buildCapo","capoTuning","tuning","capo","iii","curNote","jjj","emit","buildPatterns","strings","highestNote","tabNotes","stringNotes","build","buildSecond","first","sameString","jjjj","curPos","nextPos","noteToNumber","secondPos","handleChordNotes","retNotes","iiii","clefTranspose","checkKeyAccidentals","toNumber","stringNumber","secondPosition","firstSize","emitNoAccidentals","isFlat","noteEquiv","getAccidentalEquiv","isAltered","isDouble","isSharp","stringPitches","pitchAltered","quarter","StringPatterns","stringToPitch","startingPitch","linePitch","invalidNumber","notesToNumber","retGraces","replaceAll","tabInfos","_super","tunePos","inError","lineSpace","verticalSize","pitch2","bypass","isPercussion","setRelative","child","relative","hasComma","hasQuote","isKeySharp","isKeyFlat","isLower","isQuoted","cloneNote","newTabNote","sameNoteAs","isLowerThan","curAccidentals","cloned","prevNote","fromNote","toNote","fromN","toN","from","tn","buildReturned","toIndex","TabStringPatterns","converter","TabCommon","TabRenderer","Plugin","staffNumber","tabSettings","nbLines","hideTabSymbol","semantics","staffIndex","rndrer","doLayout","AbcStringTab","AbsoluteElement","RelativeElement","isObject","constructor","cloneObject","cloneAbsolute","absSrc","cloneAbsoluteAndRelatives","buildTabAbsolute","absX","relX","tabIcon","tabYPos","icon","Ypos","tabAbsolute","tabRelative","lyricsDim","extra","TabAbsoluteElements","getInitialStaffSize","tabNameInfos","buildRelativeTabNote","def","isGrace","strNote","opt","tabNoteRelative","getXGrace","graceInRest","absElem","convertToNumber","tabPos","posNote","buildGraceRelativesForRest","absChild","tabVoice","mm","defGrace","graceX","curGrace","tabGraceRelative","staffAbsolute","keySig","tabVoiceIndex","staffSize","defNote","isClef","lastBar","bn","abselem","restGraces","heads","lyricDim","ll","dx","VoiceElement","initSpecialY","tempoHeightAbove","partHeightAbove","volumeHeightAbove","dynamicHeightAbove","endingHeightAbove","chordHeightAbove","lyricHeightAbove","lyricHeightBelow","chordHeightBelow","volumeHeightBelow","dynamicHeightBelow","getLyricHeight","maxLyricHeight","curAbs","specialY","buildTabName","stringSemantics","textSize","getTextSize","doDraw","calc","absolutes","tabStaff","tabSize","islastTabInStaff","getStaffNumbers","nbStaffs","getParentStaffIndex","linkStaffAndTabs","parentIndex","hasStaff","hasTab","isMultiVoiceSingleStaff","getNextTabPos","tabIndex","handledVoices","inProgress","nbVoices","getLastStaff","lastTab","checkVoiceKeySig","curVoice","elem0","firstVoice","lyricsHeight","padd","prevIndex","previousStaff","tabTop","staffGroupInfos","dy","nextTabPos","parentStaff","duplicate","nameHeight","BeamElem","BraceElem","createClef","createKeySignature","createNoteHead","createTimeSignature","Decoration","EndingElem","StaffGroupElement","TempoElement","TieElem","TripletElem","addChord","chartable","rhythm","nostem","harmonic","triangle","uflags","dflags","AbstractEngraver","isBagpipes","flatBeams","initialClef","slurs","slursbyvoice","tiesbyvoice","endingsbyvoice","scaleByVoice","colorByVoice","tripletmultiplier","abcline","accidentalSlot","accidentalshiftx","dotshiftx","hasVocals","minY","partstartelem","startlimitelem","stemdir","setStemHeight","heightInPixels","stemHeight","getCurrentVoiceId","pushCrossLineElems","popCrossLineElems","containsLyrics","createABCLine","staffgroup","tempoSet","restoreState","createABCStaff","abcstaff","updateFonts","barfrom","barto","headerPosition","baselineToCenter","addMeasureNumber","addChild","ts","staffLines","isSingleLineStaff","createABCVoice","setStaffLimits","setBottomStaff","continuing","getBeamGroup","addOther","voicetotal","voicenumber","slur","force","stemDir","dotted","setHint","setAveragePitch","minpitch","isFirstStaff","abselems","createABCElement","tempoElement","addFixedX","saveState","tiesSave","slursSave","slursbyvoiceSave","tiesbyvoiceSave","createBeam","createNote","isClosed","createBarLine","invisible","absKey","dim","abselem3","abselem2","addFixed","sortPitch","sum","averagepitch","maxpitch","elems","abselemset","beamelem","runningDirection","setStemDirection","tempStemDir","stemsUp","calcDir","addBeam","sorted","tmp","ledgerLines","minPitch","maxPitch","isRest","symbolWidth","additionalLedgers","addGraceNotes","notehead","roomtaken","gracescale","graceScaleStem","gracebeam","flag","mainNote","graceoffsets","gracepitch","headx","extrax","highestVert","addSlursAndTies","addExtra","dAcciaccatura","addRight","scalex","scaley","pseudoabselem","p1","p2","linewidth","getSymbolWidth","isInvisibleRest","anchor1","anchor2","addRestToAbsElement","dot","isMultiVoice","durlog","restpitch","roomTaken","roomTakenRight","mmWidth","addHead","numMeasures","addIfNotExist","addNoteToAbcElement","zeroDuration","noteSymbol","prev","curr","printer_shift","percHead","isTopWhenStemIsDown","isBottomWhenStemIsUp","hasStem","shouldExtendStem","printAccidentals","extraw","extraLeft","addLyric","lyricStr","ly","roomtakenright","tot","inc","durationForSpacing","absType","durationClassOveride","ret1","createDecoration","ret3","setCloseAnchor","middleNote","pitchelem","setEndAnchor","setRange","slurid","setStartX","addInternalNote","measureNumDim","vert","anchor","firstdots","firstthin","thick","secondthin","seconddots","setEndX","textWidth","minspacing","translateChord","noteheadWidth","isAnnotation","klass","chordString","chordWidth","chordHeight","realWidth","relPositionY","pos2","addTextIf","rows","marginLeft","marginTop","move","absElemType","inGroup","noMove","marginBottom","calcHeight","symbolHeightInPitches","clefOffsets","adjustspacing","isKeySig","symbol","fudge","thickness","newDotShiftX","shiftheadx","adjust","opts","xdelta","dotadjusty","symb","accSlotFound","accPlace","numWidth","denWidth","maxWidth","i3","DynamicDecoration","CrescendoElem","GlissandoElem","startDiminuendoX","startCrescendoX","minTop","minBottom","closeDecoration","yPos","deltaX","getSymbolAlign","yPos2","blank1","blank2","fixedY","above","below","volumeDecoration","compoundDecoration","highestPitch","lowestPitch","placement","stackedDecoration","incrementPlacement","getPlacement","textDecoration","textFudge","textHeight","symbolDecoration","symbolList","hasOne","leftDecoration","dynamicDecoration","diminuendo","crescendo","glissando","startGlissandoX","unhighlight","fixed","getFixedCoords","_addChild","half","setLimit","member","pushTop","pushBottom","setX","midpoint","firstElement","isflat","isgrace","forceup","forcedown","average","allrests","beams","beam","calcAverage","middleLine","numElements","richText","BottomText","isPrint","paddingLeft","shouldAddClasses","unalignedWords","extraText","defFont","space","addMultiLine","addSingleLine","preface","content","groupName","startGroup","endGroup","discography","transcription","endVoice","lastContinuedVoice","getWidth","isStartVoice","dec","FreeText","getFontAndAttr","maxHeight","leftSide","currentFont","centerVertically","getChordDim","margin","invertLane","lane","putChordInLane","getLane","largestY","row","phrases","thisWord","phrase","getFamily","Separator","staffnumber","setHeight","setWidth","Subtitle","tAnchor","tLeft","totalHeightInPitches","temposcale","tempoNote","internalNotes","startLimitElem","startLimitX","endLimitElem","endLimitX","calcTieDirection","referencePitch","calcSlurDirection","hasDownStem","calcX","lineStartX","lineEndX","startX","calcTieY","startY","endY","calcSlurY","beamInterferes","midPoint","hasBeam1","hasBeam2","isLastInBeam","isFirstInBeam","avoidCollisionAbove","maxInnerHeight","TopText","headerTextHeight","origin","composer","hasSimpleComposerLine","composerLine","ingroup","author","partOrder","middleElems","otherchildren","firstItem","adjustRange","pathClone","pathArray","pathScale","kx","ky","Glyphs","printSymbol","path","getPathForSymbol","getYCorr","germanNote","baseChord","bassNote","marker","drawTempo","drawRelativeElement","setClass","elementGroup","drawAbsolute","bartop","staffPos","isTempo","beginGroup","counters","getCurrent","overrideClasses","baseVal","isSelectable","notePositions","zero","printPath","roundNumber","drawBeam","pathString","slope","getSlope","xes","y1","getY","y2","draw","klasses","generate","stroke","fill","foregroundColor","calcY","startY2","endY2","currentX","sprintf","renderText","drawBrace","straightPath","xLeft","yTop","yBottom","xLineWidth","yOverlap","wCurve","hCurve","curvyPath","yHeight","curve","xCurve","yCurve","openGroup","closeGroup","wrapSvgEl","drawCrescendo","drawLine","y3","y4","printDebugBox","rectBeneath","drawStaffGroup","setPaperSize","nonMusic","Selectables","responsive","selectTypes","groupClasses","moveY","topText","incrLine","abcLine","lineNumber","addStaffPadding","staffSeparation","engraveStaffLine","bottomText","getElements","lastStaffGroup","thisStaffGroup","lastBottomLine","nextTopLine","naturalSeparation","separationInPixels","drawDynamics","drawEnding","linestartx","lineendx","noClass","drawGlissando","leftY","rightY","leftX","rightX","marginRight","leftYAdj","rightYAdj","numSquigglies","drawSquiggly","sqrt","xOfs","leftStart","leftEnd","Group","lastM","isInGroup","addPath","drawSeparator","absmove","absolutemoveY","printLine","firefox112","lineToBack","pathToBack","printStem","ycorr","groupClass","kernSymbols","lastSymbol","thisSymbol","lastSymbolWidth","printStaffLine","graphelem","hAnchor","tabFont","tabClass","stemWidth","scaleExistingElem","scaleX","scaleY","setAttributeOnElement","toFixed","absEl","svgEl","isNoteOrTabNumber","canSelect","selectable","tabindex","sel","isDraggable","maxwidth","ariaLabel","styles","insertStyles","parentStyles","setResponsiveWidth","setSize","setParentStyles","arguments","o","String","fromCharCode","toExponential","str_repeat","drawVoice","printStaff","colorIndex","staff1","showDebug","boxAllElements","dottedLine","originalTop","originalBottom","debugPrintGridItem","topLine","bottomLine","incrVoice","newMeasure","startx","printBrace","tabNameHeight","r","leftMargin","colors","positionY","chordLines","coords","relElem","endx","prepend","firstYLine","lastYLine","curpitch","descenderHeight","preWidth","charWidth","postWidth","charWidth2","alreadyInGroup","richTextLine","laneMargin","getBBox","deltaY","rect","drawTie","layout","fudgeY","drawArc","isTie","pitch1","norm","ux","uy","maxFlatten","controlx1","controly1","controlx2","controly2","pathString2","drawTriplet","hasBeam","drawBracket","xTextPos","yTextPos","bracketHeight","midX","gapWidth","leftEndX","leftEndY","rightStartX","rightStartY","staffbottom","saveColor","textEl","foundNote","justInitializedMeasureNumber","isInMeasure","startMeasure","isNonSpacerRest","incrNote","incrMeasure","Renderer","setupSelection","Classes","GetFontAndAttr","GetTextSize","oneSvgPerLine","selectionColor","dragColor","dragging","SPACE","timeBasedLayout","expandToWidest","add_classes","staffwidthScreen","staffwidthPrint","listeners","addSelectListener","setPaddingOverride","minPadding","selected","dragTarget","dragIndex","dragMouseStart","dragYStep","setLineThickness","abctunes","engraveTune","adjustNonScaledItems","origJazzChords","setupTune","constructTuneElements","needNewSection","foundNotStaffExtra","lastXPosition","newTune","hasPrintedTempo","hasSeenNonSubtitle","nlines","entry","nRows","thisRow","svgs","splitSvgIntoLines","paddingBottom","viewBox","getAttribute","wrappers","gapBetweenLines","wrapper","divStyles","duplicateSvg","fullTitle","viewBoxHeight","cloneNode","titleEl","innerText","svgNS","createElementNS","attributes","getDim","historyEl","measureTotalPerLine","noteNumber","measureTotal","fontOverrides","paddingPercent","fontHeight","addClass","removeClass","kls","FONTEM","FONTSIZE","TOPNOTE","STAVEHEIGHT","INDENT","findNumber","createAnalysis","classObj","closest","dataset","tagName","clickedName","parentClasses","clickedClasses","selectableElement","nodeValue","hist","keyboardDown","keyboardSelection","elementFocused","mouseDown","passive","mouseMove","mouseUp","getCoord","yOffset","clientHeight","svgClicked","offsetX","offsetY","layerX","layerY","dragMechanism","notifySelect","keyCode","preventDefault","handled","findElementInHistory","findElementByCoord","minDistance","closestIndex","horiz","hypotenuse","getBestMatchCoordinates","epsilon","getTarget","parentElement","getMousePosition","clickedOn","attachMissingTouchEventAttributes","touchEv","touches","pageX","pageY","_ev","addGlobalClass","lastTouchMove","yDist","clearSelection","removeGlobalClass","dragStep","dragMax","step","elStart","elEnd","getClassSet","oldClass","setClassSet","klassSet","getBarYAt","layoutBeam","calcDy","minStemHeight","minStem","calcYPos","xPos","calcXPos","createAdditionalBeams","createStems","getDurlog","calcSlant","leftAveragePitch","rightAveragePitch","numStems","slant","maxSlant","asc","starthead","endhead","firstAveragePitch","lastAveragePitch","barpos","barminpos","furthestHead","ovalDelta","bary","auxBeams","sy","single","auxBeamEndX","auxBeamEndY","starty","endy","getLeftEdgeOfStaff","voiceheaderw","addBraceSize","sizeW","setBraceLocation","setLocation","layoutInGrid","leftEdge","getTotalDuration","totalWidth","leftAlignPadding","afterFixedLeft","durationUnit","gridStart","align","grandchild","gridEnd","maxCount","layoutVoice","setUpperAndLowerElements","layoutStaffGroup","setXSpacing","isLastLine","debug","newspace","it","calcHorizontalSpacing","spacingUnits","minSpace","minspace","centerWholeRests","dumpGroup","stretchLast","targetWidth","lack","stretch","relSpace","constSpace","lastStaffBottom","incTop","vocal","hgt","setUpperAndLowerVoiceElements","thisStaffTop","forcedSpacingBetween","minSpacingInPitches","systemStaffSeparation","addedSpace","staffTopMargin","setUpperAndLowerAbsoluteElements","setUpperAndLowerCrescendoElements","setUpperAndLowerDynamicElements","setUpperAndLowerEndingElements","specialYResolved","setUpperAndLowerTempoElement","setUpperAndLowerRelativeElements","tempoPitch","renderSpacing","layoutVoiceElements","checkLastBarX","maxX","lastChild","maxChild","barX","spacingunits","currentduration","beginLayout","spacingunit","layoutEnded","getDurationIndex","currentvoices","othervoices","durationIndex","spacingduration","getNextX","getSpacingUnits","lastTopVoice","topVoice","isSameStaff","voicechildx","layoutOneItem","shiftRight","updateNextX","updateIndices","durationindex","voice1","voice2","layoutTriplet","isAbove","heightAtMidpoint","xAtMidpoint","VoiceElements","minx","nextx","er","pad","overlaps","firstChildNoteWidth","adjustedWidth","relativeChild","extraWidth","getExtraWidth","getMinWidth","moveDecorations","setLaneForChord","yAtNote","placeInLane","rightMost","xCoords","fits","absElems","rightMostAbove","rightMostBelow","setLane","numAnnotationsBelow","numLanesAbove","numLanesBelow","Svg","userAgent","clear","initVerticalSpace","setVerticalSpace","setPadding","paddingOverride","paddingtop","paddingbottom","paddingright","paddingleft","setPaddingVariable","paddingKey","formattingKey","printDefault","screenDefault","graceBefore","graceInside","graceAfter","lineSkipFactor","paragraphSkipFactor","slurHeight","staffsep","composerspace","partsspace","textspace","musicspace","titlespace","sysstaffsep","subtitlespace","topspace","vocalspace","wordsspace","em","createSvg","currentGroup","titleNode","createTextNode","cls","transform","textContent","dummySvg","constructHLine","constructVLine","ts2","dist","ts3","append","tspan","guessWidth","createDummySvg","ex","sizeCache","removeLater","setAttributeNS","moveElementToChild"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/abcjs-plugin-min.js b/dist/abcjs-plugin-min.js index 1e8beb0a7..2b173db9f 100644 --- a/dist/abcjs-plugin-min.js +++ b/dist/abcjs-plugin-min.js @@ -1,3 +1,3 @@ -/*! abcjs_plugin v6.4.0 Copyright © 2009-2023 Paul Rosen and Gregory Dyke (https://abcjs.net) */ +/*! abcjs_plugin v6.4.1 Copyright © 2009-2023 Paul Rosen and Gregory Dyke (https://abcjs.net) */ /*! For license information please see abcjs_plugin.LICENSE */ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.abcjs=t():e.ABCJS=t()}(this,(function(){return e={7001:function(e,t,r){"use strict";var i=r(1592).TuneBook,a=r(8905),n=r(5253),s=new function(){var e=!1;try{e=abcjs_is_user_script}catch(e){}this.show_midi=!e,this.hide_abc=!1,this.render_before=!1,this.midi_options={},this.render_options={},this.render_classname="abcrendered",this.text_classname="abctext",this.auto_render_threshold=20,this.show_text="show score for: ",this.debug=!1};s.start=function(){var e=window.document.body;this.errors="";var t=this.getABCContainingElements(e);if(0!==t.length){if(this.debug)for(var r=0;r0)for(var a=r.length,n=0;n1&&r&&r.length>0)for(a=r.length,n=0;n=0&&h0,v=0;v=0&&(u=C.startChar,d=void 0===C.chord?h:null),C.chord&&(h=C),"bar"===C.el_type){if(p){var S={abc:n.abc.substring(u,C.endChar)};(h=d&&d.chord&&d.chord.length>0?d.chord[0].name:null)&&(S.lastChord=h),C.startEnding&&(S.startEnding=C.startEnding),C.endEnding&&(S.endEnding=C.endEnding),f.push(S),u=null,p=!1}}else"note"===C.el_type&&(p=!0)}}r.push({header:l,measures:f,hasPickup:g})}return r}}(),e.exports=o},9447:function(e,t,r){var i=r(4914).relativeMajor,a={acc:"sharp",note:"f"},n={acc:"sharp",note:"c"},s={acc:"sharp",note:"g"},o={acc:"sharp",note:"d"},c={acc:"sharp",note:"A"},l={acc:"sharp",note:"e"},h={acc:"flat",note:"B"},d={acc:"flat",note:"e"},u={acc:"flat",note:"A"},f={acc:"flat",note:"d"},p={acc:"flat",note:"G"},m={acc:"flat",note:"c"},g={"C#":[a,n,s,o,c,l,{acc:"sharp",note:"B"}],"F#":[a,n,s,o,c,l],B:[a,n,s,o,c],E:[a,n,s,o],A:[a,n,s],D:[a,n],G:[a],C:[],F:[h],Bb:[h,d],Eb:[h,d,u],Cm:[h,d,u],Ab:[h,d,u,f],Db:[h,d,u,f,p],Gb:[h,d,u,f,p,m],Cb:[h,d,u,f,p,m,{acc:"flat",note:"F"}],"A#":[h,d],"B#":[],"D#":[h,d,u],"E#":[h],"G#":[h,d,u,f],none:[]};e.exports=function(e){var t=g[i(e)];return t?JSON.parse(JSON.stringify(t)):null}},4914:function(e){var t={C:{modes:["CMaj","Amin","Am","GMix","DDor","EPhr","FLyd","BLoc"],stepsFromC:0},Db:{modes:["DbMaj","Bbmin","Bbm","AbMix","EbDor","FPhr","GbLyd","CLoc"],stepsFromC:1},D:{modes:["DMaj","Bmin","Bm","AMix","EDor","F#Phr","GLyd","C#Loc"],stepsFromC:2},Eb:{modes:["EbMaj","Cmin","Cm","BbMix","FDor","GPhr","AbLyd","DLoc"],stepsFromC:3},E:{modes:["EMaj","C#min","C#m","BMix","F#Dor","G#Phr","ALyd","D#Loc"],stepsFromC:4},F:{modes:["FMaj","Dmin","Dm","CMix","GDor","APhr","BbLyd","ELoc"],stepsFromC:5},Gb:{modes:["GbMaj","Ebmin","Ebm","DbMix","AbDor","BbPhr","CbLyd","FLoc"],stepsFromC:6},G:{modes:["GMaj","Emin","Em","DMix","ADor","BPhr","CLyd","F#Loc"],stepsFromC:7},Ab:{modes:["AbMaj","Fmin","Fm","EbMix","BbDor","CPhr","DbLyd","GLoc"],stepsFromC:8},A:{modes:["AMaj","F#min","F#m","EMix","BDor","C#Phr","DLyd","G#Loc"],stepsFromC:9},Bb:{modes:["BbMaj","Gmin","Gm","FMix","CDor","DPhr","EbLyd","ALoc"],stepsFromC:10},B:{modes:["BMaj","G#min","G#m","F#Mix","C#Dor","D#Phr","ELyd","A#Loc"],stepsFromC:11},"C#":{modes:["C#Maj","A#min","A#m","G#Mix","D#Dor","E#Phr","F#Lyd","B#Loc"],stepsFromC:1},"F#":{modes:["F#Maj","D#min","D#m","C#Mix","G#Dor","A#Phr","BLyd","E#Loc"],stepsFromC:6},Cb:{modes:["CbMaj","Abmin","Abm","GbMix","DbDor","EbPhr","FbLyd","BbLoc"],stepsFromC:11}},r=null;e.exports={relativeMajor:function(e){r||function(){r={};for(var e=Object.keys(t),i=0;i=t&&(r-=t),"bar"===s[c].el_type)return r}return r}(this.lines,e);return t<1e-8||e-t<1e-8?0:t},this.getBarLength=function(){var e=this.getMeterFraction();return e.num/e.den},this.getTotalTime=function(){return this.totalTime},this.getTotalBeats=function(){return this.totalBeats},this.millisecondsPerMeasure=function(e){var t;if(e)t=e;else{var r=this.metaText?this.metaText.tempo:null;t=this.getBpm(r)}return t<=0&&(t=1),this.getBeatsPerMeasure()/t*6e4},this.getBeatsPerMeasure=function(){var e=this.getBeatLength();return this.getBarLength()/e},this.getMeter=function(){for(var e=0;ee)return c}}return null},this.addElementToEvents=function(e,t,r,a,n,s,o,c,l,h){if(t.hint)return{isTiedState:void 0,duration:0};var d=t.durationClass?t.durationClass:t.duration;if(t.abcelem.rest&&"spacer"===t.abcelem.rest.type&&(d=0),d>0){for(var u=[],f=0;f0)for(var s=n.staffs[0],o=s.absoluteY,c=o-s.top*a.STEP,l=n.staffs[n.staffs.length-1],h=(o=l.absoluteY)-l.bottom*a.STEP-c,d=n.voices,u=0;u0&&o["event"+p]&&(w="event"+p),p=Math.round(1e3*f),"bar"===T.type){var S=T.abcelem.type,N="bar_right_repeat"===S||"bar_dbl_repeat"===S,E="1"===T.abcelem.startEnding,_="bar_left_repeat"===S||"bar_dbl_repeat"===S||"bar_right_repeat"===S;if(N){x>0&&(o[w].endX=T.x),-1===g&&(g=x);var M=0;y=-1;for(var A=m;A=0;n--){var s=e[n];"bar"===s.type?(s.top=i,s.nextTop=t,t=i,s.bottom=a,s.nextBottom=r,r=a):"event"===s.type&&(i=s.top,a=s.top+s.height)}}(s=function(e){var t=[];for(var r in e)e.hasOwnProperty(r)&&t.push(e[r]);return t.sort((function(e,t){var r=e.milliseconds-t.milliseconds;return 0!==r?r:"bar"===e.type?-1:1}))}(o)),function(e,r){if(!(r.length<1)){for(var i=0;ia.left&&(a.endX=Math.min(a.endX,s)):a.endX=s}}var o=r[r.length-1];o.endX=e[o.line].staffGroup.w}}(this.lines,s),s.push({type:"end",milliseconds:d}),this.addUsefulCallbackInfo(s,b*a),s},this.addUsefulCallbackInfo=function(e,t){for(var r=this.millisecondsPerMeasure(t),i=0;i0?e.duration[0]:r)/r}if(!t){t=180;var i=this.getMeterFraction();i&&3!==i.num&&i.num%3==0&&(t=120)}return t},this.setTiming=function(e,t){if(t=t||0,!this.engraver||!this.engraver.staffgroups)return console.log("setTiming cannot be called before the tune is drawn."),this.noteTimings=[],this.noteTimings;var r=this.metaText?this.metaText.tempo:null,i=this.getBpm(r),a=1;e?r&&(a=e/i):e=i;var n=this.getBeatLength(),s=e/60,o=this.getBarLength()/n*t/s;o&&(o-=this.getPickupLength()/n/s);var c=n*s;return this.noteTimings=this.setupEvents(o,c,e,a),this.noteTimings.length>0?(this.totalTime=this.noteTimings[this.noteTimings.length-1].milliseconds/1e3,this.totalBeats=this.totalTime*s):(this.totalTime=void 0,this.totalBeats=void 0),this.noteTimings},this.setUpAudio=function(e){e||(e={});var t=n(this,e);return s(t,e,this.formatting.percmap,this.formatting.midi)},this.deline=function(e){return o(this.lines,e)},this.findSelectableElement=function(e){return this.engraver&&this.engraver.selectables?this.engraver.findSelectableElement(e):null},this.getSelectableArray=function(){return this.engraver&&this.engraver.selectables?this.engraver.selectables:[]}}},351:function(e){function t(e,t){return"abselem"===e?"abselem":t}function r(e,t){e.el_type="meter",e.startChar=-1,e.endChar=-1;for(var r=0;r=0&&e.lastIndexOf(t)===r},last:function(e){return 0===e.length?null:e[e.length-1]}};e.exports=t},8905:function(e,t,r){var i=r(5008),a=r(8360),n=r(9928),s=r(6476),o=r(1881),c=r(1756),l=r(6780),h=r(575);e.exports=function(){"use strict";var e,t=new l,r=new h(t),d="",u="";function f(e,t,r){e.positioning||(e.positioning={}),e.positioning[t]=r}function p(e,t,r){e.fonts||(e.fonts={}),e.fonts[t]=r}this.getTune=function(){var e={formatting:t.formatting,lines:t.lines,media:t.media,metaText:t.metaText,metaTextInfo:t.metaTextInfo,version:t.version,addElementToEvents:t.addElementToEvents,addUsefulCallbackInfo:t.addUsefulCallbackInfo,getTotalTime:t.getTotalTime,getTotalBeats:t.getTotalBeats,getBarLength:t.getBarLength,getBeatLength:t.getBeatLength,getBeatsPerMeasure:t.getBeatsPerMeasure,getBpm:t.getBpm,getMeter:t.getMeter,getMeterFraction:t.getMeterFraction,getPickupLength:t.getPickupLength,getKeySignature:t.getKeySignature,getElementFromChar:t.getElementFromChar,makeVoicesArray:t.makeVoicesArray,millisecondsPerMeasure:t.millisecondsPerMeasure,setupEvents:t.setupEvents,setTiming:t.setTiming,setUpAudio:t.setUpAudio,deline:t.deline,findSelectableElement:t.findSelectableElement,getSelectableArray:t.getSelectableArray};return t.lineBreaks&&(e.lineBreaks=t.lineBreaks),t.visualTranspose&&(e.visualTranspose=t.visualTranspose),e};var m,g,v={reset:function(){for(var e in this)this.hasOwnProperty(e)&&"function"!=typeof this[e]&&delete this[e];this.iChar=0,this.key={accidentals:[],root:"none",acc:"",mode:""},this.meter=null,this.origMeter=null,this.hasMainTitle=!1,this.default_length=.125,this.clef={type:"treble",verticalPos:0},this.octave=0,this.next_note_duration=0,this.start_new_line=!0,this.is_in_header=!0,this.partForNextLine={},this.tempoForNextLine=[],this.havent_set_length=!0,this.voices={},this.staves=[],this.macros={},this.currBarNumber=1,this.barCounter={},this.ignoredDecorations=[],this.score_is_present=!1,this.inEnding=!1,this.inTie=[],this.inTieChord={},this.vocalPosition="auto",this.dynamicPosition="auto",this.chordPosition="auto",this.ornamentPosition="auto",this.volumePosition="auto",this.openSlurs=[],this.freegchord=!1,this.endingHoldOver={}},differentFont:function(e,t){return this[e].decoration!==t[e].decoration||this[e].face!==t[e].face||this[e].size!==t[e].size||this[e].style!==t[e].style||this[e].weight!==t[e].weight},addFormattingOptions:function(e,t,r){"note"===r?("auto"!==this.vocalPosition&&f(e,"vocalPosition",this.vocalPosition),"auto"!==this.dynamicPosition&&f(e,"dynamicPosition",this.dynamicPosition),"auto"!==this.chordPosition&&f(e,"chordPosition",this.chordPosition),"auto"!==this.ornamentPosition&&f(e,"ornamentPosition",this.ornamentPosition),"auto"!==this.volumePosition&&f(e,"volumePosition",this.volumePosition),this.differentFont("annotationfont",t)&&p(e,"annotationfont",this.annotationfont),this.differentFont("gchordfont",t)&&p(e,"gchordfont",this.gchordfont),this.differentFont("vocalfont",t)&&p(e,"vocalfont",this.vocalfont),this.differentFont("tripletfont",t)&&p(e,"tripletfont",this.tripletfont)):"bar"===r&&("auto"!==this.dynamicPosition&&f(e,"dynamicPosition",this.dynamicPosition),"auto"!==this.chordPosition&&f(e,"chordPosition",this.chordPosition),"auto"!==this.ornamentPosition&&f(e,"ornamentPosition",this.ornamentPosition),"auto"!==this.volumePosition&&f(e,"volumePosition",this.volumePosition),this.differentFont("measurefont",t)&&p(e,"measurefont",this.measurefont),this.differentFont("repeatfont",t)&&p(e,"repeatfont",this.repeatfont))},duplicateStartEndingHoldOvers:function(){this.endingHoldOver={inTie:[],inTieChord:{}};for(var e=0;e/g,">")},y=function(t,r,i){r||(r=" ");var a=r[i];" "!==a&&a||(a="SPACE");var n,s=b(r.substring(i-64,i))+''+a+""+b(r.substring(i+1).substring(0,64));!function(e){v.warnings||(v.warnings=[]),v.warnings.push(e)}("Music Line:"+e.lineIndex+":"+(i+1)+": "+t+": "+s),n={message:t,line:r,startChar:v.iChar+i,column:i},v.warningObjects||(v.warningObjects=[]),v.warningObjects.push(n)};this.getWarnings=function(){return v.warnings},this.getWarningObjects=function(){return v.warningObjects};var x=function(t,r){if(r.indexOf("")>=0)d+=r;else if(r=d+r,d="",t){"-"!==(r=i.strip(r))[r.length-1]&&(r+=" ");for(var a=[],n=0,s=!1,o=function(t){var o=i.strip(r.substring(n,t));if(o=o.replace(/\\([-_*|~])/g,"$1"),n=t+1,o.length>0){s&&(o=o.replace(/~/g," "));var c=r[t];return"_"!==c&&"-"!==c&&(c=" "),a.push({syllable:e.translateString(o),divider:c}),s=!1,!0}return!1},c=!1,l=0;l0&&(i.last(a).divider="-",a.push({skip:!0,to:"next"}));break;case"_":c||(o(l),a.push({skip:!0,to:"slur"}));break;case"*":c||(o(l),a.push({skip:!0,to:"next"}));break;case"|":c||(o(l),a.push({skip:!0,to:"bar"}));break;case"~":c||(s=!0)}c="\\"===r[l]}t.forEach((function(e){if(0!==a.length)if(a[0].skip){switch(a[0].to){case"next":case"slur":"note"===e.el_type&&null!==e.pitches&&a.shift();break;case"bar":"bar"===e.el_type&&a.shift()}"bar"!==e.el_type&&(void 0===e.lyric?e.lyric=[{syllable:"",divider:" "}]:e.lyric.push({syllable:"",divider:" "}))}else if("note"===e.el_type&&void 0===e.rest){var t=a.shift();t.syllable&&(t.syllable=t.syllable.replace(/ +/g," ")),void 0===e.lyric?e.lyric=[t]:e.lyric.push(t)}}))}else y("Can't add words before the first line of music",t,0)},k=function(t,r){if(r.indexOf("")>=0)u+=r;else if(r=u+r,u="",t){"-"!==(r=i.strip(r))[r.length-1]&&(r+=" ");for(var a=[],n=0,s=!1,o=function(t){var o=i.strip(r.substring(n,t));if(n=t+1,o.length>0){s&&(o=o.replace(/~/g," "));var c=r[t];return"_"!==c&&"-"!==c&&(c=" "),a.push({syllable:e.translateString(o),divider:c}),s=!1,!0}return!1},c=0;c0&&(i.last(a).divider="-",a.push({skip:!0,to:"next"}));break;case"_":o(c),a.push({skip:!0,to:"slur"});break;case"*":o(c),a.push({skip:!0,to:"next"});break;case"|":o(c),a.push({skip:!0,to:"bar"});break;case"~":s=!0}t.forEach((function(e){if(0!==a.length)if(a[0].skip)switch(a[0].to){case"next":case"slur":"note"===e.el_type&&null!==e.pitches&&a.shift();break;case"bar":"bar"===e.el_type&&a.shift()}else if("note"===e.el_type&&void 0===e.rest){var t=a.shift();void 0===e.lyric?e.lyric=[t]:e.lyric.push(t)}}))}else y("Can't add symbols before the first line of music",t,0)},w=function(e){if(i.startsWith(e,"%%")){var t=a.addDirective(e.substring(2));t&&y(t,e,2)}else{var n=e.indexOf("%");if(n>=0&&(e=e.substring(0,n)),0!==(e=e.replace(/\s+$/,"")).length)if(d)x(r.getCurrentVoice(),e.substring(2));else if(u)k(r.getCurrentVoice(),e.substring(2));else if(e.length<2||":"!==e[1]||g.lineContinuation)g.parseMusic(e);else{var s=m.parseHeader(e);s.regular&&g.parseMusic(e),s.newline&&g.startNewLine(),s.words&&x(r.getCurrentVoice(),e.substring(2)),s.symbols&&k(r.getCurrentVoice(),e.substring(2))}}};function T(e,t){e.push({el_type:"hint"});for(var r=0;r1){for(var b=1;b0&&"\n"!==p[b][0];)p[b]=p[b].substr(1),p[b-1]+=" ";l=p.join(" ")}var T=(l=l.replace(/\\([ \t]*)(%.*)*\n/g,(function(e,t,r){return t+""+(r?Array(r.length+1).join(" "):"")+"\n"}))).split("\n");0===i.last(T).length&&T.pop(),e=new o(T,v),m=new n(e,y,v,t,r),g=new s(e,y,v,t,r,m),h.print&&(t.media="print"),v.reset(),v.iChar=f,h.visualTranspose?(v.globalTranspose=parseInt(h.visualTranspose),0===v.globalTranspose?v.globalTranspose=void 0:r.setVisualTranspose(h.visualTranspose)):v.globalTranspose=void 0,h.lineBreaks&&(v.lineBreaks=h.lineBreaks),m.reset(e,y,v,t);try{h.format&&a.globalFormatting(h.format);for(var S=e.nextLine();S;){if(h.header_only&&!1===v.is_in_header)throw"normal_abort";if(h.stop_on_warning&&v.warnings)throw"normal_abort";var N=v.is_in_header;w(S),N&&!v.is_in_header&&(r.setRunningFont("annotationfont",v.annotationfont),r.setRunningFont("gchordfont",v.gchordfont),r.setRunningFont("tripletfont",v.tripletfont),r.setRunningFont("vocalfont",v.vocalfont)),S=e.nextLine()}d&&x(r.getCurrentVoice(),""),u&&k(r.getCurrentVoice(),""),v.openSlurs=r.cleanUp(v.barsperstaff,v.staffnonote,v.openSlurs)}catch(e){if("normal_abort"!==e)throw e}var E=792,_=612;switch(v.papersize){case"legal":E=1008,_=612;break;case"A4":E=842.4,_=597.6}if(v.landscape){var M=E;E=_,_=M}t.formatting.pagewidth||(t.formatting.pagewidth=_),t.formatting.pageheight||(t.formatting.pageheight=E),h.hint_measures&&function(){for(var e=0;e1&&!i.startsWith(o[0].abc,"X:")&&o.shift().abc.split("\n").forEach((function(e){i.startsWith(e,"%%")&&(t+=e+"\n")}));var c=t;return o.forEach((function(e){var r=e.abc.indexOf("\n\n");r>0&&(e.abc=e.abc.substring(0,r)),e.pure=e.abc,e.abc=t+e.abc,e.title="";var a=e.pure.split("T:");a.length>1&&(a=a[1].split("\n"),e.title=i.strip(a[0]));var n=e.pure.substring(2,e.pure.indexOf("\n"));e.id=i.strip(n)})),{header:c,tunes:o}}},8360:function(e,t,r){var i=r(5008),a={};!function(){"use strict";var e,t,r,n,s;a.initialize=function(i,a,o,c,l){e=i,t=a,n=c,s=l,(r=o).annotationfont={face:"Helvetica",size:12,weight:"normal",style:"normal",decoration:"none"},r.gchordfont={face:"Helvetica",size:12,weight:"normal",style:"normal",decoration:"none"},r.historyfont={face:'"Times New Roman"',size:16,weight:"normal",style:"normal",decoration:"none"},r.infofont={face:'"Times New Roman"',size:14,weight:"normal",style:"italic",decoration:"none"},r.measurefont={face:'"Times New Roman"',size:14,weight:"normal",style:"italic",decoration:"none"},r.partsfont={face:'"Times New Roman"',size:15,weight:"normal",style:"normal",decoration:"none"},r.repeatfont={face:'"Times New Roman"',size:13,weight:"normal",style:"normal",decoration:"none"},r.textfont={face:'"Times New Roman"',size:16,weight:"normal",style:"normal",decoration:"none"},r.tripletfont={face:"Times",size:11,weight:"normal",style:"italic",decoration:"none"},r.vocalfont={face:'"Times New Roman"',size:13,weight:"bold",style:"normal",decoration:"none"},r.wordsfont={face:'"Times New Roman"',size:16,weight:"normal",style:"normal",decoration:"none"},n.formatting.composerfont={face:'"Times New Roman"',size:14,weight:"normal",style:"italic",decoration:"none"},n.formatting.subtitlefont={face:'"Times New Roman"',size:16,weight:"normal",style:"normal",decoration:"none"},n.formatting.tempofont={face:'"Times New Roman"',size:15,weight:"bold",style:"normal",decoration:"none"},n.formatting.titlefont={face:'"Times New Roman"',size:20,weight:"normal",style:"normal",decoration:"none"},n.formatting.footerfont={face:'"Times New Roman"',size:12,weight:"normal",style:"normal",decoration:"none"},n.formatting.headerfont={face:'"Times New Roman"',size:12,weight:"normal",style:"normal",decoration:"none"},n.formatting.voicefont={face:'"Times New Roman"',size:13,weight:"bold",style:"normal",decoration:"none"},n.formatting.tablabelfont={face:'"Trebuchet MS"',size:16,weight:"normal",style:"normal",decoration:"none"},n.formatting.tabnumberfont={face:'"Arial"',size:11,weight:"normal",style:"normal",decoration:"none"},n.formatting.tabgracefont={face:'"Arial"',size:8,weight:"normal",style:"normal",decoration:"none"},n.formatting.annotationfont=r.annotationfont,n.formatting.gchordfont=r.gchordfont,n.formatting.historyfont=r.historyfont,n.formatting.infofont=r.infofont,n.formatting.measurefont=r.measurefont,n.formatting.partsfont=r.partsfont,n.formatting.repeatfont=r.repeatfont,n.formatting.textfont=r.textfont,n.formatting.tripletfont=r.tripletfont,n.formatting.vocalfont=r.vocalfont,n.formatting.wordsfont=r.wordsfont};var o={gchordfont:!0,measurefont:!0,partsfont:!0,annotationfont:!0,composerfont:!0,historyfont:!0,infofont:!0,subtitlefont:!0,textfont:!0,titlefont:!0,voicefont:!0},c=function(e,r,i,a,n){function s(){var s=parseInt(e[0].token);return e.shift(),r?0===e.length?{face:r.face,weight:r.weight,style:r.style,decoration:r.decoration,size:s}:1===e.length&&"box"===e[0].token&&o[n]?{face:r.face,weight:r.weight,style:r.style,decoration:r.decoration,size:s,box:!0}:(t("Extra parameters in font definition.",i,a),{face:r.face,weight:r.weight,style:r.style,decoration:r.decoration,size:s}):(t("Can't set just the size of the font since there is no default value.",i,a),{face:'"Times New Roman"',weight:"normal",style:"normal",decoration:"none",size:s})}if("*"===e[0].token){if(e.shift(),"number"===e[0].type)return s();t("Expected font size number after *.",i,a)}if("number"===e[0].type)return s();for(var c,l=[],h="normal",d="normal",u="none",f=!1,p="face",m=!1;e.length;){var g=e.shift(),v=g.token.toLowerCase();switch(p){case"face":m||"utf"!==v&&"number"!==g.type&&"bold"!==v&&"italic"!==v&&"underline"!==v&&"box"!==v?l.length>0&&"-"===g.token?(m=!0,l[l.length-1]=l[l.length-1]+g.token):m?(m=!1,l[l.length-1]=l[l.length-1]+g.token):l.push(g.token):"number"===g.type?(c?t("Font size specified twice in font definition.",i,a):c=g.token,p="modifier"):"bold"===v?h="bold":"italic"===v?d="italic":"underline"===v?u="underline":"box"===v?(o[n]?f=!0:t('This font style doesn\'t support "box"',i,a),p="finished"):"utf"===v?(g=e.shift(),p="size"):t("Unknown parameter "+g.token+" in font definition.",i,a);break;case"size":"number"===g.type?c?t("Font size specified twice in font definition.",i,a):c=g.token:t("Expected font size in font definition.",i,a),p="modifier";break;case"modifier":"bold"===v?h="bold":"italic"===v?d="italic":"underline"===v?u="underline":"box"===v?(o[n]?f=!0:t('This font style doesn\'t support "box"',i,a),p="finished"):t("Unknown parameter "+g.token+" in font definition.",i,a);break;case"finished":t('Extra characters found after "box" in font definition.',i,a)}}void 0===c?r?c=r.size:(t("Must specify the size of the font since there is no default value.",i,a),c=12):c=parseFloat(c),""===(l=l.join(" "))&&(r?l=r.face:(t("Must specify the name of the font since there is no default value.",i,a),l="sans-serif"));var b=function(e){switch(e){case"Arial-Italic":return{face:"Arial",weight:"normal",style:"italic",decoration:"none"};case"Arial-Bold":return{face:"Arial",weight:"bold",style:"normal",decoration:"none"};case"Bookman-Demi":return{face:"Bookman,serif",weight:"bold",style:"normal",decoration:"none"};case"Bookman-DemiItalic":return{face:"Bookman,serif",weight:"bold",style:"italic",decoration:"none"};case"Bookman-Light":return{face:"Bookman,serif",weight:"normal",style:"normal",decoration:"none"};case"Bookman-LightItalic":return{face:"Bookman,serif",weight:"normal",style:"italic",decoration:"none"};case"Courier":return{face:'"Courier New"',weight:"normal",style:"normal",decoration:"none"};case"Courier-Oblique":return{face:'"Courier New"',weight:"normal",style:"italic",decoration:"none"};case"Courier-Bold":return{face:'"Courier New"',weight:"bold",style:"normal",decoration:"none"};case"Courier-BoldOblique":return{face:'"Courier New"',weight:"bold",style:"italic",decoration:"none"};case"AvantGarde-Book":return{face:"AvantGarde,Arial",weight:"normal",style:"normal",decoration:"none"};case"AvantGarde-BookOblique":return{face:"AvantGarde,Arial",weight:"normal",style:"italic",decoration:"none"};case"AvantGarde-Demi":case"Avant-Garde-Demi":return{face:"AvantGarde,Arial",weight:"bold",style:"normal",decoration:"none"};case"AvantGarde-DemiOblique":return{face:"AvantGarde,Arial",weight:"bold",style:"italic",decoration:"none"};case"Helvetica-Oblique":return{face:"Helvetica",weight:"normal",style:"italic",decoration:"none"};case"Helvetica-Bold":return{face:"Helvetica",weight:"bold",style:"normal",decoration:"none"};case"Helvetica-BoldOblique":return{face:"Helvetica",weight:"bold",style:"italic",decoration:"none"};case"Helvetica-Narrow":return{face:'"Helvetica Narrow",Helvetica',weight:"normal",style:"normal",decoration:"none"};case"Helvetica-Narrow-Oblique":return{face:'"Helvetica Narrow",Helvetica',weight:"normal",style:"italic",decoration:"none"};case"Helvetica-Narrow-Bold":return{face:'"Helvetica Narrow",Helvetica',weight:"bold",style:"normal",decoration:"none"};case"Helvetica-Narrow-BoldOblique":return{face:'"Helvetica Narrow",Helvetica',weight:"bold",style:"italic",decoration:"none"};case"Palatino-Roman":return{face:"Palatino",weight:"normal",style:"normal",decoration:"none"};case"Palatino-Italic":return{face:"Palatino",weight:"normal",style:"italic",decoration:"none"};case"Palatino-Bold":return{face:"Palatino",weight:"bold",style:"normal",decoration:"none"};case"Palatino-BoldItalic":return{face:"Palatino",weight:"bold",style:"italic",decoration:"none"};case"NewCenturySchlbk-Roman":return{face:'"New Century",serif',weight:"normal",style:"normal",decoration:"none"};case"NewCenturySchlbk-Italic":return{face:'"New Century",serif',weight:"normal",style:"italic",decoration:"none"};case"NewCenturySchlbk-Bold":return{face:'"New Century",serif',weight:"bold",style:"normal",decoration:"none"};case"NewCenturySchlbk-BoldItalic":return{face:'"New Century",serif',weight:"bold",style:"italic",decoration:"none"};case"Times":case"Times-Roman":case"Times-Narrow":case"Times-Courier":case"Times-New-Roman":return{face:'"Times New Roman"',weight:"normal",style:"normal",decoration:"none"};case"Times-Italic":case"Times-Italics":return{face:'"Times New Roman"',weight:"normal",style:"italic",decoration:"none"};case"Times-Bold":return{face:'"Times New Roman"',weight:"bold",style:"normal",decoration:"none"};case"Times-BoldItalic":return{face:'"Times New Roman"',weight:"bold",style:"italic",decoration:"none"};case"ZapfChancery-MediumItalic":return{face:'"Zapf Chancery",cursive,serif',weight:"normal",style:"normal",decoration:"none"};default:return null}}(l),y={};return b?(y.face=b.face,y.weight=b.weight,y.style=b.style,y.decoration=b.decoration,y.size=c,f&&(y.box=!0),y):(y.face=l,y.weight=h,y.style=d,y.decoration=u,y.size=c,f&&(y.box=!0),y)},l=function(e,t,i){return 0===t.length?'Directive "'+e+'" requires a font as a parameter.':(r[e]=c(t,r[e],i,0,e),r.is_in_header&&(n.formatting[e]=r[e]),null)},h=function(e,t){var r="";t.forEach((function(e){r+=e.token}));var i=parseFloat(r);if(isNaN(i)||0===i)return'Directive "'+e+'" requires a number as a parameter.';n.formatting.scale=i},d=["acoustic-bass-drum","bass-drum-1","side-stick","acoustic-snare","hand-clap","electric-snare","low-floor-tom","closed-hi-hat","high-floor-tom","pedal-hi-hat","low-tom","open-hi-hat","low-mid-tom","hi-mid-tom","crash-cymbal-1","high-tom","ride-cymbal-1","chinese-cymbal","ride-bell","tambourine","splash-cymbal","cowbell","crash-cymbal-2","vibraslap","ride-cymbal-2","hi-bongo","low-bongo","mute-hi-conga","open-hi-conga","low-conga","high-timbale","low-timbale","high-agogo","low-agogo","cabasa","maracas","short-whistle","long-whistle","short-guiro","long-guiro","claves","hi-wood-block","low-wood-block","mute-cuica","open-cuica","mute-triangle","open-triangle"],u=function(e,t,i,a,n){if(1!==i.length||"number"!==i[0].type)return'Directive "'+t+'" requires a number as a parameter.';var s=i[0].intt;return void 0!==a&&sn?'Directive "'+t+'" requires a number less than or equal to '+n+" as a parameter.":(r[e]=s,null)},f=function(e,t,i){if(1===i.length&&("true"===i[0].token||"false"===i[0].token))return r[e]="true"===i[0].token,null;var a=u(e,t,i,0,1);return null!==a?a:(r[e]=1===r[e],null)},p=function(e,t,i,a){if(1!==i.length)return'Directive "'+t+'" requires one of [ '+a.join(", ")+" ] as a parameter.";for(var n=i[0].token,s=!1,o=0;!s&&o1&&r.setfont){var i=[];""!==t[0]&&i.push({text:t[0]});for(var a=1;a=0||e[0].floatt<=1)return{value:e[0].floatt}}else{if("false"===e[0].token)return{value:0};if("true"===e[0].token)return{value:1}}return{error:"Directive stretchlast requires zero or one parameter: false, true, or number between 0 and 1 (received "+e[0].token+")"}}a.addDirective=function(o){var E=e.tokenize(o,0,o.length);if(0===E.length||"alpha"!==E[0].type)return null;var _=o.substring(o.indexOf(E[0].token)+E[0].token.length);_=e.stripComment(_);var M,A=E.shift().token.toLowerCase(),B="";switch(A){case"bagpipes":n.formatting.bagpipes=!0;break;case"flatbeams":n.formatting.flatbeams=!0;break;case"jazzchords":n.formatting.jazzchords=!0;break;case"accentAbove":n.formatting.accentAbove=!0;break;case"germanAlphabet":n.formatting.germanAlphabet=!0;break;case"landscape":r.landscape=!0;break;case"papersize":r.papersize=_;break;case"graceslurs":if(1!==E.length)return"Directive graceslurs requires one parameter: 0 or 1";if("0"===E[0].token||"false"===E[0].token)n.formatting.graceSlurs=!1;else{if("1"!==E[0].token&&"true"!==E[0].token)return"Directive graceslurs requires one parameter: 0 or 1 (received "+E[0].token+")";n.formatting.graceSlurs=!0}break;case"lineThickness":var L=N(E);if(void 0!==L.value&&(n.formatting.lineThickness=L.value),L.error)return L.error;break;case"stretchlast":var P=N(E);if(void 0!==P.value&&(n.formatting.stretchlast=P.value),P.error)return P.error;break;case"titlecaps":r.titlecaps=!0;break;case"titleleft":n.formatting.titleleft=!0;break;case"measurebox":n.formatting.measurebox=!0;break;case"vocal":return p("vocalPosition",A,E,S);case"dynamic":return p("dynamicPosition",A,E,S);case"gchord":return p("chordPosition",A,E,S);case"ornament":return p("ornamentPosition",A,E,S);case"volume":return p("volumePosition",A,E,S);case"botmargin":case"botspace":case"composerspace":case"indent":case"leftmargin":case"linesep":case"musicspace":case"partsspace":case"pageheight":case"pagewidth":case"rightmargin":case"stafftopmargin":case"staffsep":case"staffwidth":case"subtitlespace":case"sysstaffsep":case"systemsep":case"textspace":case"titlespace":case"topmargin":case"topspace":case"vocalspace":case"wordsspace":return function(t,r){var i=e.getMeasurement(r);return 0===i.used||0!==r.length?'Directive "'+t+'" requires a measurement as a parameter.':(n.formatting[t]=i.value,null)}(A,E);case"voicescale":if(1!==E.length||"number"!==E[0].type)return"voicescale requires one float as a parameter";var z=E.shift();return r.currentVoice&&(r.currentVoice.scale=z.floatt,s.changeVoiceScale(r.currentVoice.scale)),null;case"voicecolor":if(1!==E.length)return"voicecolor requires one string as a parameter";var H=E.shift();return r.currentVoice&&(r.currentVoice.color=H.token,s.changeVoiceColor(r.currentVoice.color)),null;case"vskip":var O=Math.round(function(t,r){var i=e.getMeasurement(r);return 0===i.used||0!==r.length?{error:'Directive "'+t+'" requires a measurement as a parameter.'}:i.value}(A,E));return O.error?O.error:(s.addSpacing(O),null);case"scale":h(A,E);break;case"sep":if(0===E.length)s.addSeparator(14,14,85,{startChar:r.iChar,endChar:r.iChar+5});else{var D=e.getMeasurement(E);if(0===D.used)return'Directive "'+A+'" requires 3 numbers: space above, space below, length of line';var F=D.value;if(0===(D=e.getMeasurement(E)).used)return'Directive "'+A+'" requires 3 numbers: space above, space below, length of line';var I=D.value;if(0===(D=e.getMeasurement(E)).used||0!==E.length)return'Directive "'+A+'" requires 3 numbers: space above, space below, length of line';var V=D.value;s.addSeparator(F,I,V,{startChar:r.iChar,endChar:r.iChar+_.length})}break;case"barsperstaff":if(null!==(B=u("barsperstaff",A,E)))return B;break;case"staffnonote":if(1!==E.length)return"Directive staffnonote requires one parameter: 0 or 1";if("0"===E[0].token)r.staffnonote=!0;else{if("1"!==E[0].token)return"Directive staffnonote requires one parameter: 0 or 1 (received "+E[0].token+")";r.staffnonote=!1}break;case"printtempo":if(null!==(B=f("printTempo",A,E)))return B;break;case"partsbox":if(null!==(B=f("partsBox",A,E)))return B;r.partsfont.box=r.partsBox;break;case"freegchord":if(null!==(B=f("freegchord",A,E)))return B;break;case"measurenb":case"barnumbers":if(null!==(B=u("barNumbers",A,E)))return B;break;case"setbarnb":if(1!==E.length||"number"!==E[0].type)return"Directive setbarnb requires a number as a parameter.";r.currBarNumber=s.setBarNumberImmediate(E[0].intt);break;case"begintext":var Y="";for(M=e.nextLine();M&&0!==M.indexOf("%%endtext");)i.startsWith(M,"%%")?Y+=M.substring(2)+"\n":Y+=M+"\n",M=e.nextLine();s.addText(Y,{startChar:r.iChar,endChar:r.iChar+Y.length+7});break;case"continueall":r.continueall=!0;break;case"beginps":for(M=e.nextLine();M&&0!==M.indexOf("%%endps");)e.nextLine();t("Postscript ignored",o,0);break;case"deco":_.length>0&&r.ignoredDecorations.push(_.substring(0,_.indexOf(" "))),t("Decoration redefinition ignored",o,0);break;case"text":var G=e.translateString(_);s.addText(a.parseFontChangeLine(G),{startChar:r.iChar,endChar:r.iChar+_.length+7});break;case"center":var j=e.translateString(_);s.addCentered(a.parseFontChangeLine(j));break;case"font":break;case"setfont":var W=e.tokenize(_,0,_.length);if(W.length>=4&&"-"===W[0].token&&"number"===W[1].type){var q=parseInt(W[1].token);q>=1&&q<=9&&(r.setfont||(r.setfont=[]),W.shift(),W.shift(),r.setfont[q]=c(W,r.setfont[q],o,0,"setfont"))}break;case"gchordfont":case"partsfont":case"tripletfont":case"vocalfont":case"textfont":case"annotationfont":case"historyfont":case"infofont":case"measurefont":case"repeatfont":case"wordsfont":return l(A,E,o);case"composerfont":case"subtitlefont":case"tempofont":case"titlefont":case"voicefont":case"footerfont":case"headerfont":return function(e,t,r){return 0===t.length?'Directive "'+e+'" requires a font as a parameter.':(n.formatting[e]=c(t,n.formatting[e],r,0,e),null)}(A,E,o);case"barlabelfont":case"barnumberfont":case"barnumfont":return l("measurefont",E,o);case"staves":case"score":r.score_is_present=!0;for(var X,R=function(e,t,a,n,s){(t||0===r.staves.length)&&r.staves.push({index:r.staves.length,numVoices:0});var o=i.last(r.staves);void 0!==a&&void 0===o.bracket&&(o.bracket=a),void 0!==n&&void 0===o.brace&&(o.brace=n),s&&(o.connectBarLines="end"),void 0===r.voices[e]&&(r.voices[e]={staffNum:o.index,index:o.numVoices},o.numVoices++)},U=!1,K=!1,$=!1,Q=!1,J=!1,Z=!1,ee=!1,te=function(){if(ee=!0,X){var e="start";X.staffNum>0&&("start"!==r.staves[X.staffNum-1].connectBarLines&&"continue"!==r.staves[X.staffNum-1].connectBarLines||(e="continue")),r.staves[X.staffNum].connectBarLines=e}};E.length;){var re=E.shift();switch(re.token){case"(":U?t("Can't nest parenthesis in %%score",o,re.start):(U=!0,Q=!0);break;case")":!U||Q?t("Unexpected close parenthesis in %%score",o,re.start):U=!1;break;case"[":K?t("Can't nest brackets in %%score",o,re.start):(K=!0,J=!0);break;case"]":!K||J?t("Unexpected close bracket in %%score",o,re.start):(K=!1,r.staves[X.staffNum].bracket="end");break;case"{":$?t("Can't nest braces in %%score",o,re.start):($=!0,Z=!0);break;case"}":!$||Z?t("Unexpected close brace in %%score",o,re.start):($=!1,r.staves[X.staffNum].brace="end");break;case"|":te();break;default:for(var ie="";("alpha"===re.type||"number"===re.type)&&(ie+=re.token,re.continueId);)re=E.shift();R(ie,!U||Q,J?"start":K?"continue":void 0,Z?"start":$?"continue":void 0,ee),Q=!1,J=!1,Z=!1,ee=!1,X=r.voices[ie],"staves"===A&&te()}}break;case"newpage":var ae=e.getInt(_);s.addNewPage(0===ae.digits?-1:ae.value);break;case"abc":var ne=_.split(" ");switch(ne[0]){case"-copyright":case"-creator":case"-edited-by":case"-version":case"-charset":var se=ne.shift();s.addMetaText(A+se,ne.join(" "),{startChar:r.iChar,endChar:r.iChar+_.length+5});break;default:return"Unknown directive: "+A+ne[0]}break;case"header":case"footer":var oe=e.getMeat(_,0,_.length);'"'===(oe=_.substring(oe.start,oe.end))[0]&&'"'===oe[oe.length-1]&&(oe=oe.substring(1,oe.length-1));var ce=oe.split("\t"),le={};le=1===ce.length?{left:"",center:ce[0],right:""}:2===ce.length?{left:ce[0],center:ce[1],right:""}:{left:ce[0],center:ce[1],right:ce[2]},ce.length>3&&t("Too many tabs in "+A+": "+ce.length+" found.",_,0),s.addMetaTextObj(A,le,{startChar:r.iChar,endChar:r.iChar+o.length});break;case"midi":var he=e.tokenize(_,0,_.length,!0);he.length>0&&"="===he[0].token&&he.shift(),0===he.length?t("Expected midi command",_,0):function(e,r,i){var a=e.shift().token,n=[];if(m.indexOf(a)>=0)0!==e.length&&t("Unexpected parameter in MIDI "+a,i,0);else if(g.indexOf(a)>=0)1!==e.length?t("Expected one parameter in MIDI "+a,i,0):n.push(e[0].token);else if(v.indexOf(a)>=0)1!==e.length?t("Expected one parameter in MIDI "+a,i,0):"number"!==e[0].type?t("Expected one integer parameter in MIDI "+a,i,0):n.push(e[0].intt);else if(b.indexOf(a)>=0)1!==e.length&&2!==e.length?t("Expected one or two parameters in MIDI "+a,i,0):"number"!==e[0].type||2===e.length&&"number"!==e[1].type?t("Expected integer parameter in MIDI "+a,i,0):(n.push(e[0].intt),2===e.length&&n.push(e[1].intt));else if(y.indexOf(a)>=0)2!==e.length?t("Expected two parameters in MIDI "+a,i,0):"number"!==e[0].type||"number"!==e[1].type?t("Expected two integer parameters in MIDI "+a,i,0):(n.push(e[0].intt),n.push(e[1].intt));else if(w.indexOf(a)>=0)2!==e.length?t("Expected two parameters in MIDI "+a,i,0):"alpha"!==e[0].type||"number"!==e[1].type?t("Expected one string and one integer parameters in MIDI "+a,i,0):(n.push(e[0].token),n.push(e[1].intt));else if("drummap"===a)2===e.length&&"alpha"===e[0].type&&"number"===e[1].type?(r.formatting||(r.formatting={}),r.formatting.midi||(r.formatting.midi={}),r.formatting.midi.drummap||(r.formatting.midi.drummap={}),r.formatting.midi.drummap[e[0].token]=e[1].intt,n=r.formatting.midi.drummap):3===e.length&&"punct"===e[0].type&&"alpha"===e[1].type&&"number"===e[2].type?(r.formatting||(r.formatting={}),r.formatting.midi||(r.formatting.midi={}),r.formatting.midi.drummap||(r.formatting.midi.drummap={}),r.formatting.midi.drummap[e[0].token+e[1].token]=e[2].intt,n=r.formatting.midi.drummap):t("Expected one note name and one integer parameter in MIDI "+a,i,0);else if(T.indexOf(a)>=0)3!==e.length||"number"!==e[0].type||"/"!==e[1].token||"number"!==e[2].type?t("Expected fraction parameter in MIDI "+a,i,0):(n.push(e[0].intt),n.push(e[2].intt));else if(x.indexOf(a)>=0)4!==e.length?t("Expected four parameters in MIDI "+a,i,0):"number"!==e[0].type||"number"!==e[1].type||"number"!==e[2].type||"number"!==e[3].type?t("Expected four integer parameters in MIDI "+a,i,0):(n.push(e[0].intt),n.push(e[1].intt),n.push(e[2].intt),n.push(e[3].intt));else if(k.indexOf(a)>=0)5!==e.length?t("Expected five parameters in MIDI "+a,i,0):"number"!==e[0].type||"number"!==e[1].type||"number"!==e[2].type||"number"!==e[3].type||"number"!==e[4].type?t("Expected five integer parameters in MIDI "+a,i,0):(n.push(e[0].intt),n.push(e[1].intt),n.push(e[2].intt),n.push(e[3].intt),n.push(e[4].intt));else if(b.indexOf(a)>=0)1!==e.length||4!==e.length?t("Expected one or two parameters in MIDI "+a,i,0):"number"!==e[0].type?t("Expected integer parameter in MIDI "+a,i,0):4===e.length?("octave"!==e[1].token&&t("Expected octave parameter in MIDI "+a,i,0),"="!==e[2].token&&t("Expected octave parameter in MIDI "+a,i,0),"number"!==e[3].type&&t("Expected integer parameter for octave in MIDI "+a,i,0)):(n.push(e[0].intt),4===e.length&&n.push(e[3].intt));else if(C.indexOf(a)>=0)if(e.length<2)t("Expected string parameter and at least one integer parameter in MIDI "+a,i,0);else if("alpha"!==e[0].type)t("Expected string parameter and at least one integer parameter in MIDI "+a,i,0);else{var o=e.shift();for(n.push(o.token);e.length>0;)"number"!==(o=e.shift()).type&&t("Expected integer parameter in MIDI "+a,i,0),n.push(o.intt)}s.hasBeginMusic()?s.appendElement("midi",-1,-1,{cmd:a,params:n}):(void 0===r.formatting.midi&&(r.formatting.midi={}),r.formatting.midi[a]=n)}(he,n,_);break;case"percmap":var de=function(e){var t=e.split(/\s+/);if(2!==t.length&&3!==t.length)return{error:'Expected parameters "abc-note", "drum-sound", and optionally "note-head"'};var r=t[0],i=parseInt(t[1],10);if((isNaN(i)||i<35||i>81)&&t[1]&&(i=d.indexOf(t[1].toLowerCase())+35),isNaN(i)||i<35||i>81)return{error:'Expected drum name, received "'+t[1]+'"'};var a={sound:i};return 3===t.length&&(a.noteHead=t[2]),{key:r,value:a}}(_);de.error?t(de.error,o,8):(n.formatting.percmap||(n.formatting.percmap={}),n.formatting.percmap[de.key]=de.value);break;case"map":case"playtempo":case"auquality":case"continuous":case"nobarcheck":n.formatting[A]=_;break;default:return"Unknown directive: "+A}return null},a.globalFormatting=function(i){for(var a in i)if(i.hasOwnProperty(a)){var s,o=""+i[a],c=e.tokenize(o,0,o.length);switch(a){case"titlefont":case"gchordfont":case"composerfont":case"footerfont":case"headerfont":case"historyfont":case"infofont":case"measurefont":case"partsfont":case"repeatfont":case"subtitlefont":case"tempofont":case"textfont":case"voicefont":case"tripletfont":case"vocalfont":case"wordsfont":case"annotationfont":case"tablabelfont":case"tabnumberfont":case"tabgracefont":l(a,c,o);break;case"scale":h(a,c);break;case"partsbox":null!==(s=f("partsBox",a,c))&&t(s),r.partsfont.box=r.partsBox;break;case"freegchord":null!==(s=f("freegchord",a,c))&&t(s);break;case"fontboxpadding":1===c.length&&"number"===c[0].type||t('Directive "'+a+'" requires a number as a parameter.'),n.formatting.fontboxpadding=c[0].floatt;break;case"stafftopmargin":1===c.length&&"number"===c[0].type||t('Directive "'+a+'" requires a number as a parameter.'),n.formatting.stafftopmargin=c[0].floatt;break;case"stretchlast":var d=N(c);if(void 0!==d.value&&(n.formatting.stretchlast=d.value),d.error)return d.error;break;default:t("Formatting directive unrecognized: ",a,0)}}}}(),e.exports=a},9928:function(e,t,r){var i=r(5008),a=r(8360),n=r(9708);e.exports=function(e,t,r,s,o){this.reset=function(e,t,r,i){n.initialize(e,t,r,i,o),a.initialize(e,t,r,i,o)},this.reset(e,t,r,s),this.setTitle=function(e,t){r.hasMainTitle?o.addSubtitle(e,{startChar:r.iChar,endChar:r.iChar+t+2}):(o.addMetaText("title",e,{startChar:r.iChar,endChar:r.iChar+t+2}),r.hasMainTitle=!0)},this.setMeter=function(i){if("C"===(i=e.stripComment(i)))return!0===r.havent_set_length&&(r.default_length=.125,r.havent_set_length=!1),{type:"common_time"};if("C|"===i)return!0===r.havent_set_length&&(r.default_length=.125,r.havent_set_length=!1),{type:"cut_time"};if("o"===i)return!0===r.havent_set_length&&(r.default_length=.125,r.havent_set_length=!1),{type:"tempus_perfectum"};if("c"===i)return!0===r.havent_set_length&&(r.default_length=.125,r.havent_set_length=!1),{type:"tempus_imperfectum"};if("o."===i)return!0===r.havent_set_length&&(r.default_length=.125,r.havent_set_length=!1),{type:"tempus_perfectum_prolatio"};if("c."===i)return!0===r.havent_set_length&&(r.default_length=.125,r.havent_set_length=!1),{type:"tempus_imperfectum_prolatio"};if(0===i.length||"none"===i.toLowerCase())return!0===r.havent_set_length&&(r.default_length=.125,r.havent_set_length=!1),null;var a=e.tokenize(i,0,i.length);try{var n=function(){var e=function(){var e={value:0,num:""},t=a.shift();for("("===t.token&&(t=a.shift());;){if("number"!==t.type)throw"Expected top number of meter";if(e.value+=parseInt(t.token),e.num+=t.token,0===a.length||"/"===a[0].token)return e;if(")"===(t=a.shift()).token){if(0===a.length||"/"===a[0].token)return e;throw"Unexpected paren in meter"}if("."!==t.token&&"+"!==t.token)throw"Expected top number of meter";if(e.num+=t.token,0===a.length)throw"Expected top number of meter";t=a.shift()}return e}();if(0===a.length)return e;var t=a.shift();if("/"!==t.token)throw"Expected slash in meter";if("number"!==(t=a.shift()).type)throw"Expected bottom number of meter";return e.den=t.token,e.value=e.value/parseInt(e.den),e};if(0===a.length)throw"Expected meter definition in M: line";for(var s={type:"specified",value:[]},o=0;;){var c=n();o+=c.value;var l={num:c.num};if(void 0!==c.den&&(l.den=c.den),s.value.push(l),0===a.length)break}return!0===r.havent_set_length&&(r.default_length=o<.75?.0625:.125,r.havent_set_length=!1),s}catch(e){t(e,i,0)}return null},this.calcTempo=function(e){var t=1/4;r.meter&&"specified"===r.meter.type?t=1/parseInt(r.meter.value[0].den):r.origMeter&&"specified"===r.origMeter.type&&(t=1/parseInt(r.origMeter.value[0].den));for(var i=0;i0&&(r.default_length=n/s,r.havent_set_length=!1)}else 1===a.length&&"1"===a[0]&&(r.default_length=1,r.havent_set_length=!1)};var c={larghissimo:20,adagissimo:24,sostenuto:28,grave:32,largo:40,lento:50,larghetto:60,adagio:68,adagietto:74,andante:80,andantino:88,"marcia moderato":84,"andante moderato":100,moderato:112,allegretto:116,"allegro moderato":120,allegro:126,animato:132,agitato:140,veloce:148,"mosso vivo":156,vivace:164,vivacissimo:172,allegrissimo:176,presto:184,prestissimo:210};this.setTempo=function(i,a,n,s){try{var o=e.tokenize(i,a,n);if(0===o.length)throw"Missing parameter in Q: field";var l={startChar:s+a-2,endChar:s+n},h=!0,d=o.shift();if("quote"===d.type&&(l.preString=d.token,d=o.shift(),0===o.length))return c[l.preString.toLowerCase()]&&(l.bpm=c[l.preString.toLowerCase()],l.suppressBpm=!0),{type:"immediate",tempo:l};if("alpha"===d.type&&"C"===d.token){if(0===o.length)throw"Missing tempo after C in Q: field";if("punct"===(d=o.shift()).type&&"="===d.token){if(0===o.length)throw"Missing tempo after = in Q: field";if("number"!==(d=o.shift()).type)throw"Expected number after = in Q: field";l.duration=[1],l.bpm=parseInt(d.token)}else{if("number"!==d.type)throw"Expected number or equal after C in Q: field";if(l.duration=[parseInt(d.token)],0===o.length)throw"Missing = after duration in Q: field";if("punct"!==(d=o.shift()).type||"="!==d.token)throw"Expected = after duration in Q: field";if(0===o.length)throw"Missing tempo after = in Q: field";if("number"!==(d=o.shift()).type)throw"Expected number after = in Q: field";l.bpm=parseInt(d.token)}}else{if("number"!==d.type)throw"Unknown value in Q: field";var u=parseInt(d.token);if(0===o.length||"quote"===o[0].type)l.duration=[1],l.bpm=u;else{if(h=!1,"punct"!==(d=o.shift()).type&&"/"!==d.token)throw"Expected fraction in Q: field";if("number"!==(d=o.shift()).type)throw"Expected fraction in Q: field";var f=parseInt(d.token);for(l.duration=[u/f];o.length>0&&"="!==o[0].token&&"quote"!==o[0].type;){if("number"!==(d=o.shift()).type)throw"Expected fraction in Q: field";if(u=parseInt(d.token),"punct"!==(d=o.shift()).type&&"/"!==d.token)throw"Expected fraction in Q: field";if("number"!==(d=o.shift()).type)throw"Expected fraction in Q: field";f=parseInt(d.token),l.duration.push(u/f)}if("punct"!==(d=o.shift()).type&&"="!==d.token)throw"Expected = in Q: field";if("number"!==(d=o.shift()).type)throw"Expected tempo in Q: field";l.bpm=parseInt(d.token)}}if(0!==o.length&&("quote"===(d=o.shift()).type&&(l.postString=d.token,d=o.shift()),0!==o.length))throw"Unexpected string at end of Q: field";return!1===r.printTempo&&(l.suppress=!0),{type:h?"delaySet":"immediate",tempo:l}}catch(e){return t(e,i,a),{type:"none"}}},this.letter_to_inline_header=function(i,c,l){var h=e.eatWhiteSpace(i,c);if(c+=h,i.length>=c+5&&"["===i[c]&&":"===i[c+2]){var d=i.indexOf("]",c),u=r.iChar+c,f=r.iChar+d+1;switch(i.substring(c,c+3)){case"[I:":var p=a.addDirective(i.substring(c+3,d));return p&&t(p,i,c),[d-c+1+h];case"[M:":var m=this.setMeter(i.substring(c+3,d));return o.hasBeginMusic()&&m?o.appendStartingElement("meter",u,f,m):r.meter=m,[d-c+1+h];case"[K:":var g=n.parseKey(i.substring(c+3,d),!0);return g.foundClef&&o.hasBeginMusic()&&o.appendStartingElement("clef",u,f,r.clef),g.foundKey&&o.hasBeginMusic()&&o.appendStartingElement("key",u,f,n.fixKey(r.clef,r.key)),[d-c+1+h];case"[P:":var v=a.parseFontChangeLine(i.substring(c+3,d));return l||s.lines.length<=s.lineNum?r.partForNextLine={title:v,startChar:u,endChar:f}:o.appendElement("part",u,f,{title:v}),[d-c+1+h];case"[L:":return this.setDefaultLength(i,c+3,d),[d-c+1+h];case"[Q:":if(d>0){var b=this.setTempo(i,c+3,d,r.iChar);return"delaySet"===b.type?o.hasBeginMusic()?o.appendElement("tempo",u,f,this.calcTempo(b.tempo)):r.tempoForNextLine=["tempo",u,f,this.calcTempo(b.tempo)]:"immediate"===b.type&&(!l&&o.hasBeginMusic()?o.appendElement("tempo",u,f,b.tempo):r.tempoForNextLine=["tempo",u,f,b.tempo]),[d-c+1+h,i[c+1],i.substring(c+3,d)]}break;case"[V:":if(d>0)return n.parseVoice(i,c+3,d),[d-c+1+h,i[c+1],i.substring(c+3,d)];break;case"[r:":return[d-c+1+h]}}return[0]},this.letter_to_body_header=function(e,s){if(e.length>=s+3)switch(e.substring(s,s+2)){case"I:":var c=a.addDirective(e.substring(s+2));return c&&t(c,e,s),[e.length];case"M:":var l=this.setMeter(e.substring(s+2));return o.hasBeginMusic()&&l&&o.appendStartingElement("meter",r.iChar+s,r.iChar+e.length,l),[e.length];case"K:":var h=n.parseKey(e.substring(s+2),o.hasBeginMusic());return h.foundClef&&o.hasBeginMusic()&&o.appendStartingElement("clef",r.iChar+s,r.iChar+e.length,r.clef),h.foundKey&&o.hasBeginMusic()&&o.appendStartingElement("key",r.iChar+s,r.iChar+e.length,n.fixKey(r.clef,r.key)),[e.length];case"P:":return o.hasBeginMusic()&&o.appendElement("part",r.iChar+s,r.iChar+e.length,{title:e.substring(s+2)}),[e.length];case"L:":return this.setDefaultLength(e,s+2,e.length),[e.length];case"Q:":var d=e.indexOf("",s+2);-1===d&&(d=e.length);var u=this.setTempo(e,s+2,d,r.iChar);return"delaySet"===u.type?o.appendElement("tempo",r.iChar+s,r.iChar+e.length,this.calcTempo(u.tempo)):"immediate"===u.type&&o.appendElement("tempo",r.iChar+s,r.iChar+e.length,u.tempo),[d,e[s],i.strip(e.substring(s+2))];case"V:":return n.parseVoice(e,s+2,e.length),[e.length,e[s],i.strip(e.substring(s+2))]}return[0]};var l={A:"author",B:"book",C:"composer",D:"discography",F:"url",G:"group",I:"instruction",N:"notes",O:"origin",R:"rhythm",S:"source",W:"unalignedWords",Z:"transcription"};this.parseHeader=function(i){var c=l[i[0]],h=i.length-2,d=e.translateString(e.stripComment(i.substring(2)));if("unalignedWords"===c||"notes"===c)o.addMetaTextArray(c,a.parseFontChangeLine(d),{startChar:r.iChar,endChar:r.iChar+i.length});else if(void 0!==c)o.addMetaText(c,a.parseFontChangeLine(d),{startChar:r.iChar,endChar:r.iChar+i.length});else{var u=r.iChar,f=u+i.length;switch(i[0]){case"H":for(o.addMetaTextArray("history",a.parseFontChangeLine(d),{startChar:r.iChar,endChar:r.iChar+i.length}),i=e.peekLine();i&&":"!==i[1];)e.nextLine(),o.addMetaTextArray("history",a.parseFontChangeLine(e.translateString(e.stripComment(i))),{startChar:r.iChar,endChar:r.iChar+i.length}),i=e.peekLine();break;case"K":this.resolveTempo();var p=n.parseKey(i.substring(2),!1);!r.is_in_header&&o.hasBeginMusic()&&(p.foundClef&&o.appendStartingElement("clef",u,f,r.clef),p.foundKey&&o.appendStartingElement("key",u,f,n.fixKey(r.clef,r.key))),r.is_in_header=!1;break;case"L":this.setDefaultLength(i,2,i.length);break;case"M":r.origMeter=r.meter=this.setMeter(i.substring(2));break;case"P":r.is_in_header?o.addMetaText("partOrder",a.parseFontChangeLine(d),{startChar:r.iChar,endChar:r.iChar+i.length}):r.partForNextLine={title:d,startChar:u,endChar:f};break;case"Q":var m=this.setTempo(i,2,i.length,r.iChar);"delaySet"===m.type?r.tempo=m.tempo:"immediate"===m.type&&(s.metaText.tempo?r.tempoForNextLine=["tempo",u,f,m.tempo]:s.metaText.tempo=m.tempo);break;case"T":r.titlecaps&&(d=d.toUpperCase()),this.setTitle(a.parseFontChangeLine(e.theReverser(d)),h);break;case"U":this.addUserDefinition(i,2,i.length);break;case"V":if(n.parseVoice(i,2,i.length),!r.is_in_header)return{newline:!0};break;case"s":return{symbols:!0};case"w":return{words:!0};case"X":break;case"E":case"m":t("Ignored header",i,0);break;default:return{regular:!0}}}return{}}}},9708:function(e,t,r){var i=r(5008),a=r(8360),n=r(2821),s={};!function(){var e,t,r,o;s.initialize=function(i,a,n,s,c){e=i,t=a,r=n,o=c},s.standardKey=function(e,t,i,a){return n.keySignature(r,e,t,i,a)};var c={treble:{clef:"treble",pitch:4,mid:0},"treble+8":{clef:"treble+8",pitch:4,mid:0},"treble-8":{clef:"treble-8",pitch:4,mid:0},"treble^8":{clef:"treble+8",pitch:4,mid:0},treble_8:{clef:"treble-8",pitch:4,mid:0},treble1:{clef:"treble",pitch:2,mid:2},treble2:{clef:"treble",pitch:4,mid:0},treble3:{clef:"treble",pitch:6,mid:-2},treble4:{clef:"treble",pitch:8,mid:-4},treble5:{clef:"treble",pitch:10,mid:-6},perc:{clef:"perc",pitch:6,mid:0},none:{clef:"none",mid:0},bass:{clef:"bass",pitch:8,mid:-12},"bass+8":{clef:"bass+8",pitch:8,mid:-12},"bass-8":{clef:"bass-8",pitch:8,mid:-12},"bass^8":{clef:"bass+8",pitch:8,mid:-12},bass_8:{clef:"bass-8",pitch:8,mid:-12},"bass+16":{clef:"bass",pitch:8,mid:-12},"bass-16":{clef:"bass",pitch:8,mid:-12},"bass^16":{clef:"bass",pitch:8,mid:-12},bass_16:{clef:"bass",pitch:8,mid:-12},bass1:{clef:"bass",pitch:2,mid:-6},bass2:{clef:"bass",pitch:4,mid:-8},bass3:{clef:"bass",pitch:6,mid:-10},bass4:{clef:"bass",pitch:8,mid:-12},bass5:{clef:"bass",pitch:10,mid:-14},tenor:{clef:"alto",pitch:8,mid:-8},tenor1:{clef:"alto",pitch:2,mid:-2},tenor2:{clef:"alto",pitch:4,mid:-4},tenor3:{clef:"alto",pitch:6,mid:-6},tenor4:{clef:"alto",pitch:8,mid:-8},tenor5:{clef:"alto",pitch:10,mid:-10},alto:{clef:"alto",pitch:6,mid:-6},alto1:{clef:"alto",pitch:2,mid:-2},alto2:{clef:"alto",pitch:4,mid:-4},alto3:{clef:"alto",pitch:6,mid:-6},alto4:{clef:"alto",pitch:8,mid:-8},alto5:{clef:"alto",pitch:10,mid:-10},"alto+8":{clef:"alto+8",pitch:6,mid:-6},"alto-8":{clef:"alto-8",pitch:6,mid:-6},"alto^8":{clef:"alto+8",pitch:6,mid:-6},alto_8:{clef:"alto-8",pitch:6,mid:-6}},l=function(e,t){var r=c[e];return(r?r.mid:0)+t};s.fixClef=function(e){var t=c[e.type];t&&(e.clefPos=t.pitch,e.type=t.clef)},s.deepCopyKey=function(e){var t={accidentals:[],root:e.root,acc:e.acc,mode:e.mode};return e.accidentals.forEach((function(e){t.accidentals.push(i.clone(e))})),t};var h={A:5,B:6,C:0,D:1,E:2,F:3,G:4,a:12,b:13,c:7,d:8,e:9,f:10,g:11};s.addPosToKey=function(e,t){var r=e.verticalPos;t.accidentals.forEach((function(e){var t=h[e.note];t-=r,e.verticalPos=t})),t.impliedNaturals&&t.impliedNaturals.forEach((function(e){var t=h[e.note];t-=r,e.verticalPos=t})),r<-10?(t.accidentals.forEach((function(e){e.verticalPos-=7,(e.verticalPos>=11||10===e.verticalPos&&"flat"===e.acc)&&(e.verticalPos-=7),"A"===e.note&&"sharp"===e.acc&&(e.verticalPos-=7),"G"!==e.note&&"F"!==e.note||"flat"!==e.acc||(e.verticalPos-=7)})),t.impliedNaturals&&t.impliedNaturals.forEach((function(e){e.verticalPos-=7,(e.verticalPos>=11||10===e.verticalPos&&"flat"===e.acc)&&(e.verticalPos-=7),"A"===e.note&&"sharp"===e.acc&&(e.verticalPos-=7),"G"!==e.note&&"F"!==e.note||"flat"!==e.acc||(e.verticalPos-=7)}))):r<-4?(t.accidentals.forEach((function(e){e.verticalPos-=7,-8!==r||"f"!==e.note&&"g"!==e.note||"sharp"!==e.acc||(e.verticalPos-=7)})),t.impliedNaturals&&t.impliedNaturals.forEach((function(e){e.verticalPos-=7,-8!==r||"f"!==e.note&&"g"!==e.note||"sharp"!==e.acc||(e.verticalPos-=7)}))):r>=7&&(t.accidentals.forEach((function(e){e.verticalPos+=7})),t.impliedNaturals&&t.impliedNaturals.forEach((function(e){e.verticalPos+=7})))},s.fixKey=function(e,t){var r=i.clone(t);return s.addPosToKey(e,r),r};var d=function(e){var t=0,r=e[t++];"^"!==r&&"_"!==r||(r=e[t++]);var i=h[r];for(void 0===i&&(i=6);t0){c.foundKey=!0;var d="",u="";o[0].token.length>1?o[0].token=o[0].token.substring(1):o.shift();var f=h.token;if(o.length>0){var p=e.getSharpFlat(o[0].token);if(p.len>0&&(o[0].token.length>1?o[0].token=o[0].token.substring(1):o.shift(),f+=p.token,d=p.token),o.length>0){var m=e.getMode(o[0].token);m.len>0&&(o.shift(),f+=m.token,u=m.token)}if(void 0===s.standardKey(f,h.token,d,0))return t("Unsupported key signature: "+f,i,0),c}var g,v=s.deepCopyKey(r.key),b=!n&&r.globalTranspose?-r.globalTranspose:0;if(n&&(g=r.globalTransposeOrigKeySig),r.key=s.deepCopyKey(s.standardKey(f,h.token,d,b)),n&&(r.globalTransposeOrigKeySig=g),r.key.mode=u,v){for(var y,x=0;x0;)switch(o[0].token){case"m":case"middle":if(o.shift(),0===o.length)return t("Expected = after middle",i,0),c;if("="!==(k=o.shift()).token){t("Expected = after middle",i,k.start);break}if(0===o.length)return t("Expected parameter after middle=",i,0),c;var E=e.getPitchFromTokens(o);E.warn&&t(E.warn,i,0),E.position&&(r.clef.verticalPos=E.position-6);break;case"transpose":if(o.shift(),0===o.length)return t("Expected = after transpose",i,0),c;if("="!==(k=o.shift()).token){t("Expected = after transpose",i,k.start);break}if(0===o.length)return t("Expected parameter after transpose=",i,0),c;if("number"!==o[0].type){t("Expected number after transpose",i,o[0].start);break}r.clef.transpose=o[0].intt,o.shift();break;case"stafflines":if(o.shift(),0===o.length)return t("Expected = after stafflines",i,0),c;if("="!==(k=o.shift()).token){t("Expected = after stafflines",i,k.start);break}if(0===o.length)return t("Expected parameter after stafflines=",i,0),c;if("number"!==o[0].type){t("Expected number after stafflines",i,o[0].start);break}r.clef.stafflines=o[0].intt,o.shift();break;case"staffscale":if(o.shift(),0===o.length)return t("Expected = after staffscale",i,0),c;if("="!==(k=o.shift()).token){t("Expected = after staffscale",i,k.start);break}if(0===o.length)return t("Expected parameter after staffscale=",i,0),c;if("number"!==o[0].type){t("Expected number after staffscale",i,o[0].start);break}r.clef.staffscale=o[0].floatt,o.shift();break;case"octave":if(o.shift(),0===o.length)return t("Expected = after octave",i,0),c;if("="!==(k=o.shift()).token){t("Expected = after octave",i,k.start);break}if(0===o.length)return t("Expected parameter after octave=",i,0),c;if("number"!==o[0].type){t("Expected number after octave",i,o[0].start);break}r.octave=o[0].intt,o.shift();break;case"style":if(o.shift(),0===o.length)return t("Expected = after style",i,0),c;if("="!==(k=o.shift()).token){t("Expected = after style",i,k.start);break}if(0===o.length)return t("Expected parameter after style=",i,0),c;switch(o[0].token){case"normal":case"harmonic":case"rhythm":case"x":case"triangle":r.style=o[0].token,o.shift();break;default:t("error parsing style element: "+o[0].token,i,o[0].start)}break;case"clef":if(o.shift(),0===o.length)return t("Expected = after clef",i,0),c;if("="!==(k=o.shift()).token){t("Expected = after clef",i,k.start);break}if(0===o.length)return t("Expected parameter after clef=",i,0),c;case"treble":case"bass":case"alto":case"tenor":case"perc":case"none":var _=o.shift();switch(_.token){case"treble":case"tenor":case"alto":case"bass":case"perc":case"none":break;case"C":case"c":_.token="alto";break;case"F":case"f":_.token="bass";break;case"G":case"g":_.token="treble";break;default:t("Expected clef name. Found "+_.token,i,_.start)}o.length>0&&"number"===o[0].type&&(_.token+=o[0].token,o.shift()),o.length>1&&("-"===o[0].token||"+"===o[0].token||"^"===o[0].token||"_"===o[0].token)&&"8"===o[1].token&&(_.token+=o[0].token+o[1].token,o.shift(),o.shift()),r.clef={type:_.token,verticalPos:l(_.token,0)},r.currentVoice&&void 0!==r.currentVoice.transpose&&(r.clef.transpose=r.currentVoice.transpose),c.foundClef=!0;break;default:t("Unknown parameter: "+o[0].token,i,o[0].start),o.shift()}return c},s.parseVoice=function(i,a,n){var s=e.getMeat(i,a,n),c=s.start,h=s.end,u=e.getToken(i,c,h);if(0!==u.length){var f=!1;void 0===r.voices[u]&&(r.voices[u]={},f=!0,r.score_is_present&&t("Can't have an unknown V: id when the %score directive is present",i,c)),c+=u.length,c+=e.eatWhiteSpace(i,c);for(var p={startStaff:f},m=function(r){var a=e.getVoiceToken(i,c,h);void 0!==a.warn?t("Expected value for "+r+" in voice: "+a.warn,i,c):void 0!==a.err?t("Expected value for "+r+" in voice: "+a.err,i,c):0===a.token.length&&'"'!==i[c]?t("Expected value for "+r+" in voice",i,c):p[r]=a.token,c+=a.len},g=function(a,n,s){var o=e.getVoiceToken(i,c,h);void 0!==o.warn?t("Expected value for "+n+" in voice: "+o.warn,i,c):void 0!==o.err?t("Expected value for "+n+" in voice: "+o.err,i,c):0===o.token.length&&'"'!==i[c]?t("Expected value for "+n+" in voice",i,c):("number"===s&&(o.token=parseFloat(o.token)),r.voices[a][n]=o.token),c+=o.len},v=function(r,a){var n=e.getVoiceToken(i,c,h);if(void 0!==n.warn)t("Expected value for "+r+" in voice: "+n.warn,i,c);else if(void 0!==n.err)t("Expected value for "+r+" in voice: "+n.err,i,c);else{if(0!==n.token.length||'"'===i[c])return"number"===a&&(n.token=parseFloat(n.token)),n.token;t("Expected value for "+r+" in voice",i,c)}c+=n.len},b=function(a,n){var s=e.getVoiceToken(i,c,h);if(void 0!==s.warn)t("Expected one of (_B, _E, _b, _e) for "+n+" in voice: "+s.warn,i,c);else if(0===s.token.length&&'"'!==i[c])t("Expected one of (_B, _E, _b, _e) for "+n+" in voice",i,c);else{var o={_B:2,_E:9,_b:-10,_e:-3}[s.token];o?r.voices[a][n]=o:t("Expected one of (_B, _E, _b, _e) for "+n+" in voice",i,c)}c+=s.len};c0&&(t+=d[0],"V"===d[1]&&this.startNewLine());for(var u=0;t0)t+=p[0],"V"===p[1]&&(l=!0);else{var m;for((!o.hasBeginMusic()||l&&!this.lineContinuation)&&(this.startNewLine(),l=!1);;)if((m=i.eatWhiteSpace(e,t))>0&&(t+=m),t>0&&""===e[t-1]&&(m=c.letter_to_body_header(e,t))[0]>0&&("V"===m[1]&&this.startNewLine(),t=m[0],n.start_new_line=!1),(m=P(e,t))[0]>0&&(t+=m[0]),(m=_(e,t))[0]>0){N.chord||(N.chord=[]);var g=i.translateString(m[1]);g=g.replace(/;/g,"\n");for(var v=!1,x=0;x0&&(N.force_end_beam_last=!0),t+=k}else if((m=-1===b.indexOf(e[t])?L(e,t):[0])[0]>0)null===m[1]?t+10&&(0===m[1].indexOf("style=")?N.style=m[1].substr(6):(void 0===N.decoration&&(N.decoration=[]),"beambr1"===m[1]?N.beambr=1:"beambr2"===m[1]?N.beambr=2:N.decoration.push(m[1]))),t+=m[0];else{if(!((m=M(e,t))[0]>0))break;N.gracenotes=m[1],t+=m[0]}if((m=z(e,t))[0]>0){u=0,void 0!==N.gracenotes&&(N.rest={type:"spacer"},N.duration=.125,n.addFormattingOptions(N,s.formatting,"note"),o.appendElement("note",r+t,r+t+m[0],N),n.measureNotEmpty=!0,N={});var w={type:m[1]};0===w.type.length?a("Unknown bar type",e,t):(n.inEnding&&"bar_thin"!==w.type&&(w.endEnding=!0,n.inEnding=!1),m[2]&&(w.startEnding=m[2],n.inEnding&&(w.endEnding=!0),n.inEnding=!0,"bar_right_repeat"===m[1]?n.restoreStartEndingHoldOvers():n.duplicateStartEndingHoldOvers()),void 0!==N.decoration&&(w.decoration=N.decoration),void 0!==N.chord&&(w.chord=N.chord),w.startEnding&&void 0===n.barFirstEndingNum?n.barFirstEndingNum=n.currBarNumber:w.startEnding&&w.endEnding&&n.barFirstEndingNum?n.currBarNumber=n.barFirstEndingNum:w.endEnding&&(n.barFirstEndingNum=void 0),"bar_invisible"!==w.type&&n.measureNotEmpty&&(void 0===n.currentVoice||0===n.currentVoice.staffNum&&0===n.currentVoice.index)&&(n.currBarNumber++,n.barNumbers&&n.currBarNumber%n.barNumbers==0&&(w.barNumber=n.currBarNumber)),n.addFormattingOptions(N,s.formatting,"bar"),o.appendElement("bar",r+f,r+t+m[0],w),n.measureNotEmpty=!1,N={}),t+=m[0]}else if("&"===e[t])(m=A(e,t))[0]>0&&(o.appendElement("overlay",r,r+1,{}),t+=1,u++);else{if((m=H(e,t)).consumed>0&&(void 0!==m.startSlur&&(N.startSlur=m.startSlur),m.dottedSlur&&(N.dottedSlur=!0),void 0!==m.triplet&&(h>0?a("Can't nest triplets",e,t):(N.startTriplet=m.triplet,N.tripletMultiplier=m.tripletQ/m.triplet,N.tripletR=m.num_notes,h=void 0===m.num_notes?m.triplet:m.num_notes)),t+=m.consumed),"["===e[t]){t++;for(var T=null,C=!1,I=!1;!I;){var V=L(e,t);V[0]>0&&(t+=V[0]);var Y=D(e,t,{},!1);if(null!==Y&&void 0!==Y.pitch)V[0]>0&&0!==V[1].indexOf("style=")&&(void 0===N.decoration&&(N.decoration=[]),N.decoration.push(V[1])),Y.end_beam&&(N.end_beam=!0,delete Y.end_beam),void 0===N.pitches?(N.duration=Y.duration,N.pitches=[Y]):N.pitches.push(Y),delete Y.duration,V[0]>0&&0===V[1].indexOf("style=")&&(N.pitches[N.pitches.length-1].style=V[1].substr(6)),n.inTieChord[N.pitches.length]&&(Y.endTie=!0,n.inTieChord[N.pitches.length]=void 0),Y.startTie&&(n.inTieChord[N.pitches.length]=!0),t=Y.endChar,delete Y.endChar;else if(" "===e[t])a("Spaces are not allowed in chords",e,t),t++;else{if(t0&&(!N.rest||"spacer"!==N.rest.type)&&0==--h&&(N.endTriplet=!0);for(var G=!1;t":case"<":var j=F(e,t);t+=j[0]-1,n.next_note_duration=j[2],T?T*=j[1]:T=j[1];break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":case"/":var W=i.getFraction(e,t);T=W.value;var q=e[t=W.index];" "===q&&(C=!0),"-"===q||")"===q||" "===q||"<"===q||">"===q?t--:G=!0;break;default:G=!0}G||t++}}else a("Expected ']' to end the chords",e,t);void 0!==N.pitches&&(null!==T&&(N.duration=N.duration*T,C&&O(N)),n.addFormattingOptions(N,s.formatting,"note"),o.appendElement("note",r+f,r+t,N),n.measureNotEmpty=!0,N={}),I=!0}}}else{var X={},R=D(e,t,X,!0);void 0!==X.endTie&&E(n,u,!0),null!==R&&(void 0!==R.pitch?(N.pitches=[{}],void 0!==R.accidental&&(N.pitches[0].accidental=R.accidental),N.pitches[0].pitch=R.pitch,N.pitches[0].name=R.name,(R.midipitch||0===R.midipitch)&&(N.pitches[0].midipitch=R.midipitch),void 0!==R.endSlur&&(N.pitches[0].endSlur=R.endSlur),void 0!==R.endTie&&(N.pitches[0].endTie=R.endTie),void 0!==R.startSlur&&(N.pitches[0].startSlur=R.startSlur),void 0!==N.startSlur&&(N.pitches[0].startSlur=N.startSlur),void 0!==N.dottedSlur&&(N.pitches[0].dottedSlur=!0),void 0!==R.startTie&&(N.pitches[0].startTie=R.startTie),void 0!==N.startTie&&(N.pitches[0].startTie=N.startTie)):(N.rest=R.rest,void 0!==R.endSlur&&(N.endSlur=R.endSlur),void 0!==R.endTie&&(N.rest.endTie=R.endTie),void 0!==R.startSlur&&(N.startSlur=R.startSlur),void 0!==R.startTie&&(N.rest.startTie=R.startTie),void 0!==N.startTie&&(N.rest.startTie=N.startTie)),void 0!==R.chord&&(N.chord=R.chord),void 0!==R.duration&&(N.duration=R.duration),void 0!==R.decoration&&(N.decoration=R.decoration),void 0!==R.graceNotes&&(N.graceNotes=R.graceNotes),delete N.startSlur,delete N.dottedSlur,S(n,u,N)&&(void 0!==N.pitches?N.pitches[0].endTie=!0:"spacer"!==N.rest.type&&(N.rest.endTie=!0),E(n,u,!1)),(R.startTie||N.startTie)&&E(n,u,!0),t=R.endChar,h>0&&(!R.rest||"spacer"!==R.rest.type)&&0==--h&&(N.endTriplet=!0),R.end_beam&&O(N),N.rest&&"rest"===N.rest.type&&1===N.duration&&B(n)<=1&&(N.rest.type="whole",N.duration=B(n)),N.duration<1&&-1===y.indexOf(N.duration)&&0!==N.duration&&(N.rest&&"spacer"===N.rest.type||a("Duration not representable: "+e.substring(f,t),e,t)),n.addFormattingOptions(N,s.formatting,"note"),o.appendElement("note",r+f,r+t,N),n.measureNotEmpty=!0,N={})}t===f&&(" "!==e[t]&&"`"!==e[t]&&a("Unknown character ignored",e,t),t++)}}}this.lineContinuation=e.indexOf("")>=0||d[0]>0,this.lineContinuation||(N={})}};var E=function(e,t,r){var i=e.currentVoice?100*e.currentVoice.staffNum+e.currentVoice.index:0;void 0===e.inTie[t]&&(e.inTie[t]=[]),e.inTie[t][i]=r},_=function(e,t){if('"'===e[t]){var r=i.getBrackettedSubstring(e,t,5);if(r[2]||a("Missing the closing quote while parsing the chord symbol",e,t),r[0]>0&&r[1].length>0&&"^"===r[1][0])r[1]=r[1].substring(1),r[2]="above";else if(r[0]>0&&r[1].length>0&&"_"===r[1][0])r[1]=r[1].substring(1),r[2]="below";else if(r[0]>0&&r[1].length>0&&"<"===r[1][0])r[1]=r[1].substring(1),r[2]="left";else if(r[0]>0&&r[1].length>0&&">"===r[1][0])r[1]=r[1].substring(1),r[2]="right";else if(r[0]>0&&r[1].length>0&&"@"===r[1][0]){r[1]=r[1].substring(1);var s=i.getFloat(r[1]);0===s.digits&&a("Missing first position in absolutely positioned annotation.",e,t),r[1]=r[1].substring(s.digits),","!==r[1][0]&&a("Missing comma absolutely positioned annotation.",e,t),r[1]=r[1].substring(1);var o=i.getFloat(r[1]);0===o.digits&&a("Missing second position in absolutely positioned annotation.",e,t),r[1]=r[1].substring(o.digits);var c=i.skipWhiteSpace(r[1]);r[1]=r[1].substring(c),r[2]=null,r[3]={x:s.value,y:o.value}}else!0!==n.freegchord&&(r[1]=r[1].replace(/([ABCDEFG0-9])b/g,"$1♭"),r[1]=r[1].replace(/([ABCDEFG0-9])#/g,"$1♯"),r[1]=r[1].replace(/^([ABCDEFG])([♯♭]?)o([^A-Za-z])/g,"$1$2°$3"),r[1]=r[1].replace(/^([ABCDEFG])([♯♭]?)o$/g,"$1$2°"),r[1]=r[1].replace(/^([ABCDEFG])([♯♭]?)0([^A-Za-z])/g,"$1$2ø$3"),r[1]=r[1].replace(/^([ABCDEFG])([♯♭]?)\^([^A-Za-z])/g,"$1$2∆$3")),r[2]="default",r[1]=d.chordName(n,r[1]);return r}return[0,""]},M=function(e,t){if("{"===e[t]){var r=i.getBrackettedSubstring(e,t,1,"}");r[2]||a("Missing the closing '}' while parsing grace note",e,t),")"===e[t+r[0]]&&(r[0]++,r[1]+=")");for(var s=[],o=0,c=!1;o0&&(s[s.length-1].endBeam=!0):a("Unknown character '"+r[1][o]+"' while parsing grace note",e,t),o++)}if(s.length)return[r[0],s]}return[0]};function A(e,t){if("&"===e[t]){for(var r=t;e[t]&&":"!==e[t]&&"|"!==e[t];)t++;return[t-r,e.substring(r+1,t)]}return[0]}function B(e){var t=e.origMeter;return t&&"specified"===t.type&&t.value&&0!==t.value.length?parseInt(t.value[0].num,10)/parseInt(t.value[0].den,10):1}var L=function(e,t){var r=n.macros[e[t]];if(void 0!==r)return"!"!==r[0]&&"+"!==r[0]||(r=r.substring(1)),"!"!==r[r.length-1]&&"+"!==r[r.length-1]||(r=r.substring(0,r.length-1)),f.includes(r)?[1,r]:p.includes(r)?("hidden"===n.volumePosition&&(r=""),[1,r]):m.includes(r)?("hidden"===n.dynamicPosition&&(r=""),[1,r]):(n.ignoredDecorations.includes(r)||a("Unknown macro: "+r,e,t),[1,""]);switch(e[t]){case".":if("("===e[t+1]||"-"===e[t+1])break;return[1,"staccato"];case"u":return[1,"upbow"];case"v":return[1,"downbow"];case"~":return[1,"irishroll"];case"!":case"+":var s=i.getBrackettedSubstring(e,t,5);if(s[1].length>1&&("^"===s[1][0]||"_"===s[1][0])&&(s[1]=s[1].substring(1)),f.includes(s[1]))return s;if(p.includes(s[1]))return"hidden"===n.volumePosition&&(s[1]=""),s;if(m.includes(s[1]))return"hidden"===n.dynamicPosition&&(s[1]=""),s;var o=g.findIndex((function(e){return s[1]===e[0]}));return o>=0?(s[1]=g[o][1],s):(o=v.findIndex((function(e){return s[1]===e[0]})))>=0?(s[1]=v[o][1],"hidden"===n.dynamicPosition&&(s[1]=""),s):"!"!==e[t]||1!==s[0]&&"!"===e[t+s[0]-1]?(a("Unknown decoration: "+s[1],e,t),s[1]="",s):[1,null];case"H":return[1,"fermata"];case"J":return[1,"slide"];case"L":return[1,"accent"];case"M":return[1,"mordent"];case"O":return[1,"coda"];case"P":return[1,"pralltriller"];case"R":return[1,"roll"];case"S":return[1,"segno"];case"T":return[1,"trill"]}return[0,0]},P=function(e,t){for(var r=t;i.isWhiteSpace(e[t]);)t++;return[t-r]},z=function(e,t){var r=i.getBarLine(e,t);if(0===r.len)return[0,""];if(r.warn)return a(r.warn,e,t),[r.len,""];for(var n=0;n="2"&&e[t+1]<="9"?(void 0!==r.triplet?a("Can't nest triplets",e,t):(r.triplet=e[t+1]-"0",r.tripletQ=T[r.triplet],r.num_notes=r.triplet,t+2="1"&&e[t+4]<="9"?(r.num_notes=e[t+4]-"0",t+=3):a("expected number after the two colons after the triplet to mark the duration",e,t):t+3="1"&&e[t+3]<="9"?(r.tripletQ=e[t+3]-"0",t+4="1"&&e[t+5]<="9"&&(r.num_notes=e[t+5]-"0",t+=4):t+=2):a("expected number after the triplet to mark the duration",e,t))),t++):void 0===r.startSlur?r.startSlur=1:r.startSlur++),t++;return r.consumed=t-n,r};C.prototype.startNewLine=function(){var e={startChar:-1,endChar:-1};n.partForNextLine.title&&(e.part=n.partForNextLine),e.clef=n.currentVoice&&void 0!==n.staves[n.currentVoice.staffNum].clef?l.clone(n.staves[n.currentVoice.staffNum].clef):l.clone(n.clef);var t=n.currentVoice?n.currentVoice.scoreTranspose:0;if(e.key=h.standardKey(n.key.root+n.key.acc+n.key.mode,n.key.root,n.key.acc,t),e.key.mode=n.key.mode,n.key.impliedNaturals&&(e.key.impliedNaturals=n.key.impliedNaturals),n.key.explicitAccidentals)for(var r=0;r=0?(r.duration=s.getBarLength(),r.rest.text=1,h="Zduration"):(a&&0!==n.next_note_duration?(r.duration=n.default_length*n.next_note_duration,n.next_note_duration=0,u=!0):r.duration=n.default_length,h="duration");break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":case"0":case"/":if("octave"===h||"duration"===h){var p=i.getFraction(e,t);for(r.duration=r.duration*p.value,r.endChar=p.index;p.index"!==e[t])return r;t--,h="broken_rhythm";break;case">":case"<":if(!l(h))return null;if(!a)return r.endChar=t,r;var g=F(e,t);t+=g[0]-1,n.next_note_duration=g[2],r.duration=g[1]*r.duration,h="end_slur";break;default:return l(h)?(r.endChar=t,r):null}if(++t===e.length)return l(h)?(r.endChar=t,r):null}return null},F=function(e,t){switch(e[t]){case">":return t"===e[t+1]&&">"===e[t+2]?[3,1.875,.125]:t"===e[t+1]?[2,1.75,.25]:[1,1.5,.5];case"<":return t","accent"],["tr","trill"],["plus","+"],["emphasis","accent"],["^","umarcato"],["marcato","umarcato"]],e.exports.accentDynamicPseudonyms=[["<(","crescendo("],["<)","crescendo)"],[">(","diminuendo("],[">)","diminuendo)"]],e.exports.nonDecorations="ABCDEFGabcdefgxyzZ[]|^_{",e.exports.durations=[.5,.75,.875,.9375,.96875,.984375,.25,.375,.4375,.46875,.484375,.4921875,.125,.1875,.21875,.234375,.2421875,.24609375,.0625,.09375,.109375,.1171875,.12109375,.123046875,.03125,.046875,.0546875,.05859375,.060546875,.0615234375,.015625,.0234375,.02734375,.029296875,.0302734375,.03076171875],e.exports.pitches={A:5,B:6,C:0,D:1,E:2,F:3,G:4,a:12,b:13,c:7,d:8,e:9,f:10,g:11},e.exports.rests={x:"invisible",X:"invisible-multimeasure",y:"spacer",z:"rest",Z:"multimeasure"},e.exports.accMap={dblflat:"__",flat:"_",natural:"=",sharp:"^",dblsharp:"^^",quarterflat:"_/",quartersharp:"^/"},e.exports.tripletQ={2:3,3:2,4:3,5:2,6:2,7:2,8:3,9:2}},1881:function(e,t,r){var i=r(5008),a=function(e,t){this.lineIndex=0,this.lines=e,this.multilineVars=t,this.skipWhiteSpace=function(e){for(var t=0;t=e.length};this.eatWhiteSpace=function(e,t){for(var r=t;r="a"&&e[t]<="z"||e[t]>="A"&&e[t]<="Z");)t++;return t},i=this.skipWhiteSpace(e);if(r(e,i))return{len:0};var a=e.substring(i,i+3).toLowerCase();switch((a.length>1&&" "===a[1]||"^"===a[1]||"_"===a[1]||"="===a[1])&&(a=a[0]),a){case"mix":return{len:t(e,i),token:"Mix"};case"dor":return{len:t(e,i),token:"Dor"};case"phr":return{len:t(e,i),token:"Phr"};case"lyd":return{len:t(e,i),token:"Lyd"};case"loc":return{len:t(e,i),token:"Loc"};case"aeo":case"min":case"m":return{len:t(e,i),token:"m"};case"maj":case"ion":return{len:t(e,i),token:""}}return{len:0}},this.getClef=function(e,t){var a=e,n=this.skipWhiteSpace(e);if(r(e,n))return{len:0};var s=!1,o=e.substring(n);if(i.startsWith(o,"clef=")&&(s=!0,o=o.substring(5),n+=5),0===o.length&&s)return{len:n+5,warn:"No clef specified: "+a};var c=this.skipWhiteSpace(o);if(r(o,c))return{len:0};c>0&&(n+=c,o=o.substring(c));var l=null;if(i.startsWith(o,"treble"))l="treble";else if(i.startsWith(o,"bass3"))l="bass3";else if(i.startsWith(o,"bass"))l="bass";else if(i.startsWith(o,"tenor"))l="tenor";else if(i.startsWith(o,"alto2"))l="alto2";else if(i.startsWith(o,"alto1"))l="alto1";else if(i.startsWith(o,"alto"))l="alto";else if(!t&&s&&i.startsWith(o,"none"))l="none";else if(i.startsWith(o,"perc"))l="perc";else if(!t&&s&&i.startsWith(o,"C"))l="tenor";else if(!t&&s&&i.startsWith(o,"F"))l="bass";else{if(t||!s||!i.startsWith(o,"G"))return{len:n+5,warn:"Unknown clef specified: "+a};l="treble"}return o=o.substring(l.length),(c=this.isMatch(o,"+8"))>0?l+="+8":(c=this.isMatch(o,"-8"))>0&&(l+="-8"),{len:n+l.length,token:l,explicit:s}},this.getBarLine=function(e,t){switch(e[t]){case"]":switch(e[++t]){case"|":return{len:2,token:"bar_thick_thin"};case"[":return e[++t]>="1"&&e[t]<="9"||'"'===e[t]?{len:2,token:"bar_invisible"}:{len:1,warn:"Unknown bar symbol"};default:return{len:1,token:"bar_invisible"}}break;case":":switch(e[++t]){case":":return{len:2,token:"bar_dbl_repeat"};case"|":switch(e[++t]){case"]":return"|"===e[++t]&&":"===e[++t]?{len:5,token:"bar_dbl_repeat"}:{len:3,token:"bar_right_repeat"};case"|":return":"===e[++t]?{len:4,token:"bar_dbl_repeat"}:{len:3,token:"bar_right_repeat"};default:return{len:2,token:"bar_right_repeat"}}break;default:return{len:1,warn:"Unknown bar symbol"}}break;case"[":if("|"!==e[++t])return e[t]>="1"&&e[t]<="9"||'"'===e[t]?{len:1,token:"bar_invisible"}:{len:0};switch(e[++t]){case":":return{len:3,token:"bar_left_repeat"};case"]":return{len:3,token:"bar_invisible"};default:return{len:2,token:"bar_thick_thin"}}break;case"|":switch(e[++t]){case"]":return{len:2,token:"bar_thin_thick"};case"|":return":"===e[++t]?{len:3,token:"bar_left_repeat"}:{len:2,token:"bar_thin_thin"};case":":for(var r=0;":"===e[t+r];)r++;return{len:1+r,token:"bar_left_repeat"};default:return{len:1,token:"bar_thin"}}}return{len:0}},this.getTokenOf=function(e,t){for(var r=0;r0;){var r;if("^"===e[0].token){if(r="sharp",e.shift(),0===e.length)return{accs:t,warn:"Expected note name after "+r};switch(e[0].token){case"^":r="dblsharp",e.shift();break;case"/":r="quartersharp",e.shift()}}else if("="===e[0].token)r="natural",e.shift();else{if("_"!==e[0].token)return{accs:t};if(r="flat",e.shift(),0===e.length)return{accs:t,warn:"Expected note name after "+r};switch(e[0].token){case"_":r="dblflat",e.shift();break;case"/":r="quarterflat",e.shift()}}if(0===e.length)return{accs:t,warn:"Expected note name after "+r};switch(e[0].token[0]){case"a":case"b":case"c":case"d":case"e":case"f":case"g":case"A":case"B":case"C":case"D":case"E":case"F":case"G":void 0===t&&(t=[]),t.push({acc:r,note:e[0].token[0]}),1===e[0].token.length?e.shift():e[0].token=e[0].token.substring(1);break;default:return{accs:t,warn:"Expected note name after "+r+" Found: "+e[0].token}}}return{accs:t}},this.getKeyAccidental=function(e){var t={"^":"sharp","^^":"dblsharp","=":"natural",_:"flat",__:"dblflat","_/":"quarterflat","^/":"quartersharp"},i=this.skipWhiteSpace(e);if(r(e,i))return{len:0};var a=null;switch(e[i]){case"^":case"_":case"=":a=e[i];break;default:return{len:0}}if(i++,r(e,i))return{len:1,warn:"Expected note name after accidental"};switch(e[i]){case"a":case"b":case"c":case"d":case"e":case"f":case"g":case"A":case"B":case"C":case"D":case"E":case"F":case"G":return{len:i+1,token:{acc:t[a],note:e[i]}};case"^":case"_":case"/":if(a+=e[i],i++,r(e,i))return{len:2,warn:"Expected note name after accidental"};switch(e[i]){case"a":case"b":case"c":case"d":case"e":case"f":case"g":case"A":case"B":case"C":case"D":case"E":case"F":case"G":return{len:i+1,token:{acc:t[a],note:e[i]}};default:return{len:2,warn:"Expected note name after accidental"}}break;default:return{len:1,warn:"Expected note name after accidental"}}},this.isWhiteSpace=function(e){return" "===e||"\t"===e||""===e},this.getMeat=function(e,t,r){var i=e.indexOf("%",t);for(i>=0&&i="A"&&e<="Z"||e>="a"&&e<="z"},n=function(e){return e>="0"&&e<="9"};this.tokenize=function(e,t,r,i){var s=this.getMeat(e,t,r);t=s.start,r=s.end;for(var o,c=[];t=r?{len:1,err:"Missing close quote"}:{len:a-t+1,token:this.translateString(e.substring(i+1,a))}}for(var n=i;n=0?i.strip(e.substring(0,t)):i.strip(e)},this.getInt=function(e){var t=parseInt(e);if(isNaN(t))return{digits:0};var r=""+t;return{value:t,digits:e.indexOf(r)+r.length}},this.getFloat=function(e){var t=parseFloat(e);if(isNaN(t))return{digits:0};var r=""+t;return{value:t,digits:e.indexOf(r)+r.length}},this.getMeasurement=function(e){if(0===e.length)return{used:0};var t=1,r="";if("-"===e[0].token)e.shift(),r="-",t++;else if("number"!==e[0].type)return{used:0};if(r+=e.shift().token,0===e.length)return{used:1,value:parseInt(r)};var i=e.shift();if("."===i.token){if(t++,0===e.length)return{used:t,value:parseInt(r)};if("number"===e[0].type&&(r=r+"."+(i=e.shift()).token,t++,0===e.length))return{used:t,value:parseFloat(r)};i=e.shift()}switch(i.token){case"pt":case"px":return{used:t+1,value:parseFloat(r)};case"cm":return{used:t+1,value:parseFloat(r)/2.54*72};case"in":return{used:t+1,value:72*parseFloat(r)};default:return e.unshift(i),{used:t,value:parseFloat(r)}}};var d=function(e){return e=(e=e.replace(/\\n/g,"\n")).replace(/\\"/g,'"')};this.getBrackettedSubstring=function(e,t,r,i){for(var a=i||e[t],n=t+1,s=!1;ne.length-1&&(n=e.length-1),[n-t+1,d(e.substring(t+1,n)),!1])}};a.prototype.peekLine=function(){return this.lines[this.lineIndex]},a.prototype.nextLine=function(){if(this.lineIndex>0&&(this.multilineVars.iChar+=this.lines[this.lineIndex-1].length+1),this.lineIndex11&&(f%=12);var p="m"===t[0]?l[f]:c[f],m=p+t,g=n(m);g.length>0&&"flat"===g[0].acc&&(e.localTransposePreferFlats=!0);var v=m.charCodeAt(0)-h.charCodeAt(0);return e.localTranspose>0?v<0?v+=7:0===v&&("#"!==h[1]&&"b"!==m[1]||(v+=7)):e.localTranspose<0&&(v>0?v-=7:0===v&&("b"!==h[1]&&"#"!==m[1]||(v-=7))),e.localTranspose>0?e.localTransposeVerticalMovement=v+7*Math.floor(e.localTranspose/12):e.localTransposeVerticalMovement=v+7*Math.ceil(e.localTranspose/12),u?{accidentals:g,root:p[0],acc:p.length>1?p[1]:""}:{accidentals:[],root:r,acc:i}},s.chordName=function(e,t){return a(t,e.localTranspose,e.localTransposePreferFlats,e.freegchord)};var h=["c","d","e","f","g","a","b"],d={dblflat:-2,flat:-1,natural:0,sharp:1,dblsharp:2},u={"-2":"dblflat","-1":"flat",0:"natural",1:"sharp",2:"dblsharp"},f={"-2":"__","-1":"_",0:"=",1:"^",2:"^^"};s.note=function(e,t){if(e.localTranspose&&"perc"!==e.clef.type){var r=t.pitch;if(e.localTransposeVerticalMovement&&(t.pitch=t.pitch+e.localTransposeVerticalMovement,t.name)){var a=t.accidental?t.name.substring(1):t.name,n=t.accidental?t.name[0]:"",s=i.pitchIndex(a);t.name=n+i.noteName(s+e.localTransposeVerticalMovement)}if(t.accidental){var o=function(e,t,r,i,a){for(var n=h[(e+49)%7],s=0,o=0;o2&&(t++,p-="b"===l||"e"===l?1:2),[t,p]}(r,t.pitch,t.accidental,e.globalTransposeOrigKeySig,e.targetKey);t.pitch=o[0],t.accidental=u[o[1]],t.name&&(t.name=f[o[1]]+t.name.replace(/[_^=]/g,""))}}},e.exports=s},867:function(e){var t={},r=["C,,,","D,,,","E,,,","F,,,","G,,,","A,,,","B,,,","C,,","D,,","E,,","F,,","G,,","A,,","B,,","C,","D,","E,","F,","G,","A,","B,","C","D","E","F","G","A","B","c","d","e","f","g","a","b","c'","d'","e'","f'","g'","a'","b'","c''","d''","e''","f''","g''","a''","b''","c'''","d'''","e'''","f'''","g'''","a'''","b'''"];t.pitchIndex=function(e){return r.indexOf(e)},t.noteName=function(e){return r[e]},e.exports=t},4208:function(e){var t=["C","C♯","D","D♯","E","F","F♯","G","G♯","A","A♯","B"],r=["C","D♭","D","E♭","E","F","G♭","G","A♭","A","B♭","B"],i=["C","C#","D","D#","E","F","F#","G","G#","A","A#","B"],a=["C","Db","D","Eb","E","F","Gb","G","Ab","A","Bb","B"];e.exports=function(e,n,s,o){if(!n||n%12==0)return e;for(;n<0;)n+=12;n>11&&(n%=12);var c=e.match(/^([A-G][b#♭♯]?)([^\/]+)?\/?([A-G][b#♭♯]?)?(.+)?/);if(!c)return e;var l,h=c[1],d=c[2],u=c[3],f=c[4];return(l=t.indexOf(h))<0&&(l=r.indexOf(h)),l<0&&(l=i.indexOf(h)),l<0&&(l=a.indexOf(h)),l<0||(l+=n,l%=12,e=s?o?a[l]:r[l]:o?i[l]:t[l],d&&(e+=d),u&&((l=t.indexOf(u))<0&&(l=r.indexOf(u)),l<0&&(l=i.indexOf(u)),l<0&&(l=a.indexOf(u)),e+="/",l>=0?(l+=n,l%=12,e+=s?o?a[l]:r[l]:o?i[l]:t[l]):e+=u),f&&(e+=f)),e}},575:function(e,t,r){var i=r(9708),a=r(5008);function n(e){if(!e)return!1;if("string"==typeof e)return!1;for(var t=0;t0&&"bar"!==e[r].el_type;r--);return r}this.setVisualTranspose=function(t){t&&(e.visualTranspose=t)},this.resolveOverlays=function(){for(var t=!1,i=[],n=0;n0&&l[h].voice.push({el_type:"note",duration:u,rest:{type:"invisible"},startChar:v.startChar,endChar:v.endChar}),l[h].voice.push(v)),u=0):"note"===v.el_type?f?l[h].voice.push(v):(u+=v.duration,i[n]+=v.duration):"scale"!==v.el_type&&"stem"!==v.el_type&&"overlay"!==v.el_type&&"style"!==v.el_type&&"transpose"!==v.el_type&&"color"!==v.el_type||l[h].voice.push(v);else{t=!0,f=!0,m=g,l[h].hasOverlay=!0,0===p&&(p=i[n]);for(var b=0;b=e.lines[b].staff[0].voices.length&&e.lines[b].staff[0].voices.push([{el_type:"note",duration:i[b],rest:{type:"invisible"},startChar:v.startChar,endChar:v.endChar}])}}l[h].hasOverlay&&0===l[h].snip.length&&l[h].snip.push({start:m,len:d.length-m})}for(h=0;h=0;x--){var k=y.snip[x];c.voices[h].splice(k.start,k.len),c.voices[h].splice(k.start+1,0,{el_type:"stem",direction:"auto"});var w=r(c.voices[h],k.start);c.voices[h].splice(w,0,{el_type:"stem",direction:"up"})}for(x=0;x=t&&st;){if(e[t].staff)return e[t];t++}return null}for(e.lineNum=0;e.lineNum0&&b[b.length-1].barNumber){var x=g(e.lines,e.lineNum);x&&(x.staff[0].barNumber=b[b.length-1].barNumber),delete b[b.length-1].barNumber}}}return delete e.staffNum,delete e.voiceNum,delete e.lineNum,delete e.potentialStartBeam,delete e.potentialEndBeam,delete e.vskipPending,s},e.reset(),this.getLastNote=function(){if(e.lines[e.lineNum]&&e.lines[e.lineNum].staff&&e.lines[e.lineNum].staff[e.staffNum]&&e.lines[e.lineNum].staff[e.staffNum].voices[e.voiceNum])for(var t=e.lines[e.lineNum].staff[e.staffNum].voices[e.voiceNum].length-1;t>=0;t--){var r=e.lines[e.lineNum].staff[e.staffNum].voices[e.voiceNum][t];if("note"===r.el_type)return r}return null},this.addTieToLastNote=function(e){var t=this.getLastNote();return!!(t&&t.pitches&&t.pitches.length>0)&&(t.pitches[0].startTie={},e&&(t.pitches[0].startTie.style="dotted"),!0)},this.getDuration=function(e){return e.duration?e.duration:0},this.closeLine=function(){e.potentialStartBeam&&e.potentialEndBeam&&(e.potentialStartBeam.startBeam=!0,e.potentialEndBeam.endBeam=!0),delete e.potentialStartBeam,delete e.potentialEndBeam},this.appendElement=function(r,i,a,n){var s=e;n.el_type=r,null!==i&&(n.startChar=i),null!==a&&(n.endChar=a);var o=function(){void 0!==s.potentialStartBeam&&void 0!==s.potentialEndBeam&&(s.potentialStartBeam.startBeam=!0,s.potentialEndBeam.endBeam=!0),delete s.potentialStartBeam,delete s.potentialEndBeam};"note"===r?t.getDuration(n)>=.25||n.force_end_beam_last&&void 0!==s.potentialStartBeam?o():n.end_beam&&void 0!==s.potentialStartBeam?void 0===n.rest?(s.potentialStartBeam.startBeam=!0,n.endBeam=!0,delete s.potentialStartBeam,delete s.potentialEndBeam):o():void 0===n.rest&&(void 0===s.potentialStartBeam?n.end_beam||(s.potentialStartBeam=n,delete s.potentialEndBeam):s.potentialEndBeam=n):o(),delete n.end_beam,delete n.force_end_beam_last,function(e){var t=s.lines[s.lineNum].staff[s.staffNum];if(t){if(void 0!==e.pitches){var r=t.workingClef.verticalPos;e.pitches.forEach((function(e){e.verticalPos=e.pitch-r}))}if(void 0!==e.gracenotes){var i=t.workingClef.verticalPos;e.gracenotes.forEach((function(e){e.verticalPos=e.pitch-i}))}t.voices[s.voiceNum].push(e)}}(n)},this.appendStartingElement=function(t,r,i,n){var s;this.closeLine(),"key"===t&&(s=n.impliedNaturals,delete n.impliedNaturals,delete n.explicitAccidentals);var o=a.clone(n);if(e.lines[e.lineNum]&&e.lines[e.lineNum].staff){e.lines[e.lineNum].staff.length<=e.staffNum&&(e.lines[e.lineNum].staff[e.staffNum]={},e.lines[e.lineNum].staff[e.staffNum].clef=a.clone(e.lines[e.lineNum].staff[0].clef),e.lines[e.lineNum].staff[e.staffNum].key=a.clone(e.lines[e.lineNum].staff[0].key),e.lines[e.lineNum].staff[0].meter&&(e.lines[e.lineNum].staff[e.staffNum].meter=a.clone(e.lines[e.lineNum].staff[0].meter)),e.lines[e.lineNum].staff[e.staffNum].workingClef=a.clone(e.lines[e.lineNum].staff[0].workingClef),e.lines[e.lineNum].staff[e.staffNum].voices=[[]]),"clef"===t&&(e.lines[e.lineNum].staff[e.staffNum].workingClef=o);for(var c=e.lines[e.lineNum].staff[e.staffNum].voices[e.voiceNum],l=0;l0){if(void 0!==r.voices[0]){for(var a=!1,n=0;n0){var r=t[t.length-1];if("bar"!==r.el_type)return e-1;void 0!==r.barNumber&&(r.barNumber=e)}return e},this.hasBeginMusic=function(){for(var t=0;t=0;r--)if(void 0!==e.lines[r].staff)return!1;return!0},this.getCurrentVoice=function(){var t=e.lines[e.lineNum];if(!t)return null;var r=t.staff[e.staffNum];return r&&void 0!==r.voices[e.voiceNum]?r.voices[e.voiceNum]:null},this.setCurrentVoice=function(t,r){e.staffNum=t,e.voiceNum=r;for(var i=0;i0?(r.push(n-1),i.push(Math.round(a-s)),a=s):ns&&us?(l.push(u-1),c++,o=Math.max(o,s),s=Math.abs(i-t[c]),n.push(a-f),a=f):s=p}n.push(a)}function a(e,t,r,a){for(var n=Math.ceil(e.total/t),s=Math.floor(e.total/n),o=[],c=0;ct&&(s=!0),o%r==r-1&&(o!==e.length-1&&i.push(o),a.push(Math.round(n)),n=0);return{failed:s,totals:a,lineBreaks:i}}e.exports={wrapLines:function(e,t,r){if(t&&0!==e.lines.length){var i=e.deline({lineBreaks:!1}),a=function(e,t){for(var r=[],i=0,a=0,n=0,s=0;s0&&(i[c.line].staff[c.staff].barNumber=s);for(var h=Object.keys(l),d=0;d=0;p--)if("key"===f[p].el_type){a[c.staff]={root:f[p].root,acc:f[p].acc,mode:f[p].mode,accidentals:f[p].accidentals.filter((function(e){return"natural"!==e.acc}))};break}for(p=f.length-1;p>=0;p--)if("stem"===f[p].el_type){n[10*c.staff+c.voice]={direction:f[p].direction};break}if(void 0!==r&&0===c.staff&&0===c.voice)for(p=0;p0&&p.measureWidths.length<25&&(k=a(p,g,0,b),b.attempts.push({type:"Optimize",failed:k.failed,reason:k.reason,lineBreaks:k.lineBreaks,totals:k.totals}),k.failed||(y=k.lineBreaks))}d.push(y),u.push(b)}var w=function(e,t,r){var i={lineBreaks:e,staffwidth:t};for(var a in r)r.hasOwnProperty(a)&&"wrap"!==a&&"staffwidth"!==a&&(i[a]=r[a]);return{revisedParams:i}}(d,i.staffwidth,i);return w.explanation=u,w.reParse=!0,w}}},9716:function(e,t,r){var i,a=r(7207),n=r(5058);!function(){"use strict";var e,t,r,s,o,c,l,h,d,u,f,p,m,g,v,b,y,x,k=1,w={num:4,den:4},T=128,C=!0,S=105,N=95,E=85,_=.25,M=0,A={},B=0;function L(e){for(var t=d.length-1;t>=0;t--)if("program"===d[t].cmd)return void(d[t].channel=e)}function P(e){return e/1e6}function z(e){return Math.round(e*k*1e6)/1e6}function H(e){switch(parseInt(e.den,10)){case 2:return.5;case 4:return.25;case 8:return e.num%3==0?.375:.125;case 16:return.125}return.25}function O(e,t){var r=t.start,i=t.duration,a=z(1/32);switch(e){case"trill":for(var n=1;i>0;)d.push({cmd:"note",pitch:t.pitch+n,volume:t.volume,start:r,duration:a,gap:0,instrument:h,style:"decoration"}),n=1===n?0:1,i-=a,r+=a;break;case"mordent":d.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r,duration:a,gap:0,instrument:h,style:"decoration"}),i-=a,r+=a,d.push({cmd:"note",pitch:t.pitch+1,volume:t.volume,start:r,duration:a,gap:0,instrument:h,style:"decoration"}),i-=a,r+=a,d.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r,duration:i,gap:0,instrument:h});break;case"lowermordent":d.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r,duration:a,gap:0,instrument:h,style:"decoration"}),i-=a,r+=a,d.push({cmd:"note",pitch:t.pitch-1,volume:t.volume,start:r,duration:a,gap:0,instrument:h,style:"decoration"}),i-=a,r+=a,d.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r,duration:i,gap:0,instrument:h});break;case"turn":a=t.duration/5,d.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r,duration:a,gap:0,instrument:h,style:"decoration"}),d.push({cmd:"note",pitch:t.pitch+1,volume:t.volume,start:r+a,duration:a,gap:0,instrument:h,style:"decoration"}),d.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r+2*a,duration:a,gap:0,instrument:h,style:"decoration"}),d.push({cmd:"note",pitch:t.pitch+1,volume:t.volume,start:r+3*a,duration:a,gap:0,instrument:h,style:"decoration"}),d.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r+4*a,duration:a,gap:0,instrument:h});break;case"roll":for(;i>0;)d.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r,duration:a,gap:0,instrument:h,style:"decoration"}),i-=2*a,r+=2*a}}function D(e,t){var r,i=function(e,t){if(t)return 0;var r;if(g)r=g,g=void 0;else if(C)if(B>e)r=E;else{var i=(e-m)/H(w);r=0===i?S:parseInt(i,10)===i?N:E}else r=N;return v&&(r+=v,v=void 0),r<0&&(r=0),r>127&&(r=127),t?0:r}(P(e.time),t);if(p.processChord(e),e.gracenotes&&e.pitches&&e.pitches.length>0&&e.pitches[0]&&(r=function(e,t){for(var r,i=0,a=[],s=0;s0?F.endType="tenuto":u&&(F.endType=u),F.endType){case"tenuto":F.gap=-.001;break;case"staccato":var V=.4*F.duration;F.gap=o/60*V;break;default:F.gap=0}d.push(F)}}}d.length}var G=function(e){return e.pitches&&e.pitches.length>0&&e.pitches[0]?e.pitches[0].duration:e.elem?e.elem.duration:e.duration}(e);f=Math.max(f,P(e.time)+z(G))}i=function(i,n,T,z){n||(n={}),z||(z={}),e=[],t=[0,0,0,0,0,0,0],s=[],o=n.qpm,c=void 0,k=1,l=void 0,h=void 0,d=void 0,u=void 0,f=0,x=T,w={num:4,den:4},C=!0,S=105,N=95,E=85,_=.25,g=void 0,v=void 0,M=0,b=[],A={},y=1,i.length>0&&i[0].length>0&&(B=i[0][0].pickupLength),void 0===n.bassprog||z.bassprog||(z.bassprog=[n.bassprog]),void 0===n.bassvol||z.bassvol||(z.bassvol=[n.bassvol]),void 0===n.chordprog||z.chordprog||(z.chordprog=[n.chordprog]),void 0===n.chordvol||z.chordvol||(z.chordvol=[n.chordvol]),void 0===n.gchord||z.gchord||(z.gchord=[n.gchord]),p=new a(i.length,n.chordsOff,z,w),function(e,t){for(var r=0;r=0)&&(I=!0);for(var Y=0;Y0&&"program"===d[d.length-1].cmd)d[d.length-1].instrument=G.program;else{var X;for(X=d.length-1;X>=0&&"program"!==d[X].cmd;X--);(X<0||d[X].instrument!==G.program)&&d.push({cmd:"program",channel:0,instrument:G.program})}break;case"channel":L(G.channel);break;case"drum":A=j(G.params),W();break;case"gchordOn":p.gChordOn(G);break;case"beat":S=G.beats[0],N=G.beats[1],E=G.beats[2];break;case"vol":g=G.volume;break;case"volinc":v=G.volume;break;case"beataccents":C=G.value;break;case"gchord":case"bassprog":case"chordprog":case"bassvol":case"chordvol":p.paramChange(G);break;default:console.log("MIDI creation. Unknown el_type: "+G.el_type+"\n")}}void 0===d[0].instrument&&(d[0].instrument=l||0),u&&d.unshift(u),s.push(d),p.finish(),b.length}return n.detuneOctave&&function(e,t){for(var r={},i=0;i1){var c=(o=o.sort((function(e,t){return e.pitch-t.pitch})))[o.length-1],l=c.pitch%12,h=!1;for(a=0;!h&&a0&&s.push(b),{tempo:o,instrument:l,tracks:s,totalDuration:f}};var F=[0,2,4,5,7,9,11];function I(i){if(void 0!==i.midipitch)return i.midipitch;var a=i.pitch;if(i.accidental)switch(i.accidental){case"sharp":e[a]=1;break;case"flat":e[a]=-1;break;case"natural":e[a]=0;break;case"dblsharp":e[a]=2;break;case"dblflat":e[a]=-2;break;case"quartersharp":e[a]=.25;break;case"quarterflat":e[a]=-.25}var n=12*function(e){return Math.floor(e/7)}(a)+F[G(a)]+60;return void 0!==e[a]?n+=e[a]:n+=t[G(a)],n+=r}function V(e){var t=[0,0,0,0,0,0,0];if(!e.accidentals)return t;for(var r=0;r=0?(e.pitch=Math.round(e.pitch),e.cents=-50):t.indexOf(".25")>=0&&(e.pitch=Math.round(e.pitch),e.cents=50),e}function G(e){return(e%=7)<0&&(e+=7),e}function j(e){if(0===e.pattern.length||!1===e.on)return{on:!1};for(var t=e.pattern[0],r=[],i="",a=0,n=0;n=0)return i;return i}function n(e,t,r){for(var i=Math.min(e.length,t+3),a=t;a=0)return e[a].decoration[n];return null}function s(e){for(var t=0;t=0&&"bar"!==r[i].el_type;)r[i].noChordVoice=!0,i--}function o(e,t){if(e&&!(e.length<=t)&&e[t].title)return e[t].title.join(" ")}function c(e,t){var r=1/4;e.duration&&(r=e.duration[0]);var i=60;return e.bpm&&(i=e.bpm),r*i/t}function l(t){var r;switch(t.type){case"common_time":r={el_type:"meter",num:4,den:4};break;case"cut_time":r={el_type:"meter",num:2,den:2};break;case"specified":r={el_type:"meter",num:t.value[0].num,den:t.value[0].den};break;default:r={el_type:"meter"}}return e=r.num/r.den,r}function h(e){for(var t=[],r=0;r=0;r--)if(e[r].el_type===t.el_type)return void(JSON.stringify(e[r])!==JSON.stringify(t)&&e.push(t));e.push(t)}i=function(i,h){var p,m=(h=h||{}).program||0,g=h.midiTranspose||0;i.visualTranspose&&(g-=i.visualTranspose);var v=h.channel||0,b=!1,y=h.drum||"",x=h.drumBars||1,k=h.drumIntro||0,w=""!==y,T=!!h.drumOff,C=[];m=parseInt(m,10),g=parseInt(g,10),10===(v=parseInt(v,10))&&(m=t),y=y.split(" "),x=parseInt(x,10),k=parseInt(k,10);var S=i.formatting.bagpipes;S&&(m=71);var N=[];if(i.formatting.midi){var E=i.formatting.midi;E.program&&E.program.length>0&&(m=E.program[0],E.program.length>1&&(m=E.program[1],v=E.program[0]),b=!0),E.transpose&&(g=E.transpose[0]),E.channel&&(v=E.channel[0],b=!0),E.drum&&(y=E.drum),E.drumbars&&(x=E.drumbars[0]),E.drumon&&(w=!0),10===v&&(m=t),E.beat&&N.push({el_type:"beat",beats:E.beat}),E.nobeataccents&&N.push({el_type:"beataccents",value:!1})}p=h.qpm?parseInt(h.qpm,10):i.metaText.tempo?c(i.metaText.tempo,i.getBeatLength()):h.defaultQpm?h.defaultQpm:180;var _=[];S&&_.push({el_type:"bagpipes"}),_.push({el_type:"instrument",program:m}),v&&_.push({el_type:"channel",channel:v}),g&&_.push({el_type:"transpose",transpose:g}),_.push({el_type:"tempo",qpm:p});for(var M=0;M=0?t="pppp":e.decoration.indexOf("ppp")>=0?t="ppp":e.decoration.indexOf("pp")>=0?t="pp":e.decoration.indexOf("p")>=0?t="p":e.decoration.indexOf("mp")>=0?t="mp":e.decoration.indexOf("mf")>=0?t="mf":e.decoration.indexOf("f")>=0?t="f":e.decoration.indexOf("ff")>=0?t="ff":e.decoration.indexOf("fff")>=0?t="fff":e.decoration.indexOf("ffff")>=0&&(t="ffff"),t&&(A=i[t].slice(0),B[W].push({el_type:"beat",beats:A.slice(0)}),L[R]=!1,P[R]=!1),e.decoration.indexOf("crescendo(")>=0){var a=r(U,te,"crescendo)"),s=Math.min(127,A[0]+50),o=n(U,te+a+1,Object.keys(i));o&&(s=i[o][0]),L[R]=a>0&&Math.floor((s-A[0])/a),P[R]=!1}else if(e.decoration.indexOf("crescendo)")>=0)L[R]=!1;else if(e.decoration.indexOf("diminuendo(")>=0){var c=r(U,te,"diminuendo)"),l=Math.max(15,A[0]-50),h=n(U,te+c+1,Object.keys(i));h&&(l=i[h][0]),L[R]=!1,P[R]=c>0&&Math.floor((l-A[0])/c)}else e.decoration.indexOf("diminuendo)")>=0&&(P[R]=!1)},j=Y.staff,W=0,q=0;q=0?B[W].push({el_type:"transpose",transpose:-12}):X.clef.type.indexOf("+8")>=0&&B[W].push({el_type:"transpose",transpose:12})),i.formatting.midi&&i.formatting.midi.drumoff&&(B[W].push({el_type:"bar"}),B[W].push({el_type:"drum",params:{pattern:"",on:!1}}));var Q=0,J=0,Z=0,ee=0;A=[105,95,85,1];for(var te=0;te=0?B[W].push({el_type:"transpose",transpose:-12}):re.type.indexOf("+8")>=0&&B[W].push({el_type:"transpose",transpose:12}));break;case"tempo":p=c(re,i.getBeatLength()),B[W].push({el_type:"tempo",qpm:p,timing:z[W]}),H[""+z[W]]={el_type:"tempo",qpm:p,timing:z[W]};break;case"bar":Q>0&&B[W].push({el_type:"bar"}),G(re),Q=0;var se="bar_right_repeat"===re.type||"bar_dbl_repeat"===re.type,oe="1"===re.startEnding,ce="bar_left_repeat"===re.type||"bar_dbl_repeat"===re.type||"bar_right_repeat"===re.type;if(se){var le=O[W];le||(le=0);var he=D[W];he||(he=B[W].length);for(var de=le;de=0&&n!==t[""+o.timing].qpm&&(n=t[""+o.timing].qpm,"tempo"===o.el_type?(o.qpm=t[""+o.timing].qpm,s++):(e[i].splice(s,0,{el_type:"tempo",qpm:t[""+o.timing].qpm,timing:o.timing}),s+=2))}}(B,H),k)for(var pe=i.getPickupLength(),me=0;mege;)ge++;if(B[me].length>ge){for(ne=0;ne0&&B[0].length>0&&(B[0][0].pickupLength=i.getPickupLength()),B}}(),e.exports=i},7207:function(e,t,r){var i=r(5008),a=function(e,t,r,i){this.chordTrack=[],this.chordTrackFinished=!1,this.chordChannel=e,this.currentChords=[],this.lastChord,this.chordLastBar,this.chordsOff=!!t,this.gChordTacet=this.chordsOff,this.hasRhythmHead=!1,this.transpose=0,this.lastBarTime=0,this.meter=i,this.tempoChangeFactor=1,this.bassInstrument=r.bassprog&&1===r.bassprog.length?r.bassprog[0]:0,this.chordInstrument=r.chordprog&&1===r.chordprog.length?r.chordprog[0]:0,this.boomVolume=r.bassvol&&1===r.bassvol.length?r.bassvol[0]:64,this.chickVolume=r.chordvol&&1===r.chordvol.length?r.chordvol[0]:48,this.overridePattern=r.gchord?s(r.gchord[0]):void 0};function n(e,t,r,i){var a=[];if(!e)return a;if(t.indexOf("boom")>=0?a.push(r?e.boom:e.boom2):i&&a.push(e.boom),t.indexOf("chick")>=0)for(var n=0;n3?a.push(e.chick[2]):a.push(e.chick[0]+12);break;case"TOP":e.chick.length>4?a.push(e.chick[2]):a.push(e.chick[1]+12);break;case"do":a.push(e.chick[0]+12);break;case"mi":a.push(e.chick[1]+12);break;case"sol":a.push(e.chick[2]+12);break;case"ti":e.chick.length>3?a.push(e.chick[2]+12):a.push(e.chick[0]+24);break;case"top":e.chick.length>4?a.push(e.chick[2]+12):a.push(e.chick[1]+24)}return a}function s(e){for(var t=[],r=0;r0&&!this.chordTrackFinished&&(this.resolveChords(this.lastBarTime,o(e.time)),this.currentChords=[]),this.chordLastBar=this.lastChord},a.prototype.gChordOn=function(e){this.chordsOff||(this.gChordTacet=e.tacet)},a.prototype.paramChange=function(e){switch(e.el_type){case"gchord":this.overridePattern=s(e.param);break;case"bassprog":this.bassInstrument=e.param;break;case"chordprog":this.chordInstrument=e.param;break;case"bassvol":this.boomVolume=e.param;break;case"chordvol":this.chickVolume=e.param;break;default:console.log("unhandled midi param",e)}},a.prototype.finish=function(){this.chordTrackEmpty()||(this.chordTrackFinished=!0)},a.prototype.addTrack=function(e){this.chordTrackEmpty()||e.push(this.chordTrack)},a.prototype.findChord=function(e){if(this.gChordTacet)return"break";if(this.chordTrackFinished||!e.chord||0===e.chord.length)return null;for(var t=0;t=0)return"break"}return null},a.prototype.interpretChord=function(e){if(0!==e.length){if("break"===e)return{chick:[]};var t=e.substring(0,1);if("("===t){if(0===(e=e.substring(1,e.length-2)).length)return;t=e.substring(0,1)}var r=this.basses[t];if(r){for(var i=this.transpose;i<-8;)i+=12;for(;i>8;)i-=12;var a,n=(r+=i)-5;1===e.length&&(a=this.chordNotes(r,""));var s=e.substring(1),o=s.substring(0,1);"b"===o||"♭"===o?(r--,n--,s=s.substring(1)):"#"!==o&&"♯"!==o||(r++,n++,s=s.substring(1));var c=s.split("/");if((a=this.chordNotes(r,c[0])).length>=3&&(n=n+(a[2]-a[0])-7),2===c.length&&this.basses[c[1].substring(0,1)]){var l={"#":1,"♯":1,b:-1,"♭":-1}[c[1].substring(1)]||0;n=r=this.basses[c[1].substring(0,1)]+l+i}return{boom:r,boom2:n,chick:a}}}},a.prototype.chordNotes=function(e,t){var r=this.chordIntervals[t];r||(r="ma"===t.slice(0,2).toLowerCase()||"M"===t[0]?this.chordIntervals.M:"m"===t[0]||"-"===t[0]?this.chordIntervals.m:this.chordIntervals.M),e+=12;for(var i=[],a=0;a0&&c[d-1]&&c[d]&&c[d-1].boom!==c[d].boom&&(u=!0);var p=l[d],m=p.indexOf("boom")>=0,g=!(m||0===d||c[d-1]&&c[d-1].boom===c[d].boom),v=n(c[d],p,u,g);m&&(u=!1);for(var b=0;b4)for(a=a.toLowerCase(),t-=5;t>0;)a+="'",t--;else for(;t<4;)a+=",",t++;return a}}},5058:function(e){var t={f0:"_C",n0:"=C",s0:"^C",x0:"C",f1:"_D",n1:"=D",s1:"^D",x1:"D",f2:"_E",n2:"=E",s2:"^E",x2:"E",f3:"_F",n3:"=F",s3:"^F",x3:"F",f4:"_G",n4:"=G",s4:"^G",x4:"G",f5:"_A",n5:"=A",s5:"^A",x5:"A",f6:"_B",n6:"=B",s6:"^B",x6:"B",f7:"_c",n7:"=c",s7:"^c",x7:"c",f8:"_d",n8:"=d",s8:"^d",x8:"d",f9:"_e",n9:"=e",s9:"^e",x9:"e",f10:"_f",n10:"=f",s10:"^f",x10:"f",f11:"_g",n11:"=g",s11:"^g",x11:"g",f12:"_a",n12:"=a",s12:"^a",x12:"a",f13:"_b",n13:"=b",s13:"^b",x13:"b",f14:"_c'",n14:"=c'",s14:"^c'",x14:"c'",f15:"_d'",n15:"=d'",s15:"^d'",x15:"d'",f16:"_e'",n16:"=e'",s16:"^e'",x16:"e'"};e.exports=function(e){var r=(e.accidental?e.accidental[0]:"x")+e.verticalPos;return t[r]}},1921:function(e,t,r){var i=r(2842).noteToMidi,a=r(6776),n=r(6629);function s(e,t){for(var r=[],i=0;i=0;i--)if(t.pitch+t.pitchAltered>=e.stringPitches[i]){var a=t.pitch+t.pitchAltered-e.stringPitches[i];return"^"===t.quarter?a-=.5:"v"===t.quarter&&(a+=.5),{num:Math.round(a),str:e.stringPitches.length-1-i,note:t}}return{num:"?",str:e.stringPitches.length-1,note:t}}function l(e,t){var r={num:"?",str:0,note:t};e.push(r),e.error=t.emit()+": unexpected note for instrument"}function h(e){var t=e.tuning,r=e.capo,s=e._super.params.highestNote;this.linePitch=e.linePitch,this.highestNote="a'",s&&(this.highestNote=s),this.measureAccidentals={},this.capo=0,r&&(this.capo=parseInt(r,10)),this.transpose=e.transpose?e.transpose:0,this.tuning=t,this.stringPitches=[];for(var o=0;o0&&(this.capoTuning=function(e){var t=null,r=e.tuning;if(e.capo>0){t=[];for(var i=0;i0&&(r=e.capoTuning);for(var i=r.length-1,a=0;a1?(o=s(this,e)).error&&(n=o.error):e[0].endTie||((r=new a.TabNote(e[0].name,this.clefTranspose)).checkKeyAccidentals(this.accidentals,this.measureAccidentals),(i=c(this,r))?o.push(i):(l(o,r),n=o.error))),n)return o;var h=null;if(t){h=[];for(var d=0;d0&&(r+=" capo:"+e.capo),t=t.replace("%T",r)),t}return""},h.prototype.suppress=function(e){return!!e._super.params.suppress},e.exports=h},8918:function(e){function t(e,t){this.numLines=e,this.lineSpace=t,this.verticalSize=this.numLines*this.lineSpace,this.bar={pitch:3,pitch2:t*e,height:5}}t.prototype.bypass=function(e){var t=e.staffGroup.voices;return!!(t.length>0&&t[0].isPercussion)},t.prototype.setRelative=function(e,t,r){switch(e.type){case"bar":t.pitch=this.bar.pitch,t.pitch2=this.bar.pitch2,t.height=this.height;break;case"symbol":var i=this.bar.pitch2/2;if("dots.dot"==e.name)return r?(t.pitch=i,!1):(t.pitch=i+this.lineSpace,!0)}return r},e.exports=t},6776:function(e,t,r){var i=r(2842),a=i.noteToMidi,n=i.midiToNote;function s(e,t){var r=a(e);t&&(r+=t);var i,s=n(r),o=!1,c=!1,l=null,h=null,d=!1,u=0;e.startsWith("_")?(o=!0,u=-1,"/"==e[1]?(o=!1,h="v",u=0):"_"==e[1]&&(d=!0,u-=1)):e.startsWith("^")?(c=!0,u=1,"/"==e[1]?(c=!1,h="^",u=0):"^"==e[1]&&(d=!0,u+=1)):e.startsWith("=")&&(l=!0,u=0),((i=o||c||null!=h)||l)&&(s=null!=h||d?e.slice(2):e.slice(1));var f=(s.match(/,/g)||[]).length,p=(s.match(/'/g)||[]).length;this.pitch=r,this.pitchAltered=0,this.name=s,this.acc=u,this.isSharp=c,this.isKeySharp=!1,this.isDouble=d,this.isAltered=i,this.isFlat=o,this.isKeyFlat=!1,this.natural=l,this.quarter=h,this.isLower=this.name==this.name.toLowerCase(),this.name=this.name[0].toUpperCase(),this.hasComma=f,this.isQuoted=p}s.prototype.sameNoteAs=function(e){return e.pitch===this.pitch},s.prototype.isLowerThan=function(e){return e.pitch>this.pitch},s.prototype.checkKeyAccidentals=function(e,t){if(!this.isAltered&&!this.natural)if(t[this.name.toUpperCase()])switch(t[this.name.toUpperCase()]){case"__":return this.acc=-2,void(this.pitchAltered=-2);case"_":return this.acc=-1,void(this.pitchAltered=-1);case"=":return this.acc=0,void(this.pitchAltered=0);case"^":return this.acc=1,void(this.pitchAltered=1);case"^^":return this.acc=2,void(this.pitchAltered=2)}else if(e)for(var r=this.name,i=0;i=0){if(r===t)return e.extra[i].x+e.extra[i].w/2;r++}return-1}function f(e){if(e.abcelem){var t=e.abcelem;if(t.rest)return t.gracenotes}return null}function p(e,t,r){var i=e.semantics.notesToNumber(t,r);if(i.error)return e._super.setError(i.error),i;if(i.graces&&i.notes){var a=i.notes.length-1;i.notes[a].graces=i.graces}return i}function m(e,t,r,i,a){for(var n=0;n=0&&(e.semantics.strings.clefTranspose=-12),k.abcelem.type.indexOf("+8")>=0&&(e.semantics.strings.clefTranspose=12)),k.type){case"staff-extra key-signature":this.accidentals=k.abcelem.accidentals,e.semantics.strings.accidentals=this.accidentals;break;case"bar":e.semantics.strings.measureAccidentals={};var C=!1;x===g.children.length-1&&(C=!0);var S=o(k,e);if(S.abcelem.barNumber){delete S.abcelem.barNumber;for(var N=0;N0&&(y.abselem=_,r.push(y),v.children.push(_))}}},e.exports=h},8660:function(e){function t(e,t,r){this.tune=e,this.params=r,this.tuneNumber=t,this.inError=!1}t.prototype.setError=function(e){var t=this.tune;e&&(this.error=e,this.inError=!0,t.warnings?t.warnings.push(e):t.warnings=[e])},e.exports=t},676:function(e,t,r){var i=r(3197),a=r(1696),n=r(4331);function s(e,t){var r=e.plugin.semantics.strings,i=e.renderer.controller.getTextSize,a=r.tabInfos(e.plugin),n=!0;if(r.suppress(e.plugin)&&(n=!1),n){var s=i.calc(a,"tablabelfont","text instrumentname");return t.tabNameInfos={textSize:{height:s.height,width:s.width},name:a},s.height}return 0}function o(e,t,r,i){this.renderer=t,this.plugin=e,this.line=r,this.absolutes=new a,this.staffIndex=i,this.tabStaff={clef:{type:"TAB"}},this.tabSize=e.linePitch*e.nbLines}function c(e,t){return!(!t[e].isTabStaff||e!==t.length-1&&t[e+1].isTabStaff)}function l(e,t){for(var r=t;r>=0;r--)if(!e[r].isTabStaff)return r;return-1}function h(e,t){return"clef"===e[t].children[0].abcelem.el_type?null:0==t?"none":e[t-1].children[0]}o.prototype.doLayout=function(){var e=this.line.staff;if(e){var t=e[0];if(t&&t.clef&&0==t.clef.stafflines)return void this.plugin._super.setError("No tablatures when stafflines=0");e.splice(e.length,0,this.tabStaff)}var r=this.line.staffGroup,a=r.voices,o=function(e){for(var t=0,r=0;rt&&(t=i.specialY.lyricHeightBelow)}return t}(a[0]),d=this.staffIndex,u=r.staffs[d],f=this.tabSize+3-u.bottom-o;u.isTabStaff&&(f=u.top);var p={bottom:-1,isTabStaff:!0,specialY:{tempoHeightAbove:0,partHeightAbove:0,volumeHeightAbove:0,dynamicHeightAbove:0,endingHeightAbove:0,chordHeightAbove:0,lyricHeightAbove:0,lyricHeightBelow:0,chordHeightBelow:0,volumeHeightBelow:0,dynamicHeightBelow:0},lines:this.plugin.nbLines,linePitch:this.plugin.linePitch,dy:.15,top:f},m=function(e,t){for(var r=e.staffIndex,i=0,a=0,n=0;;){if(!t[i])return-1;if(t[i].isTabStaff||(n=t[i].voices.length),t[i].isTabStaff){if(a++,c(i,t)&&a=r){if(i+1==t.length)return i+1;if(!t[i+1].isTabStaff)return i+1}if(++i>t.length)return-1}}(this,r.staffs);if(-1!==m){p.parentIndex=m-1,r.staffs.splice(m,0,p),r.height+=this.tabSize+3;var g=function(e,t){for(var r=t;r>=0;r--)if(!e[r].isTabStaff)return e[r];return null}(r.staffs,m),v=1;(function(e,t){return 1===function(e){for(var t=0,r=0;r1})(r.staffs,g)&&(v=g.voices.length),this.tabStaff.voices=[];for(var b=0;b0&&(y.duplicate=!0);var x=s(this,y)/n.STEP;x=Math.max(x,1),r.staffs[this.staffIndex].top+=1,r.height+=x,y.staff=p;var k=a.length;a.splice(a.length,0,y);var w=h(a,b+this.staffIndex);this.tabStaff.voices[b]=[],this.absolutes.build(this.plugin,a,this.tabStaff.voices[b],b,this.staffIndex,w,k)}!function(e){for(var t=0;t0&&(n[0].invisible=!0);break;case"meter":n[0]=l(a,this.tuneNumber),this.startlimitelem=n[0],r.duplicate&&n.length>0&&(n[0].invisible=!0);break;case"clef":if(n[0]=s(a,this.tuneNumber),!n[0])return null;r.duplicate&&n.length>0&&(n[0].invisible=!0);break;case"key":var h=o(a,this.tuneNumber);h&&(n[0]=h,this.startlimitelem=n[0]),r.duplicate&&n.length>0&&(n[0].invisible=!0);break;case"stem":this.stemdir="auto"===a.direction?void 0:a.direction;break;case"part":var d=new i(a,0,0,"part",this.tuneNumber),u=this.getTextSize.calc(a.title,"partsfont","part");d.addFixedX(new f(a.title,0,0,void 0,{type:"part",height:u.height/p.STEP})),n[0]=d;break;case"tempo":var m=new i(a,0,0,"tempo",this.tuneNumber);m.addFixedX(new g(a,this.tuneNumber,c)),n[0]=m;break;case"style":"normal"===a.head?delete this.style:this.style=a.head;break;case"hint":C=!0,this.saveState();break;case"midi":break;case"scale":this.voiceScale=a.size;break;case"color":this.voiceColor=a.color,r.color=this.voiceColor;break;default:var v=new i(a,0,0,"unsupported",this.tuneNumber);v.addFixed(new f("element type "+a.el_type,0,0,void 0,{type:"debug"})),n[0]=v}return n},N.prototype.createBeam=function(e,t,r){var i=[],n=new a(this.stemHeight*this.voiceScale,this.stemdir,this.flatBeams,r[0]);C&&n.setHint();for(var s=0;se.pitches[r+1].pitch){t=!1;var i=e.pitches[r];e.pitches[r]=e.pitches[r+1],e.pitches[r+1]=i}}while(!t)},A=function(e,t,r,i,a,n,s,o,c){for(var l=r;l>11;l--)l%2!=0||i||e.addFixed(new f(null,o,(a+4)*c,l,{type:"ledger"}));for(l=t;l<1;l++)l%2!=0||i||e.addFixed(new f(null,o,(a+4)*c,l,{type:"ledger"}));for(l=0;l1&&(p=new a(n,"grace",s),C&&p.setHint(),p.mainNote=r);var m=[];for(d=e.gracenotes.length-1;d>=0;d--)o+=10,m[d]=o,e.gracenotes[d].accidental&&(o+=7);for(d=0;d=6?"down":"up";for(i&&(N=i),(a=t.style?t.style:a)&&"normal"!==a||(a="note"),(m=n?S[a].nostem:S[a][-s])||console.log("noteSymbol:",a,s,n),g="down"===N?t.pitches.length-2:1;"down"===N?g>=0:g11||_.verticalPos<1)&&x.push(_.verticalPos-_.verticalPos%2),"down"===N?b=u.getSymbolWidth(m)+2:v=u.getSymbolWidth(m)+2)}var A=t.pitches.length;for(g=0;g0&&(h.bottom=h.bottom-1),e.addHead(h)),b+=O.accidentalshiftx,y=Math.max(y,O.dotshiftx)}if(H){var D=Math.round(70*this.voiceScale)/10,F="down"===N?t.minpitch-D:t.minpitch+1/3;F>6&&!i&&(F=6);var I="down"===N?t.maxpitch-1/3:t.maxpitch+D;I<6&&!i&&(I=6);var V="down"===N||0===e.heads.length?0:e.heads[0].w,Y="down"===N?1:-1;h&&"noteheads.slash.quarter"===h.c&&("down"===N?I-=1:F+=1),h&&"noteheads.triangle.quarter"===h.c&&("down"===N?I-=.7:F-=1.2),e.addRight(new f(null,V,0,F,{type:"stem",pitch2:I,linewidth:Y,bottom:F-1})),d=Math.min(F,I)}return{noteHead:h,roomTaken:b,roomTakenRight:y,min:d,additionalLedgers:x,dir:N,symbolWidth:C}},N.prototype.addLyric=function(e,t){var r="";t.lyric.forEach((function(e){var t=" "===e.divider?"":e.divider;r+=e.syllable+t+"\n"}));var i=this.getTextSize.calc(r,"vocalfont","lyric"),a=t.positioning?t.positioning.vocalPosition:"below";e.addCentered(new f(r,0,i.width,void 0,{type:"lyric",position:a,height:i.height/p.STEP,dim:this.getTextSize.attr("vocalfont","lyric")}))},N.prototype.createNote=function(e,t,r,a){var n,s=null,o=0,l=0,h=0,d=[],p=T(e),m=!1;0===p&&(m=!0,p=.25,t=!0);for(var g=Math.floor(Math.log(p)/Math.log(2)),v=0,y=Math.pow(2,g),k=y/2;y1,this.stemdir,r,g,this.voiceScale);s=_.noteHead,o=_.roomTaken,l=_.roomTakenRight}else{var M=this.addNoteToAbcElement(E,e,v,this.stemdir,this.style,m,g,t,a);void 0!==M.min&&(this.minY=Math.min(M.min,this.minY)),s=M.noteHead,o=M.roomTaken,l=M.roomTakenRight,d=M.additionalLedgers,n=M.dir,h=M.symbolWidth}if(void 0!==e.lyric&&this.addLyric(E,e),void 0!==e.gracenotes&&(o+=this.addGraceNotes(e,a,E,s,this.stemHeight*this.voiceScale,this.isBagpipes,o)),e.decoration){var B=t?Math.min(-3,E.bottom-6):E.bottom;this.decoration.createDecoration(a,e.decoration,E.top,s?s.w:0,E,o,n,B,e.positioning,this.hasVocals,this.accentAbove)}if(e.barNumber&&E.addFixed(new f(e.barNumber,-10,0,0,{type:"barNumber"})),A(E,e.minpitch,e.maxpitch,e.rest,h,d,n,-2,1),void 0!==e.chord){var L=x(this.getTextSize,E,e,o,l,h,this.jazzchords,this.germanAlphabet);o=L.roomTaken,l=L.roomTakenRight}return e.startTriplet&&(this.triplet=new b(e.startTriplet,s,{flatBeams:this.flatBeams})),e.endTriplet&&this.triplet&&this.triplet.setCloseAnchor(s),!this.triplet||e.startTriplet||e.endTriplet||e.rest&&"spacer"===e.rest.type||this.triplet.middleNote(s),E},N.prototype.addSlursAndTies=function(e,t,r,i,a,n){if(t.endTie&&this.ties.length>0){for(var s=!1,o=0;o10&&"treble"===t.abcelem.type?13:11;t.addFixed(new f(e,i,r.width,a+r.height/p.STEP,{type:"barNumber",dim:this.getTextSize.attr("measurefont","bar-number")}))},N.prototype.createBarLine=function(e,t,r){var a=new i(t,0,10,"bar",this.tuneNumber),n=null,s=0;t.barNumber&&this.addMeasureNumber(t.barNumber,a);var o="bar_right_repeat"===t.type||"bar_dbl_repeat"===t.type,c="bar_left_repeat"!==t.type&&"bar_thick_thin"!==t.type&&"bar_invisible"!==t.type,l="bar_right_repeat"===t.type||"bar_dbl_repeat"===t.type||"bar_left_repeat"===t.type||"bar_thin_thick"===t.type||"bar_thick_thin"===t.type,h="bar_left_repeat"===t.type||"bar_thick_thin"===t.type||"bar_thin_thin"===t.type||"bar_dbl_repeat"===t.type,u="bar_left_repeat"===t.type||"bar_dbl_repeat"===t.type;if(o||u){for(var p in this.slurs)this.slurs.hasOwnProperty(p)&&this.slurs[p].setEndX(a);this.startlimitelem=a}if(o&&(a.addRight(new f("dots.dot",s,1,7)),a.addRight(new f("dots.dot",s,1,5)),s+=6),c&&(n=new f(null,s,1,2,{type:"bar",pitch2:10,linewidth:.6}),a.addRight(n)),"bar_invisible"===t.type&&(n=new f(null,s,1,2,{type:"none",pitch2:10,linewidth:.6}),a.addRight(n)),t.decoration&&this.decoration.createDecoration(e,t.decoration,12,l?3:1,a,0,"down",2,t.positioning,this.hasVocals,this.accentAbove),l&&(n=new f(null,s+=4,4,2,{type:"bar",pitch2:10,linewidth:4}),a.addRight(n),s+=5),this.partstartelem&&t.endEnding&&(this.partstartelem.anchor2=n,this.partstartelem=null),h&&(n=new f(null,s+=3,1,2,{type:"bar",pitch2:10,linewidth:.6}),a.addRight(n)),u&&(s+=3,a.addRight(new f("dots.dot",s,1,7)),a.addRight(new f("dots.dot",s,1,5))),t.startEnding&&r){var m=this.getTextSize.calc(t.startEnding,"repeatfont","").width;a.minspacing+=m+10,this.partstartelem=new d(t.startEnding,n,null),e.addOther(this.partstartelem)}return a.extraw-=5,void 0!==t.chord&&x(this.getTextSize,a,t,0,0,0,!1,this.germanAlphabet),a},e.exports=N},2652:function(e,t,r){var i=r(6658),a=r(4331),n=r(5810);function s(e,t,r,s,o,c,l,h,d,u,f,p,m,g,v){for(var b=e.split("\n"),y=b.length-1;y>=0;y--){var x,k=b[y],w=0;s||(k=n(k,g,v));var T=h.calc(k,o,c),C=T.width,S=T.height/a.STEP;switch(t){case"left":w=-(f+=C+7),x=u.averagepitch,d.addExtra(new i(k,w,C+4,x,{type:"text",height:S,dim:l,position:"left"}));break;case"right":w=p+=4,x=u.averagepitch,d.addRight(new i(k,w,C+4,x,{type:"text",height:S,dim:l,position:"right"}));break;case"below":d.addRight(new i(k,0,0,void 0,{type:"text",position:"below",height:S,dim:l,realWidth:C}));break;case"above":d.addRight(new i(k,0,0,void 0,{type:"text",position:"above",height:S,dim:l,realWidth:C}));break;default:if(r){var N=r.y+3*a.STEP;d.addRight(new i(k,w+r.x,0,u.minpitch+N/a.STEP,{position:"relative",type:"text",height:S,dim:l}))}else{var E="above";u.positioning&&u.positioning.chordPosition&&(E=u.positioning.chordPosition),"hidden"!==E&&d.addCentered(new i(k,m/2,C,void 0,{type:"chord",position:E,height:S,dim:l,realWidth:C}))}}}return{roomTaken:f,roomTakenRight:p}}e.exports=function(e,t,r,i,a,n,o,c){for(var l=0;l0?o.top+3:o.bottom-1,f=s>0?o.top+3:o.bottom-3,p=f-2;"bass-8"===e.type&&(u=3,d=0),o.addRight(new n("8",5+d,a.getSymbolWidth("8")*h,u,{scalex:h,scaley:h,top:f,bottom:p}))}}return o}},3923:function(e,t,r){var i=r(1409),a=r(6020),n=r(6658);e.exports=function(e,t){if(e.el_type="keySignature",!e.accidentals||0===e.accidentals.length)return null;var r=new i(e,0,10,"staff-extra key-signature",t);r.isKeySig=!0;var s=0;return e.accidentals.forEach((function(e){var t,i=0;switch(e.acc){case"sharp":t="accidentals.sharp",i=-3;break;case"natural":t="accidentals.nat";break;case"flat":t="accidentals.flat",i=-1.2;break;case"quartersharp":t="accidentals.halfsharp",i=-2.5;break;case"quarterflat":t="accidentals.halfflat",i=-1.2;break;default:t="accidentals.flat"}r.addRight(new n(t,s,a.getSymbolWidth(t),e.verticalPos,{thickness:a.symbolHeightInPitches(t),top:e.verticalPos+a.symbolHeightInPitches(t)+i,bottom:e.verticalPos+i})),s+=a.getSymbolWidth(t)+2}),this),r}},2143:function(e,t,r){var i=r(6020),a=r(6658);e.exports=function(e,t,r,n){n||(n={});var s,o=void 0!==n.dir?n.dir:null,c=void 0!==n.headx?n.headx:0,l=void 0!==n.extrax?n.extrax:0,h=void 0!==n.flag?n.flag:null,d=void 0!==n.dot?n.dot:0,u=void 0!==n.dotshiftx?n.dotshiftx:0,f=void 0!==n.scale?n.scale:1,p=void 0!==n.accidentalSlot?n.accidentalSlot:[],m=void 0!==n.shouldExtendStem&&n.shouldExtendStem,g=void 0===n.printAccidentals||n.printAccidentals,v=r.verticalPos,b=0,y=0,x=0;if(void 0===t)e.addFixed(new a("pitch is undefined",0,0,0,{type:"debug"}));else if(""===t)s=new a(null,0,0,v);else{var k=c;if(r.printer_shift){var w="same"===r.printer_shift?1:0;k="down"===o?-i.getSymbolWidth(t)*f+w:i.getSymbolWidth(t)*f-w}var T={scalex:f,scaley:f,thickness:i.symbolHeightInPitches(t)*f,name:r.name};if((s=new a(t,k,i.getSymbolWidth(t)*f,v,T)).stemDir=o,h){var C=v+("down"===o?-7:7)*f;m&&("down"===o&&C>6&&(C=6),"up"===o&&C<6&&(C=6));var S="down"===o?c:c+s.w-.6;e.addRight(new a(h,S,i.getSymbolWidth(h)*f,C,{scalex:f,scaley:f}))}for(y=s.w+u-2+5*d;d>0;d--){var N=1-Math.abs(v)%2;e.addRight(new a("dots.dot",s.w+u-2+5*d,i.getSymbolWidth("dots.dot"),v+N))}}if(s&&(s.highestVert=r.highestVert),g&&r.accidental){var E;switch(r.accidental){case"quartersharp":E="accidentals.halfsharp";break;case"dblsharp":E="accidentals.dblsharp";break;case"sharp":E="accidentals.sharp";break;case"quarterflat":E="accidentals.halfflat";break;case"flat":E="accidentals.flat";break;case"dblflat":E="accidentals.dblflat";break;case"natural":E="accidentals.nat"}for(var _=!1,M=l,A=0;A=6){p[A][0]=v,M=p[A][1],_=!0;break}!1===_&&(M-=i.getSymbolWidth(E)*f+2,p.push([v,M]),b=i.getSymbolWidth(E)*f+2);var B=i.symbolHeightInPitches(E);e.addExtra(new a(E,M,i.getSymbolWidth(E),v,{scalex:f,scaley:f,top:v+B/2,bottom:v-B/2})),x=i.getSymbolWidth(E)/2}return{notehead:s,accidentalshiftx:b,dotshiftx:y,extraLeft:x}}},2525:function(e,t,r){var i=r(1409),a=r(6020),n=r(6658);e.exports=function(e,t){e.el_type="timeSignature";var r=new i(e,0,10,"staff-extra time-signature",t);if("specified"===e.type)for(var s=0,o=0;o",i)),o&&e.addOther(new a(o.start,o.stop,"<",i)),c&&e.addOther(new n(c.start,c.stop))},l.prototype.createDecoration=function(e,t,r,a,n,l,d,u,f,p,m){f||(f={ornamentPosition:"above",volumePosition:p?"above":"below",dynamicPosition:p?"above":"below"}),function(e,t,r,a){for(var n=0;n9&&u++;var m=i/2;"center"!==s.getSymbolAlign(p)&&(m-=s.getSymbolWidth(p)/2),a.addFixedX(new o(p,m,s.getSymbolWidth(p),u))}if("slide"===t[f]&&a.heads[0]){var g=a.heads[0].pitch,v=new o("",-n-15,0,(g-=2)-1),b=new o("",-n-5,0,g+1);a.addFixedX(v),a.addFixedX(b),e.addOther(new c({anchor1:v,anchor2:b,fixedY:!0}))}}return void 0===u&&(u=r),{above:u,below:a.bottom}}(e,t,r,a,n,l,d,u,m);g.above=Math.max(g.above,this.minTop),g.below=Math.min(g.below,u),function(e,t,r,i,a,n,c,l){function h(e,t){"above"===e?i.above+=t:i.below-=t}function d(e){var t;return"above"===e?(t=i.above)c&&(t=c),t}function u(e,i,a){var n=d(i);r.addFixedX(new o(e,t/2,0,n+2,{type:"decoration",klass:"ornament",thickness:3,anchor:a})),h(i,5)}function f(e,i){var a=t/2;"center"!==s.getSymbolAlign(e)&&(a-=s.getSymbolWidth(e)/2);var n=s.symbolHeightInPitches(e)+1,c=d(i);c="above"===i?c+n/2:c-n/2,r.addFixedX(new o(e,a,s.getSymbolWidth(e),c,{klass:"ornament",thickness:s.symbolHeightInPitches(e),position:i})),h(i,n)}for(var p={"+":"scripts.stopped",open:"scripts.open",snap:"scripts.snap",wedge:"scripts.wedge",thumb:"scripts.thumb",shortphrase:"scripts.shortphrase",mediumphrase:"scripts.mediumphrase",longphrase:"scripts.longphrase",trill:"scripts.trill",roll:"scripts.roll",irishroll:"scripts.roll",marcato:"scripts.umarcato",dmarcato:"scripts.dmarcato",umarcato:"scripts.umarcato",turn:"scripts.turn",uppermordent:"scripts.prall",pralltriller:"scripts.prall",mordent:"scripts.mordent",lowermordent:"scripts.mordent",downbow:"scripts.downbow",upbow:"scripts.upbow",fermata:"scripts.ufermata",invertedfermata:"scripts.dfermata",breath:",",coda:"scripts.coda",segno:"scripts.segno"},m=0;mthis.w&&(this.w=e.dx+e.w),this.right[this.right.length]=e,this._addChild(e)},n.prototype.addFixed=function(e){this._addChild(e)},n.prototype.addFixedX=function(e){this._addChild(e)},n.prototype.addCentered=function(e){var t=e.w/2;-tthis.w&&(this.w=e.dx+t),this.right[this.right.length]=e,this._addChild(e)},n.prototype.setLimit=function(e,t){t[e]&&(this.specialY[e]?this.specialY[e]=Math.max(this.specialY[e],t[e]):this.specialY[e]=t[e])},n.prototype._addChild=function(e){e.parent=this,this.children[this.children.length]=e,this.pushTop(e.top),this.pushBottom(e.bottom),this.setLimit("tempoHeightAbove",e),this.setLimit("partHeightAbove",e),this.setLimit("volumeHeightAbove",e),this.setLimit("dynamicHeightAbove",e),this.setLimit("endingHeightAbove",e),this.setLimit("chordHeightAbove",e),this.setLimit("lyricHeightAbove",e),this.setLimit("lyricHeightBelow",e),this.setLimit("chordHeightBelow",e),this.setLimit("volumeHeightBelow",e),this.setLimit("dynamicHeightBelow",e)},n.prototype.pushTop=function(e){void 0!==e&&(void 0===this.top?this.top=e:this.top=Math.max(e,this.top))},n.prototype.pushBottom=function(e){void 0!==e&&(void 0===this.bottom?this.bottom=e:this.bottom=Math.min(e,this.bottom))},n.prototype.setX=function(e){this.x=e;for(var t=0;tthis.max)&&(this.max=e.abcelem.maxpitch))},t.prototype.addBeam=function(e){this.beams.push(e)},t.prototype.setStemDirection=function(){this.average=r(this.total,this.count),this.forceup?this.stemsUp=!0:this.forcedown?this.stemsUp=!1:this.stemsUp=this.average<6,delete this.count,this.total=0},t.prototype.calcDir=function(){this.average=r(this.total,this.elems.length),this.forceup?this.stemsUp=!0:this.forcedown?this.stemsUp=!1:this.stemsUp=this.average<6;for(var e=this.stemsUp?"up":"down",t=0;t0&&this.unalignedWords(e.unalignedWords,i,a,n,s),this.extraText(e,i,a,n,s),e.footer&&r&&this.footer(e.footer,t,i,s)}function s(e,t,r,i,n,s,o){r&&(t&&(r="string"==typeof r?t+r:[{text:t}].concat(r)),a(e,r,"historyfont",n=s?"abcjs-extra-text "+n:"","description",i,{absElemType:"extraText",anchor:"start"},o))}function o(e,t,r,n,s,o,c,l,h,d,u,f){if(r){l=u?"abcjs-extra-text "+l:"";var p=f.calc("A",s,l);if("string"==typeof r)t&&(r=t+"\n"+r),i(e,{marginLeft:n,text:r,font:s,absElemType:"extraText",name:h,"dominant-baseline":"middle",klass:l},f);else{e.push({startGroup:c,klass:l,name:h}),e.push({move:d.info}),t&&(i(e,{marginLeft:n,text:t,font:s,absElemType:"extraText",name:h,"dominant-baseline":"middle"},f),e.push({move:3*p.height/4}));for(var m=0;m0&&this.startVoice.staff.voices[0]===e)},e.exports=t},6891:function(e){e.exports=function(e,t,r,i){this.type="CrescendoElem",this.anchor1=e,this.anchor2=t,this.dir=r,"above"===i?this.dynamicHeightAbove=6:this.dynamicHeightBelow=6,this.pitch=void 0}},3185:function(e){e.exports=function(e,t,r){this.type="DynamicDecoration",this.anchor=e,this.dec=t,"below"===r?this.volumeHeightBelow=6:this.volumeHeightAbove=6,this.pitch=void 0}},8256:function(e){e.exports=function(e,t,r){this.type="EndingElem",this.text=e,this.anchor1=t,this.anchor2=r,this.endingHeightAbove=5,this.pitch=void 0}},3736:function(e){e.exports=function(e,t,r,i,a,n){var s,o=e.text;this.rows=[],t&&this.rows.push({move:t});var c=r.calc("textfont","defined-text");if(""===o)this.rows.push({move:2*c.attr["font-size"]});else if("string"==typeof o)this.rows.push({move:c.attr["font-size"]/2}),this.rows.push({left:i,text:o,font:"textfont",klass:"defined-text",anchor:"start",startChar:e.startChar,endChar:e.endChar,absElemType:"freeText",name:"free-text"}),s=n.calc(o,"textfont","defined-text"),this.rows.push({move:s.height});else if(o){for(var l=0,h=i,d="textfont",u=0;uthis.top&&(this.top=this.pitch2),this.bottom=i,void 0!==this.pitch2&&this.pitch20?this.top+=a.stemHeight:this.bottom+=a.stemHeight),a.dim&&(this.dim=a.dim),a.position&&(this.position=a.position),this.height=a.height?a.height:4,a.top&&(this.top=a.top),a.bottom&&(this.bottom=a.bottom),a.name?this.name=a.name:this.c?this.name=this.c:this.name=this.type,a.realWidth?this.realWidth=a.realWidth:this.realWidth=this.w,this.centerVertically=!1,this.type){case"debug":this.chordHeightAbove=this.height;break;case"lyric":a.position&&"below"===a.position?this.lyricHeightBelow=this.height:this.lyricHeightAbove=this.height;break;case"chord":a.position&&"below"===a.position?this.chordHeightBelow=this.height:this.chordHeightAbove=this.height;break;case"text":void 0===this.pitch?a.position&&"below"===a.position?this.chordHeightBelow=this.height:this.chordHeightAbove=this.height:this.centerVertically=!0;break;case"part":this.partHeightAbove=this.height}};t.prototype.getChordDim=function(){if("debug"===this.type)return null;if(!this.chordHeightAbove&&!this.chordHeightBelow)return null;var e="chord"===this.type?this.realWidth/2:0,t=this.x-e-0;return{left:t,right:t+this.realWidth+0}},t.prototype.invertLane=function(e){void 0===this.lane&&(this.lane=0),this.lane=e-this.lane-1},t.prototype.putChordInLane=function(e){this.lane=e,this.chordHeightAbove?this.chordHeightAbove=1.25*this.height*this.lane:this.chordHeightBelow=1.25*this.height*this.lane},t.prototype.getLane=function(){return void 0===this.lane?0:this.lane},t.prototype.setX=function(e){this.x=e+this.dx},e.exports=t},6994:function(e,t,r){var i=r(1716);e.exports=function(e,t,r,a,n,s,o,c){var l=c.calc("i",r,a);if(""===t)e.push({move:l.height});else{if("string"==typeof t)return void i(e,{marginLeft:s,text:t,font:r,klass:a,marginTop:o.marginTop,anchor:o.anchor,absElemType:o.absElemType,info:o.info,name:n},c);o.marginTop&&e.push({move:o.marginTop});var h=0,d={left:s,anchor:o.anchor,phrases:[]};a&&(d.klass=a),e.push(d);for(var u=0;u0)this.above=!1;else{var e;e=this.anchor1?this.anchor1.pitch:this.anchor2?this.anchor2.pitch:14,this.anchor1&&"down"===this.anchor1.stemDir&&this.anchor2&&"down"===this.anchor2.stemDir?this.above=!0:this.anchor1&&"up"===this.anchor1.stemDir&&this.anchor2&&"up"===this.anchor2.stemDir?this.above=!1:this.anchor1&&this.anchor2?this.above=e>=6:this.anchor1?this.above="down"===this.anchor1.stemDir:this.anchor2?this.above="down"===this.anchor2.stemDir:this.above=e>=6}},t.prototype.calcSlurDirection=function(){if(this.isGrace)this.above=!1;else if(0===this.voiceNumber)this.above=!0;else if(this.voiceNumber>0)this.above=!1;else{var e=!1;this.anchor1&&"down"===this.anchor1.stemDir&&(e=!0),this.anchor2&&"down"===this.anchor2.stemDir&&(e=!0);for(var t=0;te&&(e=this.internalNotes[t].highestVert);e>this.startY&&e>this.endY&&(this.startY=this.endY=e-1)}},e.exports=t},1134:function(e,t,r){var i=r(1716),a=r(6994);e.exports=function(e,t,r,n,s,o,c,l,h,d){if(this.rows=[],e.header&&o){var u=d.calc("X","headerfont","abcjs-header abcjs-meta-top").height;i(this.rows,{marginLeft:c,text:e.header.left,font:"headerfont",klass:"header meta-top",marginTop:-u,info:t.header,name:"header"},d),i(this.rows,{marginLeft:c+s/2,text:e.header.center,font:"headerfont",klass:"header meta-top",marginTop:-u,anchor:"middle",info:t.header,name:"header"},d),i(this.rows,{marginLeft:c+s,text:e.header.right,font:"headerfont",klass:"header meta-top",marginTop:-u,anchor:"end",info:t.header,name:"header"},d)}o&&this.rows.push({move:l.top});var f=r.titleleft?"start":"middle",p=r.titleleft?c:c+s/2;if(e.title){var m=h?"abcjs-title":"";a(this.rows,e.title,"titlefont",m,"title",p,{marginTop:l.title,anchor:f,absElemType:"title",info:t.title},d)}if(n.length)for(var g=0;g0){var v=!(!e.composer&&!e.origin);m=h?"abcjs-rhythm":"",i(this.rows,{marginLeft:c,text:e.rhythm,font:"infofont",klass:m,absElemType:"rhythm",noMove:v,info:t.rhythm,name:"rhythm"},d)}e.composer&&e.composer,e.origin&&e.origin;var b=e.composer?e.composer:"";e.origin&&("string"==typeof b&&"string"==typeof e.origin?b+=" ("+e.origin+")":"string"==typeof b&&"string"!=typeof e.origin?((b=[{text:b}]).push({text:" ("}),(b=b.concat(e.origin)).push({text:")"})):(b.push({text:" ("}),(b=b.concat(e.origin)).push({text:")"}))),b&&(m=h?"abcjs-composer":"",a(this.rows,b,"composerfont",m,"composer",c+s,{anchor:"end",absElemType:"composer",info:t.composer,ingroup:!0},d))}e.author&&e.author.length>0&&(m=h?"abcjs-author":"",a(this.rows,e.author,"composerfont",m,"author",c+s,{anchor:"end",absElemType:"author",info:t.author},d)),e.partOrder&&e.partOrder.length>0&&(m=h?"abcjs-part-order":"",a(this.rows,e.partOrder,"partsfont",m,"part-order",c,{absElemType:"partOrder",info:t.partOrder,anchor:"start"},d))}},2096:function(e){var t=function(e,t,r){this.type="TripletElem",this.anchor1=t,this.number=e,this.durationClass=("d"+Math.round(1e3*t.parent.durationClass)/1e3).replace(/\./,"-"),this.middleElems=[],this.flatBeams=r.flatBeams};t.prototype.isClosed=function(){return!!this.anchor2},t.prototype.middleNote=function(e){this.middleElems.push(e)},t.prototype.setCloseAnchor=function(e){this.anchor2=e,this.anchor1.parent.beam&&"up"!==this.anchor1.stemDir||(this.endingHeightAbove=4)},e.exports=t},3197:function(e){var t=function(e,t){this.children=[],this.beams=[],this.otherchildren=[],this.w=0,this.duplicate=!1,this.voicenumber=e,this.voicetotal=t,this.bottom=7,this.top=7,this.specialY={tempoHeightAbove:0,partHeightAbove:0,volumeHeightAbove:0,dynamicHeightAbove:0,endingHeightAbove:0,chordHeightAbove:0,lyricHeightAbove:0,lyricHeightBelow:0,chordHeightBelow:0,volumeHeightBelow:0,dynamicHeightBelow:0}};t.prototype.addChild=function(e){if("bar"===e.type){for(var t=!0,r=0;t&&r0&&"TempoElement"===t.children[0].type;t.elemset=[],o.beginGroup(e.paper,e.controller);for(var d=0;d=0&&f.setAttribute("class","abcjs-notehead")}}var p=t.type;if(("note"===t.type||"rest"===t.type)&&(t.counters=e.controller.classes.getCurrent(),p=(p+=" d"+Math.round(1e3*t.durationClass)/1e3).replace(/\./g,"-"),t.abcelem.pitches))for(var m=0;m0?g.classList[0]+" ":"";g.setAttribute("class",v+t.overrideClasses)}if(h)t.startChar=t.abcelem.startChar,t.endChar=t.abcelem.endChar,c.add(t,g,!1,l);else{t.elemset.push(g);var b=!1;"note"!==t.type&&"tabNumber"!==t.type||(b=!0),c.add(t,g,b,l)}}else t.elemset.length>0&&c.add(t,t.elemset[0],"note"===t.type,l);if(t.klass&&s(t.elemset,"mark","","#00ff00"),t.hint&&s(t.elemset,"abcjs-hint","",null),t.abcelem.abselem=t,t.heads&&t.heads.length>0){t.notePositions=[];for(var y=0;y=1&&l(e,e.spacing.staffSeparation,v[v.length-1],y.staffGroup);var x=c(e,y.staffGroup,m,b);x.line=p+b,v.push(x),e.paper.closeGroup()}else y.nonMusic&&(t.shouldAddClasses&&(g.klass="abcjs-non-music"),e.paper.openGroup(g),n(e,y.nonMusic,m),e.paper.closeGroup())}return t.reset(),r.bottomText&&r.bottomText.rows&&r.bottomText.rows.length>0&&(t.shouldAddClasses&&(g.klass="abcjs-meta-bottom"),e.paper.openGroup(g),e.moveY(24),n(e,r.bottomText,m),e.paper.closeGroup()),a(e,s,d,h),{staffgroups:v,selectables:m.getElements()}}},9879:function(e,t,r){var i=r(4777);e.exports=function(e,t,r){void 0===t.pitch&&window.console.error("Dynamic Element y-coordinate not set.");var a=i(e,t.anchor.x,t.pitch,t.dec,{scalex:1,scaley:1,klass:e.controller.classes.generate("decoration dynamics"),fill:e.foregroundColor,stroke:"none",name:"dynamics"});return r.wrapSvgEl({el_type:"dynamicDecoration",startChar:-1,endChar:-1,decoration:t.dec},a),[a]}},5947:function(e,t,r){var i=r(6764),a=r(5759),n=r(6454),s=r(7199);e.exports=function(e,t,r,o,c){void 0===t.pitch&&window.console.error("Ending Element y-coordinate not set.");var l=s(e.calcY(t.pitch)),h="";t.anchor1&&(r=s(t.anchor1.x+t.anchor1.w),h+=i("M %f %f L %f %f ",r,l,r,s(l+20))),t.anchor2&&(o=s(t.anchor2.x),h+=i("M %f %f L %f %f ",o,l,o,s(l+20))),h+=i("M %f %f L %f %f ",r,l,o,l),e.paper.openGroup({klass:e.controller.classes.generate("ending"),"data-name":"ending"}),n(e,{path:h,stroke:e.foregroundColor,fill:e.foregroundColor,"data-name":"line"}),t.anchor1&&a(e,{x:s(r+5),y:s(e.calcY(t.pitch-.5)),text:t.text,type:"repeatfont",klass:"ending",anchor:"start",noClass:!0,name:t.text});var d=e.paper.closeGroup();return c.wrapSvgEl({el_type:"ending",startChar:-1,endChar:-1},d),[d]}},9045:function(e,t,r){var i=r(6764),a=r(6454),n=r(7199);function s(e,t,r){return n(e+r*t)}var o=[[3.5,-4.8]],c=[[1.5,-1],[.3,-.3],[-3.5,3.8]],l=[[-1.5,2]],h=[[3,4],[3,-4]],d=[[-3,4],[-3,-4]];function u(e,t){for(var r="",i=0;i1&&s.indexOf(".")<0){var p=n.isInGroup()?"":o.klass;e.paper.openGroup({"data-name":o.name,klass:p});for(var m=0,g=0;g0?t.linewidth+e.lineThickness:t.linewidth-e.lineThickness;t.graphelem=a(e,t.x,d,o,e.calcY(t.pitch2),"abcjs-stem","stem");break;case"ledger":t.graphelem=n(e,t.x,t.x+t.w,t.pitch,"abcjs-ledger","ledger",.35+e.lineThickness)}return 1!==t.scalex&&t.graphelem&&function(e,t,r,i,a,n){e.setAttributeOnElement(t,{style:"transform:scale("+r+","+i+");transform-origin:"+a+"px "+n+"px;"})}(e.paper,t.graphelem,t.scalex,t.scaley,t.x,o),t.graphelem}},7199:function(e){e.exports=function(e){return parseFloat(e.toFixed(2))}},3524:function(e,t,r){var i=r(5741),a=r(5829);function n(e,t,r){this.elements=[],this.paper=e,this.tuneNumber=r,this.selectTypes=t}n.prototype.getElements=function(){return this.elements},n.prototype.add=function(e,t,r,i){if(this.canSelect(e)){var a;a=void 0===this.selectTypes?{selectable:!1,"data-index":this.elements.length}:{selectable:!0,tabindex:0,"data-index":this.elements.length},this.paper.setAttributeOnElement(t,a);var n={absEl:e,svgEl:t,isDraggable:r};void 0!==i&&(n.staffPos=i),this.elements.push(n)}},n.prototype.canSelect=function(e){return!(!1===this.selectTypes||!e||!e.abcelem||!0!==this.selectTypes&&!(void 0===this.selectTypes?"note"===e.abcelem.el_type||"tabNumber"===e.abcelem.el_type:this.selectTypes.indexOf(e.abcelem.el_type)>=0))},n.prototype.wrapSvgEl=function(e,t){var r={tuneNumber:this.tuneNumber,abcelem:e,elemset:[t],highlight:i,unhighlight:a};this.add(r,t,!1)},e.exports=n},4169:function(e){e.exports=function(e,t){var r=Math.round(e.y),i=(e.controller.width-t)/2,a=i+t,n="M "+i+" "+r+" L "+a+" "+r+" L "+a+" "+(r+1)+" L "+i+" "+(r+1)+" L "+i+" "+r+" z";e.paper.pathToBack({path:n,stroke:"rgba(0,0,0,0)",fill:"rgba(0,0,0,255)",class:e.controller.classes.generate("defined-text")})}},7611:function(e){e.exports=function(e,t,r,i){var a=(t+e.padding.left+e.padding.right)*r,n=(e.y+e.padding.bottom)*r;if(e.isPrint&&(n=Math.max(n,1056)),""!==e.ariaLabel){var s="Sheet Music";e.abctune&&e.abctune.metaText&&e.abctune.metaText.title&&(s+=' for "'+e.abctune.metaText.title+'"'),e.paper.setTitle(s);var o=e.ariaLabel?e.ariaLabel:s;e.paper.setAttribute("aria-label",o)}e.paper.insertStyles(".abcjs-dragging-in-progress text, .abcjs-dragging-in-progress tspan {"+["-webkit-touch-callout: none;","-webkit-user-select: none;","-khtml-user-select: none;","-moz-user-select: none;","-ms-user-select: none;","user-select: none;"].join(" ")+"}");var c={overflow:"hidden"};"resize"===i?e.paper.setResponsiveWidth(a,n):(c.width="",c.height=n+"px",r<1?(c.width=a+"px",e.paper.setSize(a/r,n/r)):e.paper.setSize(a,n)),e.paper.setScale(r),e.paper.setParentStyles(c)}},6764:function(e){function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t(e)}e.exports=function(){for(var e,r,i,a,n,s=0,o=arguments[s++],c=[];o;){if(r=/^[^\x25]+/.exec(o))c.push(r[0]);else if(r=/^\x25{2}/.exec(o))c.push("%");else{if(!(r=/^\x25(?:(\d+)\$)?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(o)))throw"Huh ?!";if(null==(e=arguments[r[1]||s++])||null==e)throw"Too few arguments.";if(/[^s]/.test(r[7])&&"number"!=typeof e)throw"Expecting number but found "+t(e);switch(r[7]){case"b":e=e.toString(2);break;case"c":e=String.fromCharCode(e);break;case"d":e=parseInt(e);break;case"e":e=r[6]?e.toExponential(r[6]):e.toExponential();break;case"f":e=r[6]?parseFloat(e).toFixed(r[6]):parseFloat(e);break;case"o":e=e.toString(8);break;case"s":e=(e=String(e))&&r[6]?e.substring(0,r[6]):e;break;case"u":e=Math.abs(e);break;case"x":e=e.toString(16);break;case"X":e=e.toString(16).toUpperCase()}e=/[def]/.test(r[7])&&r[2]&&e>0?"+"+e:e,a=r[3]?"0"==r[3]?"0":r[3][1]:" ",n=r[5]-String(e).length,i=r[5]?str_repeat(a,n):"",c.push(r[4]?e+i:i+e)}o=o.substring(r[0].length)}return c.join("")}},5537:function(e,t,r){var i=r(4331),a=r(129),n=r(3145),s=r(7641),o=r(1547),c=r(3624),l=r(5668);function h(e,t,r,n,s){if(r)for(var o=0;o=0&&v.voices&&d(e,t.voices,v.voices),e.showDebug.indexOf("grid")>=0&&(e.paper.dottedLine({x1:e.padding.left,x2:e.padding.left+e.controller.width,y1:m,y2:m,stroke:"#0000ff"}),o(e,{x:e.padding.left,y:e.calcY(v.originalTop),width:e.controller.width,height:e.calcY(v.originalBottom)-e.calcY(v.originalTop),fill:e.foregroundColor,stroke:e.foregroundColor,"fill-opacity":.1,"stroke-opacity":.1}),u=0,E(v,"chordHeightAbove"),E(v,"chordHeightBelow"),E(v,"dynamicHeightAbove"),E(v,"dynamicHeightBelow"),E(v,"endingHeightAbove"),E(v,"lyricHeightAbove"),E(v,"lyricHeightBelow"),E(v,"partHeightAbove"),E(v,"tempoHeightAbove"),E(v,"volumeHeightAbove"),E(v,"volumeHeightBelow"))),e.moveY(i.STEP,-v.bottom),e.showDebug&&e.showDebug.indexOf("grid")>=0&&e.paper.dottedLine({x1:e.padding.left,x2:e.padding.left+e.controller.width,y1:e.y,y2:e.y,stroke:"#0000aa"})}for(var b=2,y=0,x=0;x6&&(u=0)}}N>1&&(f=t.staffs[0].topLine,p=t.staffs[N-1].bottomLine,c(e,t.startx,.6,f,p,null)),e.y=m}},7865:function(e,t,r){var i=r(6637);e.exports=function(e,t,r,a,n,s,o){var c=e.calcY(a);return i(e,t,r,c,n,s,o)}},7641:function(e,t,r){var i=r(7865);e.exports=function(e,t,r,a,n,s){var o="abcjs-top-line",c=2;n&&(c=n),e.paper.openGroup({prepend:!0,klass:e.controller.classes.generate("abcjs-staff")});var l=0,h=0;if(1===a)i(e,t,r,6,o,null,s+e.lineThickness),l=e.calcY(10),h=e.calcY(2);else for(var d=a-1;d>=0;d--){var u=(d+1)*c;h=e.calcY(u),0===l&&(l=h),i(e,t,r,u,o,null,s+e.lineThickness),o=void 0}return e.paper.closeGroup(),[l,h]}},3987:function(e,t,r){var i=r(2435),a=r(5759);e.exports=function(e,t){var r=t.x;void 0===t.pitch&&window.console.error("Tempo Element y-coordinate not set."),t.tempo.el_type="tempo";var n,s=e.calcY(t.pitch)+2;if(t.tempo.preString){n=a(e,{x:r,y:s,text:t.tempo.preString,type:"tempofont",klass:"abcjs-tempo",anchor:"start",noClass:!0,name:"pre"},!0);var o=e.controller.getTextSize.calc(t.tempo.preString,"tempofont","tempo",n).width;r+=o+o/t.tempo.preString.length}if(t.note){t.note.setX(r);for(var c=0;c.1||(this.scale=void 0),t.staffwidth?(this.staffwidthScreen=t.staffwidth,this.staffwidthPrint=t.staffwidth):(this.staffwidthScreen=740,this.staffwidthPrint=680),this.listeners=[],t.clickListener&&this.addSelectListener(t.clickListener),this.renderer=new n(e),this.renderer.setPaddingOverride(t),t.showDebug&&(this.renderer.showDebug=t.showDebug),t.jazzchords&&(this.jazzchords=t.jazzchords),t.accentAbove&&(this.accentAbove=t.accentAbove),t.germanAlphabet&&(this.germanAlphabet=t.germanAlphabet),t.lineThickness&&(this.lineThickness=t.lineThickness),this.renderer.controller=this,this.renderer.foregroundColor=t.foregroundColor?t.foregroundColor:"currentColor",void 0!==t.ariaLabel&&(this.renderer.ariaLabel=t.ariaLabel),this.renderer.minPadding=t.minPadding?t.minPadding:0,this.reset()};function x(e){for(var t=document.createElementNS("http://www.w3.org/2000/svg","svg"),r=0;r0)for(var o=s.staffGroup.voices[0],c=!1,l=0,h=0;hthis.width+1&&(e.topText=new l(e.metaText,e.metaTextInfo,e.formatting,e.lines,n,this.renderer.isPrint,this.renderer.padding.left,this.renderer.spacing,this.classes.shouldAddClasses,this.getTextSize),e.lines&&e.lines.length>0))for(var s=e.lines.length,o=0;o0)for(var h=c.nonMusic.rows.length,f=0;f0&&c.text[0].center)&&(p.left=n/2+this.renderer.padding.left)}}e.tablatures&&v.layoutTablatures(this.renderer,e);var m=g(this.renderer,this.classes,e,this.width,n,this.responsive,a,this.selectTypes,t,r);if(this.staffgroups=m.staffgroups,this.selectables=m.selectables,this.oneSvgPerLine){var b=this.renderer.paper.svg.parentNode;this.svgs=function(e,t,r,i,a){r||(r="Untitled");var n=t.querySelector("svg");"resize"===i&&(t.style.paddingBottom="");for(var s=n.querySelector("style"),o="resize"===i?n.viewBox.baseVal.width:n.getAttribute("width"),c=t.querySelectorAll("svg > g"),l=0,h=[],d=0;d0&&t.push(e),"abcjs-tab-number"===e)return t.join(" ");if("text instrument-name"===e)return"abcjs-text abcjs-instrument-name";if(null!==this.lineNumber&&t.push("l"+this.lineNumber),null!==this.measureNumber&&t.push("m"+this.measureNumber),null!==this.measureNumber&&t.push("mm"+this.measureTotal()),null!==this.voiceNumber&&t.push("v"+this.voiceNumber),e&&(e.indexOf("note")>=0||e.indexOf("rest")>=0||e.indexOf("lyric")>=0)&&null!==this.noteNumber&&t.push("n"+this.noteNumber),t.length>0){t=(t=t.join(" ")).split(" ");for(var r=0;r0&&(t[r]="abcjs-"+t[r])}return t.join(" ")},e.exports=t},1328:function(e){var t=function(e,t){this.formatting=e,this.classes=t};t.prototype.updateFonts=function(e){e.gchordfont&&(this.formatting.gchordfont=e.gchordfont),e.tripletfont&&(this.formatting.tripletfont=e.tripletfont),e.annotationfont&&(this.formatting.annotationfont=e.annotationfont),e.vocalfont&&(this.formatting.vocalfont=e.vocalfont)},t.prototype.getFamily=function(e){return'"'===e[0]&&'"'===e[e.length-1]?e.substring(1,e.length-1):e},t.prototype.calc=function(e,t){var r;r="string"==typeof e?(r=this.formatting[e])?{face:r.face,size:Math.round(4*r.size/3),decoration:r.decoration,style:r.style,weight:r.weight,box:r.box}:{face:"Arial",size:Math.round(16),decoration:"underline",style:"normal",weight:"normal"}:{face:e.face,size:Math.round(4*e.size/3),decoration:e.decoration,style:e.style,weight:e.weight,box:e.box};var i=this.formatting.fontboxpadding?this.formatting.fontboxpadding:.1;return r.padding=r.size*i,{font:r,attr:{"font-size":r.size,"font-style":r.style,"font-family":this.getFamily(r.face),"font-weight":r.weight,"text-decoration":r.decoration,class:this.classes.generate(t)}}},e.exports=t},9799:function(e){var t=function(e,t){this.getFontAndAttr=e,this.svg=t};t.prototype.updateFonts=function(e){this.getFontAndAttr.updateFonts(e)},t.prototype.attr=function(e,t){return this.getFontAndAttr.calc(e,t)},t.prototype.getFamily=function(e){return'"'===e[0]&&'"'===e[e.length-1]?e.substring(1,e.length-1):e},t.prototype.calc=function(e,t,r,i){var a;a="string"==typeof t?this.attr(t,r):{font:{face:t.face,size:t.size,decoration:t.decoration,style:t.style,weight:t.weight},attr:{"font-size":t.size,"font-style":t.style,"font-family":this.getFamily(t.face),"font-weight":t.weight,"text-decoration":t.decoration,class:this.getFontAndAttr.classes.generate(r)}};var n=this.svg.getTextSize(e,a.attr,i);return a.font.box?{height:n.height+4*a.font.padding,width:n.width+4*a.font.padding}:n},t.prototype.baselineToCenter=function(e,t,r,i,a){return.5*this.calc(e,t,r).height+(a-i-2)*this.attr(t,r).font.size},e.exports=t},2187:function(e){e.exports=function(e,t,r,i){if(e)for(var a=0;a0&&(o.length>0&&" "!==o[o.length-1]&&(o+=" "),o+=t),n.setAttribute("class",o)}}},4331:function(e){var t={FONTEM:360,FONTSIZE:30};t.STEP=93*t.FONTSIZE/720,t.SPACE=10,t.TOPNOTE=15,t.STAVEHEIGHT=100,t.INDENT=50,e.exports=t},8123:function(e){function t(e,t,r,i){if(0===e.indexOf(t)){var a=e.replace(t,""),n=parseInt(a,10);""+n===a&&(r[i]=n)}}e.exports=function(e,r){var i=[];if(e.absEl.elemset){for(var a={},n=0;n=0&&r=0?(a=function(e,t,r){return e.x<=t.offsetX&&e.x+e.width>=t.offsetX&&e.y<=t.offsetY&&e.y+e.height>=t.offsetY||Math.abs(t.layerY/r-t.offsetY)<3?[t.offsetX,t.offsetY]:[t.layerX,t.layerY]}(e.selectables[n].svgEl.getBBox(),t,e.scale),r=a[0],i=a[1]):(a=function(e){var t,r,i=1,a=1,n=e.target.closest("svg"),s=0;return n&&n.viewBox&&n.viewBox.baseVal&&(0!==n.viewBox.baseVal.width&&(i=n.viewBox.baseVal.width/n.clientWidth),0!==n.viewBox.baseVal.height&&(a=n.viewBox.baseVal.height/n.clientHeight),s=n.viewBox.baseVal.y),e.target&&"svg"===e.target.tagName?(t=e.offsetX,r=e.offsetY):(t=e.layerX,r=e.layerY),[t*=i,(r*=a)+s]}(t),n=function(e,t,r){for(var i=9999999,a=-1,n=0;n0;n++){var s=e.selectables[n];if(e.getDim(s),s.dim.leftt&&s.dim.topr)a=n,i=0;else if(s.dim.topr){var o=Math.min(Math.abs(s.dim.left-t),Math.abs(s.dim.right-t));ot){var c=Math.min(Math.abs(s.dim.top-r),Math.abs(s.dim.bottom-r));cMath.abs(t-s.dim.right)?Math.abs(t-s.dim.right):Math.abs(t-s.dim.left),h=Math.abs(r-s.dim.top)>Math.abs(r-s.dim.bottom)?Math.abs(r-s.dim.bottom):Math.abs(r-s.dim.top),d=Math.sqrt(l*l+h*h);d=0&&i<=12?a:-1}(e,r=a[0],i=a[1])),{x:r,y:i,clickedOn:n}}function l(e){if(e&&e.target&&e.touches&&!(e.touches.length<1)){var t=e.target.getBoundingClientRect(),r=e.touches[0].pageX-t.left,i=e.touches[0].pageY-t.top;e.touches[0].offsetX=r,e.touches[0].offsetY=i,e.touches[0].layerX=e.touches[0].pageX,e.touches[0].layerY=e.touches[0].pageY}}function h(e){var t=e;"touchstart"===e.type&&(l(e),e.touches.length>0&&(t=e.touches[0]));var r=c(this,t);r.clickedOn>=0&&("touchstart"===e.type||0===e.button)&&this.selectables[r.clickedOn]&&(this.dragTarget=this.selectables[r.clickedOn],this.dragIndex=r.clickedOn,this.dragMechanism="mouse",this.dragMouseStart={x:r.x,y:r.y},this.dragging&&this.dragTarget.isDraggable&&(function(e,t){if(e){var r=v(e.svg);r[t]=!0,b(e.svg,r)}}(this.renderer.paper,"abcjs-dragging-in-progress"),this.dragTarget.absEl.highlight(void 0,this.dragColor)))}function d(e){var t=e;if("touchmove"===e.type&&(l(e),e.touches.length>0&&(t=e.touches[0])),this.lastTouchMove=e,this.dragTarget&&this.dragging&&this.dragTarget.isDraggable&&"mouse"===this.dragMechanism&&this.dragMouseStart){var r=c(this,t),a=Math.round((r.y-this.dragMouseStart.y)/i.STEP);a!==this.dragYStep&&(this.dragYStep=a,this.dragTarget.svgEl.setAttribute("transform","translate(0,"+a*i.STEP+")"))}}function u(e){var t=e;"touchend"===e.type&&this.lastTouchMove&&(l(this.lastTouchMove),this.lastTouchMove&&this.lastTouchMove.touches&&this.lastTouchMove.touches.length>0&&(t=this.lastTouchMove.touches[0])),this.dragTarget&&(m.bind(this)(),this.dragTarget.absEl&&this.dragTarget.absEl.highlight&&(this.selected=[this.dragTarget.absEl],this.dragTarget.absEl.highlight(void 0,this.selectionColor)),p.bind(this)(this.dragTarget,this.dragYStep,this.selectables.length,this.dragIndex,t),this.dragTarget.svgEl&&this.dragTarget.svgEl.focus&&(this.dragTarget.svgEl.focus(),this.dragTarget=null,this.dragIndex=-1),function(e,t){if(e){var r=v(e.svg);delete r[t],b(e.svg,r)}}(this.renderer.svg,"abcjs-dragging-in-progress"))}function f(e){e>=0&&eo&&en&&(a=n),a<-n&&(a=-n),a}(x,k,v,w),A=_+Math.floor(M/2),B=_+Math.floor(-M/2),S||(y&&_<6||!y&&_>6)&&(A=6,B=6),[A,B]),f=c(e.stemsUp,r,l);e.addBeam({startX:f[0],endX:f[1],startY:u[0],endY:u[1],dy:t});for(var p=function(e,t,r,i,a){for(var o=[],l=[],h=0;h0&&d.abcelem.beambr&&d.abcelem.beambr<=b+1){l[b].split||(l[b].split=[l[b].x]);var y=c(t,e[h-1],d);l[b].split[l[b].split.length-1]>=y[0]&&(y[0]+=d.w),l[b].split.push(y[0]),l[b].split.push(y[1])}}for(var x=l.length-1;x>=0;x--)if(h===e.length-1||s(e[h+1].abcelem.duration)>-x-4){var k=f,w=p+m*(x+1);l[x].single&&(k=0===h?f+5:f-5,w=n(r.startX,r.startY,r.endX,r.endY,k)+m*(x+1));var T={startX:l[x].x,endX:k,startY:l[x].y,endY:w,dy:a};if(void 0!==l[x].split){var C=l[x].split;T.endX<=C[C.length-1]&&(C[C.length-1]-=d.w),C.push(T.endX),T.split=l[x].split}o.push(T),l=l.slice(0,x)}}}return o}(e.elems,e.stemsUp,e.beams[0],e.isgrace,t),m=0;m0?((a=(r-(i-n*a))/n)*s>50&&(a=50/s),a):null}e.exports=function(e,t,r,n,s,l){var h,d,u=r;for(h=0;hMath.round(u)&&(u=f,s&&(h=-1)))}for(h=0;h=0&&(c.originalTop=c.top,c.originalBottom=c.bottom),n(c,l,"lyricHeightAbove"),n(c,l,"chordHeightAbove",c.specialY.chordLines.above),c.specialY.endingHeightAbove&&(c.specialY.chordHeightAbove?c.top+=2:c.top+=c.specialY.endingHeightAbove+a,l.endingHeightAbove=c.top),c.specialY.dynamicHeightAbove&&c.specialY.volumeHeightAbove?(c.top+=Math.max(c.specialY.dynamicHeightAbove,c.specialY.volumeHeightAbove)+a,l.dynamicHeightAbove=c.top,l.volumeHeightAbove=c.top):(n(c,l,"dynamicHeightAbove"),n(c,l,"volumeHeightAbove")),n(c,l,"partHeightAbove"),n(c,l,"tempoHeightAbove"),c.specialY.lyricHeightBelow&&(c.specialY.lyricHeightBelow+=e.spacing.vocal/i.STEP,l.lyricHeightBelow=c.bottom,c.bottom-=c.specialY.lyricHeightBelow+a),c.specialY.chordHeightBelow){l.chordHeightBelow=c.bottom;var h=c.specialY.chordHeightBelow;c.specialY.chordLines.below&&(h*=c.specialY.chordLines.below),c.bottom-=h+a}c.specialY.volumeHeightBelow&&c.specialY.dynamicHeightBelow?(l.volumeHeightBelow=c.bottom,l.dynamicHeightBelow=c.bottom,c.bottom-=Math.max(c.specialY.volumeHeightBelow,c.specialY.dynamicHeightBelow)+a):c.specialY.volumeHeightBelow?(l.volumeHeightBelow=c.bottom,c.bottom-=c.specialY.volumeHeightBelow+a):c.specialY.dynamicHeightBelow&&(l.dynamicHeightBelow=c.bottom,c.bottom-=c.specialY.dynamicHeightBelow+a),e.showDebug&&e.showDebug.indexOf("box")>=0&&(c.positionY=l);for(var d=0;d0&&(c.top+=f)}c.top+=e.spacing.staffTopMargin/i.STEP,r=2-c.bottom}}},735:function(e,t,r){var i=r(937);function a(e){for(var t=0;t0?0:5e-7)}e.exports=function(e,t,r,s,o){var c,l=0,h=1e3,d=o;s.startx=d;var u,f,p=0;for(r&&console.log("init layout",e),c=0;c1e-7?v.push(s.voices[c]):g.push(s.voices[c]);m=0;var b=0;for(c=0;cd&&(d=i.getNextX(g[c]),m=i.getSpacingUnits(g[c]),b=g[c].spacingduration);l+=m,h=Math.min(h,m),r&&console.log("currentduration: ",p,l,h);var y=void 0;for(c=0;c0){d=w;for(var C=0;Cd&&(d=i.getNextX(s.voices[c]),m=i.getSpacingUnits(s.voices[c]));return function(e){for(var t=0,r=0;r0){var a=i.children.length-1,n=i.children[a];if("bar"===n.abcelem.el_type){var s=n.children[0].x;s>t?t=s:n.children[0].x=t}}}}(s.voices),l+=m,s.setWidth(d),{spacingUnits:l,minSpace:h}}},3294:function(e,t,r){var i=r(3721);function a(e){return e.stemsUp}e.exports=function(e){if(e.anchor1&&e.anchor2){e.hasBeam=!!e.anchor1.parent.beam&&e.anchor1.parent.beam===e.anchor2.parent.beam;var t=e.anchor1.parent.beam;if(!e.hasBeam||t.elems[0]===e.anchor1.parent&&t.elems[t.elems.length-1]===e.anchor2.parent||(e.hasBeam=!1),e.hasBeam){var r=a(t)?e.anchor1.x+e.anchor1.w:e.anchor1.x;e.yTextPos=function(e,t,r){if(0===r.beams.length)return 0;r=r.beams[0];var a=e+(t-e)/2;return i(r.startX,r.startY,r.endX,r.endY,a)}(r,e.anchor2.x,t),e.yTextPos+=a(t)?3:-2,e.xTextPos=(o=r,c=e.anchor2.x,o+(c-o)/2),e.top=e.yTextPos+1,e.bottom=e.yTextPos-2,a(t)&&(e.endingHeightAbove=4)}else{e.startNote=Math.max(e.anchor1.parent.top,9)+4,e.endNote=Math.max(e.anchor2.parent.top,9)+4,"rest"===e.anchor1.parent.type&&"rest"!==e.anchor2.parent.type?e.startNote=e.endNote:"rest"===e.anchor2.parent.type&&"rest"!==e.anchor1.parent.type&&(e.endNote=e.startNote);for(var n=0,s=0;se.startNote||n>e.endNote)&&(e.startNote=n,e.endNote=n),e.flatBeams&&(e.startNote=Math.max(e.startNote,e.endNote),e.endNote=Math.max(e.startNote,e.endNote)),e.yTextPos=e.startNote+(e.endNote-e.startNote)/2,e.xTextPos=e.anchor1.x+(e.anchor2.x+e.anchor2.w-e.anchor1.x)/2,e.top=e.yTextPos+1}}var o,c;delete e.middleElems,delete e.flatBeams}},937:function(e){var t=function(){};t.beginLayout=function(e,t){t.i=0,t.durationindex=0,t.startx=e,t.minx=e,t.nextx=e,t.spacingduration=0},t.layoutEnded=function(e){return e.i>=e.children.length},t.getNextX=function(e){return Math.max(e.minx,e.nextx)},t.getSpacingUnits=function(e){return Math.sqrt(8*e.spacingduration)},t.layoutOneItem=function(e,t,r,i,a){var n=r.children[r.i];if(!n)return 0;var s=e-r.minx,o=r.durationindex+n.duration>0?i:0;if("note"===n.abcelem.el_type&&!n.abcelem.rest&&0!==r.voicenumber&&a){var c=a.children[a.i],l=c&&(n.abcelem.maxpitch<=c.abcelem.maxpitch+1&&n.abcelem.maxpitch>=c.abcelem.minpitch-1||n.abcelem.minpitch<=c.abcelem.maxpitch+1&&n.abcelem.minpitch>=c.abcelem.minpitch-1);if(l&&n.abcelem.minpitch===c.abcelem.minpitch&&n.abcelem.maxpitch===c.abcelem.maxpitch&&c.heads&&c.heads.length>0&&n.heads&&n.heads.length>0&&c.heads[0].c===n.heads[0].c&&(l=!1),l){var h=c.heads&&c.heads.length>0?c.heads[0].realWidth:c.fixed.w;n.adjustedWidth||(n.adjustedWidth=h+n.w),n.w=n.adjustedWidth;for(var d=0;d0&&t.putChordInLane(i),void(e[i]=r.right);e.push(r.right),t.putChordInLane(e.length-1)}}function c(e){for(var t=0,r=0;r=0;r--)(i=e[t].children[r]).chordHeightBelow&&o(n,i)}return(a.length>1||n.length>1)&&function(e,t,r){for(var i=0;i=0};n.prototype.reset=function(){this.paper.clear(),this.y=0,this.abctune=null,this.path=null,this.isPrint=!1,this.lineThickness=0,this.initVerticalSpace()},n.prototype.newTune=function(e){this.abctune=e,this.setVerticalSpace(e.formatting),this.isPrint="print"===e.media,this.setPadding(e)},n.prototype.setLineThickness=function(e){this.lineThickness=e},n.prototype.setPaddingOverride=function(e){this.paddingOverride={top:e.paddingtop,bottom:e.paddingbottom,right:e.paddingright,left:e.paddingleft}},n.prototype.setPadding=function(e){function t(t,r,i,a,n){void 0!==e.formatting[i]?t.padding[r]=e.formatting[i]:void 0!==t.paddingOverride[r]?t.padding[r]=t.paddingOverride[r]:t.isPrint?t.padding[r]=a:t.padding[r]=n}t(this,"top","topmargin",38,15),t(this,"bottom","botmargin",38,15),t(this,"left","leftmargin",68,15),t(this,"right","rightmargin",68,15)},n.prototype.adjustNonScaledItems=function(e){this.padding.top/=e,this.padding.bottom/=e,this.padding.left/=e,this.padding.right/=e,this.abctune.formatting.headerfont.size/=e,this.abctune.formatting.footerfont.size/=e},n.prototype.initVerticalSpace=function(){this.spacing={composer:7.56,graceBefore:8.67,graceInside:10.67,graceAfter:16,info:0,lineSkipFactor:1.1,music:7.56,paragraphSkipFactor:.4,parts:11.33,slurHeight:1,staffSeparation:61.33,staffTopMargin:0,stemHeight:36.67,subtitle:3.78,systemStaffSeparation:48,text:18.9,title:7.56,top:30.24,vocal:0,words:0}},n.prototype.setVerticalSpace=function(e){void 0!==e.staffsep&&(this.spacing.staffSeparation=4*e.staffsep/3),void 0!==e.composerspace&&(this.spacing.composer=4*e.composerspace/3),void 0!==e.partsspace&&(this.spacing.parts=4*e.partsspace/3),void 0!==e.textspace&&(this.spacing.text=4*e.textspace/3),void 0!==e.musicspace&&(this.spacing.music=4*e.musicspace/3),void 0!==e.titlespace&&(this.spacing.title=4*e.titlespace/3),void 0!==e.sysstaffsep&&(this.spacing.systemStaffSeparation=4*e.sysstaffsep/3),void 0!==e.stafftopmargin&&(this.spacing.staffTopMargin=4*e.stafftopmargin/3),void 0!==e.subtitlespace&&(this.spacing.subtitle=4*e.subtitlespace/3),void 0!==e.topspace&&(this.spacing.top=4*e.topspace/3),void 0!==e.vocalspace&&(this.spacing.vocal=4*e.vocalspace/3),void 0!==e.wordsspace&&(this.spacing.words=4*e.wordsspace/3)},n.prototype.calcY=function(e){return this.y-e*i.STEP},n.prototype.moveY=function(e,t){void 0===t&&(t=1),this.y+=e*t},n.prototype.absolutemoveY=function(e){this.y=e},e.exports=n},4101:function(e){var t="http://www.w3.org/2000/svg";function r(e){this.svg=s(),this.currentGroup=[],e.appendChild(this.svg)}function i(e,t,r){var i=r-e;return"M "+e+" "+t+" l "+i+" 0 l 0 1 l "+-i+" 0 z "}function a(e,t,r){var i=r-t;return"M "+e+" "+t+" l 0 "+i+" l 1 0 l 0 "+-i+" z "}r.prototype.clear=function(){if(this.svg){var e=this.svg.parentNode;this.svg=s(),this.currentGroup=[],e&&(e.innerHTML="",e.appendChild(this.svg))}},r.prototype.setTitle=function(e){var t=document.createElement("title"),r=document.createTextNode(e);t.appendChild(r),this.svg.insertBefore(t,this.svg.firstChild)},r.prototype.setResponsiveWidth=function(e,t){if(this.svg.setAttribute("viewBox","0 0 "+e+" "+t),this.svg.setAttribute("preserveAspectRatio","xMinYMin meet"),this.svg.removeAttribute("height"),this.svg.removeAttribute("width"),this.svg.style.display="inline-block",this.svg.style.position="absolute",this.svg.style.top="0",this.svg.style.left="0",this.svg.parentNode){var r=this.svg.parentNode.getAttribute("class");r?r.indexOf("abcjs-container")<0&&this.svg.parentNode.setAttribute("class",r+" abcjs-container"):this.svg.parentNode.setAttribute("class","abcjs-container"),this.svg.parentNode.style.display="inline-block",this.svg.parentNode.style.position="relative",this.svg.parentNode.style.width="100%";var i=t/e*100;this.svg.parentNode.style["padding-bottom"]=i+"%",this.svg.parentNode.style["vertical-align"]="middle",this.svg.parentNode.style.overflow="hidden"}},r.prototype.setSize=function(e,t){this.svg.setAttribute("width",e),this.svg.setAttribute("height",t)},r.prototype.setAttribute=function(e,t){this.svg.setAttribute(e,t)},r.prototype.setScale=function(e){1!==e?(this.svg.style.transform="scale("+e+","+e+")",this.svg.style["-ms-transform"]="scale("+e+","+e+")",this.svg.style["-webkit-transform"]="scale("+e+","+e+")",this.svg.style["transform-origin"]="0 0",this.svg.style["-ms-transform-origin-x"]="0",this.svg.style["-ms-transform-origin-y"]="0",this.svg.style["-webkit-transform-origin-x"]="0",this.svg.style["-webkit-transform-origin-y"]="0"):(this.svg.style.transform="",this.svg.style["-ms-transform"]="",this.svg.style["-webkit-transform"]="")},r.prototype.insertStyles=function(e){var r=document.createElementNS(t,"style");r.textContent=e,this.svg.insertBefore(r,this.svg.firstChild)},r.prototype.setParentStyles=function(e){for(var t in e)e.hasOwnProperty(t)&&this.svg.parentNode&&(this.svg.parentNode.style[t]=e[t]);this.dummySvg&&(document.querySelector("body").removeChild(this.dummySvg),this.dummySvg=null)},r.prototype.rect=function(e){var t=[],r=e.x,n=e.y,s=e.x+e.width,o=e.y+e.height;return t.push(i(r,n,s)),t.push(i(r,o,s)),t.push(a(s,n,o)),t.push(a(r,o,n)),this.path({path:t.join(" "),stroke:"none","data-name":e["data-name"]})},r.prototype.dottedLine=function(e){var r=document.createElementNS(t,"line");r.setAttribute("x1",e.x1),r.setAttribute("x2",e.x2),r.setAttribute("y1",e.y1),r.setAttribute("y2",e.y2),r.setAttribute("stroke",e.stroke),r.setAttribute("stroke-dasharray","5,5"),this.svg.insertBefore(r,this.svg.firstChild)},r.prototype.rectBeneath=function(e){var r=document.createElementNS(t,"rect");r.setAttribute("x",e.x),r.setAttribute("width",e.width),r.setAttribute("y",e.y),r.setAttribute("height",e.height),e.stroke&&r.setAttribute("stroke",e.stroke),e["stroke-opacity"]&&r.setAttribute("stroke-opacity",e["stroke-opacity"]),e.fill&&r.setAttribute("fill",e.fill),e["fill-opacity"]&&r.setAttribute("fill-opacity",e["fill-opacity"]),this.svg.insertBefore(r,this.svg.firstChild)},r.prototype.text=function(e,r,i){var a=document.createElementNS(t,"text");for(var n in a.setAttribute("stroke","none"),r)r.hasOwnProperty(n)&&a.setAttribute(n,r[n]);for(var s=(""+e).split("\n"),o=0;o0?this.currentGroup[0].removeChild(r):this.svg.removeChild(r)),i&&(n[i]=a),a},r.prototype.openGroup=function(e){e=e||{};var r=document.createElementNS(t,"g");return e.klass&&r.setAttribute("class",e.klass),e.fill&&r.setAttribute("fill",e.fill),e.stroke&&r.setAttribute("stroke",e.stroke),e["data-name"]&&r.setAttribute("data-name",e["data-name"]),e.prepend?this.prepend(r):this.append(r),this.currentGroup.unshift(r),r},r.prototype.closeGroup=function(){var e=this.currentGroup.shift();return e&&0===e.children.length?(e.parentElement.removeChild(e),null):e},r.prototype.path=function(e){var r=document.createElementNS(t,"path");for(var i in e)e.hasOwnProperty(i)&&("path"===i?r.setAttributeNS(null,"d",e.path):"klass"===i?r.setAttributeNS(null,"class",e[i]):void 0!==e[i]&&r.setAttributeNS(null,i,e[i]));return this.append(r),r},r.prototype.pathToBack=function(e){var r=document.createElementNS(t,"path");for(var i in e)e.hasOwnProperty(i)&&("path"===i?r.setAttributeNS(null,"d",e.path):"klass"===i?r.setAttributeNS(null,"class",e[i]):r.setAttributeNS(null,i,e[i]));return this.prepend(r),r},r.prototype.lineToBack=function(e){for(var r=document.createElementNS(t,"line"),i=Object.keys(e),a=0;a0?this.currentGroup[0].appendChild(e):this.svg.appendChild(e)},r.prototype.prepend=function(e){this.currentGroup.length>0?this.currentGroup[0].appendChild(e):this.svg.insertBefore(e,this.svg.firstChild)},r.prototype.setAttributeOnElement=function(e,t){for(var r in t)t.hasOwnProperty(r)&&e.setAttributeNS(null,r,t[r])},r.prototype.moveElementToChild=function(e,t){e.appendChild(t)},e.exports=r}},t={},r=function r(i){var a=t[i];if(void 0!==a)return a.exports;var n=t[i]={exports:{}};return e[i](n,n.exports,r),n.exports}(7001),r;var e,t,r})); \ No newline at end of file +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.abcjs=t():e.ABCJS=t()}(this,(function(){return e={7001:function(e,t,r){"use strict";var i=r(1592).TuneBook,a=r(8905),n=r(5253),s=new function(){var e=!1;try{e=abcjs_is_user_script}catch(e){}this.show_midi=!e,this.hide_abc=!1,this.render_before=!1,this.midi_options={},this.render_options={},this.render_classname="abcrendered",this.text_classname="abctext",this.auto_render_threshold=20,this.show_text="show score for: ",this.debug=!1};s.start=function(){var e=window.document.body;this.errors="";var t=this.getABCContainingElements(e);if(0!==t.length){if(this.debug)for(var r=0;r0)for(var a=r.length,n=0;n1&&r&&r.length>0)for(a=r.length,n=0;n=0&&h0,v=0;v=0&&(u=C.startChar,d=void 0===C.chord?h:null),C.chord&&(h=C),"bar"===C.el_type){if(p){var S={abc:n.abc.substring(u,C.endChar)};(h=d&&d.chord&&d.chord.length>0?d.chord[0].name:null)&&(S.lastChord=h),C.startEnding&&(S.startEnding=C.startEnding),C.endEnding&&(S.endEnding=C.endEnding),f.push(S),u=null,p=!1}}else"note"===C.el_type&&(p=!0)}}r.push({header:l,measures:f,hasPickup:g})}return r}}(),e.exports=o},9447:function(e,t,r){var i=r(4914).relativeMajor,a={acc:"sharp",note:"f"},n={acc:"sharp",note:"c"},s={acc:"sharp",note:"g"},o={acc:"sharp",note:"d"},c={acc:"sharp",note:"A"},l={acc:"sharp",note:"e"},h={acc:"flat",note:"B"},d={acc:"flat",note:"e"},u={acc:"flat",note:"A"},f={acc:"flat",note:"d"},p={acc:"flat",note:"G"},m={acc:"flat",note:"c"},g={"C#":[a,n,s,o,c,l,{acc:"sharp",note:"B"}],"F#":[a,n,s,o,c,l],B:[a,n,s,o,c],E:[a,n,s,o],A:[a,n,s],D:[a,n],G:[a],C:[],F:[h],Bb:[h,d],Eb:[h,d,u],Cm:[h,d,u],Ab:[h,d,u,f],Db:[h,d,u,f,p],Gb:[h,d,u,f,p,m],Cb:[h,d,u,f,p,m,{acc:"flat",note:"F"}],"A#":[h,d],"B#":[],"D#":[h,d,u],"E#":[h],"G#":[h,d,u,f],none:[]};e.exports=function(e){var t=g[i(e)];return t?JSON.parse(JSON.stringify(t)):null}},4914:function(e){var t={C:{modes:["CMaj","Amin","Am","GMix","DDor","EPhr","FLyd","BLoc"],stepsFromC:0},Db:{modes:["DbMaj","Bbmin","Bbm","AbMix","EbDor","FPhr","GbLyd","CLoc"],stepsFromC:1},D:{modes:["DMaj","Bmin","Bm","AMix","EDor","F#Phr","GLyd","C#Loc"],stepsFromC:2},Eb:{modes:["EbMaj","Cmin","Cm","BbMix","FDor","GPhr","AbLyd","DLoc"],stepsFromC:3},E:{modes:["EMaj","C#min","C#m","BMix","F#Dor","G#Phr","ALyd","D#Loc"],stepsFromC:4},F:{modes:["FMaj","Dmin","Dm","CMix","GDor","APhr","BbLyd","ELoc"],stepsFromC:5},Gb:{modes:["GbMaj","Ebmin","Ebm","DbMix","AbDor","BbPhr","CbLyd","FLoc"],stepsFromC:6},G:{modes:["GMaj","Emin","Em","DMix","ADor","BPhr","CLyd","F#Loc"],stepsFromC:7},Ab:{modes:["AbMaj","Fmin","Fm","EbMix","BbDor","CPhr","DbLyd","GLoc"],stepsFromC:8},A:{modes:["AMaj","F#min","F#m","EMix","BDor","C#Phr","DLyd","G#Loc"],stepsFromC:9},Bb:{modes:["BbMaj","Gmin","Gm","FMix","CDor","DPhr","EbLyd","ALoc"],stepsFromC:10},B:{modes:["BMaj","G#min","G#m","F#Mix","C#Dor","D#Phr","ELyd","A#Loc"],stepsFromC:11},"C#":{modes:["C#Maj","A#min","A#m","G#Mix","D#Dor","E#Phr","F#Lyd","B#Loc"],stepsFromC:1},"F#":{modes:["F#Maj","D#min","D#m","C#Mix","G#Dor","A#Phr","BLyd","E#Loc"],stepsFromC:6},Cb:{modes:["CbMaj","Abmin","Abm","GbMix","DbDor","EbPhr","FbLyd","BbLoc"],stepsFromC:11}},r=null;e.exports={relativeMajor:function(e){r||function(){r={};for(var e=Object.keys(t),i=0;i=t&&(r-=t),"bar"===s[c].el_type)return r}return r}(this.lines,e);return t<1e-8||e-t<1e-8?0:t},this.getBarLength=function(){var e=this.getMeterFraction();return e.num/e.den},this.getTotalTime=function(){return this.totalTime},this.getTotalBeats=function(){return this.totalBeats},this.millisecondsPerMeasure=function(e){var t;if(e)t=e;else{var r=this.metaText?this.metaText.tempo:null;t=this.getBpm(r)}return t<=0&&(t=1),this.getBeatsPerMeasure()/t*6e4},this.getBeatsPerMeasure=function(){var e=this.getBeatLength();return this.getBarLength()/e},this.getMeter=function(){for(var e=0;ee)return c}}return null},this.addElementToEvents=function(e,t,r,a,n,s,o,c,l,h){if(t.hint)return{isTiedState:void 0,duration:0};var d=t.durationClass?t.durationClass:t.duration;if(t.abcelem.rest&&"spacer"===t.abcelem.rest.type&&(d=0),d>0){for(var u=[],f=0;f0)for(var s=n.staffs[0],o=s.absoluteY,c=o-s.top*a.STEP,l=n.staffs[n.staffs.length-1],h=(o=l.absoluteY)-l.bottom*a.STEP-c,d=n.voices,u=0;u0&&o["event"+p]&&(w="event"+p),p=Math.round(1e3*f),"bar"===T.type){var S=T.abcelem.type,N="bar_right_repeat"===S||"bar_dbl_repeat"===S,E="1"===T.abcelem.startEnding,_="bar_left_repeat"===S||"bar_dbl_repeat"===S||"bar_right_repeat"===S;if(N){x>0&&(o[w].endX=T.x),-1===g&&(g=x);var M=0;y=-1;for(var A=m;A=0;n--){var s=e[n];"bar"===s.type?(s.top=i,s.nextTop=t,t=i,s.bottom=a,s.nextBottom=r,r=a):"event"===s.type&&(i=s.top,a=s.top+s.height)}}(s=function(e){var t=[];for(var r in e)e.hasOwnProperty(r)&&t.push(e[r]);return t.sort((function(e,t){var r=e.milliseconds-t.milliseconds;return 0!==r?r:"bar"===e.type?-1:1}))}(o)),function(e,r){if(!(r.length<1)){for(var i=0;ia.left&&(a.endX=Math.min(a.endX,s)):a.endX=s}}var o=r[r.length-1];o.endX=e[o.line].staffGroup.w}}(this.lines,s),s.push({type:"end",milliseconds:d}),this.addUsefulCallbackInfo(s,b*a),s},this.addUsefulCallbackInfo=function(e,t){for(var r=this.millisecondsPerMeasure(t),i=0;i0?e.duration[0]:r)/r}if(!t){t=180;var i=this.getMeterFraction();i&&3!==i.num&&i.num%3==0&&(t=120)}return t},this.setTiming=function(e,t){if(t=t||0,!this.engraver||!this.engraver.staffgroups)return console.log("setTiming cannot be called before the tune is drawn."),this.noteTimings=[],this.noteTimings;var r=this.metaText?this.metaText.tempo:null,i=this.getBpm(r),a=1;e?r&&(a=e/i):e=i;var n=this.getBeatLength(),s=e/60,o=this.getBarLength()/n*t/s;o&&(o-=this.getPickupLength()/n/s);var c=n*s;return this.noteTimings=this.setupEvents(o,c,e,a),this.noteTimings.length>0?(this.totalTime=this.noteTimings[this.noteTimings.length-1].milliseconds/1e3,this.totalBeats=this.totalTime*s):(this.totalTime=void 0,this.totalBeats=void 0),this.noteTimings},this.setUpAudio=function(e){e||(e={});var t=n(this,e);return s(t,e,this.formatting.percmap,this.formatting.midi)},this.deline=function(e){return o(this.lines,e)},this.findSelectableElement=function(e){return this.engraver&&this.engraver.selectables?this.engraver.findSelectableElement(e):null},this.getSelectableArray=function(){return this.engraver&&this.engraver.selectables?this.engraver.selectables:[]}}},351:function(e){function t(e,t){return"abselem"===e?"abselem":t}function r(e,t){e.el_type="meter",e.startChar=-1,e.endChar=-1;for(var r=0;r=0&&e.lastIndexOf(t)===r},last:function(e){return 0===e.length?null:e[e.length-1]}};e.exports=t},8905:function(e,t,r){var i=r(5008),a=r(8360),n=r(9928),s=r(6476),o=r(1881),c=r(1756),l=r(6780),h=r(575);e.exports=function(){"use strict";var e,t=new l,r=new h(t),d="",u="";function f(e,t,r){e.positioning||(e.positioning={}),e.positioning[t]=r}function p(e,t,r){e.fonts||(e.fonts={}),e.fonts[t]=r}this.getTune=function(){var e={formatting:t.formatting,lines:t.lines,media:t.media,metaText:t.metaText,metaTextInfo:t.metaTextInfo,version:t.version,addElementToEvents:t.addElementToEvents,addUsefulCallbackInfo:t.addUsefulCallbackInfo,getTotalTime:t.getTotalTime,getTotalBeats:t.getTotalBeats,getBarLength:t.getBarLength,getBeatLength:t.getBeatLength,getBeatsPerMeasure:t.getBeatsPerMeasure,getBpm:t.getBpm,getMeter:t.getMeter,getMeterFraction:t.getMeterFraction,getPickupLength:t.getPickupLength,getKeySignature:t.getKeySignature,getElementFromChar:t.getElementFromChar,makeVoicesArray:t.makeVoicesArray,millisecondsPerMeasure:t.millisecondsPerMeasure,setupEvents:t.setupEvents,setTiming:t.setTiming,setUpAudio:t.setUpAudio,deline:t.deline,findSelectableElement:t.findSelectableElement,getSelectableArray:t.getSelectableArray};return t.lineBreaks&&(e.lineBreaks=t.lineBreaks),t.visualTranspose&&(e.visualTranspose=t.visualTranspose),e};var m,g,v={reset:function(){for(var e in this)this.hasOwnProperty(e)&&"function"!=typeof this[e]&&delete this[e];this.iChar=0,this.key={accidentals:[],root:"none",acc:"",mode:""},this.meter=null,this.origMeter=null,this.hasMainTitle=!1,this.default_length=.125,this.clef={type:"treble",verticalPos:0},this.octave=0,this.next_note_duration=0,this.start_new_line=!0,this.is_in_header=!0,this.partForNextLine={},this.tempoForNextLine=[],this.havent_set_length=!0,this.voices={},this.staves=[],this.macros={},this.currBarNumber=1,this.barCounter={},this.ignoredDecorations=[],this.score_is_present=!1,this.inEnding=!1,this.inTie=[],this.inTieChord={},this.vocalPosition="auto",this.dynamicPosition="auto",this.chordPosition="auto",this.ornamentPosition="auto",this.volumePosition="auto",this.openSlurs=[],this.freegchord=!1,this.endingHoldOver={}},differentFont:function(e,t){return this[e].decoration!==t[e].decoration||this[e].face!==t[e].face||this[e].size!==t[e].size||this[e].style!==t[e].style||this[e].weight!==t[e].weight},addFormattingOptions:function(e,t,r){"note"===r?("auto"!==this.vocalPosition&&f(e,"vocalPosition",this.vocalPosition),"auto"!==this.dynamicPosition&&f(e,"dynamicPosition",this.dynamicPosition),"auto"!==this.chordPosition&&f(e,"chordPosition",this.chordPosition),"auto"!==this.ornamentPosition&&f(e,"ornamentPosition",this.ornamentPosition),"auto"!==this.volumePosition&&f(e,"volumePosition",this.volumePosition),this.differentFont("annotationfont",t)&&p(e,"annotationfont",this.annotationfont),this.differentFont("gchordfont",t)&&p(e,"gchordfont",this.gchordfont),this.differentFont("vocalfont",t)&&p(e,"vocalfont",this.vocalfont),this.differentFont("tripletfont",t)&&p(e,"tripletfont",this.tripletfont)):"bar"===r&&("auto"!==this.dynamicPosition&&f(e,"dynamicPosition",this.dynamicPosition),"auto"!==this.chordPosition&&f(e,"chordPosition",this.chordPosition),"auto"!==this.ornamentPosition&&f(e,"ornamentPosition",this.ornamentPosition),"auto"!==this.volumePosition&&f(e,"volumePosition",this.volumePosition),this.differentFont("measurefont",t)&&p(e,"measurefont",this.measurefont),this.differentFont("repeatfont",t)&&p(e,"repeatfont",this.repeatfont))},duplicateStartEndingHoldOvers:function(){this.endingHoldOver={inTie:[],inTieChord:{}};for(var e=0;e/g,">")},y=function(t,r,i){r||(r=" ");var a=r[i];" "!==a&&a||(a="SPACE");var n,s=b(r.substring(i-64,i))+''+a+""+b(r.substring(i+1).substring(0,64));!function(e){v.warnings||(v.warnings=[]),v.warnings.push(e)}("Music Line:"+e.lineIndex+":"+(i+1)+": "+t+": "+s),n={message:t,line:r,startChar:v.iChar+i,column:i},v.warningObjects||(v.warningObjects=[]),v.warningObjects.push(n)};this.getWarnings=function(){return v.warnings},this.getWarningObjects=function(){return v.warningObjects};var x=function(t,r){if(r.indexOf("")>=0)d+=r;else if(r=d+r,d="",t){"-"!==(r=i.strip(r))[r.length-1]&&(r+=" ");for(var a=[],n=0,s=!1,o=function(t){var o=i.strip(r.substring(n,t));if(o=o.replace(/\\([-_*|~])/g,"$1"),n=t+1,o.length>0){s&&(o=o.replace(/~/g," "));var c=r[t];return"_"!==c&&"-"!==c&&(c=" "),a.push({syllable:e.translateString(o),divider:c}),s=!1,!0}return!1},c=!1,l=0;l0&&(i.last(a).divider="-",a.push({skip:!0,to:"next"}));break;case"_":c||(o(l),a.push({skip:!0,to:"slur"}));break;case"*":c||(o(l),a.push({skip:!0,to:"next"}));break;case"|":c||(o(l),a.push({skip:!0,to:"bar"}));break;case"~":c||(s=!0)}c="\\"===r[l]}t.forEach((function(e){if(0!==a.length)if(a[0].skip){switch(a[0].to){case"next":case"slur":"note"===e.el_type&&null!==e.pitches&&a.shift();break;case"bar":"bar"===e.el_type&&a.shift()}"bar"!==e.el_type&&(void 0===e.lyric?e.lyric=[{syllable:"",divider:" "}]:e.lyric.push({syllable:"",divider:" "}))}else if("note"===e.el_type&&void 0===e.rest){var t=a.shift();t.syllable&&(t.syllable=t.syllable.replace(/ +/g," ")),void 0===e.lyric?e.lyric=[t]:e.lyric.push(t)}}))}else y("Can't add words before the first line of music",t,0)},k=function(t,r){if(r.indexOf("")>=0)u+=r;else if(r=u+r,u="",t){"-"!==(r=i.strip(r))[r.length-1]&&(r+=" ");for(var a=[],n=0,s=!1,o=function(t){var o=i.strip(r.substring(n,t));if(n=t+1,o.length>0){s&&(o=o.replace(/~/g," "));var c=r[t];return"_"!==c&&"-"!==c&&(c=" "),a.push({syllable:e.translateString(o),divider:c}),s=!1,!0}return!1},c=0;c0&&(i.last(a).divider="-",a.push({skip:!0,to:"next"}));break;case"_":o(c),a.push({skip:!0,to:"slur"});break;case"*":o(c),a.push({skip:!0,to:"next"});break;case"|":o(c),a.push({skip:!0,to:"bar"});break;case"~":s=!0}t.forEach((function(e){if(0!==a.length)if(a[0].skip)switch(a[0].to){case"next":case"slur":"note"===e.el_type&&null!==e.pitches&&a.shift();break;case"bar":"bar"===e.el_type&&a.shift()}else if("note"===e.el_type&&void 0===e.rest){var t=a.shift();void 0===e.lyric?e.lyric=[t]:e.lyric.push(t)}}))}else y("Can't add symbols before the first line of music",t,0)},w=function(e){if(i.startsWith(e,"%%")){var t=a.addDirective(e.substring(2));t&&y(t,e,2)}else{var n=e.indexOf("%");if(n>=0&&(e=e.substring(0,n)),0!==(e=e.replace(/\s+$/,"")).length)if(d)x(r.getCurrentVoice(),e.substring(2));else if(u)k(r.getCurrentVoice(),e.substring(2));else if(e.length<2||":"!==e[1]||g.lineContinuation)g.parseMusic(e);else{var s=m.parseHeader(e);s.regular&&g.parseMusic(e),s.newline&&g.startNewLine(),s.words&&x(r.getCurrentVoice(),e.substring(2)),s.symbols&&k(r.getCurrentVoice(),e.substring(2))}}};function T(e,t){e.push({el_type:"hint"});for(var r=0;r1){for(var b=1;b0&&"\n"!==p[b][0];)p[b]=p[b].substr(1),p[b-1]+=" ";l=p.join(" ")}var T=(l=l.replace(/\\([ \t]*)(%.*)*\n/g,(function(e,t,r){return t+""+(r?Array(r.length+1).join(" "):"")+"\n"}))).split("\n");0===i.last(T).length&&T.pop(),e=new o(T,v),m=new n(e,y,v,t,r),g=new s(e,y,v,t,r,m),h.print&&(t.media="print"),v.reset(),v.iChar=f,h.visualTranspose?(v.globalTranspose=parseInt(h.visualTranspose),0===v.globalTranspose?v.globalTranspose=void 0:r.setVisualTranspose(h.visualTranspose)):v.globalTranspose=void 0,h.lineBreaks&&(v.lineBreaks=h.lineBreaks),m.reset(e,y,v,t);try{h.format&&a.globalFormatting(h.format);for(var S=e.nextLine();S;){if(h.header_only&&!1===v.is_in_header)throw"normal_abort";if(h.stop_on_warning&&v.warnings)throw"normal_abort";var N=v.is_in_header;w(S),N&&!v.is_in_header&&(r.setRunningFont("annotationfont",v.annotationfont),r.setRunningFont("gchordfont",v.gchordfont),r.setRunningFont("tripletfont",v.tripletfont),r.setRunningFont("vocalfont",v.vocalfont)),S=e.nextLine()}d&&x(r.getCurrentVoice(),""),u&&k(r.getCurrentVoice(),""),v.openSlurs=r.cleanUp(v.barsperstaff,v.staffnonote,v.openSlurs)}catch(e){if("normal_abort"!==e)throw e}var E=792,_=612;switch(v.papersize){case"legal":E=1008,_=612;break;case"A4":E=842.4,_=597.6}if(v.landscape){var M=E;E=_,_=M}t.formatting.pagewidth||(t.formatting.pagewidth=_),t.formatting.pageheight||(t.formatting.pageheight=E),h.hint_measures&&function(){for(var e=0;e1&&!i.startsWith(o[0].abc,"X:")&&o.shift().abc.split("\n").forEach((function(e){i.startsWith(e,"%%")&&(t+=e+"\n")}));var c=t;return o.forEach((function(e){var r=e.abc.indexOf("\n\n");r>0&&(e.abc=e.abc.substring(0,r)),e.pure=e.abc,e.abc=t+e.abc,e.title="";var a=e.pure.split("T:");a.length>1&&(a=a[1].split("\n"),e.title=i.strip(a[0]));var n=e.pure.substring(2,e.pure.indexOf("\n"));e.id=i.strip(n)})),{header:c,tunes:o}}},8360:function(e,t,r){var i=r(5008),a={};!function(){"use strict";var e,t,r,n,s;a.initialize=function(i,a,o,c,l){e=i,t=a,n=c,s=l,(r=o).annotationfont={face:"Helvetica",size:12,weight:"normal",style:"normal",decoration:"none"},r.gchordfont={face:"Helvetica",size:12,weight:"normal",style:"normal",decoration:"none"},r.historyfont={face:'"Times New Roman"',size:16,weight:"normal",style:"normal",decoration:"none"},r.infofont={face:'"Times New Roman"',size:14,weight:"normal",style:"italic",decoration:"none"},r.measurefont={face:'"Times New Roman"',size:14,weight:"normal",style:"italic",decoration:"none"},r.partsfont={face:'"Times New Roman"',size:15,weight:"normal",style:"normal",decoration:"none"},r.repeatfont={face:'"Times New Roman"',size:13,weight:"normal",style:"normal",decoration:"none"},r.textfont={face:'"Times New Roman"',size:16,weight:"normal",style:"normal",decoration:"none"},r.tripletfont={face:"Times",size:11,weight:"normal",style:"italic",decoration:"none"},r.vocalfont={face:'"Times New Roman"',size:13,weight:"bold",style:"normal",decoration:"none"},r.wordsfont={face:'"Times New Roman"',size:16,weight:"normal",style:"normal",decoration:"none"},n.formatting.composerfont={face:'"Times New Roman"',size:14,weight:"normal",style:"italic",decoration:"none"},n.formatting.subtitlefont={face:'"Times New Roman"',size:16,weight:"normal",style:"normal",decoration:"none"},n.formatting.tempofont={face:'"Times New Roman"',size:15,weight:"bold",style:"normal",decoration:"none"},n.formatting.titlefont={face:'"Times New Roman"',size:20,weight:"normal",style:"normal",decoration:"none"},n.formatting.footerfont={face:'"Times New Roman"',size:12,weight:"normal",style:"normal",decoration:"none"},n.formatting.headerfont={face:'"Times New Roman"',size:12,weight:"normal",style:"normal",decoration:"none"},n.formatting.voicefont={face:'"Times New Roman"',size:13,weight:"bold",style:"normal",decoration:"none"},n.formatting.tablabelfont={face:'"Trebuchet MS"',size:16,weight:"normal",style:"normal",decoration:"none"},n.formatting.tabnumberfont={face:'"Arial"',size:11,weight:"normal",style:"normal",decoration:"none"},n.formatting.tabgracefont={face:'"Arial"',size:8,weight:"normal",style:"normal",decoration:"none"},n.formatting.annotationfont=r.annotationfont,n.formatting.gchordfont=r.gchordfont,n.formatting.historyfont=r.historyfont,n.formatting.infofont=r.infofont,n.formatting.measurefont=r.measurefont,n.formatting.partsfont=r.partsfont,n.formatting.repeatfont=r.repeatfont,n.formatting.textfont=r.textfont,n.formatting.tripletfont=r.tripletfont,n.formatting.vocalfont=r.vocalfont,n.formatting.wordsfont=r.wordsfont};var o={gchordfont:!0,measurefont:!0,partsfont:!0,annotationfont:!0,composerfont:!0,historyfont:!0,infofont:!0,subtitlefont:!0,textfont:!0,titlefont:!0,voicefont:!0},c=function(e,r,i,a,n){function s(){var s=parseInt(e[0].token);return e.shift(),r?0===e.length?{face:r.face,weight:r.weight,style:r.style,decoration:r.decoration,size:s}:1===e.length&&"box"===e[0].token&&o[n]?{face:r.face,weight:r.weight,style:r.style,decoration:r.decoration,size:s,box:!0}:(t("Extra parameters in font definition.",i,a),{face:r.face,weight:r.weight,style:r.style,decoration:r.decoration,size:s}):(t("Can't set just the size of the font since there is no default value.",i,a),{face:'"Times New Roman"',weight:"normal",style:"normal",decoration:"none",size:s})}if("*"===e[0].token){if(e.shift(),"number"===e[0].type)return s();t("Expected font size number after *.",i,a)}if("number"===e[0].type)return s();for(var c,l=[],h="normal",d="normal",u="none",f=!1,p="face",m=!1;e.length;){var g=e.shift(),v=g.token.toLowerCase();switch(p){case"face":m||"utf"!==v&&"number"!==g.type&&"bold"!==v&&"italic"!==v&&"underline"!==v&&"box"!==v?l.length>0&&"-"===g.token?(m=!0,l[l.length-1]=l[l.length-1]+g.token):m?(m=!1,l[l.length-1]=l[l.length-1]+g.token):l.push(g.token):"number"===g.type?(c?t("Font size specified twice in font definition.",i,a):c=g.token,p="modifier"):"bold"===v?h="bold":"italic"===v?d="italic":"underline"===v?u="underline":"box"===v?(o[n]?f=!0:t('This font style doesn\'t support "box"',i,a),p="finished"):"utf"===v?(g=e.shift(),p="size"):t("Unknown parameter "+g.token+" in font definition.",i,a);break;case"size":"number"===g.type?c?t("Font size specified twice in font definition.",i,a):c=g.token:t("Expected font size in font definition.",i,a),p="modifier";break;case"modifier":"bold"===v?h="bold":"italic"===v?d="italic":"underline"===v?u="underline":"box"===v?(o[n]?f=!0:t('This font style doesn\'t support "box"',i,a),p="finished"):t("Unknown parameter "+g.token+" in font definition.",i,a);break;case"finished":t('Extra characters found after "box" in font definition.',i,a)}}void 0===c?r?c=r.size:(t("Must specify the size of the font since there is no default value.",i,a),c=12):c=parseFloat(c),""===(l=l.join(" "))&&(r?l=r.face:(t("Must specify the name of the font since there is no default value.",i,a),l="sans-serif"));var b=function(e){switch(e){case"Arial-Italic":return{face:"Arial",weight:"normal",style:"italic",decoration:"none"};case"Arial-Bold":return{face:"Arial",weight:"bold",style:"normal",decoration:"none"};case"Bookman-Demi":return{face:"Bookman,serif",weight:"bold",style:"normal",decoration:"none"};case"Bookman-DemiItalic":return{face:"Bookman,serif",weight:"bold",style:"italic",decoration:"none"};case"Bookman-Light":return{face:"Bookman,serif",weight:"normal",style:"normal",decoration:"none"};case"Bookman-LightItalic":return{face:"Bookman,serif",weight:"normal",style:"italic",decoration:"none"};case"Courier":return{face:'"Courier New"',weight:"normal",style:"normal",decoration:"none"};case"Courier-Oblique":return{face:'"Courier New"',weight:"normal",style:"italic",decoration:"none"};case"Courier-Bold":return{face:'"Courier New"',weight:"bold",style:"normal",decoration:"none"};case"Courier-BoldOblique":return{face:'"Courier New"',weight:"bold",style:"italic",decoration:"none"};case"AvantGarde-Book":return{face:"AvantGarde,Arial",weight:"normal",style:"normal",decoration:"none"};case"AvantGarde-BookOblique":return{face:"AvantGarde,Arial",weight:"normal",style:"italic",decoration:"none"};case"AvantGarde-Demi":case"Avant-Garde-Demi":return{face:"AvantGarde,Arial",weight:"bold",style:"normal",decoration:"none"};case"AvantGarde-DemiOblique":return{face:"AvantGarde,Arial",weight:"bold",style:"italic",decoration:"none"};case"Helvetica-Oblique":return{face:"Helvetica",weight:"normal",style:"italic",decoration:"none"};case"Helvetica-Bold":return{face:"Helvetica",weight:"bold",style:"normal",decoration:"none"};case"Helvetica-BoldOblique":return{face:"Helvetica",weight:"bold",style:"italic",decoration:"none"};case"Helvetica-Narrow":return{face:'"Helvetica Narrow",Helvetica',weight:"normal",style:"normal",decoration:"none"};case"Helvetica-Narrow-Oblique":return{face:'"Helvetica Narrow",Helvetica',weight:"normal",style:"italic",decoration:"none"};case"Helvetica-Narrow-Bold":return{face:'"Helvetica Narrow",Helvetica',weight:"bold",style:"normal",decoration:"none"};case"Helvetica-Narrow-BoldOblique":return{face:'"Helvetica Narrow",Helvetica',weight:"bold",style:"italic",decoration:"none"};case"Palatino-Roman":return{face:"Palatino",weight:"normal",style:"normal",decoration:"none"};case"Palatino-Italic":return{face:"Palatino",weight:"normal",style:"italic",decoration:"none"};case"Palatino-Bold":return{face:"Palatino",weight:"bold",style:"normal",decoration:"none"};case"Palatino-BoldItalic":return{face:"Palatino",weight:"bold",style:"italic",decoration:"none"};case"NewCenturySchlbk-Roman":return{face:'"New Century",serif',weight:"normal",style:"normal",decoration:"none"};case"NewCenturySchlbk-Italic":return{face:'"New Century",serif',weight:"normal",style:"italic",decoration:"none"};case"NewCenturySchlbk-Bold":return{face:'"New Century",serif',weight:"bold",style:"normal",decoration:"none"};case"NewCenturySchlbk-BoldItalic":return{face:'"New Century",serif',weight:"bold",style:"italic",decoration:"none"};case"Times":case"Times-Roman":case"Times-Narrow":case"Times-Courier":case"Times-New-Roman":return{face:'"Times New Roman"',weight:"normal",style:"normal",decoration:"none"};case"Times-Italic":case"Times-Italics":return{face:'"Times New Roman"',weight:"normal",style:"italic",decoration:"none"};case"Times-Bold":return{face:'"Times New Roman"',weight:"bold",style:"normal",decoration:"none"};case"Times-BoldItalic":return{face:'"Times New Roman"',weight:"bold",style:"italic",decoration:"none"};case"ZapfChancery-MediumItalic":return{face:'"Zapf Chancery",cursive,serif',weight:"normal",style:"normal",decoration:"none"};default:return null}}(l),y={};return b?(y.face=b.face,y.weight=b.weight,y.style=b.style,y.decoration=b.decoration,y.size=c,f&&(y.box=!0),y):(y.face=l,y.weight=h,y.style=d,y.decoration=u,y.size=c,f&&(y.box=!0),y)},l=function(e,t,i){return 0===t.length?'Directive "'+e+'" requires a font as a parameter.':(r[e]=c(t,r[e],i,0,e),r.is_in_header&&(n.formatting[e]=r[e]),null)},h=function(e,t){var r="";t.forEach((function(e){r+=e.token}));var i=parseFloat(r);if(isNaN(i)||0===i)return'Directive "'+e+'" requires a number as a parameter.';n.formatting.scale=i},d=["acoustic-bass-drum","bass-drum-1","side-stick","acoustic-snare","hand-clap","electric-snare","low-floor-tom","closed-hi-hat","high-floor-tom","pedal-hi-hat","low-tom","open-hi-hat","low-mid-tom","hi-mid-tom","crash-cymbal-1","high-tom","ride-cymbal-1","chinese-cymbal","ride-bell","tambourine","splash-cymbal","cowbell","crash-cymbal-2","vibraslap","ride-cymbal-2","hi-bongo","low-bongo","mute-hi-conga","open-hi-conga","low-conga","high-timbale","low-timbale","high-agogo","low-agogo","cabasa","maracas","short-whistle","long-whistle","short-guiro","long-guiro","claves","hi-wood-block","low-wood-block","mute-cuica","open-cuica","mute-triangle","open-triangle"],u=function(e,t,i,a,n){if(1!==i.length||"number"!==i[0].type)return'Directive "'+t+'" requires a number as a parameter.';var s=i[0].intt;return void 0!==a&&sn?'Directive "'+t+'" requires a number less than or equal to '+n+" as a parameter.":(r[e]=s,null)},f=function(e,t,i){if(1===i.length&&("true"===i[0].token||"false"===i[0].token))return r[e]="true"===i[0].token,null;var a=u(e,t,i,0,1);return null!==a?a:(r[e]=1===r[e],null)},p=function(e,t,i,a){if(1!==i.length)return'Directive "'+t+'" requires one of [ '+a.join(", ")+" ] as a parameter.";for(var n=i[0].token,s=!1,o=0;!s&&o1&&r.setfont){var i=[];""!==t[0]&&i.push({text:t[0]});for(var a=1;a=0||e[0].floatt<=1)return{value:e[0].floatt}}else{if("false"===e[0].token)return{value:0};if("true"===e[0].token)return{value:1}}return{error:"Directive stretchlast requires zero or one parameter: false, true, or number between 0 and 1 (received "+e[0].token+")"}}a.addDirective=function(o){var E=e.tokenize(o,0,o.length);if(0===E.length||"alpha"!==E[0].type)return null;var _=o.substring(o.indexOf(E[0].token)+E[0].token.length);_=e.stripComment(_);var M,A=E.shift().token.toLowerCase(),B="";switch(A){case"bagpipes":n.formatting.bagpipes=!0;break;case"flatbeams":n.formatting.flatbeams=!0;break;case"jazzchords":n.formatting.jazzchords=!0;break;case"accentAbove":n.formatting.accentAbove=!0;break;case"germanAlphabet":n.formatting.germanAlphabet=!0;break;case"landscape":r.landscape=!0;break;case"papersize":r.papersize=_;break;case"graceslurs":if(1!==E.length)return"Directive graceslurs requires one parameter: 0 or 1";if("0"===E[0].token||"false"===E[0].token)n.formatting.graceSlurs=!1;else{if("1"!==E[0].token&&"true"!==E[0].token)return"Directive graceslurs requires one parameter: 0 or 1 (received "+E[0].token+")";n.formatting.graceSlurs=!0}break;case"lineThickness":var L=N(E);if(void 0!==L.value&&(n.formatting.lineThickness=L.value),L.error)return L.error;break;case"stretchlast":var P=N(E);if(void 0!==P.value&&(n.formatting.stretchlast=P.value),P.error)return P.error;break;case"titlecaps":r.titlecaps=!0;break;case"titleleft":n.formatting.titleleft=!0;break;case"measurebox":n.formatting.measurebox=!0;break;case"vocal":return p("vocalPosition",A,E,S);case"dynamic":return p("dynamicPosition",A,E,S);case"gchord":return p("chordPosition",A,E,S);case"ornament":return p("ornamentPosition",A,E,S);case"volume":return p("volumePosition",A,E,S);case"botmargin":case"botspace":case"composerspace":case"indent":case"leftmargin":case"linesep":case"musicspace":case"partsspace":case"pageheight":case"pagewidth":case"rightmargin":case"stafftopmargin":case"staffsep":case"staffwidth":case"subtitlespace":case"sysstaffsep":case"systemsep":case"textspace":case"titlespace":case"topmargin":case"topspace":case"vocalspace":case"wordsspace":return function(t,r){var i=e.getMeasurement(r);return 0===i.used||0!==r.length?'Directive "'+t+'" requires a measurement as a parameter.':(n.formatting[t]=i.value,null)}(A,E);case"voicescale":if(1!==E.length||"number"!==E[0].type)return"voicescale requires one float as a parameter";var z=E.shift();return r.currentVoice&&(r.currentVoice.scale=z.floatt,s.changeVoiceScale(r.currentVoice.scale)),null;case"voicecolor":if(1!==E.length)return"voicecolor requires one string as a parameter";var H=E.shift();return r.currentVoice&&(r.currentVoice.color=H.token,s.changeVoiceColor(r.currentVoice.color)),null;case"vskip":var O=Math.round(function(t,r){var i=e.getMeasurement(r);return 0===i.used||0!==r.length?{error:'Directive "'+t+'" requires a measurement as a parameter.'}:i.value}(A,E));return O.error?O.error:(s.addSpacing(O),null);case"scale":h(A,E);break;case"sep":if(0===E.length)s.addSeparator(14,14,85,{startChar:r.iChar,endChar:r.iChar+5});else{var D=e.getMeasurement(E);if(0===D.used)return'Directive "'+A+'" requires 3 numbers: space above, space below, length of line';var F=D.value;if(0===(D=e.getMeasurement(E)).used)return'Directive "'+A+'" requires 3 numbers: space above, space below, length of line';var I=D.value;if(0===(D=e.getMeasurement(E)).used||0!==E.length)return'Directive "'+A+'" requires 3 numbers: space above, space below, length of line';var V=D.value;s.addSeparator(F,I,V,{startChar:r.iChar,endChar:r.iChar+_.length})}break;case"barsperstaff":if(null!==(B=u("barsperstaff",A,E)))return B;break;case"staffnonote":if(1!==E.length)return"Directive staffnonote requires one parameter: 0 or 1";if("0"===E[0].token)r.staffnonote=!0;else{if("1"!==E[0].token)return"Directive staffnonote requires one parameter: 0 or 1 (received "+E[0].token+")";r.staffnonote=!1}break;case"printtempo":if(null!==(B=f("printTempo",A,E)))return B;break;case"partsbox":if(null!==(B=f("partsBox",A,E)))return B;r.partsfont.box=r.partsBox;break;case"freegchord":if(null!==(B=f("freegchord",A,E)))return B;break;case"measurenb":case"barnumbers":if(null!==(B=u("barNumbers",A,E)))return B;break;case"setbarnb":if(1!==E.length||"number"!==E[0].type)return"Directive setbarnb requires a number as a parameter.";r.currBarNumber=s.setBarNumberImmediate(E[0].intt);break;case"begintext":var Y="";for(M=e.nextLine();M&&0!==M.indexOf("%%endtext");)i.startsWith(M,"%%")?Y+=M.substring(2)+"\n":Y+=M+"\n",M=e.nextLine();s.addText(Y,{startChar:r.iChar,endChar:r.iChar+Y.length+7});break;case"continueall":r.continueall=!0;break;case"beginps":for(M=e.nextLine();M&&0!==M.indexOf("%%endps");)e.nextLine();t("Postscript ignored",o,0);break;case"deco":_.length>0&&r.ignoredDecorations.push(_.substring(0,_.indexOf(" "))),t("Decoration redefinition ignored",o,0);break;case"text":var G=e.translateString(_);s.addText(a.parseFontChangeLine(G),{startChar:r.iChar,endChar:r.iChar+_.length+7});break;case"center":var j=e.translateString(_);s.addCentered(a.parseFontChangeLine(j));break;case"font":break;case"setfont":var W=e.tokenize(_,0,_.length);if(W.length>=4&&"-"===W[0].token&&"number"===W[1].type){var q=parseInt(W[1].token);q>=1&&q<=9&&(r.setfont||(r.setfont=[]),W.shift(),W.shift(),r.setfont[q]=c(W,r.setfont[q],o,0,"setfont"))}break;case"gchordfont":case"partsfont":case"tripletfont":case"vocalfont":case"textfont":case"annotationfont":case"historyfont":case"infofont":case"measurefont":case"repeatfont":case"wordsfont":return l(A,E,o);case"composerfont":case"subtitlefont":case"tempofont":case"titlefont":case"voicefont":case"footerfont":case"headerfont":return function(e,t,r){return 0===t.length?'Directive "'+e+'" requires a font as a parameter.':(n.formatting[e]=c(t,n.formatting[e],r,0,e),null)}(A,E,o);case"barlabelfont":case"barnumberfont":case"barnumfont":return l("measurefont",E,o);case"staves":case"score":r.score_is_present=!0;for(var X,R=function(e,t,a,n,s){(t||0===r.staves.length)&&r.staves.push({index:r.staves.length,numVoices:0});var o=i.last(r.staves);void 0!==a&&void 0===o.bracket&&(o.bracket=a),void 0!==n&&void 0===o.brace&&(o.brace=n),s&&(o.connectBarLines="end"),void 0===r.voices[e]&&(r.voices[e]={staffNum:o.index,index:o.numVoices},o.numVoices++)},U=!1,K=!1,$=!1,Q=!1,J=!1,Z=!1,ee=!1,te=function(){if(ee=!0,X){var e="start";X.staffNum>0&&("start"!==r.staves[X.staffNum-1].connectBarLines&&"continue"!==r.staves[X.staffNum-1].connectBarLines||(e="continue")),r.staves[X.staffNum].connectBarLines=e}};E.length;){var re=E.shift();switch(re.token){case"(":U?t("Can't nest parenthesis in %%score",o,re.start):(U=!0,Q=!0);break;case")":!U||Q?t("Unexpected close parenthesis in %%score",o,re.start):U=!1;break;case"[":K?t("Can't nest brackets in %%score",o,re.start):(K=!0,J=!0);break;case"]":!K||J?t("Unexpected close bracket in %%score",o,re.start):(K=!1,r.staves[X.staffNum].bracket="end");break;case"{":$?t("Can't nest braces in %%score",o,re.start):($=!0,Z=!0);break;case"}":!$||Z?t("Unexpected close brace in %%score",o,re.start):($=!1,r.staves[X.staffNum].brace="end");break;case"|":te();break;default:for(var ie="";("alpha"===re.type||"number"===re.type)&&(ie+=re.token,re.continueId);)re=E.shift();R(ie,!U||Q,J?"start":K?"continue":void 0,Z?"start":$?"continue":void 0,ee),Q=!1,J=!1,Z=!1,ee=!1,X=r.voices[ie],"staves"===A&&te()}}break;case"newpage":var ae=e.getInt(_);s.addNewPage(0===ae.digits?-1:ae.value);break;case"abc":var ne=_.split(" ");switch(ne[0]){case"-copyright":case"-creator":case"-edited-by":case"-version":case"-charset":var se=ne.shift();s.addMetaText(A+se,ne.join(" "),{startChar:r.iChar,endChar:r.iChar+_.length+5});break;default:return"Unknown directive: "+A+ne[0]}break;case"header":case"footer":var oe=e.getMeat(_,0,_.length);'"'===(oe=_.substring(oe.start,oe.end))[0]&&'"'===oe[oe.length-1]&&(oe=oe.substring(1,oe.length-1));var ce=oe.split("\t"),le={};le=1===ce.length?{left:"",center:ce[0],right:""}:2===ce.length?{left:ce[0],center:ce[1],right:""}:{left:ce[0],center:ce[1],right:ce[2]},ce.length>3&&t("Too many tabs in "+A+": "+ce.length+" found.",_,0),s.addMetaTextObj(A,le,{startChar:r.iChar,endChar:r.iChar+o.length});break;case"midi":var he=e.tokenize(_,0,_.length,!0);he.length>0&&"="===he[0].token&&he.shift(),0===he.length?t("Expected midi command",_,0):function(e,r,i){var a=e.shift().token,n=[];if(m.indexOf(a)>=0)0!==e.length&&t("Unexpected parameter in MIDI "+a,i,0);else if(g.indexOf(a)>=0)1!==e.length?t("Expected one parameter in MIDI "+a,i,0):n.push(e[0].token);else if(v.indexOf(a)>=0)1!==e.length?t("Expected one parameter in MIDI "+a,i,0):"number"!==e[0].type?t("Expected one integer parameter in MIDI "+a,i,0):n.push(e[0].intt);else if(b.indexOf(a)>=0)1!==e.length&&2!==e.length?t("Expected one or two parameters in MIDI "+a,i,0):"number"!==e[0].type||2===e.length&&"number"!==e[1].type?t("Expected integer parameter in MIDI "+a,i,0):(n.push(e[0].intt),2===e.length&&n.push(e[1].intt));else if(y.indexOf(a)>=0)2!==e.length?t("Expected two parameters in MIDI "+a,i,0):"number"!==e[0].type||"number"!==e[1].type?t("Expected two integer parameters in MIDI "+a,i,0):(n.push(e[0].intt),n.push(e[1].intt));else if(w.indexOf(a)>=0)2!==e.length?t("Expected two parameters in MIDI "+a,i,0):"alpha"!==e[0].type||"number"!==e[1].type?t("Expected one string and one integer parameters in MIDI "+a,i,0):(n.push(e[0].token),n.push(e[1].intt));else if("drummap"===a)2===e.length&&"alpha"===e[0].type&&"number"===e[1].type?(r.formatting||(r.formatting={}),r.formatting.midi||(r.formatting.midi={}),r.formatting.midi.drummap||(r.formatting.midi.drummap={}),r.formatting.midi.drummap[e[0].token]=e[1].intt,n=r.formatting.midi.drummap):3===e.length&&"punct"===e[0].type&&"alpha"===e[1].type&&"number"===e[2].type?(r.formatting||(r.formatting={}),r.formatting.midi||(r.formatting.midi={}),r.formatting.midi.drummap||(r.formatting.midi.drummap={}),r.formatting.midi.drummap[e[0].token+e[1].token]=e[2].intt,n=r.formatting.midi.drummap):t("Expected one note name and one integer parameter in MIDI "+a,i,0);else if(T.indexOf(a)>=0)3!==e.length||"number"!==e[0].type||"/"!==e[1].token||"number"!==e[2].type?t("Expected fraction parameter in MIDI "+a,i,0):(n.push(e[0].intt),n.push(e[2].intt));else if(x.indexOf(a)>=0)4!==e.length?t("Expected four parameters in MIDI "+a,i,0):"number"!==e[0].type||"number"!==e[1].type||"number"!==e[2].type||"number"!==e[3].type?t("Expected four integer parameters in MIDI "+a,i,0):(n.push(e[0].intt),n.push(e[1].intt),n.push(e[2].intt),n.push(e[3].intt));else if(k.indexOf(a)>=0)5!==e.length?t("Expected five parameters in MIDI "+a,i,0):"number"!==e[0].type||"number"!==e[1].type||"number"!==e[2].type||"number"!==e[3].type||"number"!==e[4].type?t("Expected five integer parameters in MIDI "+a,i,0):(n.push(e[0].intt),n.push(e[1].intt),n.push(e[2].intt),n.push(e[3].intt),n.push(e[4].intt));else if(b.indexOf(a)>=0)1!==e.length||4!==e.length?t("Expected one or two parameters in MIDI "+a,i,0):"number"!==e[0].type?t("Expected integer parameter in MIDI "+a,i,0):4===e.length?("octave"!==e[1].token&&t("Expected octave parameter in MIDI "+a,i,0),"="!==e[2].token&&t("Expected octave parameter in MIDI "+a,i,0),"number"!==e[3].type&&t("Expected integer parameter for octave in MIDI "+a,i,0)):(n.push(e[0].intt),4===e.length&&n.push(e[3].intt));else if(C.indexOf(a)>=0)if(e.length<2)t("Expected string parameter and at least one integer parameter in MIDI "+a,i,0);else if("alpha"!==e[0].type)t("Expected string parameter and at least one integer parameter in MIDI "+a,i,0);else{var o=e.shift();for(n.push(o.token);e.length>0;)"number"!==(o=e.shift()).type&&t("Expected integer parameter in MIDI "+a,i,0),n.push(o.intt)}s.hasBeginMusic()?s.appendElement("midi",-1,-1,{cmd:a,params:n}):(void 0===r.formatting.midi&&(r.formatting.midi={}),r.formatting.midi[a]=n)}(he,n,_);break;case"percmap":var de=function(e){var t=e.split(/\s+/);if(2!==t.length&&3!==t.length)return{error:'Expected parameters "abc-note", "drum-sound", and optionally "note-head"'};var r=t[0],i=parseInt(t[1],10);if((isNaN(i)||i<35||i>81)&&t[1]&&(i=d.indexOf(t[1].toLowerCase())+35),isNaN(i)||i<35||i>81)return{error:'Expected drum name, received "'+t[1]+'"'};var a={sound:i};return 3===t.length&&(a.noteHead=t[2]),{key:r,value:a}}(_);de.error?t(de.error,o,8):(n.formatting.percmap||(n.formatting.percmap={}),n.formatting.percmap[de.key]=de.value);break;case"map":case"playtempo":case"auquality":case"continuous":case"nobarcheck":n.formatting[A]=_;break;default:return"Unknown directive: "+A}return null},a.globalFormatting=function(i){for(var a in i)if(i.hasOwnProperty(a)){var s,o=""+i[a],c=e.tokenize(o,0,o.length);switch(a){case"titlefont":case"gchordfont":case"composerfont":case"footerfont":case"headerfont":case"historyfont":case"infofont":case"measurefont":case"partsfont":case"repeatfont":case"subtitlefont":case"tempofont":case"textfont":case"voicefont":case"tripletfont":case"vocalfont":case"wordsfont":case"annotationfont":case"tablabelfont":case"tabnumberfont":case"tabgracefont":l(a,c,o);break;case"scale":h(a,c);break;case"partsbox":null!==(s=f("partsBox",a,c))&&t(s),r.partsfont.box=r.partsBox;break;case"freegchord":null!==(s=f("freegchord",a,c))&&t(s);break;case"fontboxpadding":1===c.length&&"number"===c[0].type||t('Directive "'+a+'" requires a number as a parameter.'),n.formatting.fontboxpadding=c[0].floatt;break;case"stafftopmargin":1===c.length&&"number"===c[0].type||t('Directive "'+a+'" requires a number as a parameter.'),n.formatting.stafftopmargin=c[0].floatt;break;case"stretchlast":var d=N(c);if(void 0!==d.value&&(n.formatting.stretchlast=d.value),d.error)return d.error;break;default:t("Formatting directive unrecognized: ",a,0)}}}}(),e.exports=a},9928:function(e,t,r){var i=r(5008),a=r(8360),n=r(9708);e.exports=function(e,t,r,s,o){this.reset=function(e,t,r,i){n.initialize(e,t,r,i,o),a.initialize(e,t,r,i,o)},this.reset(e,t,r,s),this.setTitle=function(e,t){r.hasMainTitle?o.addSubtitle(e,{startChar:r.iChar,endChar:r.iChar+t+2}):(o.addMetaText("title",e,{startChar:r.iChar,endChar:r.iChar+t+2}),r.hasMainTitle=!0)},this.setMeter=function(i){if("C"===(i=e.stripComment(i)))return!0===r.havent_set_length&&(r.default_length=.125,r.havent_set_length=!1),{type:"common_time"};if("C|"===i)return!0===r.havent_set_length&&(r.default_length=.125,r.havent_set_length=!1),{type:"cut_time"};if("o"===i)return!0===r.havent_set_length&&(r.default_length=.125,r.havent_set_length=!1),{type:"tempus_perfectum"};if("c"===i)return!0===r.havent_set_length&&(r.default_length=.125,r.havent_set_length=!1),{type:"tempus_imperfectum"};if("o."===i)return!0===r.havent_set_length&&(r.default_length=.125,r.havent_set_length=!1),{type:"tempus_perfectum_prolatio"};if("c."===i)return!0===r.havent_set_length&&(r.default_length=.125,r.havent_set_length=!1),{type:"tempus_imperfectum_prolatio"};if(0===i.length||"none"===i.toLowerCase())return!0===r.havent_set_length&&(r.default_length=.125,r.havent_set_length=!1),null;var a=e.tokenize(i,0,i.length);try{var n=function(){var e=function(){var e={value:0,num:""},t=a.shift();for("("===t.token&&(t=a.shift());;){if("number"!==t.type)throw"Expected top number of meter";if(e.value+=parseInt(t.token),e.num+=t.token,0===a.length||"/"===a[0].token)return e;if(")"===(t=a.shift()).token){if(0===a.length||"/"===a[0].token)return e;throw"Unexpected paren in meter"}if("."!==t.token&&"+"!==t.token)throw"Expected top number of meter";if(e.num+=t.token,0===a.length)throw"Expected top number of meter";t=a.shift()}return e}();if(0===a.length)return e;var t=a.shift();if("/"!==t.token)throw"Expected slash in meter";if("number"!==(t=a.shift()).type)throw"Expected bottom number of meter";return e.den=t.token,e.value=e.value/parseInt(e.den),e};if(0===a.length)throw"Expected meter definition in M: line";for(var s={type:"specified",value:[]},o=0;;){var c=n();o+=c.value;var l={num:c.num};if(void 0!==c.den&&(l.den=c.den),s.value.push(l),0===a.length)break}return!0===r.havent_set_length&&(r.default_length=o<.75?.0625:.125,r.havent_set_length=!1),s}catch(e){t(e,i,0)}return null},this.calcTempo=function(e){var t=1/4;r.meter&&"specified"===r.meter.type?t=1/parseInt(r.meter.value[0].den):r.origMeter&&"specified"===r.origMeter.type&&(t=1/parseInt(r.origMeter.value[0].den));for(var i=0;i0&&(r.default_length=n/s,r.havent_set_length=!1)}else 1===a.length&&"1"===a[0]&&(r.default_length=1,r.havent_set_length=!1)};var c={larghissimo:20,adagissimo:24,sostenuto:28,grave:32,largo:40,lento:50,larghetto:60,adagio:68,adagietto:74,andante:80,andantino:88,"marcia moderato":84,"andante moderato":100,moderato:112,allegretto:116,"allegro moderato":120,allegro:126,animato:132,agitato:140,veloce:148,"mosso vivo":156,vivace:164,vivacissimo:172,allegrissimo:176,presto:184,prestissimo:210};this.setTempo=function(i,a,n,s){try{var o=e.tokenize(i,a,n);if(0===o.length)throw"Missing parameter in Q: field";var l={startChar:s+a-2,endChar:s+n},h=!0,d=o.shift();if("quote"===d.type&&(l.preString=d.token,d=o.shift(),0===o.length))return c[l.preString.toLowerCase()]&&(l.bpm=c[l.preString.toLowerCase()],l.suppressBpm=!0),{type:"immediate",tempo:l};if("alpha"===d.type&&"C"===d.token){if(0===o.length)throw"Missing tempo after C in Q: field";if("punct"===(d=o.shift()).type&&"="===d.token){if(0===o.length)throw"Missing tempo after = in Q: field";if("number"!==(d=o.shift()).type)throw"Expected number after = in Q: field";l.duration=[1],l.bpm=parseInt(d.token)}else{if("number"!==d.type)throw"Expected number or equal after C in Q: field";if(l.duration=[parseInt(d.token)],0===o.length)throw"Missing = after duration in Q: field";if("punct"!==(d=o.shift()).type||"="!==d.token)throw"Expected = after duration in Q: field";if(0===o.length)throw"Missing tempo after = in Q: field";if("number"!==(d=o.shift()).type)throw"Expected number after = in Q: field";l.bpm=parseInt(d.token)}}else{if("number"!==d.type)throw"Unknown value in Q: field";var u=parseInt(d.token);if(0===o.length||"quote"===o[0].type)l.duration=[1],l.bpm=u;else{if(h=!1,"punct"!==(d=o.shift()).type&&"/"!==d.token)throw"Expected fraction in Q: field";if("number"!==(d=o.shift()).type)throw"Expected fraction in Q: field";var f=parseInt(d.token);for(l.duration=[u/f];o.length>0&&"="!==o[0].token&&"quote"!==o[0].type;){if("number"!==(d=o.shift()).type)throw"Expected fraction in Q: field";if(u=parseInt(d.token),"punct"!==(d=o.shift()).type&&"/"!==d.token)throw"Expected fraction in Q: field";if("number"!==(d=o.shift()).type)throw"Expected fraction in Q: field";f=parseInt(d.token),l.duration.push(u/f)}if("punct"!==(d=o.shift()).type&&"="!==d.token)throw"Expected = in Q: field";if("number"!==(d=o.shift()).type)throw"Expected tempo in Q: field";l.bpm=parseInt(d.token)}}if(0!==o.length&&("quote"===(d=o.shift()).type&&(l.postString=d.token,d=o.shift()),0!==o.length))throw"Unexpected string at end of Q: field";return!1===r.printTempo&&(l.suppress=!0),{type:h?"delaySet":"immediate",tempo:l}}catch(e){return t(e,i,a),{type:"none"}}},this.letter_to_inline_header=function(i,c,l){var h=e.eatWhiteSpace(i,c);if(c+=h,i.length>=c+5&&"["===i[c]&&":"===i[c+2]){var d=i.indexOf("]",c),u=r.iChar+c,f=r.iChar+d+1;switch(i.substring(c,c+3)){case"[I:":var p=a.addDirective(i.substring(c+3,d));return p&&t(p,i,c),[d-c+1+h];case"[M:":var m=this.setMeter(i.substring(c+3,d));return o.hasBeginMusic()&&m?o.appendStartingElement("meter",u,f,m):r.meter=m,[d-c+1+h];case"[K:":var g=n.parseKey(i.substring(c+3,d),!0);return g.foundClef&&o.hasBeginMusic()&&o.appendStartingElement("clef",u,f,r.clef),g.foundKey&&o.hasBeginMusic()&&o.appendStartingElement("key",u,f,n.fixKey(r.clef,r.key)),[d-c+1+h];case"[P:":var v=a.parseFontChangeLine(i.substring(c+3,d));return l||s.lines.length<=s.lineNum?r.partForNextLine={title:v,startChar:u,endChar:f}:o.appendElement("part",u,f,{title:v}),[d-c+1+h];case"[L:":return this.setDefaultLength(i,c+3,d),[d-c+1+h];case"[Q:":if(d>0){var b=this.setTempo(i,c+3,d,r.iChar);return"delaySet"===b.type?o.hasBeginMusic()?o.appendElement("tempo",u,f,this.calcTempo(b.tempo)):r.tempoForNextLine=["tempo",u,f,this.calcTempo(b.tempo)]:"immediate"===b.type&&(!l&&o.hasBeginMusic()?o.appendElement("tempo",u,f,b.tempo):r.tempoForNextLine=["tempo",u,f,b.tempo]),[d-c+1+h,i[c+1],i.substring(c+3,d)]}break;case"[V:":if(d>0)return n.parseVoice(i,c+3,d),[d-c+1+h,i[c+1],i.substring(c+3,d)];break;case"[r:":return[d-c+1+h]}}return[0]},this.letter_to_body_header=function(e,s){if(e.length>=s+3)switch(e.substring(s,s+2)){case"I:":var c=a.addDirective(e.substring(s+2));return c&&t(c,e,s),[e.length];case"M:":var l=this.setMeter(e.substring(s+2));return o.hasBeginMusic()&&l&&o.appendStartingElement("meter",r.iChar+s,r.iChar+e.length,l),[e.length];case"K:":var h=n.parseKey(e.substring(s+2),o.hasBeginMusic());return h.foundClef&&o.hasBeginMusic()&&o.appendStartingElement("clef",r.iChar+s,r.iChar+e.length,r.clef),h.foundKey&&o.hasBeginMusic()&&o.appendStartingElement("key",r.iChar+s,r.iChar+e.length,n.fixKey(r.clef,r.key)),[e.length];case"P:":return o.hasBeginMusic()&&o.appendElement("part",r.iChar+s,r.iChar+e.length,{title:e.substring(s+2)}),[e.length];case"L:":return this.setDefaultLength(e,s+2,e.length),[e.length];case"Q:":var d=e.indexOf("",s+2);-1===d&&(d=e.length);var u=this.setTempo(e,s+2,d,r.iChar);return"delaySet"===u.type?o.appendElement("tempo",r.iChar+s,r.iChar+e.length,this.calcTempo(u.tempo)):"immediate"===u.type&&o.appendElement("tempo",r.iChar+s,r.iChar+e.length,u.tempo),[d,e[s],i.strip(e.substring(s+2))];case"V:":return n.parseVoice(e,s+2,e.length),[e.length,e[s],i.strip(e.substring(s+2))]}return[0]};var l={A:"author",B:"book",C:"composer",D:"discography",F:"url",G:"group",I:"instruction",N:"notes",O:"origin",R:"rhythm",S:"source",W:"unalignedWords",Z:"transcription"};this.parseHeader=function(i){var c=l[i[0]],h=i.length-2,d=e.translateString(e.stripComment(i.substring(2)));if("unalignedWords"===c||"notes"===c)o.addMetaTextArray(c,a.parseFontChangeLine(d),{startChar:r.iChar,endChar:r.iChar+i.length});else if(void 0!==c)o.addMetaText(c,a.parseFontChangeLine(d),{startChar:r.iChar,endChar:r.iChar+i.length});else{var u=r.iChar,f=u+i.length;switch(i[0]){case"H":for(o.addMetaTextArray("history",a.parseFontChangeLine(d),{startChar:r.iChar,endChar:r.iChar+i.length}),i=e.peekLine();i&&":"!==i[1];)e.nextLine(),o.addMetaTextArray("history",a.parseFontChangeLine(e.translateString(e.stripComment(i))),{startChar:r.iChar,endChar:r.iChar+i.length}),i=e.peekLine();break;case"K":this.resolveTempo();var p=n.parseKey(i.substring(2),!1);!r.is_in_header&&o.hasBeginMusic()&&(p.foundClef&&o.appendStartingElement("clef",u,f,r.clef),p.foundKey&&o.appendStartingElement("key",u,f,n.fixKey(r.clef,r.key))),r.is_in_header=!1;break;case"L":this.setDefaultLength(i,2,i.length);break;case"M":r.origMeter=r.meter=this.setMeter(i.substring(2));break;case"P":r.is_in_header?o.addMetaText("partOrder",a.parseFontChangeLine(d),{startChar:r.iChar,endChar:r.iChar+i.length}):r.partForNextLine={title:d,startChar:u,endChar:f};break;case"Q":var m=this.setTempo(i,2,i.length,r.iChar);"delaySet"===m.type?r.tempo=m.tempo:"immediate"===m.type&&(s.metaText.tempo?r.tempoForNextLine=["tempo",u,f,m.tempo]:s.metaText.tempo=m.tempo);break;case"T":r.titlecaps&&(d=d.toUpperCase()),this.setTitle(a.parseFontChangeLine(e.theReverser(d)),h);break;case"U":this.addUserDefinition(i,2,i.length);break;case"V":if(n.parseVoice(i,2,i.length),!r.is_in_header)return{newline:!0};break;case"s":return{symbols:!0};case"w":return{words:!0};case"X":break;case"E":case"m":t("Ignored header",i,0);break;default:return{regular:!0}}}return{}}}},9708:function(e,t,r){var i=r(5008),a=r(8360),n=r(2821),s={};!function(){var e,t,r,o;s.initialize=function(i,a,n,s,c){e=i,t=a,r=n,o=c},s.standardKey=function(e,t,i,a){return n.keySignature(r,e,t,i,a)};var c={treble:{clef:"treble",pitch:4,mid:0},"treble+8":{clef:"treble+8",pitch:4,mid:0},"treble-8":{clef:"treble-8",pitch:4,mid:0},"treble^8":{clef:"treble+8",pitch:4,mid:0},treble_8:{clef:"treble-8",pitch:4,mid:0},treble1:{clef:"treble",pitch:2,mid:2},treble2:{clef:"treble",pitch:4,mid:0},treble3:{clef:"treble",pitch:6,mid:-2},treble4:{clef:"treble",pitch:8,mid:-4},treble5:{clef:"treble",pitch:10,mid:-6},perc:{clef:"perc",pitch:6,mid:0},none:{clef:"none",mid:0},bass:{clef:"bass",pitch:8,mid:-12},"bass+8":{clef:"bass+8",pitch:8,mid:-12},"bass-8":{clef:"bass-8",pitch:8,mid:-12},"bass^8":{clef:"bass+8",pitch:8,mid:-12},bass_8:{clef:"bass-8",pitch:8,mid:-12},"bass+16":{clef:"bass",pitch:8,mid:-12},"bass-16":{clef:"bass",pitch:8,mid:-12},"bass^16":{clef:"bass",pitch:8,mid:-12},bass_16:{clef:"bass",pitch:8,mid:-12},bass1:{clef:"bass",pitch:2,mid:-6},bass2:{clef:"bass",pitch:4,mid:-8},bass3:{clef:"bass",pitch:6,mid:-10},bass4:{clef:"bass",pitch:8,mid:-12},bass5:{clef:"bass",pitch:10,mid:-14},tenor:{clef:"alto",pitch:8,mid:-8},tenor1:{clef:"alto",pitch:2,mid:-2},tenor2:{clef:"alto",pitch:4,mid:-4},tenor3:{clef:"alto",pitch:6,mid:-6},tenor4:{clef:"alto",pitch:8,mid:-8},tenor5:{clef:"alto",pitch:10,mid:-10},alto:{clef:"alto",pitch:6,mid:-6},alto1:{clef:"alto",pitch:2,mid:-2},alto2:{clef:"alto",pitch:4,mid:-4},alto3:{clef:"alto",pitch:6,mid:-6},alto4:{clef:"alto",pitch:8,mid:-8},alto5:{clef:"alto",pitch:10,mid:-10},"alto+8":{clef:"alto+8",pitch:6,mid:-6},"alto-8":{clef:"alto-8",pitch:6,mid:-6},"alto^8":{clef:"alto+8",pitch:6,mid:-6},alto_8:{clef:"alto-8",pitch:6,mid:-6}},l=function(e,t){var r=c[e];return(r?r.mid:0)+t};s.fixClef=function(e){var t=c[e.type];t&&(e.clefPos=t.pitch,e.type=t.clef)},s.deepCopyKey=function(e){var t={accidentals:[],root:e.root,acc:e.acc,mode:e.mode};return e.accidentals.forEach((function(e){t.accidentals.push(i.clone(e))})),t};var h={A:5,B:6,C:0,D:1,E:2,F:3,G:4,a:12,b:13,c:7,d:8,e:9,f:10,g:11};s.addPosToKey=function(e,t){var r=e.verticalPos;t.accidentals.forEach((function(e){var t=h[e.note];t-=r,e.verticalPos=t})),t.impliedNaturals&&t.impliedNaturals.forEach((function(e){var t=h[e.note];t-=r,e.verticalPos=t})),r<-10?(t.accidentals.forEach((function(e){e.verticalPos-=7,(e.verticalPos>=11||10===e.verticalPos&&"flat"===e.acc)&&(e.verticalPos-=7),"A"===e.note&&"sharp"===e.acc&&(e.verticalPos-=7),"G"!==e.note&&"F"!==e.note||"flat"!==e.acc||(e.verticalPos-=7)})),t.impliedNaturals&&t.impliedNaturals.forEach((function(e){e.verticalPos-=7,(e.verticalPos>=11||10===e.verticalPos&&"flat"===e.acc)&&(e.verticalPos-=7),"A"===e.note&&"sharp"===e.acc&&(e.verticalPos-=7),"G"!==e.note&&"F"!==e.note||"flat"!==e.acc||(e.verticalPos-=7)}))):r<-4?(t.accidentals.forEach((function(e){e.verticalPos-=7,-8!==r||"f"!==e.note&&"g"!==e.note||"sharp"!==e.acc||(e.verticalPos-=7)})),t.impliedNaturals&&t.impliedNaturals.forEach((function(e){e.verticalPos-=7,-8!==r||"f"!==e.note&&"g"!==e.note||"sharp"!==e.acc||(e.verticalPos-=7)}))):r>=7&&(t.accidentals.forEach((function(e){e.verticalPos+=7})),t.impliedNaturals&&t.impliedNaturals.forEach((function(e){e.verticalPos+=7})))},s.fixKey=function(e,t){var r=i.clone(t);return s.addPosToKey(e,r),r};var d=function(e){var t=0,r=e[t++];"^"!==r&&"_"!==r||(r=e[t++]);var i=h[r];for(void 0===i&&(i=6);t0){c.foundKey=!0;var d="",u="";o[0].token.length>1?o[0].token=o[0].token.substring(1):o.shift();var f=h.token;if(o.length>0){var p=e.getSharpFlat(o[0].token);if(p.len>0&&(o[0].token.length>1?o[0].token=o[0].token.substring(1):o.shift(),f+=p.token,d=p.token),o.length>0){var m=e.getMode(o[0].token);m.len>0&&(o.shift(),f+=m.token,u=m.token)}if(void 0===s.standardKey(f,h.token,d,0))return t("Unsupported key signature: "+f,i,0),c}var g,v=s.deepCopyKey(r.key),b=!n&&r.globalTranspose?-r.globalTranspose:0;if(n&&(g=r.globalTransposeOrigKeySig),r.key=s.deepCopyKey(s.standardKey(f,h.token,d,b)),n&&(r.globalTransposeOrigKeySig=g),r.key.mode=u,v){for(var y,x=0;x0;)switch(o[0].token){case"m":case"middle":if(o.shift(),0===o.length)return t("Expected = after middle",i,0),c;if("="!==(k=o.shift()).token){t("Expected = after middle",i,k.start);break}if(0===o.length)return t("Expected parameter after middle=",i,0),c;var E=e.getPitchFromTokens(o);E.warn&&t(E.warn,i,0),E.position&&(r.clef.verticalPos=E.position-6);break;case"transpose":if(o.shift(),0===o.length)return t("Expected = after transpose",i,0),c;if("="!==(k=o.shift()).token){t("Expected = after transpose",i,k.start);break}if(0===o.length)return t("Expected parameter after transpose=",i,0),c;if("number"!==o[0].type){t("Expected number after transpose",i,o[0].start);break}r.clef.transpose=o[0].intt,o.shift();break;case"stafflines":if(o.shift(),0===o.length)return t("Expected = after stafflines",i,0),c;if("="!==(k=o.shift()).token){t("Expected = after stafflines",i,k.start);break}if(0===o.length)return t("Expected parameter after stafflines=",i,0),c;if("number"!==o[0].type){t("Expected number after stafflines",i,o[0].start);break}r.clef.stafflines=o[0].intt,o.shift();break;case"staffscale":if(o.shift(),0===o.length)return t("Expected = after staffscale",i,0),c;if("="!==(k=o.shift()).token){t("Expected = after staffscale",i,k.start);break}if(0===o.length)return t("Expected parameter after staffscale=",i,0),c;if("number"!==o[0].type){t("Expected number after staffscale",i,o[0].start);break}r.clef.staffscale=o[0].floatt,o.shift();break;case"octave":if(o.shift(),0===o.length)return t("Expected = after octave",i,0),c;if("="!==(k=o.shift()).token){t("Expected = after octave",i,k.start);break}if(0===o.length)return t("Expected parameter after octave=",i,0),c;if("number"!==o[0].type){t("Expected number after octave",i,o[0].start);break}r.octave=o[0].intt,o.shift();break;case"style":if(o.shift(),0===o.length)return t("Expected = after style",i,0),c;if("="!==(k=o.shift()).token){t("Expected = after style",i,k.start);break}if(0===o.length)return t("Expected parameter after style=",i,0),c;switch(o[0].token){case"normal":case"harmonic":case"rhythm":case"x":case"triangle":r.style=o[0].token,o.shift();break;default:t("error parsing style element: "+o[0].token,i,o[0].start)}break;case"clef":if(o.shift(),0===o.length)return t("Expected = after clef",i,0),c;if("="!==(k=o.shift()).token){t("Expected = after clef",i,k.start);break}if(0===o.length)return t("Expected parameter after clef=",i,0),c;case"treble":case"bass":case"alto":case"tenor":case"perc":case"none":var _=o.shift();switch(_.token){case"treble":case"tenor":case"alto":case"bass":case"perc":case"none":break;case"C":case"c":_.token="alto";break;case"F":case"f":_.token="bass";break;case"G":case"g":_.token="treble";break;default:t("Expected clef name. Found "+_.token,i,_.start)}o.length>0&&"number"===o[0].type&&(_.token+=o[0].token,o.shift()),o.length>1&&("-"===o[0].token||"+"===o[0].token||"^"===o[0].token||"_"===o[0].token)&&"8"===o[1].token&&(_.token+=o[0].token+o[1].token,o.shift(),o.shift()),r.clef={type:_.token,verticalPos:l(_.token,0)},r.currentVoice&&void 0!==r.currentVoice.transpose&&(r.clef.transpose=r.currentVoice.transpose),c.foundClef=!0;break;default:t("Unknown parameter: "+o[0].token,i,o[0].start),o.shift()}return c},s.parseVoice=function(i,a,n){var s=e.getMeat(i,a,n),c=s.start,h=s.end,u=e.getToken(i,c,h);if(0!==u.length){var f=!1;void 0===r.voices[u]&&(r.voices[u]={},f=!0,r.score_is_present&&t("Can't have an unknown V: id when the %score directive is present",i,c)),c+=u.length,c+=e.eatWhiteSpace(i,c);for(var p={startStaff:f},m=function(r){var a=e.getVoiceToken(i,c,h);void 0!==a.warn?t("Expected value for "+r+" in voice: "+a.warn,i,c):void 0!==a.err?t("Expected value for "+r+" in voice: "+a.err,i,c):0===a.token.length&&'"'!==i[c]?t("Expected value for "+r+" in voice",i,c):p[r]=a.token,c+=a.len},g=function(a,n,s){var o=e.getVoiceToken(i,c,h);void 0!==o.warn?t("Expected value for "+n+" in voice: "+o.warn,i,c):void 0!==o.err?t("Expected value for "+n+" in voice: "+o.err,i,c):0===o.token.length&&'"'!==i[c]?t("Expected value for "+n+" in voice",i,c):("number"===s&&(o.token=parseFloat(o.token)),r.voices[a][n]=o.token),c+=o.len},v=function(r,a){var n=e.getVoiceToken(i,c,h);if(void 0!==n.warn)t("Expected value for "+r+" in voice: "+n.warn,i,c);else if(void 0!==n.err)t("Expected value for "+r+" in voice: "+n.err,i,c);else{if(0!==n.token.length||'"'===i[c])return"number"===a&&(n.token=parseFloat(n.token)),n.token;t("Expected value for "+r+" in voice",i,c)}c+=n.len},b=function(a,n){var s=e.getVoiceToken(i,c,h);if(void 0!==s.warn)t("Expected one of (_B, _E, _b, _e) for "+n+" in voice: "+s.warn,i,c);else if(0===s.token.length&&'"'!==i[c])t("Expected one of (_B, _E, _b, _e) for "+n+" in voice",i,c);else{var o={_B:2,_E:9,_b:-10,_e:-3}[s.token];o?r.voices[a][n]=o:t("Expected one of (_B, _E, _b, _e) for "+n+" in voice",i,c)}c+=s.len};c0&&(t+=d[0],"V"===d[1]&&this.startNewLine());for(var u=0;t0)t+=p[0],"V"===p[1]&&(l=!0);else{var m;for((!o.hasBeginMusic()||l&&!this.lineContinuation)&&(this.startNewLine(),l=!1);;)if((m=i.eatWhiteSpace(e,t))>0&&(t+=m),t>0&&""===e[t-1]&&(m=c.letter_to_body_header(e,t))[0]>0&&("V"===m[1]&&this.startNewLine(),t=m[0],n.start_new_line=!1),(m=P(e,t))[0]>0&&(t+=m[0]),(m=_(e,t))[0]>0){N.chord||(N.chord=[]);var g=i.translateString(m[1]);g=g.replace(/;/g,"\n");for(var v=!1,x=0;x0&&(N.force_end_beam_last=!0),t+=k}else if((m=-1===b.indexOf(e[t])?L(e,t):[0])[0]>0)null===m[1]?t+10&&(0===m[1].indexOf("style=")?N.style=m[1].substr(6):(void 0===N.decoration&&(N.decoration=[]),"beambr1"===m[1]?N.beambr=1:"beambr2"===m[1]?N.beambr=2:N.decoration.push(m[1]))),t+=m[0];else{if(!((m=M(e,t))[0]>0))break;N.gracenotes=m[1],t+=m[0]}if((m=z(e,t))[0]>0){u=0,void 0!==N.gracenotes&&(N.rest={type:"spacer"},N.duration=.125,n.addFormattingOptions(N,s.formatting,"note"),o.appendElement("note",r+t,r+t+m[0],N),n.measureNotEmpty=!0,N={});var w={type:m[1]};0===w.type.length?a("Unknown bar type",e,t):(n.inEnding&&"bar_thin"!==w.type&&(w.endEnding=!0,n.inEnding=!1),m[2]&&(w.startEnding=m[2],n.inEnding&&(w.endEnding=!0),n.inEnding=!0,"bar_right_repeat"===m[1]?n.restoreStartEndingHoldOvers():n.duplicateStartEndingHoldOvers()),void 0!==N.decoration&&(w.decoration=N.decoration),void 0!==N.chord&&(w.chord=N.chord),w.startEnding&&void 0===n.barFirstEndingNum?n.barFirstEndingNum=n.currBarNumber:w.startEnding&&w.endEnding&&n.barFirstEndingNum?n.currBarNumber=n.barFirstEndingNum:w.endEnding&&(n.barFirstEndingNum=void 0),"bar_invisible"!==w.type&&n.measureNotEmpty&&(void 0===n.currentVoice||0===n.currentVoice.staffNum&&0===n.currentVoice.index)&&(n.currBarNumber++,n.barNumbers&&n.currBarNumber%n.barNumbers==0&&(w.barNumber=n.currBarNumber)),n.addFormattingOptions(N,s.formatting,"bar"),o.appendElement("bar",r+f,r+t+m[0],w),n.measureNotEmpty=!1,N={}),t+=m[0]}else if("&"===e[t])(m=A(e,t))[0]>0&&(o.appendElement("overlay",r,r+1,{}),t+=1,u++);else{if((m=H(e,t)).consumed>0&&(void 0!==m.startSlur&&(N.startSlur=m.startSlur),m.dottedSlur&&(N.dottedSlur=!0),void 0!==m.triplet&&(h>0?a("Can't nest triplets",e,t):(N.startTriplet=m.triplet,N.tripletMultiplier=m.tripletQ/m.triplet,N.tripletR=m.num_notes,h=void 0===m.num_notes?m.triplet:m.num_notes)),t+=m.consumed),"["===e[t]){t++;for(var T=null,C=!1,I=!1;!I;){var V=L(e,t);V[0]>0&&(t+=V[0]);var Y=D(e,t,{},!1);if(null!==Y&&void 0!==Y.pitch)V[0]>0&&0!==V[1].indexOf("style=")&&(void 0===N.decoration&&(N.decoration=[]),N.decoration.push(V[1])),Y.end_beam&&(N.end_beam=!0,delete Y.end_beam),void 0===N.pitches?(N.duration=Y.duration,N.pitches=[Y]):N.pitches.push(Y),delete Y.duration,V[0]>0&&0===V[1].indexOf("style=")&&(N.pitches[N.pitches.length-1].style=V[1].substr(6)),n.inTieChord[N.pitches.length]&&(Y.endTie=!0,n.inTieChord[N.pitches.length]=void 0),Y.startTie&&(n.inTieChord[N.pitches.length]=!0),t=Y.endChar,delete Y.endChar;else if(" "===e[t])a("Spaces are not allowed in chords",e,t),t++;else{if(t0&&(!N.rest||"spacer"!==N.rest.type)&&0==--h&&(N.endTriplet=!0);for(var G=!1;t":case"<":var j=F(e,t);t+=j[0]-1,n.next_note_duration=j[2],T?T*=j[1]:T=j[1];break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":case"/":var W=i.getFraction(e,t);T=W.value;var q=e[t=W.index];" "===q&&(C=!0),"-"===q||")"===q||" "===q||"<"===q||">"===q?t--:G=!0;break;default:G=!0}G||t++}}else a("Expected ']' to end the chords",e,t);void 0!==N.pitches&&(null!==T&&(N.duration=N.duration*T,C&&O(N)),n.addFormattingOptions(N,s.formatting,"note"),o.appendElement("note",r+f,r+t,N),n.measureNotEmpty=!0,N={}),I=!0}}}else{var X={},R=D(e,t,X,!0);void 0!==X.endTie&&E(n,u,!0),null!==R&&(void 0!==R.pitch?(N.pitches=[{}],void 0!==R.accidental&&(N.pitches[0].accidental=R.accidental),N.pitches[0].pitch=R.pitch,N.pitches[0].name=R.name,(R.midipitch||0===R.midipitch)&&(N.pitches[0].midipitch=R.midipitch),void 0!==R.endSlur&&(N.pitches[0].endSlur=R.endSlur),void 0!==R.endTie&&(N.pitches[0].endTie=R.endTie),void 0!==R.startSlur&&(N.pitches[0].startSlur=R.startSlur),void 0!==N.startSlur&&(N.pitches[0].startSlur=N.startSlur),void 0!==N.dottedSlur&&(N.pitches[0].dottedSlur=!0),void 0!==R.startTie&&(N.pitches[0].startTie=R.startTie),void 0!==N.startTie&&(N.pitches[0].startTie=N.startTie)):(N.rest=R.rest,void 0!==R.endSlur&&(N.endSlur=R.endSlur),void 0!==R.endTie&&(N.rest.endTie=R.endTie),void 0!==R.startSlur&&(N.startSlur=R.startSlur),void 0!==R.startTie&&(N.rest.startTie=R.startTie),void 0!==N.startTie&&(N.rest.startTie=N.startTie)),void 0!==R.chord&&(N.chord=R.chord),void 0!==R.duration&&(N.duration=R.duration),void 0!==R.decoration&&(N.decoration=R.decoration),void 0!==R.graceNotes&&(N.graceNotes=R.graceNotes),delete N.startSlur,delete N.dottedSlur,S(n,u,N)&&(void 0!==N.pitches?N.pitches[0].endTie=!0:"spacer"!==N.rest.type&&(N.rest.endTie=!0),E(n,u,!1)),(R.startTie||N.startTie)&&E(n,u,!0),t=R.endChar,h>0&&(!R.rest||"spacer"!==R.rest.type)&&0==--h&&(N.endTriplet=!0),R.end_beam&&O(N),N.rest&&"rest"===N.rest.type&&1===N.duration&&B(n)<=1&&(N.rest.type="whole",N.duration=B(n)),N.duration<1&&-1===y.indexOf(N.duration)&&0!==N.duration&&(N.rest&&"spacer"===N.rest.type||a("Duration not representable: "+e.substring(f,t),e,t)),n.addFormattingOptions(N,s.formatting,"note"),o.appendElement("note",r+f,r+t,N),n.measureNotEmpty=!0,N={})}t===f&&(" "!==e[t]&&"`"!==e[t]&&a("Unknown character ignored",e,t),t++)}}}this.lineContinuation=e.indexOf("")>=0||d[0]>0,this.lineContinuation||(N={})}};var E=function(e,t,r){var i=e.currentVoice?100*e.currentVoice.staffNum+e.currentVoice.index:0;void 0===e.inTie[t]&&(e.inTie[t]=[]),e.inTie[t][i]=r},_=function(e,t){if('"'===e[t]){var r=i.getBrackettedSubstring(e,t,5);if(r[2]||a("Missing the closing quote while parsing the chord symbol",e,t),r[0]>0&&r[1].length>0&&"^"===r[1][0])r[1]=r[1].substring(1),r[2]="above";else if(r[0]>0&&r[1].length>0&&"_"===r[1][0])r[1]=r[1].substring(1),r[2]="below";else if(r[0]>0&&r[1].length>0&&"<"===r[1][0])r[1]=r[1].substring(1),r[2]="left";else if(r[0]>0&&r[1].length>0&&">"===r[1][0])r[1]=r[1].substring(1),r[2]="right";else if(r[0]>0&&r[1].length>0&&"@"===r[1][0]){r[1]=r[1].substring(1);var s=i.getFloat(r[1]);0===s.digits&&a("Missing first position in absolutely positioned annotation.",e,t),r[1]=r[1].substring(s.digits),","!==r[1][0]&&a("Missing comma absolutely positioned annotation.",e,t),r[1]=r[1].substring(1);var o=i.getFloat(r[1]);0===o.digits&&a("Missing second position in absolutely positioned annotation.",e,t),r[1]=r[1].substring(o.digits);var c=i.skipWhiteSpace(r[1]);r[1]=r[1].substring(c),r[2]=null,r[3]={x:s.value,y:o.value}}else!0!==n.freegchord&&(r[1]=r[1].replace(/([ABCDEFG0-9])b/g,"$1♭"),r[1]=r[1].replace(/([ABCDEFG0-9])#/g,"$1♯"),r[1]=r[1].replace(/^([ABCDEFG])([♯♭]?)o([^A-Za-z])/g,"$1$2°$3"),r[1]=r[1].replace(/^([ABCDEFG])([♯♭]?)o$/g,"$1$2°"),r[1]=r[1].replace(/^([ABCDEFG])([♯♭]?)0([^A-Za-z])/g,"$1$2ø$3"),r[1]=r[1].replace(/^([ABCDEFG])([♯♭]?)\^([^A-Za-z])/g,"$1$2∆$3")),r[2]="default",r[1]=d.chordName(n,r[1]);return r}return[0,""]},M=function(e,t){if("{"===e[t]){var r=i.getBrackettedSubstring(e,t,1,"}");r[2]||a("Missing the closing '}' while parsing grace note",e,t),")"===e[t+r[0]]&&(r[0]++,r[1]+=")");for(var s=[],o=0,c=!1;o0&&(s[s.length-1].endBeam=!0):a("Unknown character '"+r[1][o]+"' while parsing grace note",e,t),o++)}if(s.length)return[r[0],s]}return[0]};function A(e,t){if("&"===e[t]){for(var r=t;e[t]&&":"!==e[t]&&"|"!==e[t];)t++;return[t-r,e.substring(r+1,t)]}return[0]}function B(e){var t=e.origMeter;return t&&"specified"===t.type&&t.value&&0!==t.value.length?parseInt(t.value[0].num,10)/parseInt(t.value[0].den,10):1}var L=function(e,t){var r=n.macros[e[t]];if(void 0!==r)return"!"!==r[0]&&"+"!==r[0]||(r=r.substring(1)),"!"!==r[r.length-1]&&"+"!==r[r.length-1]||(r=r.substring(0,r.length-1)),f.includes(r)?[1,r]:p.includes(r)?("hidden"===n.volumePosition&&(r=""),[1,r]):m.includes(r)?("hidden"===n.dynamicPosition&&(r=""),[1,r]):(n.ignoredDecorations.includes(r)||a("Unknown macro: "+r,e,t),[1,""]);switch(e[t]){case".":if("("===e[t+1]||"-"===e[t+1])break;return[1,"staccato"];case"u":return[1,"upbow"];case"v":return[1,"downbow"];case"~":return[1,"irishroll"];case"!":case"+":var s=i.getBrackettedSubstring(e,t,5);if(s[1].length>1&&("^"===s[1][0]||"_"===s[1][0])&&(s[1]=s[1].substring(1)),f.includes(s[1]))return s;if(p.includes(s[1]))return"hidden"===n.volumePosition&&(s[1]=""),s;if(m.includes(s[1]))return"hidden"===n.dynamicPosition&&(s[1]=""),s;var o=g.findIndex((function(e){return s[1]===e[0]}));return o>=0?(s[1]=g[o][1],s):(o=v.findIndex((function(e){return s[1]===e[0]})))>=0?(s[1]=v[o][1],"hidden"===n.dynamicPosition&&(s[1]=""),s):"!"!==e[t]||1!==s[0]&&"!"===e[t+s[0]-1]?(a("Unknown decoration: "+s[1],e,t),s[1]="",s):[1,null];case"H":return[1,"fermata"];case"J":return[1,"slide"];case"L":return[1,"accent"];case"M":return[1,"mordent"];case"O":return[1,"coda"];case"P":return[1,"pralltriller"];case"R":return[1,"roll"];case"S":return[1,"segno"];case"T":return[1,"trill"]}return[0,0]},P=function(e,t){for(var r=t;i.isWhiteSpace(e[t]);)t++;return[t-r]},z=function(e,t){var r=i.getBarLine(e,t);if(0===r.len)return[0,""];if(r.warn)return a(r.warn,e,t),[r.len,""];for(var n=0;n="2"&&e[t+1]<="9"?(void 0!==r.triplet?a("Can't nest triplets",e,t):(r.triplet=e[t+1]-"0",r.tripletQ=T[r.triplet],r.num_notes=r.triplet,t+2="1"&&e[t+4]<="9"?(r.num_notes=e[t+4]-"0",t+=3):a("expected number after the two colons after the triplet to mark the duration",e,t):t+3="1"&&e[t+3]<="9"?(r.tripletQ=e[t+3]-"0",t+4="1"&&e[t+5]<="9"&&(r.num_notes=e[t+5]-"0",t+=4):t+=2):a("expected number after the triplet to mark the duration",e,t))),t++):void 0===r.startSlur?r.startSlur=1:r.startSlur++),t++;return r.consumed=t-n,r};C.prototype.startNewLine=function(){var e={startChar:-1,endChar:-1};n.partForNextLine.title&&(e.part=n.partForNextLine),e.clef=n.currentVoice&&void 0!==n.staves[n.currentVoice.staffNum].clef?l.clone(n.staves[n.currentVoice.staffNum].clef):l.clone(n.clef);var t=n.currentVoice?n.currentVoice.scoreTranspose:0;if(e.key=h.standardKey(n.key.root+n.key.acc+n.key.mode,n.key.root,n.key.acc,t),e.key.mode=n.key.mode,n.key.impliedNaturals&&(e.key.impliedNaturals=n.key.impliedNaturals),n.key.explicitAccidentals)for(var r=0;r=0?(r.duration=s.getBarLength(),r.rest.text=1,h="Zduration"):(a&&0!==n.next_note_duration?(r.duration=n.default_length*n.next_note_duration,n.next_note_duration=0,u=!0):r.duration=n.default_length,h="duration");break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":case"0":case"/":if("octave"===h||"duration"===h){var p=i.getFraction(e,t);for(r.duration=r.duration*p.value,r.endChar=p.index;p.index"!==e[t])return r;t--,h="broken_rhythm";break;case">":case"<":if(!l(h))return null;if(!a)return r.endChar=t,r;var g=F(e,t);t+=g[0]-1,n.next_note_duration=g[2],r.duration=g[1]*r.duration,h="end_slur";break;default:return l(h)?(r.endChar=t,r):null}if(++t===e.length)return l(h)?(r.endChar=t,r):null}return null},F=function(e,t){switch(e[t]){case">":return t"===e[t+1]&&">"===e[t+2]?[3,1.875,.125]:t"===e[t+1]?[2,1.75,.25]:[1,1.5,.5];case"<":return t","accent"],["tr","trill"],["plus","+"],["emphasis","accent"],["^","umarcato"],["marcato","umarcato"]],e.exports.accentDynamicPseudonyms=[["<(","crescendo("],["<)","crescendo)"],[">(","diminuendo("],[">)","diminuendo)"]],e.exports.nonDecorations="ABCDEFGabcdefgxyzZ[]|^_{",e.exports.durations=[.5,.75,.875,.9375,.96875,.984375,.25,.375,.4375,.46875,.484375,.4921875,.125,.1875,.21875,.234375,.2421875,.24609375,.0625,.09375,.109375,.1171875,.12109375,.123046875,.03125,.046875,.0546875,.05859375,.060546875,.0615234375,.015625,.0234375,.02734375,.029296875,.0302734375,.03076171875],e.exports.pitches={A:5,B:6,C:0,D:1,E:2,F:3,G:4,a:12,b:13,c:7,d:8,e:9,f:10,g:11},e.exports.rests={x:"invisible",X:"invisible-multimeasure",y:"spacer",z:"rest",Z:"multimeasure"},e.exports.accMap={dblflat:"__",flat:"_",natural:"=",sharp:"^",dblsharp:"^^",quarterflat:"_/",quartersharp:"^/"},e.exports.tripletQ={2:3,3:2,4:3,5:2,6:2,7:2,8:3,9:2}},1881:function(e,t,r){var i=r(5008),a=function(e,t){this.lineIndex=0,this.lines=e,this.multilineVars=t,this.skipWhiteSpace=function(e){for(var t=0;t=e.length};this.eatWhiteSpace=function(e,t){for(var r=t;r="a"&&e[t]<="z"||e[t]>="A"&&e[t]<="Z");)t++;return t},i=this.skipWhiteSpace(e);if(r(e,i))return{len:0};var a=e.substring(i,i+3).toLowerCase();switch((a.length>1&&" "===a[1]||"^"===a[1]||"_"===a[1]||"="===a[1])&&(a=a[0]),a){case"mix":return{len:t(e,i),token:"Mix"};case"dor":return{len:t(e,i),token:"Dor"};case"phr":return{len:t(e,i),token:"Phr"};case"lyd":return{len:t(e,i),token:"Lyd"};case"loc":return{len:t(e,i),token:"Loc"};case"aeo":case"min":case"m":return{len:t(e,i),token:"m"};case"maj":case"ion":return{len:t(e,i),token:""}}return{len:0}},this.getClef=function(e,t){var a=e,n=this.skipWhiteSpace(e);if(r(e,n))return{len:0};var s=!1,o=e.substring(n);if(i.startsWith(o,"clef=")&&(s=!0,o=o.substring(5),n+=5),0===o.length&&s)return{len:n+5,warn:"No clef specified: "+a};var c=this.skipWhiteSpace(o);if(r(o,c))return{len:0};c>0&&(n+=c,o=o.substring(c));var l=null;if(i.startsWith(o,"treble"))l="treble";else if(i.startsWith(o,"bass3"))l="bass3";else if(i.startsWith(o,"bass"))l="bass";else if(i.startsWith(o,"tenor"))l="tenor";else if(i.startsWith(o,"alto2"))l="alto2";else if(i.startsWith(o,"alto1"))l="alto1";else if(i.startsWith(o,"alto"))l="alto";else if(!t&&s&&i.startsWith(o,"none"))l="none";else if(i.startsWith(o,"perc"))l="perc";else if(!t&&s&&i.startsWith(o,"C"))l="tenor";else if(!t&&s&&i.startsWith(o,"F"))l="bass";else{if(t||!s||!i.startsWith(o,"G"))return{len:n+5,warn:"Unknown clef specified: "+a};l="treble"}return o=o.substring(l.length),(c=this.isMatch(o,"+8"))>0?l+="+8":(c=this.isMatch(o,"-8"))>0&&(l+="-8"),{len:n+l.length,token:l,explicit:s}},this.getBarLine=function(e,t){switch(e[t]){case"]":switch(e[++t]){case"|":return{len:2,token:"bar_thick_thin"};case"[":return e[++t]>="1"&&e[t]<="9"||'"'===e[t]?{len:2,token:"bar_invisible"}:{len:1,warn:"Unknown bar symbol"};default:return{len:1,token:"bar_invisible"}}break;case":":switch(e[++t]){case":":return{len:2,token:"bar_dbl_repeat"};case"|":switch(e[++t]){case"]":return"|"===e[++t]&&":"===e[++t]?{len:5,token:"bar_dbl_repeat"}:{len:3,token:"bar_right_repeat"};case"|":return":"===e[++t]?{len:4,token:"bar_dbl_repeat"}:{len:3,token:"bar_right_repeat"};default:return{len:2,token:"bar_right_repeat"}}break;default:return{len:1,warn:"Unknown bar symbol"}}break;case"[":if("|"!==e[++t])return e[t]>="1"&&e[t]<="9"||'"'===e[t]?{len:1,token:"bar_invisible"}:{len:0};switch(e[++t]){case":":return{len:3,token:"bar_left_repeat"};case"]":return{len:3,token:"bar_invisible"};default:return{len:2,token:"bar_thick_thin"}}break;case"|":switch(e[++t]){case"]":return{len:2,token:"bar_thin_thick"};case"|":return":"===e[++t]?{len:3,token:"bar_left_repeat"}:{len:2,token:"bar_thin_thin"};case":":for(var r=0;":"===e[t+r];)r++;return{len:1+r,token:"bar_left_repeat"};default:return{len:1,token:"bar_thin"}}}return{len:0}},this.getTokenOf=function(e,t){for(var r=0;r0;){var r;if("^"===e[0].token){if(r="sharp",e.shift(),0===e.length)return{accs:t,warn:"Expected note name after "+r};switch(e[0].token){case"^":r="dblsharp",e.shift();break;case"/":r="quartersharp",e.shift()}}else if("="===e[0].token)r="natural",e.shift();else{if("_"!==e[0].token)return{accs:t};if(r="flat",e.shift(),0===e.length)return{accs:t,warn:"Expected note name after "+r};switch(e[0].token){case"_":r="dblflat",e.shift();break;case"/":r="quarterflat",e.shift()}}if(0===e.length)return{accs:t,warn:"Expected note name after "+r};switch(e[0].token[0]){case"a":case"b":case"c":case"d":case"e":case"f":case"g":case"A":case"B":case"C":case"D":case"E":case"F":case"G":void 0===t&&(t=[]),t.push({acc:r,note:e[0].token[0]}),1===e[0].token.length?e.shift():e[0].token=e[0].token.substring(1);break;default:return{accs:t,warn:"Expected note name after "+r+" Found: "+e[0].token}}}return{accs:t}},this.getKeyAccidental=function(e){var t={"^":"sharp","^^":"dblsharp","=":"natural",_:"flat",__:"dblflat","_/":"quarterflat","^/":"quartersharp"},i=this.skipWhiteSpace(e);if(r(e,i))return{len:0};var a=null;switch(e[i]){case"^":case"_":case"=":a=e[i];break;default:return{len:0}}if(i++,r(e,i))return{len:1,warn:"Expected note name after accidental"};switch(e[i]){case"a":case"b":case"c":case"d":case"e":case"f":case"g":case"A":case"B":case"C":case"D":case"E":case"F":case"G":return{len:i+1,token:{acc:t[a],note:e[i]}};case"^":case"_":case"/":if(a+=e[i],i++,r(e,i))return{len:2,warn:"Expected note name after accidental"};switch(e[i]){case"a":case"b":case"c":case"d":case"e":case"f":case"g":case"A":case"B":case"C":case"D":case"E":case"F":case"G":return{len:i+1,token:{acc:t[a],note:e[i]}};default:return{len:2,warn:"Expected note name after accidental"}}break;default:return{len:1,warn:"Expected note name after accidental"}}},this.isWhiteSpace=function(e){return" "===e||"\t"===e||""===e},this.getMeat=function(e,t,r){var i=e.indexOf("%",t);for(i>=0&&i="A"&&e<="Z"||e>="a"&&e<="z"},n=function(e){return e>="0"&&e<="9"};this.tokenize=function(e,t,r,i){var s=this.getMeat(e,t,r);t=s.start,r=s.end;for(var o,c=[];t=r?{len:1,err:"Missing close quote"}:{len:a-t+1,token:this.translateString(e.substring(i+1,a))}}for(var n=i;n=0?i.strip(e.substring(0,t)):i.strip(e)},this.getInt=function(e){var t=parseInt(e);if(isNaN(t))return{digits:0};var r=""+t;return{value:t,digits:e.indexOf(r)+r.length}},this.getFloat=function(e){var t=parseFloat(e);if(isNaN(t))return{digits:0};var r=""+t;return{value:t,digits:e.indexOf(r)+r.length}},this.getMeasurement=function(e){if(0===e.length)return{used:0};var t=1,r="";if("-"===e[0].token)e.shift(),r="-",t++;else if("number"!==e[0].type)return{used:0};if(r+=e.shift().token,0===e.length)return{used:1,value:parseInt(r)};var i=e.shift();if("."===i.token){if(t++,0===e.length)return{used:t,value:parseInt(r)};if("number"===e[0].type&&(r=r+"."+(i=e.shift()).token,t++,0===e.length))return{used:t,value:parseFloat(r)};i=e.shift()}switch(i.token){case"pt":case"px":return{used:t+1,value:parseFloat(r)};case"cm":return{used:t+1,value:parseFloat(r)/2.54*72};case"in":return{used:t+1,value:72*parseFloat(r)};default:return e.unshift(i),{used:t,value:parseFloat(r)}}};var d=function(e){return e=(e=e.replace(/\\n/g,"\n")).replace(/\\"/g,'"')};this.getBrackettedSubstring=function(e,t,r,i){for(var a=i||e[t],n=t+1,s=!1;ne.length-1&&(n=e.length-1),[n-t+1,d(e.substring(t+1,n)),!1])}};a.prototype.peekLine=function(){return this.lines[this.lineIndex]},a.prototype.nextLine=function(){if(this.lineIndex>0&&(this.multilineVars.iChar+=this.lines[this.lineIndex-1].length+1),this.lineIndex11&&(f%=12);var p="m"===t[0]?l[f]:c[f],m=p+t,g=n(m);g.length>0&&"flat"===g[0].acc&&(e.localTransposePreferFlats=!0);var v=m.charCodeAt(0)-h.charCodeAt(0);return e.localTranspose>0?v<0?v+=7:0===v&&("#"!==h[1]&&"b"!==m[1]||(v+=7)):e.localTranspose<0&&(v>0?v-=7:0===v&&("b"!==h[1]&&"#"!==m[1]||(v-=7))),e.localTranspose>0?e.localTransposeVerticalMovement=v+7*Math.floor(e.localTranspose/12):e.localTransposeVerticalMovement=v+7*Math.ceil(e.localTranspose/12),u?{accidentals:g,root:p[0],acc:p.length>1?p[1]:""}:{accidentals:[],root:r,acc:i}},s.chordName=function(e,t){return a(t,e.localTranspose,e.localTransposePreferFlats,e.freegchord)};var h=["c","d","e","f","g","a","b"],d={dblflat:-2,flat:-1,natural:0,sharp:1,dblsharp:2},u={"-2":"dblflat","-1":"flat",0:"natural",1:"sharp",2:"dblsharp"},f={"-2":"__","-1":"_",0:"=",1:"^",2:"^^"};s.note=function(e,t){if(e.localTranspose&&"perc"!==e.clef.type){var r=t.pitch;if(e.localTransposeVerticalMovement&&(t.pitch=t.pitch+e.localTransposeVerticalMovement,t.name)){var a=t.accidental?t.name.substring(1):t.name,n=t.accidental?t.name[0]:"",s=i.pitchIndex(a);t.name=n+i.noteName(s+e.localTransposeVerticalMovement)}if(t.accidental){var o=function(e,t,r,i,a){for(var n=h[(e+49)%7],s=0,o=0;o2&&(t++,p-="b"===l||"e"===l?1:2),[t,p]}(r,t.pitch,t.accidental,e.globalTransposeOrigKeySig,e.targetKey);t.pitch=o[0],t.accidental=u[o[1]],t.name&&(t.name=f[o[1]]+t.name.replace(/[_^=]/g,""))}}},e.exports=s},867:function(e){var t={},r=["C,,,","D,,,","E,,,","F,,,","G,,,","A,,,","B,,,","C,,","D,,","E,,","F,,","G,,","A,,","B,,","C,","D,","E,","F,","G,","A,","B,","C","D","E","F","G","A","B","c","d","e","f","g","a","b","c'","d'","e'","f'","g'","a'","b'","c''","d''","e''","f''","g''","a''","b''","c'''","d'''","e'''","f'''","g'''","a'''","b'''"];t.pitchIndex=function(e){return r.indexOf(e)},t.noteName=function(e){return r[e]},e.exports=t},4208:function(e){var t=["C","C♯","D","D♯","E","F","F♯","G","G♯","A","A♯","B"],r=["C","D♭","D","E♭","E","F","G♭","G","A♭","A","B♭","B"],i=["C","C#","D","D#","E","F","F#","G","G#","A","A#","B"],a=["C","Db","D","Eb","E","F","Gb","G","Ab","A","Bb","B"];e.exports=function(e,n,s,o){if(!n||n%12==0)return e;for(;n<0;)n+=12;n>11&&(n%=12);var c=e.match(/^([A-G][b#♭♯]?)([^\/]+)?\/?([A-G][b#♭♯]?)?(.+)?/);if(!c)return e;var l,h=c[1],d=c[2],u=c[3],f=c[4];return(l=t.indexOf(h))<0&&(l=r.indexOf(h)),l<0&&(l=i.indexOf(h)),l<0&&(l=a.indexOf(h)),l<0||(l+=n,l%=12,e=s?o?a[l]:r[l]:o?i[l]:t[l],d&&(e+=d),u&&((l=t.indexOf(u))<0&&(l=r.indexOf(u)),l<0&&(l=i.indexOf(u)),l<0&&(l=a.indexOf(u)),e+="/",l>=0?(l+=n,l%=12,e+=s?o?a[l]:r[l]:o?i[l]:t[l]):e+=u),f&&(e+=f)),e}},575:function(e,t,r){var i=r(9708),a=r(5008);function n(e){if(!e)return!1;if("string"==typeof e)return!1;for(var t=0;t0&&"bar"!==e[r].el_type;r--);return r}this.setVisualTranspose=function(t){t&&(e.visualTranspose=t)},this.resolveOverlays=function(){for(var t=!1,i=[],n=0;n0&&l[h].voice.push({el_type:"note",duration:u,rest:{type:"invisible"},startChar:v.startChar,endChar:v.endChar}),l[h].voice.push(v)),u=0):"note"===v.el_type?f?l[h].voice.push(v):(u+=v.duration,i[n]+=v.duration):"scale"!==v.el_type&&"stem"!==v.el_type&&"overlay"!==v.el_type&&"style"!==v.el_type&&"transpose"!==v.el_type&&"color"!==v.el_type||l[h].voice.push(v);else{t=!0,f=!0,m=g,l[h].hasOverlay=!0,0===p&&(p=i[n]);for(var b=0;b=e.lines[b].staff[0].voices.length&&e.lines[b].staff[0].voices.push([{el_type:"note",duration:i[b],rest:{type:"invisible"},startChar:v.startChar,endChar:v.endChar}])}}l[h].hasOverlay&&0===l[h].snip.length&&l[h].snip.push({start:m,len:d.length-m})}for(h=0;h=0;x--){var k=y.snip[x];c.voices[h].splice(k.start,k.len),c.voices[h].splice(k.start+1,0,{el_type:"stem",direction:"auto"});var w=r(c.voices[h],k.start);c.voices[h].splice(w,0,{el_type:"stem",direction:"up"})}for(x=0;x=t&&st;){if(e[t].staff)return e[t];t++}return null}for(e.lineNum=0;e.lineNum0&&b[b.length-1].barNumber){var x=g(e.lines,e.lineNum);x&&(x.staff[0].barNumber=b[b.length-1].barNumber),delete b[b.length-1].barNumber}}}return delete e.staffNum,delete e.voiceNum,delete e.lineNum,delete e.potentialStartBeam,delete e.potentialEndBeam,delete e.vskipPending,s},e.reset(),this.getLastNote=function(){if(e.lines[e.lineNum]&&e.lines[e.lineNum].staff&&e.lines[e.lineNum].staff[e.staffNum]&&e.lines[e.lineNum].staff[e.staffNum].voices[e.voiceNum])for(var t=e.lines[e.lineNum].staff[e.staffNum].voices[e.voiceNum].length-1;t>=0;t--){var r=e.lines[e.lineNum].staff[e.staffNum].voices[e.voiceNum][t];if("note"===r.el_type)return r}return null},this.addTieToLastNote=function(e){var t=this.getLastNote();return!!(t&&t.pitches&&t.pitches.length>0)&&(t.pitches[0].startTie={},e&&(t.pitches[0].startTie.style="dotted"),!0)},this.getDuration=function(e){return e.duration?e.duration:0},this.closeLine=function(){e.potentialStartBeam&&e.potentialEndBeam&&(e.potentialStartBeam.startBeam=!0,e.potentialEndBeam.endBeam=!0),delete e.potentialStartBeam,delete e.potentialEndBeam},this.appendElement=function(r,i,a,n){var s=e;n.el_type=r,null!==i&&(n.startChar=i),null!==a&&(n.endChar=a);var o=function(){void 0!==s.potentialStartBeam&&void 0!==s.potentialEndBeam&&(s.potentialStartBeam.startBeam=!0,s.potentialEndBeam.endBeam=!0),delete s.potentialStartBeam,delete s.potentialEndBeam};"note"===r?t.getDuration(n)>=.25||n.force_end_beam_last&&void 0!==s.potentialStartBeam?o():n.end_beam&&void 0!==s.potentialStartBeam?void 0===n.rest?(s.potentialStartBeam.startBeam=!0,n.endBeam=!0,delete s.potentialStartBeam,delete s.potentialEndBeam):o():void 0===n.rest&&(void 0===s.potentialStartBeam?n.end_beam||(s.potentialStartBeam=n,delete s.potentialEndBeam):s.potentialEndBeam=n):o(),delete n.end_beam,delete n.force_end_beam_last,function(e){var t=s.lines[s.lineNum].staff[s.staffNum];if(t){if(void 0!==e.pitches){var r=t.workingClef.verticalPos;e.pitches.forEach((function(e){e.verticalPos=e.pitch-r}))}if(void 0!==e.gracenotes){var i=t.workingClef.verticalPos;e.gracenotes.forEach((function(e){e.verticalPos=e.pitch-i}))}t.voices[s.voiceNum].push(e)}}(n)},this.appendStartingElement=function(t,r,i,n){var s;this.closeLine(),"key"===t&&(s=n.impliedNaturals,delete n.impliedNaturals,delete n.explicitAccidentals);var o=a.clone(n);if(e.lines[e.lineNum]&&e.lines[e.lineNum].staff){e.lines[e.lineNum].staff.length<=e.staffNum&&(e.lines[e.lineNum].staff[e.staffNum]={},e.lines[e.lineNum].staff[e.staffNum].clef=a.clone(e.lines[e.lineNum].staff[0].clef),e.lines[e.lineNum].staff[e.staffNum].key=a.clone(e.lines[e.lineNum].staff[0].key),e.lines[e.lineNum].staff[0].meter&&(e.lines[e.lineNum].staff[e.staffNum].meter=a.clone(e.lines[e.lineNum].staff[0].meter)),e.lines[e.lineNum].staff[e.staffNum].workingClef=a.clone(e.lines[e.lineNum].staff[0].workingClef),e.lines[e.lineNum].staff[e.staffNum].voices=[[]]),"clef"===t&&(e.lines[e.lineNum].staff[e.staffNum].workingClef=o);for(var c=e.lines[e.lineNum].staff[e.staffNum].voices[e.voiceNum],l=0;l0){if(void 0!==r.voices[0]){for(var a=!1,n=0;n0){var r=t[t.length-1];if("bar"!==r.el_type)return e-1;void 0!==r.barNumber&&(r.barNumber=e)}return e},this.hasBeginMusic=function(){for(var t=0;t=0;r--)if(void 0!==e.lines[r].staff)return!1;return!0},this.getCurrentVoice=function(){var t=e.lines[e.lineNum];if(!t)return null;var r=t.staff[e.staffNum];return r&&void 0!==r.voices[e.voiceNum]?r.voices[e.voiceNum]:null},this.setCurrentVoice=function(t,r){e.staffNum=t,e.voiceNum=r;for(var i=0;i0?(r.push(n-1),i.push(Math.round(a-s)),a=s):ns&&us?(l.push(u-1),c++,o=Math.max(o,s),s=Math.abs(i-t[c]),n.push(a-f),a=f):s=p}n.push(a)}function a(e,t,r,a){for(var n=Math.ceil(e.total/t),s=Math.floor(e.total/n),o=[],c=0;ct&&(s=!0),o%r==r-1&&(o!==e.length-1&&i.push(o),a.push(Math.round(n)),n=0);return{failed:s,totals:a,lineBreaks:i}}e.exports={wrapLines:function(e,t,r){if(t&&0!==e.lines.length){var i=e.deline({lineBreaks:!1}),a=function(e,t){for(var r=[],i=0,a=0,n=0,s=0;s0&&(i[c.line].staff[c.staff].barNumber=s);for(var h=Object.keys(l),d=0;d=0;p--)if("key"===f[p].el_type){a[c.staff]={root:f[p].root,acc:f[p].acc,mode:f[p].mode,accidentals:f[p].accidentals.filter((function(e){return"natural"!==e.acc}))};break}for(p=f.length-1;p>=0;p--)if("stem"===f[p].el_type){n[10*c.staff+c.voice]={direction:f[p].direction};break}if(void 0!==r&&0===c.staff&&0===c.voice)for(p=0;p0&&p.measureWidths.length<25&&(k=a(p,g,0,b),b.attempts.push({type:"Optimize",failed:k.failed,reason:k.reason,lineBreaks:k.lineBreaks,totals:k.totals}),k.failed||(y=k.lineBreaks))}d.push(y),u.push(b)}var w=function(e,t,r){var i={lineBreaks:e,staffwidth:t};for(var a in r)r.hasOwnProperty(a)&&"wrap"!==a&&"staffwidth"!==a&&(i[a]=r[a]);return{revisedParams:i}}(d,i.staffwidth,i);return w.explanation=u,w.reParse=!0,w}}},9716:function(e,t,r){var i,a=r(7207),n=r(5058);!function(){"use strict";var e,t,r,s,o,c,l,h,d,u,f,p,m,g,v,b,y,x,k=1,w={num:4,den:4},T=128,C=!0,S=105,N=95,E=85,_=.25,M=0,A={},B=0;function L(e){for(var t=d.length-1;t>=0;t--)if("program"===d[t].cmd)return void(d[t].channel=e)}function P(e){return e/1e6}function z(e){return Math.round(e*k*1e6)/1e6}function H(e){switch(parseInt(e.den,10)){case 2:return.5;case 4:return.25;case 8:return e.num%3==0?.375:.125;case 16:return.125}return.25}function O(e,t){var r=t.start,i=t.duration,a=z(1/32);switch(e){case"trill":for(var n=1;i>0;)d.push({cmd:"note",pitch:t.pitch+n,volume:t.volume,start:r,duration:a,gap:0,instrument:h,style:"decoration"}),n=1===n?0:1,i-=a,r+=a;break;case"mordent":d.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r,duration:a,gap:0,instrument:h,style:"decoration"}),i-=a,r+=a,d.push({cmd:"note",pitch:t.pitch+1,volume:t.volume,start:r,duration:a,gap:0,instrument:h,style:"decoration"}),i-=a,r+=a,d.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r,duration:i,gap:0,instrument:h});break;case"lowermordent":d.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r,duration:a,gap:0,instrument:h,style:"decoration"}),i-=a,r+=a,d.push({cmd:"note",pitch:t.pitch-1,volume:t.volume,start:r,duration:a,gap:0,instrument:h,style:"decoration"}),i-=a,r+=a,d.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r,duration:i,gap:0,instrument:h});break;case"turn":a=t.duration/5,d.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r,duration:a,gap:0,instrument:h,style:"decoration"}),d.push({cmd:"note",pitch:t.pitch+1,volume:t.volume,start:r+a,duration:a,gap:0,instrument:h,style:"decoration"}),d.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r+2*a,duration:a,gap:0,instrument:h,style:"decoration"}),d.push({cmd:"note",pitch:t.pitch+1,volume:t.volume,start:r+3*a,duration:a,gap:0,instrument:h,style:"decoration"}),d.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r+4*a,duration:a,gap:0,instrument:h});break;case"roll":for(;i>0;)d.push({cmd:"note",pitch:t.pitch,volume:t.volume,start:r,duration:a,gap:0,instrument:h,style:"decoration"}),i-=2*a,r+=2*a}}function D(e,t){var r,i=function(e,t){if(t)return 0;var r;if(g)r=g,g=void 0;else if(C)if(B>e)r=E;else{var i=(e-m)/H(w);r=0===i?S:parseInt(i,10)===i?N:E}else r=N;return v&&(r+=v,v=void 0),r<0&&(r=0),r>127&&(r=127),t?0:r}(P(e.time),t);if(p.processChord(e),e.gracenotes&&e.pitches&&e.pitches.length>0&&e.pitches[0]&&(r=function(e,t){for(var r,i=0,a=[],s=0;s0?F.endType="tenuto":u&&(F.endType=u),F.endType){case"tenuto":F.gap=-.001;break;case"staccato":var V=.4*F.duration;F.gap=o/60*V;break;default:F.gap=0}d.push(F)}}}d.length}var G=function(e){return e.pitches&&e.pitches.length>0&&e.pitches[0]?e.pitches[0].duration:e.elem?e.elem.duration:e.duration}(e);f=Math.max(f,P(e.time)+z(G))}i=function(i,n,T,z){n||(n={}),z||(z={}),e=[],t=[0,0,0,0,0,0,0],s=[],o=n.qpm,c=void 0,k=1,l=void 0,h=void 0,d=void 0,u=void 0,f=0,x=T,w={num:4,den:4},C=!0,S=105,N=95,E=85,_=.25,g=void 0,v=void 0,M=0,b=[],A={},y=1,i.length>0&&i[0].length>0&&(B=i[0][0].pickupLength),void 0===n.bassprog||z.bassprog||(z.bassprog=[n.bassprog]),void 0===n.bassvol||z.bassvol||(z.bassvol=[n.bassvol]),void 0===n.chordprog||z.chordprog||(z.chordprog=[n.chordprog]),void 0===n.chordvol||z.chordvol||(z.chordvol=[n.chordvol]),void 0===n.gchord||z.gchord||(z.gchord=[n.gchord]),p=new a(i.length,n.chordsOff,z,w),function(e,t){for(var r=0;r=0)&&(I=!0);for(var Y=0;Y0&&"program"===d[d.length-1].cmd)d[d.length-1].instrument=G.program;else{var X;for(X=d.length-1;X>=0&&"program"!==d[X].cmd;X--);(X<0||d[X].instrument!==G.program)&&d.push({cmd:"program",channel:0,instrument:G.program})}break;case"channel":L(G.channel);break;case"drum":A=j(G.params),W();break;case"gchordOn":p.gChordOn(G);break;case"beat":S=G.beats[0],N=G.beats[1],E=G.beats[2];break;case"vol":g=G.volume;break;case"volinc":v=G.volume;break;case"beataccents":C=G.value;break;case"gchord":case"bassprog":case"chordprog":case"bassvol":case"chordvol":p.paramChange(G);break;default:console.log("MIDI creation. Unknown el_type: "+G.el_type+"\n")}}void 0===d[0].instrument&&(d[0].instrument=l||0),u&&d.unshift(u),s.push(d),p.finish(),b.length}return n.detuneOctave&&function(e,t){for(var r={},i=0;i1){var c=(o=o.sort((function(e,t){return e.pitch-t.pitch})))[o.length-1],l=c.pitch%12,h=!1;for(a=0;!h&&a0&&s.push(b),{tempo:o,instrument:l,tracks:s,totalDuration:f}};var F=[0,2,4,5,7,9,11];function I(i){if(void 0!==i.midipitch)return i.midipitch;var a=i.pitch;if(i.accidental)switch(i.accidental){case"sharp":e[a]=1;break;case"flat":e[a]=-1;break;case"natural":e[a]=0;break;case"dblsharp":e[a]=2;break;case"dblflat":e[a]=-2;break;case"quartersharp":e[a]=.25;break;case"quarterflat":e[a]=-.25}var n=12*function(e){return Math.floor(e/7)}(a)+F[G(a)]+60;return void 0!==e[a]?n+=e[a]:n+=t[G(a)],n+=r}function V(e){var t=[0,0,0,0,0,0,0];if(!e.accidentals)return t;for(var r=0;r=0?(e.pitch=Math.round(e.pitch),e.cents=-50):t.indexOf(".25")>=0&&(e.pitch=Math.round(e.pitch),e.cents=50),e}function G(e){return(e%=7)<0&&(e+=7),e}function j(e){if(0===e.pattern.length||!1===e.on)return{on:!1};for(var t=e.pattern[0],r=[],i="",a=0,n=0;n=0)return i;return i}function n(e,t,r){for(var i=Math.min(e.length,t+3),a=t;a=0)return e[a].decoration[n];return null}function s(e){for(var t=0;t=0&&"bar"!==r[i].el_type;)r[i].noChordVoice=!0,i--}function o(e,t){if(e&&!(e.length<=t)&&e[t].title)return e[t].title.join(" ")}function c(e,t){var r=1/4;e.duration&&(r=e.duration[0]);var i=60;return e.bpm&&(i=e.bpm),r*i/t}function l(t){var r;switch(t.type){case"common_time":r={el_type:"meter",num:4,den:4};break;case"cut_time":r={el_type:"meter",num:2,den:2};break;case"specified":r={el_type:"meter",num:t.value[0].num,den:t.value[0].den};break;default:r={el_type:"meter"}}return e=r.num/r.den,r}function h(e){for(var t=[],r=0;r=0;r--)if(e[r].el_type===t.el_type)return void(JSON.stringify(e[r])!==JSON.stringify(t)&&e.push(t));e.push(t)}i=function(i,h){var p,m=(h=h||{}).program||0,g=h.midiTranspose||0;i.visualTranspose&&(g-=i.visualTranspose);var v=h.channel||0,b=!1,y=h.drum||"",x=h.drumBars||1,k=h.drumIntro||0,w=""!==y,T=!!h.drumOff,C=[];m=parseInt(m,10),g=parseInt(g,10),10===(v=parseInt(v,10))&&(m=t),y=y.split(" "),x=parseInt(x,10),k=parseInt(k,10);var S=i.formatting.bagpipes;S&&(m=71);var N=[];if(i.formatting.midi){var E=i.formatting.midi;E.program&&E.program.length>0&&(m=E.program[0],E.program.length>1&&(m=E.program[1],v=E.program[0]),b=!0),E.transpose&&(g=E.transpose[0]),E.channel&&(v=E.channel[0],b=!0),E.drum&&(y=E.drum),E.drumbars&&(x=E.drumbars[0]),E.drumon&&(w=!0),10===v&&(m=t),E.beat&&N.push({el_type:"beat",beats:E.beat}),E.nobeataccents&&N.push({el_type:"beataccents",value:!1})}p=h.qpm?parseInt(h.qpm,10):i.metaText.tempo?c(i.metaText.tempo,i.getBeatLength()):h.defaultQpm?h.defaultQpm:180;var _=[];S&&_.push({el_type:"bagpipes"}),_.push({el_type:"instrument",program:m}),v&&_.push({el_type:"channel",channel:v}),g&&_.push({el_type:"transpose",transpose:g}),_.push({el_type:"tempo",qpm:p});for(var M=0;M=0?t="pppp":e.decoration.indexOf("ppp")>=0?t="ppp":e.decoration.indexOf("pp")>=0?t="pp":e.decoration.indexOf("p")>=0?t="p":e.decoration.indexOf("mp")>=0?t="mp":e.decoration.indexOf("mf")>=0?t="mf":e.decoration.indexOf("f")>=0?t="f":e.decoration.indexOf("ff")>=0?t="ff":e.decoration.indexOf("fff")>=0?t="fff":e.decoration.indexOf("ffff")>=0&&(t="ffff"),t&&(A=i[t].slice(0),B[W].push({el_type:"beat",beats:A.slice(0)}),L[R]=!1,P[R]=!1),e.decoration.indexOf("crescendo(")>=0){var a=r(U,te,"crescendo)"),s=Math.min(127,A[0]+50),o=n(U,te+a+1,Object.keys(i));o&&(s=i[o][0]),L[R]=a>0&&Math.floor((s-A[0])/a),P[R]=!1}else if(e.decoration.indexOf("crescendo)")>=0)L[R]=!1;else if(e.decoration.indexOf("diminuendo(")>=0){var c=r(U,te,"diminuendo)"),l=Math.max(15,A[0]-50),h=n(U,te+c+1,Object.keys(i));h&&(l=i[h][0]),L[R]=!1,P[R]=c>0&&Math.floor((l-A[0])/c)}else e.decoration.indexOf("diminuendo)")>=0&&(P[R]=!1)},j=Y.staff,W=0,q=0;q=0?B[W].push({el_type:"transpose",transpose:-12}):X.clef.type.indexOf("+8")>=0&&B[W].push({el_type:"transpose",transpose:12})),i.formatting.midi&&i.formatting.midi.drumoff&&(B[W].push({el_type:"bar"}),B[W].push({el_type:"drum",params:{pattern:"",on:!1}}));var Q=0,J=0,Z=0,ee=0;A=[105,95,85,1];for(var te=0;te=0?B[W].push({el_type:"transpose",transpose:-12}):re.type.indexOf("+8")>=0&&B[W].push({el_type:"transpose",transpose:12}));break;case"tempo":p=c(re,i.getBeatLength()),B[W].push({el_type:"tempo",qpm:p,timing:z[W]}),H[""+z[W]]={el_type:"tempo",qpm:p,timing:z[W]};break;case"bar":Q>0&&B[W].push({el_type:"bar"}),G(re),Q=0;var se="bar_right_repeat"===re.type||"bar_dbl_repeat"===re.type,oe="1"===re.startEnding,ce="bar_left_repeat"===re.type||"bar_dbl_repeat"===re.type||"bar_right_repeat"===re.type;if(se){var le=O[W];le||(le=0);var he=D[W];he||(he=B[W].length);for(var de=le;de=0&&n!==t[""+o.timing].qpm&&(n=t[""+o.timing].qpm,"tempo"===o.el_type?(o.qpm=t[""+o.timing].qpm,s++):(e[i].splice(s,0,{el_type:"tempo",qpm:t[""+o.timing].qpm,timing:o.timing}),s+=2))}}(B,H),k)for(var pe=i.getPickupLength(),me=0;mege;)ge++;if(B[me].length>ge){for(ne=0;ne0&&B[0].length>0&&(B[0][0].pickupLength=i.getPickupLength()),B}}(),e.exports=i},7207:function(e,t,r){var i=r(5008),a=function(e,t,r,i){this.chordTrack=[],this.chordTrackFinished=!1,this.chordChannel=e,this.currentChords=[],this.lastChord,this.chordLastBar,this.chordsOff=!!t,this.gChordTacet=this.chordsOff,this.hasRhythmHead=!1,this.transpose=0,this.lastBarTime=0,this.meter=i,this.tempoChangeFactor=1,this.bassInstrument=r.bassprog&&1===r.bassprog.length?r.bassprog[0]:0,this.chordInstrument=r.chordprog&&1===r.chordprog.length?r.chordprog[0]:0,this.boomVolume=r.bassvol&&1===r.bassvol.length?r.bassvol[0]:64,this.chickVolume=r.chordvol&&1===r.chordvol.length?r.chordvol[0]:48,this.overridePattern=r.gchord?s(r.gchord[0]):void 0};function n(e,t,r,i){var a=[];if(!e)return a;if(t.indexOf("boom")>=0?a.push(r?e.boom:e.boom2):i&&a.push(e.boom),t.indexOf("chick")>=0)for(var n=0;n3?a.push(e.chick[2]):a.push(e.chick[0]+12);break;case"TOP":e.chick.length>4?a.push(e.chick[2]):a.push(e.chick[1]+12);break;case"do":a.push(e.chick[0]+12);break;case"mi":a.push(e.chick[1]+12);break;case"sol":a.push(e.chick[2]+12);break;case"ti":e.chick.length>3?a.push(e.chick[2]+12):a.push(e.chick[0]+24);break;case"top":e.chick.length>4?a.push(e.chick[2]+12):a.push(e.chick[1]+24)}return a}function s(e){for(var t=[],r=0;r0&&!this.chordTrackFinished&&(this.resolveChords(this.lastBarTime,o(e.time)),this.currentChords=[]),this.chordLastBar=this.lastChord},a.prototype.gChordOn=function(e){this.chordsOff||(this.gChordTacet=e.tacet)},a.prototype.paramChange=function(e){switch(e.el_type){case"gchord":this.overridePattern=s(e.param);break;case"bassprog":this.bassInstrument=e.param;break;case"chordprog":this.chordInstrument=e.param;break;case"bassvol":this.boomVolume=e.param;break;case"chordvol":this.chickVolume=e.param;break;default:console.log("unhandled midi param",e)}},a.prototype.finish=function(){this.chordTrackEmpty()||(this.chordTrackFinished=!0)},a.prototype.addTrack=function(e){this.chordTrackEmpty()||e.push(this.chordTrack)},a.prototype.findChord=function(e){if(this.gChordTacet)return"break";if(this.chordTrackFinished||!e.chord||0===e.chord.length)return null;for(var t=0;t=0)return"break"}return null},a.prototype.interpretChord=function(e){if(0!==e.length){if("break"===e)return{chick:[]};var t=e.substring(0,1);if("("===t){if(0===(e=e.substring(1,e.length-2)).length)return;t=e.substring(0,1)}var r=this.basses[t];if(r){for(var i=this.transpose;i<-8;)i+=12;for(;i>8;)i-=12;var a,n=(r+=i)-5;1===e.length&&(a=this.chordNotes(r,""));var s=e.substring(1),o=s.substring(0,1);"b"===o||"♭"===o?(r--,n--,s=s.substring(1)):"#"!==o&&"♯"!==o||(r++,n++,s=s.substring(1));var c=s.split("/");if((a=this.chordNotes(r,c[0])).length>=3&&(n=n+(a[2]-a[0])-7),2===c.length&&this.basses[c[1].substring(0,1)]){var l={"#":1,"♯":1,b:-1,"♭":-1}[c[1].substring(1)]||0;n=r=this.basses[c[1].substring(0,1)]+l+i}return{boom:r,boom2:n,chick:a}}}},a.prototype.chordNotes=function(e,t){var r=this.chordIntervals[t];r||(r="ma"===t.slice(0,2).toLowerCase()||"M"===t[0]?this.chordIntervals.M:"m"===t[0]||"-"===t[0]?this.chordIntervals.m:this.chordIntervals.M),e+=12;for(var i=[],a=0;a0&&c[d-1]&&c[d]&&c[d-1].boom!==c[d].boom&&(u=!0);var p=l[d],m=p.indexOf("boom")>=0,g=!m&&0!==d&&l[0].indexOf("boom")>=0&&(!c[d-1]||c[d-1].boom!==c[d].boom),v=n(c[d],p,u,g);m&&(u=!1);for(var b=0;b4)for(a=a.toLowerCase(),t-=5;t>0;)a+="'",t--;else for(;t<4;)a+=",",t++;return a}}},5058:function(e){var t={f0:"_C",n0:"=C",s0:"^C",x0:"C",f1:"_D",n1:"=D",s1:"^D",x1:"D",f2:"_E",n2:"=E",s2:"^E",x2:"E",f3:"_F",n3:"=F",s3:"^F",x3:"F",f4:"_G",n4:"=G",s4:"^G",x4:"G",f5:"_A",n5:"=A",s5:"^A",x5:"A",f6:"_B",n6:"=B",s6:"^B",x6:"B",f7:"_c",n7:"=c",s7:"^c",x7:"c",f8:"_d",n8:"=d",s8:"^d",x8:"d",f9:"_e",n9:"=e",s9:"^e",x9:"e",f10:"_f",n10:"=f",s10:"^f",x10:"f",f11:"_g",n11:"=g",s11:"^g",x11:"g",f12:"_a",n12:"=a",s12:"^a",x12:"a",f13:"_b",n13:"=b",s13:"^b",x13:"b",f14:"_c'",n14:"=c'",s14:"^c'",x14:"c'",f15:"_d'",n15:"=d'",s15:"^d'",x15:"d'",f16:"_e'",n16:"=e'",s16:"^e'",x16:"e'"};e.exports=function(e){var r=(e.accidental?e.accidental[0]:"x")+e.verticalPos;return t[r]}},1921:function(e,t,r){var i=r(2842).noteToMidi,a=r(6776),n=r(6629);function s(e,t){for(var r=[],i=0;i=0;i--)if(t.pitch+t.pitchAltered>=e.stringPitches[i]){var a=t.pitch+t.pitchAltered-e.stringPitches[i];return"^"===t.quarter?a-=.5:"v"===t.quarter&&(a+=.5),{num:Math.round(a),str:e.stringPitches.length-1-i,note:t}}return{num:"?",str:e.stringPitches.length-1,note:t}}function l(e,t){var r={num:"?",str:0,note:t};e.push(r),e.error=t.emit()+": unexpected note for instrument"}function h(e){var t=e.tuning,r=e.capo,s=e._super.params.highestNote;this.linePitch=e.linePitch,this.highestNote="a'",s&&(this.highestNote=s),this.measureAccidentals={},this.capo=0,r&&(this.capo=parseInt(r,10)),this.transpose=e.transpose?e.transpose:0,this.tuning=t,this.stringPitches=[];for(var o=0;o0&&(this.capoTuning=function(e){var t=null,r=e.tuning;if(e.capo>0){t=[];for(var i=0;i0&&(r=e.capoTuning);for(var i=r.length-1,a=0;a1?(o=s(this,e)).error&&(n=o.error):e[0].endTie||((r=new a.TabNote(e[0].name,this.clefTranspose)).checkKeyAccidentals(this.accidentals,this.measureAccidentals),(i=c(this,r))?o.push(i):(l(o,r),n=o.error))),n)return o;var h=null;if(t){h=[];for(var d=0;d0&&(r+=" capo:"+e.capo),t=t.replace("%T",r)),t}return""},h.prototype.suppress=function(e){return!!e._super.params.suppress},e.exports=h},8918:function(e){function t(e,t){this.numLines=e,this.lineSpace=t,this.verticalSize=this.numLines*this.lineSpace,this.bar={pitch:3,pitch2:t*e,height:5}}t.prototype.bypass=function(e){var t=e.staffGroup.voices;return!!(t.length>0&&t[0].isPercussion)},t.prototype.setRelative=function(e,t,r){switch(e.type){case"bar":t.pitch=this.bar.pitch,t.pitch2=this.bar.pitch2,t.height=this.height;break;case"symbol":var i=this.bar.pitch2/2;if("dots.dot"==e.name)return r?(t.pitch=i,!1):(t.pitch=i+this.lineSpace,!0)}return r},e.exports=t},6776:function(e,t,r){var i=r(2842),a=i.noteToMidi,n=i.midiToNote;function s(e,t){var r=a(e);t&&(r+=t);var i,s=n(r),o=!1,c=!1,l=null,h=null,d=!1,u=0;e.startsWith("_")?(o=!0,u=-1,"/"==e[1]?(o=!1,h="v",u=0):"_"==e[1]&&(d=!0,u-=1)):e.startsWith("^")?(c=!0,u=1,"/"==e[1]?(c=!1,h="^",u=0):"^"==e[1]&&(d=!0,u+=1)):e.startsWith("=")&&(l=!0,u=0),((i=o||c||null!=h)||l)&&(s=null!=h||d?e.slice(2):e.slice(1));var f=(s.match(/,/g)||[]).length,p=(s.match(/'/g)||[]).length;this.pitch=r,this.pitchAltered=0,this.name=s,this.acc=u,this.isSharp=c,this.isKeySharp=!1,this.isDouble=d,this.isAltered=i,this.isFlat=o,this.isKeyFlat=!1,this.natural=l,this.quarter=h,this.isLower=this.name==this.name.toLowerCase(),this.name=this.name[0].toUpperCase(),this.hasComma=f,this.isQuoted=p}s.prototype.sameNoteAs=function(e){return e.pitch===this.pitch},s.prototype.isLowerThan=function(e){return e.pitch>this.pitch},s.prototype.checkKeyAccidentals=function(e,t){if(!this.isAltered&&!this.natural)if(t[this.name.toUpperCase()])switch(t[this.name.toUpperCase()]){case"__":return this.acc=-2,void(this.pitchAltered=-2);case"_":return this.acc=-1,void(this.pitchAltered=-1);case"=":return this.acc=0,void(this.pitchAltered=0);case"^":return this.acc=1,void(this.pitchAltered=1);case"^^":return this.acc=2,void(this.pitchAltered=2)}else if(e)for(var r=this.name,i=0;i=0){if(r===t)return e.extra[i].x+e.extra[i].w/2;r++}return-1}function f(e){if(e.abcelem){var t=e.abcelem;if(t.rest)return t.gracenotes}return null}function p(e,t,r){var i=e.semantics.notesToNumber(t,r);if(i.error)return e._super.setError(i.error),i;if(i.graces&&i.notes){var a=i.notes.length-1;i.notes[a].graces=i.graces}return i}function m(e,t,r,i,a){for(var n=0;n=0&&(e.semantics.strings.clefTranspose=-12),k.abcelem.type.indexOf("+8")>=0&&(e.semantics.strings.clefTranspose=12)),k.type){case"staff-extra key-signature":this.accidentals=k.abcelem.accidentals,e.semantics.strings.accidentals=this.accidentals;break;case"bar":e.semantics.strings.measureAccidentals={};var C=!1;x===g.children.length-1&&(C=!0);var S=o(k,e);if(S.abcelem.barNumber){delete S.abcelem.barNumber;for(var N=0;N0&&(y.abselem=_,r.push(y),v.children.push(_))}}},e.exports=h},8660:function(e){function t(e,t,r){this.tune=e,this.params=r,this.tuneNumber=t,this.inError=!1}t.prototype.setError=function(e){var t=this.tune;e&&(this.error=e,this.inError=!0,t.warnings?t.warnings.push(e):t.warnings=[e])},e.exports=t},676:function(e,t,r){var i=r(3197),a=r(1696),n=r(4331);function s(e,t){var r=e.plugin.semantics.strings,i=e.renderer.controller.getTextSize,a=r.tabInfos(e.plugin),n=!0;if(r.suppress(e.plugin)&&(n=!1),n){var s=i.calc(a,"tablabelfont","text instrumentname");return t.tabNameInfos={textSize:{height:s.height,width:s.width},name:a},s.height}return 0}function o(e,t,r,i){this.renderer=t,this.plugin=e,this.line=r,this.absolutes=new a,this.staffIndex=i,this.tabStaff={clef:{type:"TAB"}},this.tabSize=e.linePitch*e.nbLines}function c(e,t){return!(!t[e].isTabStaff||e!==t.length-1&&t[e+1].isTabStaff)}function l(e,t){for(var r=t;r>=0;r--)if(!e[r].isTabStaff)return r;return-1}function h(e,t){return"clef"===e[t].children[0].abcelem.el_type?null:0==t?"none":e[t-1].children[0]}o.prototype.doLayout=function(){var e=this.line.staff;if(e){var t=e[0];if(t&&t.clef&&0==t.clef.stafflines)return void this.plugin._super.setError("No tablatures when stafflines=0");e.splice(e.length,0,this.tabStaff)}var r=this.line.staffGroup,a=r.voices,o=function(e){for(var t=0,r=0;rt&&(t=i.specialY.lyricHeightBelow)}return t}(a[0]),d=this.staffIndex,u=r.staffs[d],f=this.tabSize+3-u.bottom-o;u.isTabStaff&&(f=u.top);var p={bottom:-1,isTabStaff:!0,specialY:{tempoHeightAbove:0,partHeightAbove:0,volumeHeightAbove:0,dynamicHeightAbove:0,endingHeightAbove:0,chordHeightAbove:0,lyricHeightAbove:0,lyricHeightBelow:0,chordHeightBelow:0,volumeHeightBelow:0,dynamicHeightBelow:0},lines:this.plugin.nbLines,linePitch:this.plugin.linePitch,dy:.15,top:f},m=function(e,t){for(var r=e.staffIndex,i=0,a=0,n=0;;){if(!t[i])return-1;if(t[i].isTabStaff||(n=t[i].voices.length),t[i].isTabStaff){if(a++,c(i,t)&&a=r){if(i+1==t.length)return i+1;if(!t[i+1].isTabStaff)return i+1}if(++i>t.length)return-1}}(this,r.staffs);if(-1!==m){p.parentIndex=m-1,r.staffs.splice(m,0,p),r.height+=this.tabSize+3;var g=function(e,t){for(var r=t;r>=0;r--)if(!e[r].isTabStaff)return e[r];return null}(r.staffs,m),v=1;(function(e,t){return 1===function(e){for(var t=0,r=0;r1})(r.staffs,g)&&(v=g.voices.length),this.tabStaff.voices=[];for(var b=0;b0&&(y.duplicate=!0);var x=s(this,y)/n.STEP;x=Math.max(x,1),r.staffs[this.staffIndex].top+=1,r.height+=x,y.staff=p;var k=a.length;a.splice(a.length,0,y);var w=h(a,b+this.staffIndex);this.tabStaff.voices[b]=[],this.absolutes.build(this.plugin,a,this.tabStaff.voices[b],b,this.staffIndex,w,k)}!function(e){for(var t=0;t0&&(n[0].invisible=!0);break;case"meter":n[0]=l(a,this.tuneNumber),this.startlimitelem=n[0],r.duplicate&&n.length>0&&(n[0].invisible=!0);break;case"clef":if(n[0]=s(a,this.tuneNumber),!n[0])return null;r.duplicate&&n.length>0&&(n[0].invisible=!0);break;case"key":var h=o(a,this.tuneNumber);h&&(n[0]=h,this.startlimitelem=n[0]),r.duplicate&&n.length>0&&(n[0].invisible=!0);break;case"stem":this.stemdir="auto"===a.direction?void 0:a.direction;break;case"part":var d=new i(a,0,0,"part",this.tuneNumber),u=this.getTextSize.calc(a.title,"partsfont","part");d.addFixedX(new f(a.title,0,0,void 0,{type:"part",height:u.height/p.STEP})),n[0]=d;break;case"tempo":var m=new i(a,0,0,"tempo",this.tuneNumber);m.addFixedX(new g(a,this.tuneNumber,c)),n[0]=m;break;case"style":"normal"===a.head?delete this.style:this.style=a.head;break;case"hint":C=!0,this.saveState();break;case"midi":break;case"scale":this.voiceScale=a.size;break;case"color":this.voiceColor=a.color,r.color=this.voiceColor;break;default:var v=new i(a,0,0,"unsupported",this.tuneNumber);v.addFixed(new f("element type "+a.el_type,0,0,void 0,{type:"debug"})),n[0]=v}return n},N.prototype.createBeam=function(e,t,r){var i=[],n=new a(this.stemHeight*this.voiceScale,this.stemdir,this.flatBeams,r[0]);C&&n.setHint();for(var s=0;se.pitches[r+1].pitch){t=!1;var i=e.pitches[r];e.pitches[r]=e.pitches[r+1],e.pitches[r+1]=i}}while(!t)},A=function(e,t,r,i,a,n,s,o,c){for(var l=r;l>11;l--)l%2!=0||i||e.addFixed(new f(null,o,(a+4)*c,l,{type:"ledger"}));for(l=t;l<1;l++)l%2!=0||i||e.addFixed(new f(null,o,(a+4)*c,l,{type:"ledger"}));for(l=0;l1&&(p=new a(n,"grace",s),C&&p.setHint(),p.mainNote=r);var m=[];for(d=e.gracenotes.length-1;d>=0;d--)o+=10,m[d]=o,e.gracenotes[d].accidental&&(o+=7);for(d=0;d=6?"down":"up";for(i&&(N=i),(a=t.style?t.style:a)&&"normal"!==a||(a="note"),(m=n?S[a].nostem:S[a][-s])||console.log("noteSymbol:",a,s,n),g="down"===N?t.pitches.length-2:1;"down"===N?g>=0:g11||_.verticalPos<1)&&x.push(_.verticalPos-_.verticalPos%2),"down"===N?b=u.getSymbolWidth(m)+2:v=u.getSymbolWidth(m)+2)}var A=t.pitches.length;for(g=0;g0&&(h.bottom=h.bottom-1),e.addHead(h)),b+=O.accidentalshiftx,y=Math.max(y,O.dotshiftx)}if(H){var D=Math.round(70*this.voiceScale)/10,F="down"===N?t.minpitch-D:t.minpitch+1/3;F>6&&!i&&(F=6);var I="down"===N?t.maxpitch-1/3:t.maxpitch+D;I<6&&!i&&(I=6);var V="down"===N||0===e.heads.length?0:e.heads[0].w,Y="down"===N?1:-1;h&&"noteheads.slash.quarter"===h.c&&("down"===N?I-=1:F+=1),h&&"noteheads.triangle.quarter"===h.c&&("down"===N?I-=.7:F-=1.2),e.addRight(new f(null,V,0,F,{type:"stem",pitch2:I,linewidth:Y,bottom:F-1})),d=Math.min(F,I)}return{noteHead:h,roomTaken:b,roomTakenRight:y,min:d,additionalLedgers:x,dir:N,symbolWidth:C}},N.prototype.addLyric=function(e,t){var r="";t.lyric.forEach((function(e){var t=" "===e.divider?"":e.divider;r+=e.syllable+t+"\n"}));var i=this.getTextSize.calc(r,"vocalfont","lyric"),a=t.positioning?t.positioning.vocalPosition:"below";e.addCentered(new f(r,0,i.width,void 0,{type:"lyric",position:a,height:i.height/p.STEP,dim:this.getTextSize.attr("vocalfont","lyric")}))},N.prototype.createNote=function(e,t,r,a){var n,s=null,o=0,l=0,h=0,d=[],p=T(e),m=!1;0===p&&(m=!0,p=.25,t=!0);for(var g=Math.floor(Math.log(p)/Math.log(2)),v=0,y=Math.pow(2,g),k=y/2;y1,this.stemdir,r,g,this.voiceScale);s=_.noteHead,o=_.roomTaken,l=_.roomTakenRight}else{var M=this.addNoteToAbcElement(E,e,v,this.stemdir,this.style,m,g,t,a);void 0!==M.min&&(this.minY=Math.min(M.min,this.minY)),s=M.noteHead,o=M.roomTaken,l=M.roomTakenRight,d=M.additionalLedgers,n=M.dir,h=M.symbolWidth}if(void 0!==e.lyric&&this.addLyric(E,e),void 0!==e.gracenotes&&(o+=this.addGraceNotes(e,a,E,s,this.stemHeight*this.voiceScale,this.isBagpipes,o)),e.decoration){var B=t?Math.min(-3,E.bottom-6):E.bottom;this.decoration.createDecoration(a,e.decoration,E.top,s?s.w:0,E,o,n,B,e.positioning,this.hasVocals,this.accentAbove)}if(e.barNumber&&E.addFixed(new f(e.barNumber,-10,0,0,{type:"barNumber"})),A(E,e.minpitch,e.maxpitch,e.rest,h,d,n,-2,1),void 0!==e.chord){var L=x(this.getTextSize,E,e,o,l,h,this.jazzchords,this.germanAlphabet);o=L.roomTaken,l=L.roomTakenRight}return e.startTriplet&&(this.triplet=new b(e.startTriplet,s,{flatBeams:this.flatBeams})),e.endTriplet&&this.triplet&&this.triplet.setCloseAnchor(s),!this.triplet||e.startTriplet||e.endTriplet||e.rest&&"spacer"===e.rest.type||this.triplet.middleNote(s),E},N.prototype.addSlursAndTies=function(e,t,r,i,a,n){if(t.endTie&&this.ties.length>0){for(var s=!1,o=0;o10&&"treble"===t.abcelem.type?13:11;t.addFixed(new f(e,i,r.width,a+r.height/p.STEP,{type:"barNumber",dim:this.getTextSize.attr("measurefont","bar-number")}))},N.prototype.createBarLine=function(e,t,r){var a=new i(t,0,10,"bar",this.tuneNumber),n=null,s=0;t.barNumber&&this.addMeasureNumber(t.barNumber,a);var o="bar_right_repeat"===t.type||"bar_dbl_repeat"===t.type,c="bar_left_repeat"!==t.type&&"bar_thick_thin"!==t.type&&"bar_invisible"!==t.type,l="bar_right_repeat"===t.type||"bar_dbl_repeat"===t.type||"bar_left_repeat"===t.type||"bar_thin_thick"===t.type||"bar_thick_thin"===t.type,h="bar_left_repeat"===t.type||"bar_thick_thin"===t.type||"bar_thin_thin"===t.type||"bar_dbl_repeat"===t.type,u="bar_left_repeat"===t.type||"bar_dbl_repeat"===t.type;if(o||u){for(var p in this.slurs)this.slurs.hasOwnProperty(p)&&this.slurs[p].setEndX(a);this.startlimitelem=a}if(o&&(a.addRight(new f("dots.dot",s,1,7)),a.addRight(new f("dots.dot",s,1,5)),s+=6),c&&(n=new f(null,s,1,2,{type:"bar",pitch2:10,linewidth:.6}),a.addRight(n)),"bar_invisible"===t.type&&(n=new f(null,s,1,2,{type:"none",pitch2:10,linewidth:.6}),a.addRight(n)),t.decoration&&this.decoration.createDecoration(e,t.decoration,12,l?3:1,a,0,"down",2,t.positioning,this.hasVocals,this.accentAbove),l&&(n=new f(null,s+=4,4,2,{type:"bar",pitch2:10,linewidth:4}),a.addRight(n),s+=5),this.partstartelem&&t.endEnding&&(this.partstartelem.anchor2=n,this.partstartelem=null),h&&(n=new f(null,s+=3,1,2,{type:"bar",pitch2:10,linewidth:.6}),a.addRight(n)),u&&(s+=3,a.addRight(new f("dots.dot",s,1,7)),a.addRight(new f("dots.dot",s,1,5))),t.startEnding&&r){var m=this.getTextSize.calc(t.startEnding,"repeatfont","").width;a.minspacing+=m+10,this.partstartelem=new d(t.startEnding,n,null),e.addOther(this.partstartelem)}return a.extraw-=5,void 0!==t.chord&&x(this.getTextSize,a,t,0,0,0,!1,this.germanAlphabet),a},e.exports=N},2652:function(e,t,r){var i=r(6658),a=r(4331),n=r(5810);function s(e,t,r,s,o,c,l,h,d,u,f,p,m,g,v){for(var b=e.split("\n"),y=b.length-1;y>=0;y--){var x,k=b[y],w=0;s||(k=n(k,g,v));var T=h.calc(k,o,c),C=T.width,S=T.height/a.STEP;switch(t){case"left":w=-(f+=C+7),x=u.averagepitch,d.addExtra(new i(k,w,C+4,x,{type:"text",height:S,dim:l,position:"left"}));break;case"right":w=p+=4,x=u.averagepitch,d.addRight(new i(k,w,C+4,x,{type:"text",height:S,dim:l,position:"right"}));break;case"below":d.addRight(new i(k,0,0,void 0,{type:"text",position:"below",height:S,dim:l,realWidth:C}));break;case"above":d.addRight(new i(k,0,0,void 0,{type:"text",position:"above",height:S,dim:l,realWidth:C}));break;default:if(r){var N=r.y+3*a.STEP;d.addRight(new i(k,w+r.x,0,u.minpitch+N/a.STEP,{position:"relative",type:"text",height:S,dim:l}))}else{var E="above";u.positioning&&u.positioning.chordPosition&&(E=u.positioning.chordPosition),"hidden"!==E&&d.addCentered(new i(k,m/2,C,void 0,{type:"chord",position:E,height:S,dim:l,realWidth:C}))}}}return{roomTaken:f,roomTakenRight:p}}e.exports=function(e,t,r,i,a,n,o,c){for(var l=0;l0?o.top+3:o.bottom-1,f=s>0?o.top+3:o.bottom-3,p=f-2;"bass-8"===e.type&&(u=3,d=0),o.addRight(new n("8",5+d,a.getSymbolWidth("8")*h,u,{scalex:h,scaley:h,top:f,bottom:p}))}}return o}},3923:function(e,t,r){var i=r(1409),a=r(6020),n=r(6658);e.exports=function(e,t){if(e.el_type="keySignature",!e.accidentals||0===e.accidentals.length)return null;var r=new i(e,0,10,"staff-extra key-signature",t);r.isKeySig=!0;var s=0;return e.accidentals.forEach((function(e){var t,i=0;switch(e.acc){case"sharp":t="accidentals.sharp",i=-3;break;case"natural":t="accidentals.nat";break;case"flat":t="accidentals.flat",i=-1.2;break;case"quartersharp":t="accidentals.halfsharp",i=-2.5;break;case"quarterflat":t="accidentals.halfflat",i=-1.2;break;default:t="accidentals.flat"}r.addRight(new n(t,s,a.getSymbolWidth(t),e.verticalPos,{thickness:a.symbolHeightInPitches(t),top:e.verticalPos+a.symbolHeightInPitches(t)+i,bottom:e.verticalPos+i})),s+=a.getSymbolWidth(t)+2}),this),r}},2143:function(e,t,r){var i=r(6020),a=r(6658);e.exports=function(e,t,r,n){n||(n={});var s,o=void 0!==n.dir?n.dir:null,c=void 0!==n.headx?n.headx:0,l=void 0!==n.extrax?n.extrax:0,h=void 0!==n.flag?n.flag:null,d=void 0!==n.dot?n.dot:0,u=void 0!==n.dotshiftx?n.dotshiftx:0,f=void 0!==n.scale?n.scale:1,p=void 0!==n.accidentalSlot?n.accidentalSlot:[],m=void 0!==n.shouldExtendStem&&n.shouldExtendStem,g=void 0===n.printAccidentals||n.printAccidentals,v=r.verticalPos,b=0,y=0,x=0;if(void 0===t)e.addFixed(new a("pitch is undefined",0,0,0,{type:"debug"}));else if(""===t)s=new a(null,0,0,v);else{var k=c;if(r.printer_shift){var w="same"===r.printer_shift?1:0;k="down"===o?-i.getSymbolWidth(t)*f+w:i.getSymbolWidth(t)*f-w}var T={scalex:f,scaley:f,thickness:i.symbolHeightInPitches(t)*f,name:r.name};if((s=new a(t,k,i.getSymbolWidth(t)*f,v,T)).stemDir=o,h){var C=v+("down"===o?-7:7)*f;m&&("down"===o&&C>6&&(C=6),"up"===o&&C<6&&(C=6));var S="down"===o?c:c+s.w-.6;e.addRight(new a(h,S,i.getSymbolWidth(h)*f,C,{scalex:f,scaley:f}))}for(y=s.w+u-2+5*d;d>0;d--){var N=1-Math.abs(v)%2;e.addRight(new a("dots.dot",s.w+u-2+5*d,i.getSymbolWidth("dots.dot"),v+N))}}if(s&&(s.highestVert=r.highestVert),g&&r.accidental){var E;switch(r.accidental){case"quartersharp":E="accidentals.halfsharp";break;case"dblsharp":E="accidentals.dblsharp";break;case"sharp":E="accidentals.sharp";break;case"quarterflat":E="accidentals.halfflat";break;case"flat":E="accidentals.flat";break;case"dblflat":E="accidentals.dblflat";break;case"natural":E="accidentals.nat"}for(var _=!1,M=l,A=0;A=6){p[A][0]=v,M=p[A][1],_=!0;break}!1===_&&(M-=i.getSymbolWidth(E)*f+2,p.push([v,M]),b=i.getSymbolWidth(E)*f+2);var B=i.symbolHeightInPitches(E);e.addExtra(new a(E,M,i.getSymbolWidth(E),v,{scalex:f,scaley:f,top:v+B/2,bottom:v-B/2})),x=i.getSymbolWidth(E)/2}return{notehead:s,accidentalshiftx:b,dotshiftx:y,extraLeft:x}}},2525:function(e,t,r){var i=r(1409),a=r(6020),n=r(6658);e.exports=function(e,t){e.el_type="timeSignature";var r=new i(e,0,10,"staff-extra time-signature",t);if("specified"===e.type)for(var s=0,o=0;o",i)),o&&e.addOther(new a(o.start,o.stop,"<",i)),c&&e.addOther(new n(c.start,c.stop))},l.prototype.createDecoration=function(e,t,r,a,n,l,d,u,f,p,m){f||(f={ornamentPosition:"above",volumePosition:p?"above":"below",dynamicPosition:p?"above":"below"}),function(e,t,r,a){for(var n=0;n9&&u++;var m=i/2;"center"!==s.getSymbolAlign(p)&&(m-=s.getSymbolWidth(p)/2),a.addFixedX(new o(p,m,s.getSymbolWidth(p),u))}if("slide"===t[f]&&a.heads[0]){var g=a.heads[0].pitch,v=new o("",-n-15,0,(g-=2)-1),b=new o("",-n-5,0,g+1);a.addFixedX(v),a.addFixedX(b),e.addOther(new c({anchor1:v,anchor2:b,fixedY:!0}))}}return void 0===u&&(u=r),{above:u,below:a.bottom}}(e,t,r,a,n,l,d,u,m);g.above=Math.max(g.above,this.minTop),g.below=Math.min(g.below,u),function(e,t,r,i,a,n,c,l){function h(e,t){"above"===e?i.above+=t:i.below-=t}function d(e){var t;return"above"===e?(t=i.above)c&&(t=c),t}function u(e,i,a){var n=d(i);r.addFixedX(new o(e,t/2,0,n+2,{type:"decoration",klass:"ornament",thickness:3,anchor:a})),h(i,5)}function f(e,i){var a=t/2;"center"!==s.getSymbolAlign(e)&&(a-=s.getSymbolWidth(e)/2);var n=s.symbolHeightInPitches(e)+1,c=d(i);c="above"===i?c+n/2:c-n/2,r.addFixedX(new o(e,a,s.getSymbolWidth(e),c,{klass:"ornament",thickness:s.symbolHeightInPitches(e),position:i})),h(i,n)}for(var p={"+":"scripts.stopped",open:"scripts.open",snap:"scripts.snap",wedge:"scripts.wedge",thumb:"scripts.thumb",shortphrase:"scripts.shortphrase",mediumphrase:"scripts.mediumphrase",longphrase:"scripts.longphrase",trill:"scripts.trill",roll:"scripts.roll",irishroll:"scripts.roll",marcato:"scripts.umarcato",dmarcato:"scripts.dmarcato",umarcato:"scripts.umarcato",turn:"scripts.turn",uppermordent:"scripts.prall",pralltriller:"scripts.prall",mordent:"scripts.mordent",lowermordent:"scripts.mordent",downbow:"scripts.downbow",upbow:"scripts.upbow",fermata:"scripts.ufermata",invertedfermata:"scripts.dfermata",breath:",",coda:"scripts.coda",segno:"scripts.segno"},m=0;mthis.w&&(this.w=e.dx+e.w),this.right[this.right.length]=e,this._addChild(e)},n.prototype.addFixed=function(e){this._addChild(e)},n.prototype.addFixedX=function(e){this._addChild(e)},n.prototype.addCentered=function(e){var t=e.w/2;-tthis.w&&(this.w=e.dx+t),this.right[this.right.length]=e,this._addChild(e)},n.prototype.setLimit=function(e,t){t[e]&&(this.specialY[e]?this.specialY[e]=Math.max(this.specialY[e],t[e]):this.specialY[e]=t[e])},n.prototype._addChild=function(e){e.parent=this,this.children[this.children.length]=e,this.pushTop(e.top),this.pushBottom(e.bottom),this.setLimit("tempoHeightAbove",e),this.setLimit("partHeightAbove",e),this.setLimit("volumeHeightAbove",e),this.setLimit("dynamicHeightAbove",e),this.setLimit("endingHeightAbove",e),this.setLimit("chordHeightAbove",e),this.setLimit("lyricHeightAbove",e),this.setLimit("lyricHeightBelow",e),this.setLimit("chordHeightBelow",e),this.setLimit("volumeHeightBelow",e),this.setLimit("dynamicHeightBelow",e)},n.prototype.pushTop=function(e){void 0!==e&&(void 0===this.top?this.top=e:this.top=Math.max(e,this.top))},n.prototype.pushBottom=function(e){void 0!==e&&(void 0===this.bottom?this.bottom=e:this.bottom=Math.min(e,this.bottom))},n.prototype.setX=function(e){this.x=e;for(var t=0;tthis.max)&&(this.max=e.abcelem.maxpitch))},t.prototype.addBeam=function(e){this.beams.push(e)},t.prototype.setStemDirection=function(){this.average=r(this.total,this.count),this.forceup?this.stemsUp=!0:this.forcedown?this.stemsUp=!1:this.stemsUp=this.average<6,delete this.count,this.total=0},t.prototype.calcDir=function(){this.average=r(this.total,this.elems.length),this.forceup?this.stemsUp=!0:this.forcedown?this.stemsUp=!1:this.stemsUp=this.average<6;for(var e=this.stemsUp?"up":"down",t=0;t0&&this.unalignedWords(e.unalignedWords,i,a,n,s),this.extraText(e,i,a,n,s),e.footer&&r&&this.footer(e.footer,t,i,s)}function s(e,t,r,i,n,s,o){r&&(t&&(r="string"==typeof r?t+r:[{text:t}].concat(r)),a(e,r,"historyfont",n=s?"abcjs-extra-text "+n:"","description",i,{absElemType:"extraText",anchor:"start"},o))}function o(e,t,r,n,s,o,c,l,h,d,u,f){if(r){l=u?"abcjs-extra-text "+l:"";var p=f.calc("A",s,l);if("string"==typeof r)t&&(r=t+"\n"+r),i(e,{marginLeft:n,text:r,font:s,absElemType:"extraText",name:h,"dominant-baseline":"middle",klass:l},f);else{e.push({startGroup:c,klass:l,name:h}),e.push({move:d.info}),t&&(i(e,{marginLeft:n,text:t,font:s,absElemType:"extraText",name:h,"dominant-baseline":"middle"},f),e.push({move:3*p.height/4}));for(var m=0;m0&&this.startVoice.staff.voices[0]===e)},e.exports=t},6891:function(e){e.exports=function(e,t,r,i){this.type="CrescendoElem",this.anchor1=e,this.anchor2=t,this.dir=r,"above"===i?this.dynamicHeightAbove=6:this.dynamicHeightBelow=6,this.pitch=void 0}},3185:function(e){e.exports=function(e,t,r){this.type="DynamicDecoration",this.anchor=e,this.dec=t,"below"===r?this.volumeHeightBelow=6:this.volumeHeightAbove=6,this.pitch=void 0}},8256:function(e){e.exports=function(e,t,r){this.type="EndingElem",this.text=e,this.anchor1=t,this.anchor2=r,this.endingHeightAbove=5,this.pitch=void 0}},3736:function(e){e.exports=function(e,t,r,i,a,n){var s,o=e.text;this.rows=[],t&&this.rows.push({move:t});var c=r.calc("textfont","defined-text");if(""===o)this.rows.push({move:2*c.attr["font-size"]});else if("string"==typeof o)this.rows.push({move:c.attr["font-size"]/2}),this.rows.push({left:i,text:o,font:"textfont",klass:"defined-text",anchor:"start",startChar:e.startChar,endChar:e.endChar,absElemType:"freeText",name:"free-text"}),s=n.calc(o,"textfont","defined-text"),this.rows.push({move:s.height});else if(o){for(var l=0,h=i,d="textfont",u=0;uthis.top&&(this.top=this.pitch2),this.bottom=i,void 0!==this.pitch2&&this.pitch20?this.top+=a.stemHeight:this.bottom+=a.stemHeight),a.dim&&(this.dim=a.dim),a.position&&(this.position=a.position),this.height=a.height?a.height:4,a.top&&(this.top=a.top),a.bottom&&(this.bottom=a.bottom),a.name?this.name=a.name:this.c?this.name=this.c:this.name=this.type,a.realWidth?this.realWidth=a.realWidth:this.realWidth=this.w,this.centerVertically=!1,this.type){case"debug":this.chordHeightAbove=this.height;break;case"lyric":a.position&&"below"===a.position?this.lyricHeightBelow=this.height:this.lyricHeightAbove=this.height;break;case"chord":a.position&&"below"===a.position?this.chordHeightBelow=this.height:this.chordHeightAbove=this.height;break;case"text":void 0===this.pitch?a.position&&"below"===a.position?this.chordHeightBelow=this.height:this.chordHeightAbove=this.height:this.centerVertically=!0;break;case"part":this.partHeightAbove=this.height}};t.prototype.getChordDim=function(){if("debug"===this.type)return null;if(!this.chordHeightAbove&&!this.chordHeightBelow)return null;var e="chord"===this.type?this.realWidth/2:0,t=this.x-e-0;return{left:t,right:t+this.realWidth+0}},t.prototype.invertLane=function(e){void 0===this.lane&&(this.lane=0),this.lane=e-this.lane-1},t.prototype.putChordInLane=function(e){this.lane=e,this.chordHeightAbove?this.chordHeightAbove=1.25*this.height*this.lane:this.chordHeightBelow=1.25*this.height*this.lane},t.prototype.getLane=function(){return void 0===this.lane?0:this.lane},t.prototype.setX=function(e){this.x=e+this.dx},e.exports=t},6994:function(e,t,r){var i=r(1716);e.exports=function(e,t,r,a,n,s,o,c){var l=c.calc("i",r,a);if(""===t)e.push({move:l.height});else{if("string"==typeof t)return void i(e,{marginLeft:s,text:t,font:r,klass:a,marginTop:o.marginTop,anchor:o.anchor,absElemType:o.absElemType,info:o.info,name:n},c);o.marginTop&&e.push({move:o.marginTop});var h=0,d={left:s,anchor:o.anchor,phrases:[]};a&&(d.klass=a),e.push(d);for(var u=0;u0)this.above=!1;else{var e;e=this.anchor1?this.anchor1.pitch:this.anchor2?this.anchor2.pitch:14,this.anchor1&&"down"===this.anchor1.stemDir&&this.anchor2&&"down"===this.anchor2.stemDir?this.above=!0:this.anchor1&&"up"===this.anchor1.stemDir&&this.anchor2&&"up"===this.anchor2.stemDir?this.above=!1:this.anchor1&&this.anchor2?this.above=e>=6:this.anchor1?this.above="down"===this.anchor1.stemDir:this.anchor2?this.above="down"===this.anchor2.stemDir:this.above=e>=6}},t.prototype.calcSlurDirection=function(){if(this.isGrace)this.above=!1;else if(0===this.voiceNumber)this.above=!0;else if(this.voiceNumber>0)this.above=!1;else{var e=!1;this.anchor1&&"down"===this.anchor1.stemDir&&(e=!0),this.anchor2&&"down"===this.anchor2.stemDir&&(e=!0);for(var t=0;te&&(e=this.internalNotes[t].highestVert);e>this.startY&&e>this.endY&&(this.startY=this.endY=e-1)}},e.exports=t},1134:function(e,t,r){var i=r(1716),a=r(6994);e.exports=function(e,t,r,n,s,o,c,l,h,d){if(this.rows=[],e.header&&o){var u=d.calc("X","headerfont","abcjs-header abcjs-meta-top").height;i(this.rows,{marginLeft:c,text:e.header.left,font:"headerfont",klass:"header meta-top",marginTop:-u,info:t.header,name:"header"},d),i(this.rows,{marginLeft:c+s/2,text:e.header.center,font:"headerfont",klass:"header meta-top",marginTop:-u,anchor:"middle",info:t.header,name:"header"},d),i(this.rows,{marginLeft:c+s,text:e.header.right,font:"headerfont",klass:"header meta-top",marginTop:-u,anchor:"end",info:t.header,name:"header"},d)}o&&this.rows.push({move:l.top});var f=r.titleleft?"start":"middle",p=r.titleleft?c:c+s/2;if(e.title){var m=h?"abcjs-title":"";a(this.rows,e.title,"titlefont",m,"title",p,{marginTop:l.title,anchor:f,absElemType:"title",info:t.title},d)}if(n.length)for(var g=0;g0){var v=!(!e.composer&&!e.origin);m=h?"abcjs-rhythm":"",i(this.rows,{marginLeft:c,text:e.rhythm,font:"infofont",klass:m,absElemType:"rhythm",noMove:v,info:t.rhythm,name:"rhythm"},d)}e.composer&&e.composer,e.origin&&e.origin;var b=e.composer?e.composer:"";e.origin&&("string"==typeof b&&"string"==typeof e.origin?b+=" ("+e.origin+")":"string"==typeof b&&"string"!=typeof e.origin?((b=[{text:b}]).push({text:" ("}),(b=b.concat(e.origin)).push({text:")"})):(b.push({text:" ("}),(b=b.concat(e.origin)).push({text:")"}))),b&&(m=h?"abcjs-composer":"",a(this.rows,b,"composerfont",m,"composer",c+s,{anchor:"end",absElemType:"composer",info:t.composer,ingroup:!0},d))}e.author&&e.author.length>0&&(m=h?"abcjs-author":"",a(this.rows,e.author,"composerfont",m,"author",c+s,{anchor:"end",absElemType:"author",info:t.author},d)),e.partOrder&&e.partOrder.length>0&&(m=h?"abcjs-part-order":"",a(this.rows,e.partOrder,"partsfont",m,"part-order",c,{absElemType:"partOrder",info:t.partOrder,anchor:"start"},d))}},2096:function(e){var t=function(e,t,r){this.type="TripletElem",this.anchor1=t,this.number=e,this.durationClass=("d"+Math.round(1e3*t.parent.durationClass)/1e3).replace(/\./,"-"),this.middleElems=[],this.flatBeams=r.flatBeams};t.prototype.isClosed=function(){return!!this.anchor2},t.prototype.middleNote=function(e){this.middleElems.push(e)},t.prototype.setCloseAnchor=function(e){this.anchor2=e,this.anchor1.parent.beam&&"up"!==this.anchor1.stemDir||(this.endingHeightAbove=4)},e.exports=t},3197:function(e){var t=function(e,t){this.children=[],this.beams=[],this.otherchildren=[],this.w=0,this.duplicate=!1,this.voicenumber=e,this.voicetotal=t,this.bottom=7,this.top=7,this.specialY={tempoHeightAbove:0,partHeightAbove:0,volumeHeightAbove:0,dynamicHeightAbove:0,endingHeightAbove:0,chordHeightAbove:0,lyricHeightAbove:0,lyricHeightBelow:0,chordHeightBelow:0,volumeHeightBelow:0,dynamicHeightBelow:0}};t.prototype.addChild=function(e){if("bar"===e.type){for(var t=!0,r=0;t&&r0&&"TempoElement"===t.children[0].type;t.elemset=[],o.beginGroup(e.paper,e.controller);for(var d=0;d=0&&f.setAttribute("class","abcjs-notehead")}}var p=t.type;if(("note"===t.type||"rest"===t.type)&&(t.counters=e.controller.classes.getCurrent(),p=(p+=" d"+Math.round(1e3*t.durationClass)/1e3).replace(/\./g,"-"),t.abcelem.pitches))for(var m=0;m0?g.classList[0]+" ":"";g.setAttribute("class",v+t.overrideClasses)}if(h)t.startChar=t.abcelem.startChar,t.endChar=t.abcelem.endChar,c.add(t,g,!1,l);else{t.elemset.push(g);var b=!1;"note"!==t.type&&"tabNumber"!==t.type||(b=!0),c.add(t,g,b,l)}}else t.elemset.length>0&&c.add(t,t.elemset[0],"note"===t.type,l);if(t.klass&&s(t.elemset,"mark","","#00ff00"),t.hint&&s(t.elemset,"abcjs-hint","",null),t.abcelem.abselem=t,t.heads&&t.heads.length>0){t.notePositions=[];for(var y=0;y=1&&l(e,e.spacing.staffSeparation,v[v.length-1],y.staffGroup);var x=c(e,y.staffGroup,m,b);x.line=p+b,v.push(x),e.paper.closeGroup()}else y.nonMusic&&(t.shouldAddClasses&&(g.klass="abcjs-non-music"),e.paper.openGroup(g),n(e,y.nonMusic,m),e.paper.closeGroup())}return t.reset(),r.bottomText&&r.bottomText.rows&&r.bottomText.rows.length>0&&(t.shouldAddClasses&&(g.klass="abcjs-meta-bottom"),e.paper.openGroup(g),e.moveY(24),n(e,r.bottomText,m),e.paper.closeGroup()),a(e,s,d,h),{staffgroups:v,selectables:m.getElements()}}},9879:function(e,t,r){var i=r(4777);e.exports=function(e,t,r){void 0===t.pitch&&window.console.error("Dynamic Element y-coordinate not set.");var a=i(e,t.anchor.x,t.pitch,t.dec,{scalex:1,scaley:1,klass:e.controller.classes.generate("decoration dynamics"),fill:e.foregroundColor,stroke:"none",name:"dynamics"});return r.wrapSvgEl({el_type:"dynamicDecoration",startChar:-1,endChar:-1,decoration:t.dec},a),[a]}},5947:function(e,t,r){var i=r(6764),a=r(5759),n=r(6454),s=r(7199);e.exports=function(e,t,r,o,c){void 0===t.pitch&&window.console.error("Ending Element y-coordinate not set.");var l=s(e.calcY(t.pitch)),h="";t.anchor1&&(r=s(t.anchor1.x+t.anchor1.w),h+=i("M %f %f L %f %f ",r,l,r,s(l+20))),t.anchor2&&(o=s(t.anchor2.x),h+=i("M %f %f L %f %f ",o,l,o,s(l+20))),h+=i("M %f %f L %f %f ",r,l,o,l),e.paper.openGroup({klass:e.controller.classes.generate("ending"),"data-name":"ending"}),n(e,{path:h,stroke:e.foregroundColor,fill:e.foregroundColor,"data-name":"line"}),t.anchor1&&a(e,{x:s(r+5),y:s(e.calcY(t.pitch-.5)),text:t.text,type:"repeatfont",klass:"ending",anchor:"start",noClass:!0,name:t.text});var d=e.paper.closeGroup();return c.wrapSvgEl({el_type:"ending",startChar:-1,endChar:-1},d),[d]}},9045:function(e,t,r){var i=r(6764),a=r(6454),n=r(7199);function s(e,t,r){return n(e+r*t)}var o=[[3.5,-4.8]],c=[[1.5,-1],[.3,-.3],[-3.5,3.8]],l=[[-1.5,2]],h=[[3,4],[3,-4]],d=[[-3,4],[-3,-4]];function u(e,t){for(var r="",i=0;i1&&s.indexOf(".")<0){var p=n.isInGroup()?"":o.klass;e.paper.openGroup({"data-name":o.name,klass:p});for(var m=0,g=0;g0?t.linewidth+e.lineThickness:t.linewidth-e.lineThickness;t.graphelem=a(e,t.x,d,o,e.calcY(t.pitch2),"abcjs-stem","stem");break;case"ledger":t.graphelem=n(e,t.x,t.x+t.w,t.pitch,"abcjs-ledger","ledger",.35+e.lineThickness)}return 1!==t.scalex&&t.graphelem&&function(e,t,r,i,a,n){e.setAttributeOnElement(t,{style:"transform:scale("+r+","+i+");transform-origin:"+a+"px "+n+"px;"})}(e.paper,t.graphelem,t.scalex,t.scaley,t.x,o),t.graphelem}},7199:function(e){e.exports=function(e){return parseFloat(e.toFixed(2))}},3524:function(e,t,r){var i=r(5741),a=r(5829);function n(e,t,r){this.elements=[],this.paper=e,this.tuneNumber=r,this.selectTypes=t}n.prototype.getElements=function(){return this.elements},n.prototype.add=function(e,t,r,i){if(this.canSelect(e)){var a;a=void 0===this.selectTypes?{selectable:!1,"data-index":this.elements.length}:{selectable:!0,tabindex:0,"data-index":this.elements.length},this.paper.setAttributeOnElement(t,a);var n={absEl:e,svgEl:t,isDraggable:r};void 0!==i&&(n.staffPos=i),this.elements.push(n)}},n.prototype.canSelect=function(e){return!(!1===this.selectTypes||!e||!e.abcelem||!0!==this.selectTypes&&!(void 0===this.selectTypes?"note"===e.abcelem.el_type||"tabNumber"===e.abcelem.el_type:this.selectTypes.indexOf(e.abcelem.el_type)>=0))},n.prototype.wrapSvgEl=function(e,t){var r={tuneNumber:this.tuneNumber,abcelem:e,elemset:[t],highlight:i,unhighlight:a};this.add(r,t,!1)},e.exports=n},4169:function(e){e.exports=function(e,t){var r=Math.round(e.y),i=(e.controller.width-t)/2,a=i+t,n="M "+i+" "+r+" L "+a+" "+r+" L "+a+" "+(r+1)+" L "+i+" "+(r+1)+" L "+i+" "+r+" z";e.paper.pathToBack({path:n,stroke:"rgba(0,0,0,0)",fill:"rgba(0,0,0,255)",class:e.controller.classes.generate("defined-text")})}},7611:function(e){e.exports=function(e,t,r,i){var a=(t+e.padding.left+e.padding.right)*r,n=(e.y+e.padding.bottom)*r;if(e.isPrint&&(n=Math.max(n,1056)),""!==e.ariaLabel){var s="Sheet Music";e.abctune&&e.abctune.metaText&&e.abctune.metaText.title&&(s+=' for "'+e.abctune.metaText.title+'"'),e.paper.setTitle(s);var o=e.ariaLabel?e.ariaLabel:s;e.paper.setAttribute("aria-label",o)}e.paper.insertStyles(".abcjs-dragging-in-progress text, .abcjs-dragging-in-progress tspan {"+["-webkit-touch-callout: none;","-webkit-user-select: none;","-khtml-user-select: none;","-moz-user-select: none;","-ms-user-select: none;","user-select: none;"].join(" ")+"}");var c={overflow:"hidden"};"resize"===i?e.paper.setResponsiveWidth(a,n):(c.width="",c.height=n+"px",r<1?(c.width=a+"px",e.paper.setSize(a/r,n/r)):e.paper.setSize(a,n)),e.paper.setScale(r),e.paper.setParentStyles(c)}},6764:function(e){function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t(e)}e.exports=function(){for(var e,r,i,a,n,s=0,o=arguments[s++],c=[];o;){if(r=/^[^\x25]+/.exec(o))c.push(r[0]);else if(r=/^\x25{2}/.exec(o))c.push("%");else{if(!(r=/^\x25(?:(\d+)\$)?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(o)))throw"Huh ?!";if(null==(e=arguments[r[1]||s++])||null==e)throw"Too few arguments.";if(/[^s]/.test(r[7])&&"number"!=typeof e)throw"Expecting number but found "+t(e);switch(r[7]){case"b":e=e.toString(2);break;case"c":e=String.fromCharCode(e);break;case"d":e=parseInt(e);break;case"e":e=r[6]?e.toExponential(r[6]):e.toExponential();break;case"f":e=r[6]?parseFloat(e).toFixed(r[6]):parseFloat(e);break;case"o":e=e.toString(8);break;case"s":e=(e=String(e))&&r[6]?e.substring(0,r[6]):e;break;case"u":e=Math.abs(e);break;case"x":e=e.toString(16);break;case"X":e=e.toString(16).toUpperCase()}e=/[def]/.test(r[7])&&r[2]&&e>0?"+"+e:e,a=r[3]?"0"==r[3]?"0":r[3][1]:" ",n=r[5]-String(e).length,i=r[5]?str_repeat(a,n):"",c.push(r[4]?e+i:i+e)}o=o.substring(r[0].length)}return c.join("")}},5537:function(e,t,r){var i=r(4331),a=r(129),n=r(3145),s=r(7641),o=r(1547),c=r(3624),l=r(5668);function h(e,t,r,n,s){if(r)for(var o=0;o=0&&v.voices&&d(e,t.voices,v.voices),e.showDebug.indexOf("grid")>=0&&(e.paper.dottedLine({x1:e.padding.left,x2:e.padding.left+e.controller.width,y1:m,y2:m,stroke:"#0000ff"}),o(e,{x:e.padding.left,y:e.calcY(v.originalTop),width:e.controller.width,height:e.calcY(v.originalBottom)-e.calcY(v.originalTop),fill:e.foregroundColor,stroke:e.foregroundColor,"fill-opacity":.1,"stroke-opacity":.1}),u=0,E(v,"chordHeightAbove"),E(v,"chordHeightBelow"),E(v,"dynamicHeightAbove"),E(v,"dynamicHeightBelow"),E(v,"endingHeightAbove"),E(v,"lyricHeightAbove"),E(v,"lyricHeightBelow"),E(v,"partHeightAbove"),E(v,"tempoHeightAbove"),E(v,"volumeHeightAbove"),E(v,"volumeHeightBelow"))),e.moveY(i.STEP,-v.bottom),e.showDebug&&e.showDebug.indexOf("grid")>=0&&e.paper.dottedLine({x1:e.padding.left,x2:e.padding.left+e.controller.width,y1:e.y,y2:e.y,stroke:"#0000aa"})}for(var b=2,y=0,x=0;x6&&(u=0)}}N>1&&(f=t.staffs[0].topLine,p=t.staffs[N-1].bottomLine,c(e,t.startx,.6,f,p,null)),e.y=m}},7865:function(e,t,r){var i=r(6637);e.exports=function(e,t,r,a,n,s,o){var c=e.calcY(a);return i(e,t,r,c,n,s,o)}},7641:function(e,t,r){var i=r(7865);e.exports=function(e,t,r,a,n,s){var o="abcjs-top-line",c=2;n&&(c=n),e.paper.openGroup({prepend:!0,klass:e.controller.classes.generate("abcjs-staff")});var l=0,h=0;if(1===a)i(e,t,r,6,o,null,s+e.lineThickness),l=e.calcY(10),h=e.calcY(2);else for(var d=a-1;d>=0;d--){var u=(d+1)*c;h=e.calcY(u),0===l&&(l=h),i(e,t,r,u,o,null,s+e.lineThickness),o=void 0}return e.paper.closeGroup(),[l,h]}},3987:function(e,t,r){var i=r(2435),a=r(5759);e.exports=function(e,t){var r=t.x;void 0===t.pitch&&window.console.error("Tempo Element y-coordinate not set."),t.tempo.el_type="tempo";var n,s=e.calcY(t.pitch)+2;if(t.tempo.preString){n=a(e,{x:r,y:s,text:t.tempo.preString,type:"tempofont",klass:"abcjs-tempo",anchor:"start",noClass:!0,name:"pre"},!0);var o=e.controller.getTextSize.calc(t.tempo.preString,"tempofont","tempo",n).width;r+=o+o/t.tempo.preString.length}if(t.note){t.note.setX(r);for(var c=0;c.1||(this.scale=void 0),t.staffwidth?(this.staffwidthScreen=t.staffwidth,this.staffwidthPrint=t.staffwidth):(this.staffwidthScreen=740,this.staffwidthPrint=680),this.listeners=[],t.clickListener&&this.addSelectListener(t.clickListener),this.renderer=new n(e),this.renderer.setPaddingOverride(t),t.showDebug&&(this.renderer.showDebug=t.showDebug),t.jazzchords&&(this.jazzchords=t.jazzchords),t.accentAbove&&(this.accentAbove=t.accentAbove),t.germanAlphabet&&(this.germanAlphabet=t.germanAlphabet),t.lineThickness&&(this.lineThickness=t.lineThickness),this.renderer.controller=this,this.renderer.foregroundColor=t.foregroundColor?t.foregroundColor:"currentColor",void 0!==t.ariaLabel&&(this.renderer.ariaLabel=t.ariaLabel),this.renderer.minPadding=t.minPadding?t.minPadding:0,this.reset()};function x(e){for(var t=document.createElementNS("http://www.w3.org/2000/svg","svg"),r=0;r0)for(var o=s.staffGroup.voices[0],c=!1,l=0,h=0;hthis.width+1&&(e.topText=new l(e.metaText,e.metaTextInfo,e.formatting,e.lines,n,this.renderer.isPrint,this.renderer.padding.left,this.renderer.spacing,this.classes.shouldAddClasses,this.getTextSize),e.lines&&e.lines.length>0))for(var s=e.lines.length,o=0;o0)for(var h=c.nonMusic.rows.length,f=0;f0&&c.text[0].center)&&(p.left=n/2+this.renderer.padding.left)}}e.tablatures&&v.layoutTablatures(this.renderer,e);var m=g(this.renderer,this.classes,e,this.width,n,this.responsive,a,this.selectTypes,t,r);if(this.staffgroups=m.staffgroups,this.selectables=m.selectables,this.oneSvgPerLine){var b=this.renderer.paper.svg.parentNode;this.svgs=function(e,t,r,i,a){r||(r="Untitled");var n=t.querySelector("svg");"resize"===i&&(t.style.paddingBottom="");for(var s=n.querySelector("style"),o="resize"===i?n.viewBox.baseVal.width:n.getAttribute("width"),c=t.querySelectorAll("svg > g"),l=0,h=[],d=0;d0&&t.push(e),"abcjs-tab-number"===e)return t.join(" ");if("text instrument-name"===e)return"abcjs-text abcjs-instrument-name";if(null!==this.lineNumber&&t.push("l"+this.lineNumber),null!==this.measureNumber&&t.push("m"+this.measureNumber),null!==this.measureNumber&&t.push("mm"+this.measureTotal()),null!==this.voiceNumber&&t.push("v"+this.voiceNumber),e&&(e.indexOf("note")>=0||e.indexOf("rest")>=0||e.indexOf("lyric")>=0)&&null!==this.noteNumber&&t.push("n"+this.noteNumber),t.length>0){t=(t=t.join(" ")).split(" ");for(var r=0;r0&&(t[r]="abcjs-"+t[r])}return t.join(" ")},e.exports=t},1328:function(e){var t=function(e,t){this.formatting=e,this.classes=t};t.prototype.updateFonts=function(e){e.gchordfont&&(this.formatting.gchordfont=e.gchordfont),e.tripletfont&&(this.formatting.tripletfont=e.tripletfont),e.annotationfont&&(this.formatting.annotationfont=e.annotationfont),e.vocalfont&&(this.formatting.vocalfont=e.vocalfont)},t.prototype.getFamily=function(e){return'"'===e[0]&&'"'===e[e.length-1]?e.substring(1,e.length-1):e},t.prototype.calc=function(e,t){var r;r="string"==typeof e?(r=this.formatting[e])?{face:r.face,size:Math.round(4*r.size/3),decoration:r.decoration,style:r.style,weight:r.weight,box:r.box}:{face:"Arial",size:Math.round(16),decoration:"underline",style:"normal",weight:"normal"}:{face:e.face,size:Math.round(4*e.size/3),decoration:e.decoration,style:e.style,weight:e.weight,box:e.box};var i=this.formatting.fontboxpadding?this.formatting.fontboxpadding:.1;return r.padding=r.size*i,{font:r,attr:{"font-size":r.size,"font-style":r.style,"font-family":this.getFamily(r.face),"font-weight":r.weight,"text-decoration":r.decoration,class:this.classes.generate(t)}}},e.exports=t},9799:function(e){var t=function(e,t){this.getFontAndAttr=e,this.svg=t};t.prototype.updateFonts=function(e){this.getFontAndAttr.updateFonts(e)},t.prototype.attr=function(e,t){return this.getFontAndAttr.calc(e,t)},t.prototype.getFamily=function(e){return'"'===e[0]&&'"'===e[e.length-1]?e.substring(1,e.length-1):e},t.prototype.calc=function(e,t,r,i){var a;a="string"==typeof t?this.attr(t,r):{font:{face:t.face,size:t.size,decoration:t.decoration,style:t.style,weight:t.weight},attr:{"font-size":t.size,"font-style":t.style,"font-family":this.getFamily(t.face),"font-weight":t.weight,"text-decoration":t.decoration,class:this.getFontAndAttr.classes.generate(r)}};var n=this.svg.getTextSize(e,a.attr,i);return a.font.box?{height:n.height+4*a.font.padding,width:n.width+4*a.font.padding}:n},t.prototype.baselineToCenter=function(e,t,r,i,a){return.5*this.calc(e,t,r).height+(a-i-2)*this.attr(t,r).font.size},e.exports=t},2187:function(e){e.exports=function(e,t,r,i){if(e)for(var a=0;a0&&(o.length>0&&" "!==o[o.length-1]&&(o+=" "),o+=t),n.setAttribute("class",o)}}},4331:function(e){var t={FONTEM:360,FONTSIZE:30};t.STEP=93*t.FONTSIZE/720,t.SPACE=10,t.TOPNOTE=15,t.STAVEHEIGHT=100,t.INDENT=50,e.exports=t},8123:function(e){function t(e,t,r,i){if(0===e.indexOf(t)){var a=e.replace(t,""),n=parseInt(a,10);""+n===a&&(r[i]=n)}}e.exports=function(e,r){var i=[];if(e.absEl.elemset){for(var a={},n=0;n=0&&r=0?(a=function(e,t,r){return e.x<=t.offsetX&&e.x+e.width>=t.offsetX&&e.y<=t.offsetY&&e.y+e.height>=t.offsetY||Math.abs(t.layerY/r-t.offsetY)<3?[t.offsetX,t.offsetY]:[t.layerX,t.layerY]}(e.selectables[n].svgEl.getBBox(),t,e.scale),r=a[0],i=a[1]):(a=function(e){var t,r,i=1,a=1,n=e.target.closest("svg"),s=0;return n&&n.viewBox&&n.viewBox.baseVal&&(0!==n.viewBox.baseVal.width&&(i=n.viewBox.baseVal.width/n.clientWidth),0!==n.viewBox.baseVal.height&&(a=n.viewBox.baseVal.height/n.clientHeight),s=n.viewBox.baseVal.y),e.target&&"svg"===e.target.tagName?(t=e.offsetX,r=e.offsetY):(t=e.layerX,r=e.layerY),[t*=i,(r*=a)+s]}(t),n=function(e,t,r){for(var i=9999999,a=-1,n=0;n0;n++){var s=e.selectables[n];if(e.getDim(s),s.dim.leftt&&s.dim.topr)a=n,i=0;else if(s.dim.topr){var o=Math.min(Math.abs(s.dim.left-t),Math.abs(s.dim.right-t));ot){var c=Math.min(Math.abs(s.dim.top-r),Math.abs(s.dim.bottom-r));cMath.abs(t-s.dim.right)?Math.abs(t-s.dim.right):Math.abs(t-s.dim.left),h=Math.abs(r-s.dim.top)>Math.abs(r-s.dim.bottom)?Math.abs(r-s.dim.bottom):Math.abs(r-s.dim.top),d=Math.sqrt(l*l+h*h);d=0&&i<=12?a:-1}(e,r=a[0],i=a[1])),{x:r,y:i,clickedOn:n}}function l(e){if(e&&e.target&&e.touches&&!(e.touches.length<1)){var t=e.target.getBoundingClientRect(),r=e.touches[0].pageX-t.left,i=e.touches[0].pageY-t.top;e.touches[0].offsetX=r,e.touches[0].offsetY=i,e.touches[0].layerX=e.touches[0].pageX,e.touches[0].layerY=e.touches[0].pageY}}function h(e){var t=e;"touchstart"===e.type&&(l(e),e.touches.length>0&&(t=e.touches[0]));var r=c(this,t);r.clickedOn>=0&&("touchstart"===e.type||0===e.button)&&this.selectables[r.clickedOn]&&(this.dragTarget=this.selectables[r.clickedOn],this.dragIndex=r.clickedOn,this.dragMechanism="mouse",this.dragMouseStart={x:r.x,y:r.y},this.dragging&&this.dragTarget.isDraggable&&(function(e,t){if(e){var r=v(e.svg);r[t]=!0,b(e.svg,r)}}(this.renderer.paper,"abcjs-dragging-in-progress"),this.dragTarget.absEl.highlight(void 0,this.dragColor)))}function d(e){var t=e;if("touchmove"===e.type&&(l(e),e.touches.length>0&&(t=e.touches[0])),this.lastTouchMove=e,this.dragTarget&&this.dragging&&this.dragTarget.isDraggable&&"mouse"===this.dragMechanism&&this.dragMouseStart){var r=c(this,t),a=Math.round((r.y-this.dragMouseStart.y)/i.STEP);a!==this.dragYStep&&(this.dragYStep=a,this.dragTarget.svgEl.setAttribute("transform","translate(0,"+a*i.STEP+")"))}}function u(e){var t=e;"touchend"===e.type&&this.lastTouchMove&&(l(this.lastTouchMove),this.lastTouchMove&&this.lastTouchMove.touches&&this.lastTouchMove.touches.length>0&&(t=this.lastTouchMove.touches[0])),this.dragTarget&&(m.bind(this)(),this.dragTarget.absEl&&this.dragTarget.absEl.highlight&&(this.selected=[this.dragTarget.absEl],this.dragTarget.absEl.highlight(void 0,this.selectionColor)),p.bind(this)(this.dragTarget,this.dragYStep,this.selectables.length,this.dragIndex,t),this.dragTarget.svgEl&&this.dragTarget.svgEl.focus&&(this.dragTarget.svgEl.focus(),this.dragTarget=null,this.dragIndex=-1),function(e,t){if(e){var r=v(e.svg);delete r[t],b(e.svg,r)}}(this.renderer.svg,"abcjs-dragging-in-progress"))}function f(e){e>=0&&eo&&en&&(a=n),a<-n&&(a=-n),a}(x,k,v,w),A=_+Math.floor(M/2),B=_+Math.floor(-M/2),S||(y&&_<6||!y&&_>6)&&(A=6,B=6),[A,B]),f=c(e.stemsUp,r,l);e.addBeam({startX:f[0],endX:f[1],startY:u[0],endY:u[1],dy:t});for(var p=function(e,t,r,i,a){for(var o=[],l=[],h=0;h0&&d.abcelem.beambr&&d.abcelem.beambr<=b+1){l[b].split||(l[b].split=[l[b].x]);var y=c(t,e[h-1],d);l[b].split[l[b].split.length-1]>=y[0]&&(y[0]+=d.w),l[b].split.push(y[0]),l[b].split.push(y[1])}}for(var x=l.length-1;x>=0;x--)if(h===e.length-1||s(e[h+1].abcelem.duration)>-x-4){var k=f,w=p+m*(x+1);l[x].single&&(k=0===h?f+5:f-5,w=n(r.startX,r.startY,r.endX,r.endY,k)+m*(x+1));var T={startX:l[x].x,endX:k,startY:l[x].y,endY:w,dy:a};if(void 0!==l[x].split){var C=l[x].split;T.endX<=C[C.length-1]&&(C[C.length-1]-=d.w),C.push(T.endX),T.split=l[x].split}o.push(T),l=l.slice(0,x)}}}return o}(e.elems,e.stemsUp,e.beams[0],e.isgrace,t),m=0;m0?((a=(r-(i-n*a))/n)*s>50&&(a=50/s),a):null}e.exports=function(e,t,r,n,s,l){var h,d,u=r;for(h=0;hMath.round(u)&&(u=f,s&&(h=-1)))}for(h=0;h=0&&(c.originalTop=c.top,c.originalBottom=c.bottom),n(c,l,"lyricHeightAbove"),n(c,l,"chordHeightAbove",c.specialY.chordLines.above),c.specialY.endingHeightAbove&&(c.specialY.chordHeightAbove?c.top+=2:c.top+=c.specialY.endingHeightAbove+a,l.endingHeightAbove=c.top),c.specialY.dynamicHeightAbove&&c.specialY.volumeHeightAbove?(c.top+=Math.max(c.specialY.dynamicHeightAbove,c.specialY.volumeHeightAbove)+a,l.dynamicHeightAbove=c.top,l.volumeHeightAbove=c.top):(n(c,l,"dynamicHeightAbove"),n(c,l,"volumeHeightAbove")),n(c,l,"partHeightAbove"),n(c,l,"tempoHeightAbove"),c.specialY.lyricHeightBelow&&(c.specialY.lyricHeightBelow+=e.spacing.vocal/i.STEP,l.lyricHeightBelow=c.bottom,c.bottom-=c.specialY.lyricHeightBelow+a),c.specialY.chordHeightBelow){l.chordHeightBelow=c.bottom;var h=c.specialY.chordHeightBelow;c.specialY.chordLines.below&&(h*=c.specialY.chordLines.below),c.bottom-=h+a}c.specialY.volumeHeightBelow&&c.specialY.dynamicHeightBelow?(l.volumeHeightBelow=c.bottom,l.dynamicHeightBelow=c.bottom,c.bottom-=Math.max(c.specialY.volumeHeightBelow,c.specialY.dynamicHeightBelow)+a):c.specialY.volumeHeightBelow?(l.volumeHeightBelow=c.bottom,c.bottom-=c.specialY.volumeHeightBelow+a):c.specialY.dynamicHeightBelow&&(l.dynamicHeightBelow=c.bottom,c.bottom-=c.specialY.dynamicHeightBelow+a),e.showDebug&&e.showDebug.indexOf("box")>=0&&(c.positionY=l);for(var d=0;d0&&(c.top+=f)}c.top+=e.spacing.staffTopMargin/i.STEP,r=2-c.bottom}}},735:function(e,t,r){var i=r(937);function a(e){for(var t=0;t0?0:5e-7)}e.exports=function(e,t,r,s,o){var c,l=0,h=1e3,d=o;s.startx=d;var u,f,p=0;for(r&&console.log("init layout",e),c=0;c1e-7?v.push(s.voices[c]):g.push(s.voices[c]);m=0;var b=0;for(c=0;cd&&(d=i.getNextX(g[c]),m=i.getSpacingUnits(g[c]),b=g[c].spacingduration);l+=m,h=Math.min(h,m),r&&console.log("currentduration: ",p,l,h);var y=void 0;for(c=0;c0){d=w;for(var C=0;Cd&&(d=i.getNextX(s.voices[c]),m=i.getSpacingUnits(s.voices[c]));return function(e){for(var t=0,r=0;r0){var a=i.children.length-1,n=i.children[a];if("bar"===n.abcelem.el_type){var s=n.children[0].x;s>t?t=s:n.children[0].x=t}}}}(s.voices),l+=m,s.setWidth(d),{spacingUnits:l,minSpace:h}}},3294:function(e,t,r){var i=r(3721);function a(e){return e.stemsUp}e.exports=function(e){if(e.anchor1&&e.anchor2){e.hasBeam=!!e.anchor1.parent.beam&&e.anchor1.parent.beam===e.anchor2.parent.beam;var t=e.anchor1.parent.beam;if(!e.hasBeam||t.elems[0]===e.anchor1.parent&&t.elems[t.elems.length-1]===e.anchor2.parent||(e.hasBeam=!1),e.hasBeam){var r=a(t)?e.anchor1.x+e.anchor1.w:e.anchor1.x;e.yTextPos=function(e,t,r){if(0===r.beams.length)return 0;r=r.beams[0];var a=e+(t-e)/2;return i(r.startX,r.startY,r.endX,r.endY,a)}(r,e.anchor2.x,t),e.yTextPos+=a(t)?3:-2,e.xTextPos=(o=r,c=e.anchor2.x,o+(c-o)/2),e.top=e.yTextPos+1,e.bottom=e.yTextPos-2,a(t)&&(e.endingHeightAbove=4)}else{e.startNote=Math.max(e.anchor1.parent.top,9)+4,e.endNote=Math.max(e.anchor2.parent.top,9)+4,"rest"===e.anchor1.parent.type&&"rest"!==e.anchor2.parent.type?e.startNote=e.endNote:"rest"===e.anchor2.parent.type&&"rest"!==e.anchor1.parent.type&&(e.endNote=e.startNote);for(var n=0,s=0;se.startNote||n>e.endNote)&&(e.startNote=n,e.endNote=n),e.flatBeams&&(e.startNote=Math.max(e.startNote,e.endNote),e.endNote=Math.max(e.startNote,e.endNote)),e.yTextPos=e.startNote+(e.endNote-e.startNote)/2,e.xTextPos=e.anchor1.x+(e.anchor2.x+e.anchor2.w-e.anchor1.x)/2,e.top=e.yTextPos+1}}var o,c;delete e.middleElems,delete e.flatBeams}},937:function(e){var t=function(){};t.beginLayout=function(e,t){t.i=0,t.durationindex=0,t.startx=e,t.minx=e,t.nextx=e,t.spacingduration=0},t.layoutEnded=function(e){return e.i>=e.children.length},t.getNextX=function(e){return Math.max(e.minx,e.nextx)},t.getSpacingUnits=function(e){return Math.sqrt(8*e.spacingduration)},t.layoutOneItem=function(e,t,r,i,a){var n=r.children[r.i];if(!n)return 0;var s=e-r.minx,o=r.durationindex+n.duration>0?i:0;if("note"===n.abcelem.el_type&&!n.abcelem.rest&&0!==r.voicenumber&&a){var c=a.children[a.i],l=c&&(n.abcelem.maxpitch<=c.abcelem.maxpitch+1&&n.abcelem.maxpitch>=c.abcelem.minpitch-1||n.abcelem.minpitch<=c.abcelem.maxpitch+1&&n.abcelem.minpitch>=c.abcelem.minpitch-1);if(l&&n.abcelem.minpitch===c.abcelem.minpitch&&n.abcelem.maxpitch===c.abcelem.maxpitch&&c.heads&&c.heads.length>0&&n.heads&&n.heads.length>0&&c.heads[0].c===n.heads[0].c&&(l=!1),l){var h=c.heads&&c.heads.length>0?c.heads[0].realWidth:c.fixed.w;n.adjustedWidth||(n.adjustedWidth=h+n.w),n.w=n.adjustedWidth;for(var d=0;d0&&t.putChordInLane(i),void(e[i]=r.right);e.push(r.right),t.putChordInLane(e.length-1)}}function c(e){for(var t=0,r=0;r=0;r--)(i=e[t].children[r]).chordHeightBelow&&o(n,i)}return(a.length>1||n.length>1)&&function(e,t,r){for(var i=0;i=0};n.prototype.reset=function(){this.paper.clear(),this.y=0,this.abctune=null,this.path=null,this.isPrint=!1,this.lineThickness=0,this.initVerticalSpace()},n.prototype.newTune=function(e){this.abctune=e,this.setVerticalSpace(e.formatting),this.isPrint="print"===e.media,this.setPadding(e)},n.prototype.setLineThickness=function(e){this.lineThickness=e},n.prototype.setPaddingOverride=function(e){this.paddingOverride={top:e.paddingtop,bottom:e.paddingbottom,right:e.paddingright,left:e.paddingleft}},n.prototype.setPadding=function(e){function t(t,r,i,a,n){void 0!==e.formatting[i]?t.padding[r]=e.formatting[i]:void 0!==t.paddingOverride[r]?t.padding[r]=t.paddingOverride[r]:t.isPrint?t.padding[r]=a:t.padding[r]=n}t(this,"top","topmargin",38,15),t(this,"bottom","botmargin",38,15),t(this,"left","leftmargin",68,15),t(this,"right","rightmargin",68,15)},n.prototype.adjustNonScaledItems=function(e){this.padding.top/=e,this.padding.bottom/=e,this.padding.left/=e,this.padding.right/=e,this.abctune.formatting.headerfont.size/=e,this.abctune.formatting.footerfont.size/=e},n.prototype.initVerticalSpace=function(){this.spacing={composer:7.56,graceBefore:8.67,graceInside:10.67,graceAfter:16,info:0,lineSkipFactor:1.1,music:7.56,paragraphSkipFactor:.4,parts:11.33,slurHeight:1,staffSeparation:61.33,staffTopMargin:0,stemHeight:36.67,subtitle:3.78,systemStaffSeparation:48,text:18.9,title:7.56,top:30.24,vocal:0,words:0}},n.prototype.setVerticalSpace=function(e){void 0!==e.staffsep&&(this.spacing.staffSeparation=4*e.staffsep/3),void 0!==e.composerspace&&(this.spacing.composer=4*e.composerspace/3),void 0!==e.partsspace&&(this.spacing.parts=4*e.partsspace/3),void 0!==e.textspace&&(this.spacing.text=4*e.textspace/3),void 0!==e.musicspace&&(this.spacing.music=4*e.musicspace/3),void 0!==e.titlespace&&(this.spacing.title=4*e.titlespace/3),void 0!==e.sysstaffsep&&(this.spacing.systemStaffSeparation=4*e.sysstaffsep/3),void 0!==e.stafftopmargin&&(this.spacing.staffTopMargin=4*e.stafftopmargin/3),void 0!==e.subtitlespace&&(this.spacing.subtitle=4*e.subtitlespace/3),void 0!==e.topspace&&(this.spacing.top=4*e.topspace/3),void 0!==e.vocalspace&&(this.spacing.vocal=4*e.vocalspace/3),void 0!==e.wordsspace&&(this.spacing.words=4*e.wordsspace/3)},n.prototype.calcY=function(e){return this.y-e*i.STEP},n.prototype.moveY=function(e,t){void 0===t&&(t=1),this.y+=e*t},n.prototype.absolutemoveY=function(e){this.y=e},e.exports=n},4101:function(e){var t="http://www.w3.org/2000/svg";function r(e){this.svg=s(),this.currentGroup=[],e.appendChild(this.svg)}function i(e,t,r){var i=r-e;return"M "+e+" "+t+" l "+i+" 0 l 0 1 l "+-i+" 0 z "}function a(e,t,r){var i=r-t;return"M "+e+" "+t+" l 0 "+i+" l 1 0 l 0 "+-i+" z "}r.prototype.clear=function(){if(this.svg){var e=this.svg.parentNode;this.svg=s(),this.currentGroup=[],e&&(e.innerHTML="",e.appendChild(this.svg))}},r.prototype.setTitle=function(e){var t=document.createElement("title"),r=document.createTextNode(e);t.appendChild(r),this.svg.insertBefore(t,this.svg.firstChild)},r.prototype.setResponsiveWidth=function(e,t){if(this.svg.setAttribute("viewBox","0 0 "+e+" "+t),this.svg.setAttribute("preserveAspectRatio","xMinYMin meet"),this.svg.removeAttribute("height"),this.svg.removeAttribute("width"),this.svg.style.display="inline-block",this.svg.style.position="absolute",this.svg.style.top="0",this.svg.style.left="0",this.svg.parentNode){var r=this.svg.parentNode.getAttribute("class");r?r.indexOf("abcjs-container")<0&&this.svg.parentNode.setAttribute("class",r+" abcjs-container"):this.svg.parentNode.setAttribute("class","abcjs-container"),this.svg.parentNode.style.display="inline-block",this.svg.parentNode.style.position="relative",this.svg.parentNode.style.width="100%";var i=t/e*100;this.svg.parentNode.style["padding-bottom"]=i+"%",this.svg.parentNode.style["vertical-align"]="middle",this.svg.parentNode.style.overflow="hidden"}},r.prototype.setSize=function(e,t){this.svg.setAttribute("width",e),this.svg.setAttribute("height",t)},r.prototype.setAttribute=function(e,t){this.svg.setAttribute(e,t)},r.prototype.setScale=function(e){1!==e?(this.svg.style.transform="scale("+e+","+e+")",this.svg.style["-ms-transform"]="scale("+e+","+e+")",this.svg.style["-webkit-transform"]="scale("+e+","+e+")",this.svg.style["transform-origin"]="0 0",this.svg.style["-ms-transform-origin-x"]="0",this.svg.style["-ms-transform-origin-y"]="0",this.svg.style["-webkit-transform-origin-x"]="0",this.svg.style["-webkit-transform-origin-y"]="0"):(this.svg.style.transform="",this.svg.style["-ms-transform"]="",this.svg.style["-webkit-transform"]="")},r.prototype.insertStyles=function(e){var r=document.createElementNS(t,"style");r.textContent=e,this.svg.insertBefore(r,this.svg.firstChild)},r.prototype.setParentStyles=function(e){for(var t in e)e.hasOwnProperty(t)&&this.svg.parentNode&&(this.svg.parentNode.style[t]=e[t]);this.dummySvg&&(document.querySelector("body").removeChild(this.dummySvg),this.dummySvg=null)},r.prototype.rect=function(e){var t=[],r=e.x,n=e.y,s=e.x+e.width,o=e.y+e.height;return t.push(i(r,n,s)),t.push(i(r,o,s)),t.push(a(s,n,o)),t.push(a(r,o,n)),this.path({path:t.join(" "),stroke:"none","data-name":e["data-name"]})},r.prototype.dottedLine=function(e){var r=document.createElementNS(t,"line");r.setAttribute("x1",e.x1),r.setAttribute("x2",e.x2),r.setAttribute("y1",e.y1),r.setAttribute("y2",e.y2),r.setAttribute("stroke",e.stroke),r.setAttribute("stroke-dasharray","5,5"),this.svg.insertBefore(r,this.svg.firstChild)},r.prototype.rectBeneath=function(e){var r=document.createElementNS(t,"rect");r.setAttribute("x",e.x),r.setAttribute("width",e.width),r.setAttribute("y",e.y),r.setAttribute("height",e.height),e.stroke&&r.setAttribute("stroke",e.stroke),e["stroke-opacity"]&&r.setAttribute("stroke-opacity",e["stroke-opacity"]),e.fill&&r.setAttribute("fill",e.fill),e["fill-opacity"]&&r.setAttribute("fill-opacity",e["fill-opacity"]),this.svg.insertBefore(r,this.svg.firstChild)},r.prototype.text=function(e,r,i){var a=document.createElementNS(t,"text");for(var n in a.setAttribute("stroke","none"),r)r.hasOwnProperty(n)&&a.setAttribute(n,r[n]);for(var s=(""+e).split("\n"),o=0;o0?this.currentGroup[0].removeChild(r):this.svg.removeChild(r)),i&&(n[i]=a),a},r.prototype.openGroup=function(e){e=e||{};var r=document.createElementNS(t,"g");return e.klass&&r.setAttribute("class",e.klass),e.fill&&r.setAttribute("fill",e.fill),e.stroke&&r.setAttribute("stroke",e.stroke),e["data-name"]&&r.setAttribute("data-name",e["data-name"]),e.prepend?this.prepend(r):this.append(r),this.currentGroup.unshift(r),r},r.prototype.closeGroup=function(){var e=this.currentGroup.shift();return e&&0===e.children.length?(e.parentElement.removeChild(e),null):e},r.prototype.path=function(e){var r=document.createElementNS(t,"path");for(var i in e)e.hasOwnProperty(i)&&("path"===i?r.setAttributeNS(null,"d",e.path):"klass"===i?r.setAttributeNS(null,"class",e[i]):void 0!==e[i]&&r.setAttributeNS(null,i,e[i]));return this.append(r),r},r.prototype.pathToBack=function(e){var r=document.createElementNS(t,"path");for(var i in e)e.hasOwnProperty(i)&&("path"===i?r.setAttributeNS(null,"d",e.path):"klass"===i?r.setAttributeNS(null,"class",e[i]):r.setAttributeNS(null,i,e[i]));return this.prepend(r),r},r.prototype.lineToBack=function(e){for(var r=document.createElementNS(t,"line"),i=Object.keys(e),a=0;a0?this.currentGroup[0].appendChild(e):this.svg.appendChild(e)},r.prototype.prepend=function(e){this.currentGroup.length>0?this.currentGroup[0].appendChild(e):this.svg.insertBefore(e,this.svg.firstChild)},r.prototype.setAttributeOnElement=function(e,t){for(var r in t)t.hasOwnProperty(r)&&e.setAttributeNS(null,r,t[r])},r.prototype.moveElementToChild=function(e,t){e.appendChild(t)},e.exports=r}},t={},r=function r(i){var a=t[i];if(void 0!==a)return a.exports;var n=t[i]={exports:{}};return e[i](n,n.exports,r),n.exports}(7001),r;var e,t,r})); \ No newline at end of file diff --git a/package.json b/package.json index 3875c2ff0..d2af71d3c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "abcjs", - "version": "6.4.0", + "version": "6.4.1", "description": "Renderer for abc music notation", "main": "index.js", "types": "types/index.d.ts", diff --git a/version.js b/version.js index fab184799..f9f31eddd 100644 --- a/version.js +++ b/version.js @@ -1,3 +1,3 @@ -var version = '6.4.0'; +var version = '6.4.1'; module.exports = version;