class Oscillator{constructor(t,e,i,s,n){this.audioCtx=t,this.type=e,this.frequency=i,this.detune=s,this.oscillator=this.audioCtx.createOscillator(),this.oscillator.type=this.type,this.oscillator.frequency.value=this.frequency,this.oscillator.detune.value=this.detune,this.gainNode=this.audioCtx.createGain(),this.gainNode.gain.value=n,this.lfo=new LFO(t,"sine",15,.5),this.lfo.connect(this.oscillator.frequency)}connect(t){this.oscillator.connect(this.gainNode),this.gainNode.connect(t)}disconnect(){this.oscillator.disconnect()}setFrequency(t){this.oscillator.frequency.value=t}setDetune(t){this.oscillator.detune.value=t}setType(t){this.oscillator.type=t}start(){this.oscillator.start()}stop(){this.oscillator.stop()}}class Envelope{constructor(t,e,i,s,n){this.audioCtx=t,this.attack=e,this.decay=i,this.sustain=s,this.release=n,this.gain=this.audioCtx.createGain(),this.gain.gain.value=.27,this.gain.connect(this.audioCtx.destination)}connect(t){this.gain.connect(t)}disconnect(){this.gain.disconnect()}triggerAttack(){this.gain.gain.cancelScheduledValues(this.audioCtx.currentTime),this.gain.gain.setValueAtTime(0,this.audioCtx.currentTime);this.gain.gain.linearRampToValueAtTime(1e-4,this.audioCtx.currentTime+.2*this.attack),this.gain.gain.linearRampToValueAtTime(1,this.audioCtx.currentTime+this.attack),this.gain.gain.linearRampToValueAtTime(this.sustain,this.audioCtx.currentTime+this.attack+this.decay)}triggerRelease(){this.gain.gain.cancelScheduledValues(this.audioCtx.currentTime),this.gain.gain.setValueAtTime(this.gain.gain.value,this.audioCtx.currentTime),this.gain.gain.exponentialRampToValueAtTime(1e-4,this.audioCtx.currentTime+this.release)}}class ModulationEnvelope{constructor(t,e,i,s,n){this.audioCtx=t,this.attack=e,this.decay=i,this.sustain=s,this.release=n,this.gain=this.audioCtx.createGain(),this.gain.gain.value=.32,this.gain.connect(this.audioCtx.destination)}connect(t){this.gain.connect(t)}disconnect(){this.gain.disconnect()}triggerAttack(){this.gain.gain.cancelScheduledValues(this.audioCtx.currentTime),this.gain.gain.setValueAtTime(0,this.audioCtx.currentTime);this.gain.gain.linearRampToValueAtTime(1e-4,this.audioCtx.currentTime+.2*this.attack),this.gain.gain.linearRampToValueAtTime(1,this.audioCtx.currentTime+this.attack),this.gain.gain.linearRampToValueAtTime(this.sustain,this.audioCtx.currentTime+this.attack+this.decay)}triggerRelease(){this.gain.gain.cancelScheduledValues(this.audioCtx.currentTime),this.gain.gain.setValueAtTime(this.gain.gain.value,this.audioCtx.currentTime),this.gain.gain.exponentialRampToValueAtTime(1e-4,this.audioCtx.currentTime+this.release)}}class FMSynth{constructor(t,e,i,s,n){this.audioCtx=t,this.numberOfOscillators=e,this.oscillators=[],this.modulationEnvelopes=[],this.filterEnvelopes=[],this.mod_envelope=s,this.volume=n,this.envelope=new Envelope(this.audioCtx,i.attack,i.decay,i.sustain,i.release),this.output=this.audioCtx.createGain(),this.output.gain.value=.3,this.output.connect(this.audioCtx.destination),this.envelope.connect(this.output),this.createOscillators(),this.createModulationEnvelopes(),this.createEffects()}createOscillators(){this.oscillators.push(new Oscillator(this.audioCtx,"sine",993,3,this.volume)),this.oscillators.push(new Oscillator(this.audioCtx,"sine",587,-5,this.volume)),this.oscillators.push(new Oscillator(this.audioCtx,"sine",1174,-7,this.volume)),this.oscillators.push(new Oscillator(this.audioCtx,"sine",496,9,this.volume)),this.oscillators.push(new Oscillator(this.audioCtx,"sine",392,-1,this.volume))}createModulationEnvelopes(){for(let t=0;t<this.numberOfOscillators;t++){let t=new ModulationEnvelope(this.audioCtx,this.mod_envelope.attack,this.mod_envelope.decay,this.mod_envelope.sustain,this.mod_envelope.release);this.modulationEnvelopes.push(t)}}createEffects(){this.reverb=new Reverb(this.audioCtx),this.reverb.connect(this.output),this.delay=new Delay(this.audioCtx),this.delay.connect(this.output),this.pingPongDelay=new PingPongDelay2(this.audioCtx),this.pingPongDelay.connect(this.output),this.pingPongDelay.startAutoPanner(),this.flanger=new Flanger(this.audioCtx),this.flanger.connect(this.output),this.lowPassFilter=new Filter(this.audioCtx,"lowpass",2900,1),this.lowPassFilter.connect(this.output),this.highPassFilter=new Filter(this.audioCtx,"highpass",90,.8),this.highPassFilter.connect(this.output),this.tapeSaturator=new TapeSaturator(this.audioCtx),this.tapeSaturator.connect(this.output);for(let t=0;t<this.numberOfOscillators;t++)this.modulationEnvelopes[t].connect(this.reverb.input),this.modulationEnvelopes[t].connect(this.delay.input),this.modulationEnvelopes[t].connect(this.pingPongDelay.input),this.modulationEnvelopes[t].connect(this.flanger.input),this.modulationEnvelopes[t].connect(this.lowPassFilter.input),this.modulationEnvelopes[t].connect(this.highPassFilter.input),this.modulationEnvelopes[t].connect(this.tapeSaturator.input)}connect(t){this.output.connect(t)}disconnect(){this.output.disconnect()}triggerAttack(t){for(let e=0;e<this.numberOfOscillators;e++){let i=0|t[e];this.oscillators[e].setFrequency(i),this.oscillators[e].connect(this.modulationEnvelopes[e].gain),this.modulationEnvelopes[e].triggerAttack(),this.modulationEnvelopes[e].connect(this.output.gain)}this.envelope.triggerAttack(),this.envelope.connect(this.modulationEnvelopes[0].gain)}triggerRelease(){for(let t=0;t<this.numberOfOscillators;t++)this.oscillators[t].disconnect(),this.modulationEnvelopes[t].triggerRelease();this.envelope.triggerRelease()}triggerAttackRelease(t,e){this.triggerAttack(t),setTimeout((()=>{this.triggerRelease()}),e)}start(){this.oscillators.forEach((t=>{t.start()}))}stop(){this.oscillators.forEach((t=>{t.stop()}))}}class DroneSynth extends FMSynth{constructor(t,e,i,s,n){super(t,e,i,s,n),this.numberOfOscillators=e,this.createEffects()}createEffects(){this.chorus=new Chorus(this.audioCtx),this.chorus.connect(this.output),this.delay=new Delay(this.audioCtx),this.delay.connect(this.output),this.reverb=new Reverb(this.audioCtx),this.reverb.connect(this.output),this.drone=new Drone(this.audioCtx),this.drone.connect(this.output);for(let t=0;t<this.numberOfOscillators;t++)this.modulationEnvelopes[t].connect(this.chorus.input),this.modulationEnvelopes[t].connect(this.delay.input),this.modulationEnvelopes[t].connect(this.reverb.input),this.modulationEnvelopes[t].connect(this.drone.input)}}class PadSynth extends FMSynth{constructor(t,e,i,s,n){super(t,e,i,s,n),this.numberOfOscillators=e,this.createEffects()}createEffects(){this.chorus=new Chorus(this.audioCtx),this.chorus.connect(this.output),this.delay=new Delay(this.audioCtx),this.delay.connect(this.output),this.delay.setDelayTime(3/4),this.delay.setFeedback(.8),this.reverb=new Reverb(this.audioCtx),this.reverb.connect(this.output),this.reverb.setDelayTime(.5),this.reverb.setWet(.8),this.autoFilter=new AutoFilter(this.audioCtx),this.autoFilter.connect(this.output),this.StereoWidener=new StereoWidener(this.audioCtx),this.StereoWidener.connect(this.output),this.StereoWidener.setWidth(2),this.tapeSaturator=new TapeSaturator(this.audioCtx),this.tapeSaturator.connect(this.output),this.tapeSaturator.setDrive(.7);for(let t=0;t<this.numberOfOscillators;t++)this.modulationEnvelopes[t].connect(this.chorus.input),this.modulationEnvelopes[t].connect(this.reverb.input),this.modulationEnvelopes[t].connect(this.autoFilter.input),this.modulationEnvelopes[t].connect(this.delay.input),this.modulationEnvelopes[t].connect(this.StereoWidener.input),this.modulationEnvelopes[t].connect(this.tapeSaturator.input)}}class StereoWidener{constructor(t){this.audioCtx=t,this.input=this.audioCtx.createGain(),this.output=this.audioCtx.createGain(),this.input.connect(this.output),this.splitter=this.audioCtx.createChannelSplitter(2),this.merger=this.audioCtx.createChannelMerger(2),this.leftGain=this.audioCtx.createGain(),this.rightGain=this.audioCtx.createGain(),this.leftGain.gain.value=.5,this.rightGain.gain.value=.5,this.input.connect(this.splitter),this.splitter.connect(this.leftGain,0),this.splitter.connect(this.rightGain,1),this.leftGain.connect(this.merger,0,0),this.rightGain.connect(this.merger,0,1),this.merger.connect(this.output)}connect(t){this.output.connect(t)}disconnect(){this.output.disconnect()}setWidth(t){this.width=t,this.leftGain.gain.value=.5*(1-this.width),this.rightGain.gain.value=.5*(1+this.width)}}class Chorus{constructor(t,e=.8,i=.6,s=.54){this.audioCtx=t,this.input=this.audioCtx.createGain(),this.output=this.audioCtx.createGain(),this.input.connect(this.output),this.depth=e,this.delayTime=i,this.feedback=s,this.lfo=new LFO(t,"sine",5,.3),this.delay=this.audioCtx.createDelay(),this.feedbackGain=this.audioCtx.createGain(),this.feedbackGain.gain.value=this.feedback,this.input.connect(this.delay),this.delay.connect(this.feedbackGain),this.feedbackGain.connect(this.delay),this.lfo.connect(this.delay.delayTime)}connect(t){this.output.connect(t)}disconnect(){this.output.disconnect()}}class TapeSaturator{constructor(t){this.audioCtx=t,this.input=this.audioCtx.createGain(),this.output=this.audioCtx.createGain(),this.input.connect(this.output),this.waveShaper=this.audioCtx.createWaveShaper(),this.waveShaper.connect(this.output),this.input.connect(this.waveShaper),this.setDrive(.7)}connect(t){this.output.connect(t)}disconnect(){this.output.disconnect()}setDrive(t){this.drive=t,this.makeDistortionCurve()}makeDistortionCurve(){let t=this.drive,e=this.audioCtx.sampleRate,i=new Float32Array(e),s=Math.PI/180;for(let n=0;n<e;++n){let a=2*n/e-1;i[n]=(3+t)*a*20*s/(Math.PI+t*Math.abs(a))}this.waveShaper.curve=i}}class AutoFilter{constructor(t,e=1,i=1){this.audioCtx=t,this.input=this.audioCtx.createGain(),this.output=this.audioCtx.createGain(),this.gain=this.audioCtx.createGain(),this.input.connect(this.output),this.lfo=new LFO(t,"sine",e,i),this.filter=this.audioCtx.createBiquadFilter(),this.filter.type="lowpass",this.filter.frequency.value=1e3,this.filter.Q.value=5,this.lfo.connect(this.gain),this.gain.gain.value=1e4,this.gain.connect(this.filter.frequency),this.input.connect(this.filter),this.filter.connect(this.output)}connect(t){this.output.connect(t)}disconnect(){this.output.disconnect()}setFrequency(t){this.lfo.frequency=t}setGain(t){this.lfo.gain=t}}class LFO{constructor(t,e,i,s){this.audioCtx=t,this.type=e,this.frequency=i,this.gain=s,this.oscillator=this.audioCtx.createOscillator(),this.oscillator.type=this.type,this.oscillator.frequency.value=this.frequency,this.gainNode=this.audioCtx.createGain(),this.gainNode.gain.value=this.gain,this.oscillator.connect(this.gainNode),this.start()}start(){this.oscillator.start()}stop(){this.oscillator.stop()}connect(t){this.gainNode.connect(t)}disconnect(){this.gainNode.disconnect()}setFrequency(t){this.oscillator.frequency.value=t}setGain(t){this.gainNode.gain.value=t}}class Drone{constructor(t){this.audioCtx=t,this.input=this.audioCtx.createGain(),this.output=this.audioCtx.createGain(),this.input.connect(this.output),this.delay=this.audioCtx.createDelay(),this.delay.connect(this.output),this.delay.delayTime.value=3/4,this.feedback=this.audioCtx.createGain(),this.feedback.gain.value=.2,this.delay.connect(this.feedback),this.input.connect(this.delay),this.feedback.connect(this.delay)}connect(t){this.output.connect(t)}disconnect(){this.output.disconnect()}}class Reverb{constructor(t){this.audioCtx=t,this.input=this.audioCtx.createGain(),this.output=this.audioCtx.createGain(),this.input.connect(this.output),this.convolver=this.audioCtx.createConvolver(),this.convolver.buffer=this.audioCtx.createBuffer(2,3*t.sampleRate,t.sampleRate),this.delay=this.audioCtx.createDelay(.5),this.delay.delayTime.value=3/8,this.wetGain=this.audioCtx.createGain(),this.convolver.connect(this.wetGain),this.wetGain.connect(this.output),this.wetGain.gain.value=.82,this.input.connect(this.delay),this.delay.connect(this.convolver),this.input.connect(this.convolver),this.convolver.connect(this.output)}connect(t){this.output.connect(t)}disconnect(){this.output.disconnect()}setWet(t){this.wetGain.gain.value=t}setDelayTime(t){this.delay.delayTime.value=t}}class Delay{constructor(t){this.audioCtx=t,this.input=this.audioCtx.createGain(),this.output=this.audioCtx.createGain(),this.input.connect(this.output),this.delay=this.audioCtx.createDelay(),this.delay.delayTime.value=3/4,this.feedback=this.audioCtx.createGain(),this.feedback.gain.value=.73,this.delay.connect(this.feedback),this.input.connect(this.delay),this.delay.connect(this.output),this.feedback.connect(this.input)}connect(t){this.output.connect(t)}disconnect(){this.output.disconnect()}setDelayTime(t){this.delay.delayTime.value=t}setFeedback(t){this.feedback.gain.value=t}}class PingPongDelay2{constructor(t){this.audioCtx=t,this.input=this.audioCtx.createGain(),this.output=this.audioCtx.createGain(),this.input.connect(this.output),this.delay=this.audioCtx.createDelay(),this.delay.delayTime.value=3/4,this.panner1=this.audioCtx.createStereoPanner(),this.panner2=this.audioCtx.createStereoPanner(),this.feedback=this.audioCtx.createGain(),this.feedback.gain.value=.8,this.wet=this.audioCtx.createGain(),this.wet.gain.value=.89,this.input.connect(this.delay),this.delay.connect(this.panner1),this.panner1.connect(this.feedback),this.feedback.connect(this.delay),this.delay.connect(this.panner2),this.panner2.connect(this.wet),this.wet.connect(this.output),this.input.connect(this.output),this.autoPanner=this.audioCtx.createStereoPanner(),this.autoPanner.pan.value=-1,this.autoPannerRate=1,this.panner1.connect(this.autoPanner),this.autoPanner.connect(this.panner2)}connect(t){this.output.connect(t)}disconnect(){this.output.disconnect()}setDelayTime(t){this.delay.delayTime.value=t}setAutoPannerRate(t){this.autoPannerRate=t,this.autoPannerRateIncr=2/this.audioCtx.sampleRate*this.autoPannerRate}startAutoPanner(){const t=this.audioCtx.currentTime;this.autoPanner.pan.setValueAtTime(-1,t),this.autoPanner.pan.linearRampToValueAtTime(1,t+1/this.autoPannerRate),this.autoPanner.pan.setValueAtTime(1,t+2/this.autoPannerRate),this.autoPanner.pan.linearRampToValueAtTime(-1,t+3/this.autoPannerRate),this.autoPannerLoop=setInterval((()=>{const t=this.audioCtx.currentTime;this.autoPanner.pan.setValueAtTime(-1,t),this.autoPanner.pan.linearRampToValueAtTime(1,t+1/this.autoPannerRate),this.autoPanner.pan.setValueAtTime(1,t+2/this.autoPannerRate),this.autoPanner.pan.linearRampToValueAtTime(-1,t+3/this.autoPannerRate)}),4/this.autoPannerRate*1e3)}stopAutoPanner(){clearInterval(this.autoPannerLoop)}setDelayTime(t){this.delay.delayTime.value=t}setFeedback(t){this.feedback.gain.value=t}setWet(t){this.wet.gain.value=t}}class Filter{constructor(t,e,i,s){this.audioCtx=t,this.input=this.audioCtx.createGain(),this.output=this.audioCtx.createGain(),this.input.connect(this.output),this.filter=this.audioCtx.createBiquadFilter(),this.filter.type=e,this.filter.frequency.value=i,this.filterWet=this.audioCtx.createGain(),this.filterWet.gain.value=s,this.input.connect(this.filterWet),this.filterWet.connect(this.filter),this.input.connect(this.filter),this.filter.connect(this.output)}connect(t){this.output.connect(t)}disconnect(){this.output.disconnect()}setFrequency(t){this.filter.frequency.value=t}}class Flanger{constructor(t){this.audioCtx=t,this.input=this.audioCtx.createGain(),this.output=this.audioCtx.createGain(),this.input.connect(this.output),this.delay=this.audioCtx.createDelay(),this.delay.delayTime.value=.04,this.lfo=this.audioCtx.createOscillator(),this.lfo.frequency.value=.5,this.lfoGain=this.audioCtx.createGain(),this.lfoGain.gain.value=.2,this.lfo.connect(this.lfoGain),this.lfoGain.connect(this.delay.delayTime),this.lfo.start(),this.input.connect(this.delay),this.delay.connect(this.output),this.input.connect(this.output)}connect(t){this.output.connect(t)}disconnect(){this.output.disconnect()}}class Compressor{constructor(t){this.audioCtx=t,this.input=this.audioCtx.createGain(),this.output=this.audioCtx.createGain(),this.input.connect(this.output),this.compressor=this.audioCtx.createDynamicsCompressor(),this.compressor.threshold.value=-32,this.compressor.knee.value=30,this.compressor.ratio.value=12,this.compressor.attack.value=.03,this.compressor.release.value=.23,this.input.connect(this.compressor),this.compressor.connect(this.output),this.makeupGain=this.audioCtx.createGain(),this.makeupGain.gain.value=.1,this.compressor.connect(this.makeupGain),this.makeupGain.connect(this.output)}connect(t){this.output.connect(t)}disconnect(){this.output.disconnect()}}class FFT{constructor(t){this.audioCtx=t,this.analyser=this.audioCtx.createAnalyser(),this.analyser.fftSize=2048,this.bufferLength=this.analyser.frequencyBinCount,this.dataArray=new Uint8Array(this.bufferLength)}connect(t){this.analyser.connect(t)}disconnect(){this.analyser.disconnect()}getWaveform(){return this.analyser.getByteTimeDomainData(this.dataArray),this.dataArray}getFrequencyData(){return this.analyser.getByteFrequencyData(this.dataArray),this.dataArray}getAmplitude(){const t=this.getWaveform();let e=0;for(let i=0;i<t.length;i++)e+=t[i]/128-1;return Math.abs(e/t.length)}}function noteToFrequency(t){let e;return 3===t.length?(e=notes.indexOf(t.slice(0,2)),e+=12*(parseInt(t.slice(2))+1)):(e=notes.indexOf(t.slice(0,1)),e+=12*parseInt(t.slice(1))),440*Math.pow(2,(e-49)/12)}function voicing(t){let e=splitNoteOctave(t)[1],i=splitNoteOctave(t)[0],s=0;s=Math.floor(3*Math.random())-1,e<=3?s=1:e>=5&&(s=-1);return`${i}${e+s}`}const getNextChordNote=(t,e)=>{let i=generateScale2(t,getKeyType(t));const s=i.indexOf(t)+e-1;let n;if(void 0!==i[s])n=i[s];else if(n=i[s-7],3===n.length){const t=parseInt(n.slice(2))+1;n=`${n.slice(0,2)}${t}`}else{const t=parseInt(n.slice(1))+1;n=`${n.slice(0,1)}${t}`}return n};function generateChord(t){return[t,getNextChordNote(t,3),getNextChordNote(t,5),getNextChordNote(t,7),getNextChordNote(t,9)]}function getKeyListIndex(t){return"sharp"===t?0:"flat"===t?1:0}function generateProgression(t,e){let i=[],s=[];for(let e=0;e<t.length;e++)i.push(splitNoteOctave(t[e])[0]),s.push(splitNoteOctave(t[e])[1]);getKeyListIndex(getKeySignature(i[0]));const n=[],a=fifths[e],o=[];for(let t=0;t<i.length;t++)o.push(a.indexOf(i[t]));for(let t=0;t<o.length;t++)-1===o[t]&&(o.splice(t,1),t--);const h=degree,c=progression;for(let t=0;t<h.length;t++){const e=h[t],o=c[t],u=i[e],r=s[e];n.push(u+r);const l=getChord(u,r,o,a);for(let t=0;t<l.length;t++)n.push(l[t])}return n}function getChord(t,e,i,s){const n=getChordDegrees(i),a=[];for(let t=0;t<n.length;t++){const i=s[n[t]];a.push(i+e)}return a}function getChordDegrees(t){switch(t){case"I":default:return[0,2,4];case"II":return[1,3,5];case"III":return[2,4,6];case"IV":return[3,5,0];case"V":return[4,6,1];case"VI":return[5,0,2];case"VII":return[6,1,3]}}function getCircularElement(t,e){return(e%t.length+t.length)%t.length}function generateScale2(t,e){let i=splitNoteOctave(t)[0],s=splitNoteOctave(t)[1],n=getKeyListIndex(getKeySignature(i)),a=_notes[n];const o=[],h=a.indexOf(i);return"major"===e?(o.push(i+s),o.push(a[getCircularElement(a,h+2)]+(h+2>a.length?parseInt(s)+1:s)),o.push(a[getCircularElement(a,h+4)]+(h+4>a.length?parseInt(s)+1:s)),o.push(a[getCircularElement(a,h+5)]+(h+5>a.length?parseInt(s)+1:s)),o.push(a[getCircularElement(a,h+7)]+(h+7>a.length?parseInt(s)+1:s)),o.push(a[getCircularElement(a,h+9)]+(h+9>a.length?parseInt(s)+1:s)),o.push(a[getCircularElement(a,h+11)]+(h+11>a.length?parseInt(s)+1:s)),o.push(a[getCircularElement(a,h+12)]+(h+12>a.length?parseInt(s)+1:s))):"minor"===e&&(o.push(i+s),o.push(a[getCircularElement(a,h+2)]+(h+2>a.length?parseInt(s)+1:s)),o.push(a[getCircularElement(a,h+3)]+(h+3>a.length?parseInt(s)+1:s)),o.push(a[getCircularElement(a,h+5)]+(h+5>a.length?parseInt(s)+1:s)),o.push(a[getCircularElement(a,h+7)]+(h+7>a.length?parseInt(s)+1:s)),o.push(a[getCircularElement(a,h+8)]+(h+8>a.length?parseInt(s)+1:s)),o.push(a[getCircularElement(a,h+10)]+(h+10>a.length?parseInt(s)+1:s)),o.push(a[getCircularElement(a,h+12)]+(h+12>a.length?parseInt(s)+1:s))),o}function getKeySignature(t){return{C:"sharp","C#":"sharp",Db:"flat",D:"sharp","D#":"sharp",Eb:"flat",E:"sharp",F:"flat","F#":"sharp",Gb:"flat",G:"sharp","G#":"sharp",Ab:"flat",A:"sharp","A#":"sharp",Bb:"flat",B:"sharp"}[t]}function getKeyType(t){const e=splitNoteOctave(t)[0];return-1!==musicKeys[0].indexOf(e)&&-1!==musicKeys[1].indexOf(e)?flavour:-1!==musicKeys[0].indexOf(e)?"major":-1!==musicKeys[1].indexOf(e)?"minor":void 0}function splitNoteOctave(t){let e,i;return 3===t.length?(e=t.slice(0,2),i=t.slice(2)):(e=t.slice(0,1),i=t.slice(1)),[e,i]}function decreaseOctave(t){const e=[];for(let i=0;i<t.length;i++){const s=[],n=t[i];for(let t=0;t<n.length;t++){let e,i;3===n[t].length?(e=n[t].slice(0,2),i=n[t].slice(2)):(e=n[t].slice(0,1),i=n[t].slice(1)),s.push(e+(parseInt(i)-1))}e.push(s)}return e}function randomizeDelay(t,e){let i=t-e/2,s=t+e/2;return mathRand()*(s-i)+i}function randomIndexOmit(t,e){let i;do{i=mathRand()*t.length|0}while(i===e);return i}