@marmooo/midy 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -163,7 +163,13 @@ class Note {
163
163
  }
164
164
  }
165
165
  class Channel {
166
- constructor(audioNodes, settings) {
166
+ constructor(channelNumber, audioNodes, settings) {
167
+ Object.defineProperty(this, "channelNumber", {
168
+ enumerable: true,
169
+ configurable: true,
170
+ writable: true,
171
+ value: 0
172
+ });
167
173
  Object.defineProperty(this, "isDrum", {
168
174
  enumerable: true,
169
175
  configurable: true,
@@ -248,6 +254,7 @@ class Channel {
248
254
  writable: true,
249
255
  value: null
250
256
  });
257
+ this.channelNumber = channelNumber;
251
258
  Object.assign(this, audioNodes);
252
259
  Object.assign(this, settings);
253
260
  this.state = new ControllerState();
@@ -877,6 +884,8 @@ class MidyGM1 extends EventTarget {
877
884
  return;
878
885
  const soundFont = this.soundFonts[soundFontIndex];
879
886
  const voice = soundFont.getVoice(bank, programNumber, noteNumber, velocity);
887
+ if (!voice)
888
+ return;
880
889
  const { instrument, sampleID } = voice.generators;
881
890
  return soundFontIndex * (2 ** 31) + instrument * (2 ** 24) +
882
891
  (sampleID << 8);
@@ -893,7 +902,7 @@ class MidyGM1 extends EventTarget {
893
902
  }
894
903
  createChannels(audioContext) {
895
904
  const settings = this.constructor.channelSettings;
896
- return Array.from({ length: this.numChannels }, () => new Channel(this.createChannelAudioNodes(audioContext), settings));
905
+ return Array.from({ length: this.numChannels }, (_, ch) => new Channel(ch, this.createChannelAudioNodes(audioContext), settings));
897
906
  }
898
907
  decodeOggVorbis(sample) {
899
908
  const task = decoderQueue.then(async () => {
@@ -1359,6 +1368,7 @@ class MidyGM1 extends EventTarget {
1359
1368
  continue;
1360
1369
  const soundFont = this.soundFonts[soundFontIndex];
1361
1370
  const fakeChannel = {
1371
+ channelNumber: ch,
1362
1372
  state: { array: renderControllerStates[ch].slice() },
1363
1373
  programNumber,
1364
1374
  isDrum,
@@ -1677,25 +1687,29 @@ class MidyGM1 extends EventTarget {
1677
1687
  const volHold = volAttack + voiceParams.volHold;
1678
1688
  const decayDuration = voiceParams.volDecay;
1679
1689
  const adsDuration = volHold + decayDuration * decayCurve * 5;
1680
- const loopStartTime = voiceParams.loopStart / voiceParams.sampleRate;
1681
- const loopDuration = isLoop
1690
+ const sampleLoopStart = voiceParams.loopStart / voiceParams.sampleRate;
1691
+ const sampleLoopDuration = isLoop
1682
1692
  ? (voiceParams.loopEnd - voiceParams.loopStart) / voiceParams.sampleRate
1683
1693
  : 0;
1684
- const loopCount = isLoop && adsDuration > loopStartTime
1685
- ? Math.ceil((adsDuration - loopStartTime) / loopDuration)
1694
+ const playbackRate = voiceParams.playbackRate;
1695
+ const outputLoopStart = sampleLoopStart / playbackRate;
1696
+ const outputLoopDuration = sampleLoopDuration / playbackRate;
1697
+ const loopCount = isLoop && adsDuration > outputLoopStart
1698
+ ? Math.ceil((adsDuration - outputLoopStart) / outputLoopDuration)
1686
1699
  : 0;
1687
- const alignedLoopStart = loopStartTime + loopCount * loopDuration;
1700
+ const alignedLoopStart = outputLoopStart + loopCount * outputLoopDuration;
1688
1701
  const renderDuration = isLoop
1689
- ? alignedLoopStart + loopDuration
1690
- : audioBuffer.duration;
1691
- const offlineContext = new OfflineAudioContext(audioBuffer.numberOfChannels, Math.ceil(renderDuration * this.audioContext.sampleRate), this.audioContext.sampleRate);
1702
+ ? alignedLoopStart + outputLoopDuration
1703
+ : audioBuffer.duration / playbackRate;
1704
+ const sampleRate = this.audioContext.sampleRate;
1705
+ const offlineContext = new OfflineAudioContext(audioBuffer.numberOfChannels, Math.ceil(renderDuration * sampleRate), sampleRate);
1692
1706
  const bufferSource = new AudioBufferSourceNode(offlineContext);
1693
1707
  bufferSource.buffer = audioBuffer;
1694
- bufferSource.playbackRate.value = voiceParams.playbackRate;
1708
+ bufferSource.playbackRate.value = playbackRate;
1695
1709
  bufferSource.loop = isLoop;
1696
1710
  if (isLoop) {
1697
- bufferSource.loopStart = loopStartTime;
1698
- bufferSource.loopEnd = loopStartTime + loopDuration;
1711
+ bufferSource.loopStart = sampleLoopStart;
1712
+ bufferSource.loopEnd = sampleLoopStart + sampleLoopDuration;
1699
1713
  }
1700
1714
  const initialFreq = this.clampCutoffFrequency(this.centToHz(voiceParams.initialFilterFc));
1701
1715
  const filterEnvelopeNode = new BiquadFilterNode(offlineContext, {
@@ -1727,7 +1741,7 @@ class MidyGM1 extends EventTarget {
1727
1741
  isLoop,
1728
1742
  adsDuration,
1729
1743
  loopStart: alignedLoopStart,
1730
- loopDuration,
1744
+ loopDuration: outputLoopDuration,
1731
1745
  });
1732
1746
  }
1733
1747
  async createAdsrRenderedBuffer(note, voiceParams, audioBuffer, noteDuration) {
@@ -1825,7 +1839,7 @@ class MidyGM1 extends EventTarget {
1825
1839
  }
1826
1840
  async createFullRenderedBuffer(channel, note, voiceParams, noteDuration, noteEvent = {}) {
1827
1841
  const { startTime: noteStartTime = 0, events: noteEvents = [] } = noteEvent;
1828
- const ch = note.channel ?? 0;
1842
+ const ch = channel.channelNumber;
1829
1843
  const releaseEndDuration = voiceParams.volRelease * releaseCurve * 5;
1830
1844
  const totalDuration = noteDuration + releaseEndDuration;
1831
1845
  const sampleRate = this.audioContext.sampleRate;
@@ -1874,7 +1888,7 @@ class MidyGM1 extends EventTarget {
1874
1888
  const audioBufferId = this.getVoiceId(channel, noteNumber, velocity);
1875
1889
  if (!realtime) {
1876
1890
  if (cacheMode === "note") {
1877
- return await this.getFullCachedBuffer(note, audioBufferId);
1891
+ return await this.getFullCachedBuffer(channel, note, audioBufferId);
1878
1892
  }
1879
1893
  else if (cacheMode === "adsr") {
1880
1894
  return await this.getAdsrCachedBuffer(note, audioBufferId);
@@ -1965,7 +1979,7 @@ class MidyGM1 extends EventTarget {
1965
1979
  durationMap.set(cacheKey, renderPromise);
1966
1980
  return await renderPromise;
1967
1981
  }
1968
- async getFullCachedBuffer(note, audioBufferId) {
1982
+ async getFullCachedBuffer(channel, note, audioBufferId) {
1969
1983
  const voiceParams = note.voiceParams;
1970
1984
  const timelineIndex = note.timelineIndex;
1971
1985
  const noteEvent = this.noteOnEvents.get(timelineIndex);
@@ -1990,7 +2004,7 @@ class MidyGM1 extends EventTarget {
1990
2004
  }
1991
2005
  const renderPromise = (async () => {
1992
2006
  try {
1993
- const rendered = await this.createFullRenderedBuffer(this.channels[note.channel], note, voiceParams, noteDuration, noteEvent);
2007
+ const rendered = await this.createFullRenderedBuffer(channel, note, voiceParams, noteDuration, noteEvent);
1994
2008
  durationMap.set(cacheKey, rendered);
1995
2009
  return rendered;
1996
2010
  }
@@ -2017,7 +2031,6 @@ class MidyGM1 extends EventTarget {
2017
2031
  note.renderedBuffer = isRendered ? audioBuffer : null;
2018
2032
  note.bufferSource = this.createBufferSource(voiceParams, audioBuffer);
2019
2033
  note.volumeNode = new GainNode(audioContext);
2020
- note.volumeNode.gain.setValueAtTime(1, now);
2021
2034
  const cacheMode = this.cacheMode;
2022
2035
  const isFullCached = isRendered && audioBuffer.isFull === true;
2023
2036
  if (cacheMode === "none") {
@@ -2094,9 +2107,6 @@ class MidyGM1 extends EventTarget {
2094
2107
  startTime = this.audioContext.currentTime;
2095
2108
  const note = new Note(noteNumber, velocity, startTime);
2096
2109
  note.channel = channelNumber;
2097
- const channel = this.channels[channelNumber];
2098
- note.index = channel.scheduledNotes.length;
2099
- channel.scheduledNotes.push(note);
2100
2110
  return note;
2101
2111
  }
2102
2112
  async setupNote(channelNumber, note, startTime) {
@@ -2119,6 +2129,8 @@ class MidyGM1 extends EventTarget {
2119
2129
  note.voice = soundFont.getVoice(bank, programNumber, note.noteNumber, note.velocity);
2120
2130
  if (!note.voice)
2121
2131
  return;
2132
+ note.index = channel.scheduledNotes.length;
2133
+ channel.scheduledNotes.push(note);
2122
2134
  await this.setNoteAudioNode(channel, note, realtime);
2123
2135
  this.setNoteRouting(channelNumber, note, startTime);
2124
2136
  note.resolveReady();
@@ -2164,18 +2176,8 @@ class MidyGM1 extends EventTarget {
2164
2176
  const volRelease = endTime + volDuration;
2165
2177
  note.volumeNode.gain
2166
2178
  .cancelScheduledValues(endTime)
2167
- .setValueAtTime(1, endTime)
2168
2179
  .setTargetAtTime(0, endTime, volDuration * releaseCurve);
2169
- return new Promise((resolve) => {
2170
- this.scheduleTask(() => {
2171
- note.bufferSource.loop = false;
2172
- note.bufferSource.stop(volRelease);
2173
- this.disconnectNote(note);
2174
- channel.scheduledNotes[note.index] = undefined;
2175
- this.releaseFullCache(note);
2176
- resolve();
2177
- }, volRelease);
2178
- });
2180
+ note.bufferSource.stop(volRelease);
2179
2181
  }
2180
2182
  else {
2181
2183
  const now = this.audioContext.currentTime;
@@ -2185,15 +2187,16 @@ class MidyGM1 extends EventTarget {
2185
2187
  this.releaseFullCache(note);
2186
2188
  return Promise.resolve();
2187
2189
  }
2188
- return new Promise((resolve) => {
2189
- this.scheduleTask(() => {
2190
- this.disconnectNote(note);
2191
- channel.scheduledNotes[note.index] = undefined;
2192
- this.releaseFullCache(note);
2193
- resolve();
2194
- }, naturalEndTime);
2195
- });
2190
+ note.bufferSource.stop(naturalEndTime);
2196
2191
  }
2192
+ return new Promise((resolve) => {
2193
+ note.bufferSource.onended = () => {
2194
+ this.disconnectNote(note);
2195
+ channel.scheduledNotes[note.index] = undefined;
2196
+ this.releaseFullCache(note);
2197
+ resolve();
2198
+ };
2199
+ });
2197
2200
  }
2198
2201
  const volDuration = note.voiceParams.volRelease;
2199
2202
  const volRelease = endTime + volDuration;
@@ -2214,45 +2217,33 @@ class MidyGM1 extends EventTarget {
2214
2217
  const noteOffTime = note.startTime + (rb.noteDuration ?? 0);
2215
2218
  const isEarlyCut = endTime < noteOffTime;
2216
2219
  if (isEarlyCut) {
2217
- const volRelease = endTime + volDuration;
2218
2220
  note.volumeNode.gain
2219
2221
  .cancelScheduledValues(endTime)
2220
- .setValueAtTime(1, endTime)
2221
2222
  .setTargetAtTime(0, endTime, volDuration * releaseCurve);
2222
- return new Promise((resolve) => {
2223
- this.scheduleTask(() => {
2224
- note.bufferSource.stop(volRelease);
2225
- this.disconnectNote(note);
2226
- channel.scheduledNotes[note.index] = undefined;
2227
- resolve();
2228
- }, volRelease);
2229
- });
2223
+ note.bufferSource.stop(volRelease);
2230
2224
  }
2231
2225
  else {
2232
- return new Promise((resolve) => {
2233
- this.scheduleTask(() => {
2234
- note.bufferSource.stop();
2235
- this.disconnectNote(note);
2236
- channel.scheduledNotes[note.index] = undefined;
2237
- resolve();
2238
- }, naturalEndTime);
2239
- });
2226
+ note.bufferSource.stop(naturalEndTime);
2240
2227
  }
2228
+ return new Promise((resolve) => {
2229
+ note.bufferSource.onended = () => {
2230
+ this.disconnectNote(note);
2231
+ channel.scheduledNotes[note.index] = undefined;
2232
+ resolve();
2233
+ };
2234
+ });
2241
2235
  }
2242
2236
  note.volumeNode.gain
2243
2237
  .cancelScheduledValues(endTime)
2244
- .setValueAtTime(1, endTime)
2245
2238
  .setTargetAtTime(0, endTime, volDuration * releaseCurve);
2246
2239
  }
2240
+ note.bufferSource.stop(volRelease);
2247
2241
  return new Promise((resolve) => {
2248
- this.scheduleTask(() => {
2249
- const bufferSource = note.bufferSource;
2250
- bufferSource.loop = false;
2251
- bufferSource.stop(volRelease);
2242
+ note.bufferSource.onended = () => {
2252
2243
  this.disconnectNote(note);
2253
2244
  channel.scheduledNotes[note.index] = undefined;
2254
2245
  resolve();
2255
- }, volRelease);
2246
+ };
2256
2247
  });
2257
2248
  }
2258
2249
  noteOff(channelNumber, noteNumber, _velocity, endTime, force) {
@@ -2808,9 +2799,10 @@ class MidyGM1 extends EventTarget {
2808
2799
  setMasterVolume(value, scheduleTime) {
2809
2800
  if (!(0 <= scheduleTime))
2810
2801
  scheduleTime = this.audioContext.currentTime;
2802
+ const timeConstant = this.perceptualSmoothingTime / 5; // 99.3% (5 * tau)
2811
2803
  this.masterVolume.gain
2812
- .cancelScheduledValues(scheduleTime)
2813
- .setValueAtTime(value * value, scheduleTime);
2804
+ .cancelAndHoldAtTime(scheduleTime)
2805
+ .setTargetAtTime(value * value, scheduleTime, timeConstant);
2814
2806
  }
2815
2807
  handleSysEx(data, scheduleTime) {
2816
2808
  switch (data[0]) {
@@ -94,7 +94,7 @@ export class MidyGM2 extends EventTarget {
94
94
  reverbEffect: {
95
95
  input: any;
96
96
  output: any;
97
- } | undefined;
97
+ };
98
98
  chorusEffect: {
99
99
  input: any;
100
100
  output: any;
@@ -116,7 +116,7 @@ export class MidyGM2 extends EventTarget {
116
116
  gainR: any;
117
117
  merger: any;
118
118
  };
119
- createChannels(audioContext: any): Channel[];
119
+ createChannels(): Channel[];
120
120
  decodeOggVorbis(sample: any): Promise<any>;
121
121
  createAudioBuffer(voiceParams: any): Promise<any>;
122
122
  isLoopDrum(channel: any, noteNumber: any): boolean;
@@ -148,24 +148,13 @@ export class MidyGM2 extends EventTarget {
148
148
  currentTime(): number;
149
149
  processScheduledNotes(channel: any, callback: any): Promise<void>;
150
150
  processActiveNotes(channel: any, scheduleTime: any, callback: any): Promise<void>;
151
- createConvolutionReverbImpulse(audioContext: any, decay: any, preDecay: any): any;
152
- createConvolutionReverb(audioContext: any, impulse: any): {
153
- input: any;
154
- output: any;
155
- convolverNode: any;
156
- };
157
- createCombFilter(audioContext: any, input: any, delay: any, feedback: any): any;
158
- createAllpassFilter(audioContext: any, input: any, delay: any, feedback: any): any;
159
151
  generateDistributedArray(center: any, count: any, varianceRatio?: number, randomness?: number): any[];
160
- createSchroederReverb(audioContext: any, combFeedbacks: any, combDelays: any, allpassFeedbacks: any, allpassDelays: any): {
152
+ setReverbEffect(algorithm: any): void;
153
+ createReverbEffect(algorithm: any): {
161
154
  input: any;
162
155
  output: any;
163
156
  };
164
- createReverbEffect(audioContext: any): {
165
- input: any;
166
- output: any;
167
- } | undefined;
168
- createChorusEffect(audioContext: any): {
157
+ createChorusEffect(): {
169
158
  input: any;
170
159
  output: any;
171
160
  sendGain: any;
@@ -200,7 +189,7 @@ export class MidyGM2 extends EventTarget {
200
189
  getAudioBuffer(channel: any, note: any, realtime: any): Promise<any>;
201
190
  getAdsCachedBuffer(channel: any, note: any, audioBufferId: any, realtime: any): Promise<any>;
202
191
  getAdsrCachedBuffer(channel: any, note: any, audioBufferId: any): Promise<any>;
203
- getFullCachedBuffer(note: any, audioBufferId: any): Promise<any>;
192
+ getFullCachedBuffer(channel: any, note: any, audioBufferId: any): Promise<any>;
204
193
  setNoteAudioNode(channel: any, note: any, realtime: any): Promise<any>;
205
194
  handleExclusiveClass(note: any, channelNumber: any, startTime: any): void;
206
195
  handleDrumExclusiveClass(note: any, channelNumber: any, startTime: any): void;
@@ -353,7 +342,8 @@ export class MidyGM2 extends EventTarget {
353
342
  scheduleTask(callback: any, scheduleTime: any): Promise<any>;
354
343
  }
355
344
  declare class Channel {
356
- constructor(audioNodes: any, settings: any);
345
+ constructor(channelNumber: any, audioNodes: any, settings: any);
346
+ channelNumber: number;
357
347
  isDrum: boolean;
358
348
  programNumber: number;
359
349
  scheduleIndex: number;
@@ -1 +1 @@
1
- {"version":3,"file":"midy-GM2.d.ts","sourceRoot":"","sources":["../src/midy-GM2.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"midy-GM2.d.ts","sourceRoot":"","sources":["../src/midy-GM2.js"],"names":[],"mappings":"AA4TA;IAgEE;;;;;;;;;;;;;;MAcE;IAEF,6CAuBC;IAlGD,gCAAgC;IAChC,aAAa;IACb,yBAAqB;IACrB,2BAAuB;IACvB;;;;MAIE;IACF;;;;;;MAME;IACF,oBAAiB;IACjB,qBAAmB;IACnB,kBAAc;IACd,0BAAsB;IACtB,+BAA6B;IAC7B,0BAAwB;IACxB,kBAAc;IACd,mBAAiB;IACjB,kBAAc;IACd,mBAAe;IACf,kBAAgB;IAChB,0BAAuD;IACvD,4BAAyB;IACzB,0BAAuB;IACvB,kCAA+B;IAC/B,qBAAqC;IACrC,mBAAkB;IAClB,mBAAkB;IAClB,kBAAiB;IACjB,oBAAmB;IACnB,mBAAkB;IAClB,iCAA2C;IAC3C,cAAU;IACV,cAAa;IACb,iBAAY;IACZ,gBAAc;IACd,oBAAkB;IAClB,sBAAwB;IACxB,2BAAqC;IACrC,+BAEE;IAEF,8BAA2B;IAE3B,+BAA4B;IAC5B,4BAAyB;IACzB,8BAA2B;IAE3B,0BAA2B;IAC3B,qBAAoB;IACpB,4BAA6B;IAoB3B,kBAAgC;IAChC,eAAwD;IACxD,kBAA8C;IAC9C,eAAwD;IACxD,qBAGE;IACF,uBAAmD;IACnD;;;;;;;;;;;;MAA2D;IAC3D,6BAA+D;IAC/D,kCAAyE;IACzE,sBAAiD;IACjD,oBAAqC;IACrC;;;MAAkE;IAClE;;;;;;;;MAA6C;IAQ/C,mCASC;IAED,2DAYC;IAED,yCAmBC;IAED,oCAYC;IAED,6BAqJC;IAED,sBAuCC;IAED,6EAiBC;IAED;;;;MAWC;IAED,4BAQC;IAED,2CAsBC;IAED,kDA6BC;IAED,mDAIC;IAED,6FAqBC;IAED,gEA2DC;IAED,mCASC;IAED,uBAWC;IAED,yDA4CC;IAED,iCA4EC;IAED,2BAuFC;IAED,uDAEC;IAED,wDAEC;IAED,qCAMC;IAED;;;MAqFC;IAED,kGAeC;IAED,mGAeC;IAED,wEAQC;IAED,oCAqMC;IAED,uBAMC;IAED,sBAIC;IAED,uBAMC;IAED,wBAIC;IAED,0BAKC;IAED,8BAoBC;IAED,wBAYC;IAED,sBAOC;IAED,kEAWC;IAED,kFAYC;IAED,sGAcC;IAED,sCAIC;IAED;;;MA4DC;IAED;;;;;;;;MA2CC;IAED,8BAEC;IAED,8BAEC;IAED,4BAEC;IAED,qCAWC;IAED,2DASC;IAED,oDAEC;IAED,6CAIC;IAED,mDAIC;IAED,2CAoDC;IAED,8EASC;IAED,oEAiBC;IAED,sEASC;IAED,4DAMC;IAED,6EAOC;IAED,qDAkBC;IAED,6CAIC;IAED,8EAmBC;IAED,oEAgCC;IAED,kEAwBC;IAED,+DAgBC;IAED,gIAyEC;IAED,kIA0GC;IAED,gIA6DC;IAED,qEAwBC;IAED,6FAuCC;IAED,+EAgDC;IAED,+EA0CC;IAED,uEAqFC;IAED,0EAiBC;IAED,8EAoBC;IAED,oEAyBC;IAED,yFAQC;IAED,qFAKC;IAED,uEAiCC;IAED,gCAoBC;IAED,kCAWC;IAED,iEAkFC;IAED,4FAqBC;IAED,6CAUC;IAED,qDAUC;IAED,qFAeC;IAED,uFAkBC;IAED,+BAuBC;IAED,kDAOC;IAED,sBAEC;IAED,mFAcC;IAED,4EAYC;IAED,wFAGC;IAED,sEAWC;IAED,mEAaC;IAED,mEAYC;IAED,sEAMC;IAED,oEAQC;IAED,gEAyBC;IAED,gEAyBC;IAED,gCAKC;IAED,kDAKC;IAED,8CAOC;IAED,gEAMC;IAED;;;;;;;;;;;;MAwDC;IAED,oFAMC;IAED,6EAgCC;IAED,qCA2BC;IAED,+FAeC;IAED,+CAEC;IAED,wDAWC;IAED,4EAMC;IAED,wDAeC;IAED,2EAMC;IAED,mEAKC;IAED,mDAQC;IAED;;;MAMC;IAED,gEAWC;IAED,uEAKC;IAED,+CAEC;IAED,sEAGC;IAED,2DAWC;IAED,4EAoBC;IAED,yEAgBC;IAED,+CAEC;IAED,uEAMC;IAED,2EAkBC;IAED,oDAEC;IAED,0EAeC;IAED,sFAQC;IAED,sFAQC;IAED,kFAeC;IAED,2DAMC;IAED,uDAuBC;IAED,gDAEC;IAED,gDAEC;IAED,sEAGC;IAED,qEAKC;IAED,2EAWC;IAED,iEAMC;IAED,uEASC;IAED,mEAKC;IAED,yEASC;IAED,2EAKC;IAED,iFAMC;IAED,gFAGC;IAED,6CAsBC;IAGD,8EAoCC;IAED,gFAGC;IAED,iEAEC;IAED,gEAEC;IAED,gEAIC;IAED,gEAIC;IAED,+EAgCC;IAED,qCAaC;IAED,qCAaC;IAED,4EAwCC;IAED,4DAGC;IAED,qDAMC;IAED,gEAIC;IAED,yDAYC;IAED,kEAGC;IAED,2DAYC;IAED,sEAeC;IAED,4CAOC;IAED,+BAIC;IAED,qDAiBC;IAED,gCAGC;IAED,kCAEC;IA6BD,4CAEC;IAED,+DAaC;IAED,kDAiBC;IAED,2GAKC;IAED,sDAIC;IAED,qCAEC;IAED,uDAMC;IAED,sCAEC;IAED,uDASC;IAED,sCAEC;IAED,2DAqBC;IAED,0CAEC;IAED,mCAeC;IAED,2FAgBC;IAED,wDAEC;IAED,+DAGC;IAED,qEASC;IAED,uEAOC;IAED,6CAEC;IAED,iDAEC;IAED,6CAEC;IAED,iDAEC;IAED,0CAEC;IAED,uCAEC;IAED,wCAEC;IAED,2CAEC;IAED,8BAyBC;IAED,0EAQC;IAED,4EAOC;IAED,qFASC;IAED,+DAEC;IAED,wEAcC;IAED,6DAiBC;IAED,yEAIC;IAED,0CAmBC;IAED,yEAcC;IAED,gDAYC;IAGD,6DAgBC;CACF;AAxhID;IA2BE,gEAKC;IA/BD,sBAAkB;IAClB,gBAAe;IACf,sBAAkB;IAClB,sBAAkB;IAClB,eAAW;IACX,gBAAc;IACd,gBAAY;IACZ,gBAAY;IACZ,gBAAY;IACZ,eAAa;IACb,eAAa;IACb,cAAa;IACb,6BAA0B;IAC1B,mBAAe;IACf,qBAAiB;IACjB,sBAAoB;IACpB,oBAAkB;IAClB,sBAAoB;IACpB,qCAAmD;IACnD,+CAA2C;IAC3C,6CAA4D;IAC5D,sCAAkD;IAClD,sBAAgC;IAChC,sBAAgC;IAChC,0BAA2B;IAMzB,uBAAkC;IAGpC,mCAEC;IAED,mBAKC;CACF;AAuID;IAUE,oCASC;IAlBD,YAAO;IACP,YAAO;IACP,YAAO;IACP,iBAAY;IACZ,eAAU;IACV,kBAAa;IACb,kBAAa;IACb,qBAAgB;CAYjB;AAvOD;IAsBE,4DAOC;IA5BD,WAAM;IACN,iBAAY;IACZ,yBAAyB;IACzB,cAAW;IACX,gBAAe;IACf,kBAAa;IACb,oBAAqB;IACrB,qBAAsB;IACtB,uBAAwB;IACxB,wBAAmB;IACnB,wBAAmB;IACnB,YAAO;IACP,mBAAc;IACd,sBAAiB;IACjB,oBAAe;IACf,YAAO;IACP,mBAAc;IACd,gBAAW;IACX,gBAAW;IACX,6BAA0B;IAGxB,gBAA4B;IAC5B,cAAwB;IACxB,eAA0B;IAC1B,oBAEE;IADA,mCAA2B;CAGhC;AAsHD;IACE,iCAA8B;CAa/B"}