A-ha Take On Me by espeset | Dittytoy

dittytoy.net · 2026-09-28 · by Long Nguyen ·generic
A port of my Shadertoy version of a-ha's Take On Me. Cehck it out for more details about how the song was recreated :) https://www.shadertoy.com/view/fXc3RB

A-ha Take On Me by espeset | Dittytoy

Test

a-ha Take On Me

A port of my Shadertoy version of a-ha's Take On Me. Cehck it out for more details about how the song was recreated :) shadertoy.com/view/fxc3rb

Created by espeseton 2026/09/25 — CC BY-NC-SA 4.0

876

2

6

Log in to post a comment.

/*

Created by Tonny Espeset, 2026 https://dittytoy.net/ditty/2dd99fc839

80s hits: Take On Me, the Dittytoy port of my Shadertoy sound shader https://www.shadertoy.com/view/fXc3RB

Feel free to use the instruments and the song, but please keep this credit and link.

*/

ditty.bpm = 60;

// the mix, as in the shader: one loop per instrument, in the shader's track order const MASTER = .475, CHOIR_UPPER = 1.06, MIX = { 'kick': .59, 'backbeat': 1.22, 'low tom': 1.16, 'brush accents': 1.07, 'dx7 bass': .87, 'bells': 1.6, 'orbit pluck': 1.6, 'juno bell pair': 1.64, 'juno low pluck': 1.46, 'atmosphere': 1.32, 'glassy pad': .92, 'warm pad': .68, 'verse keys': .94, 'string ensemble': 1.01, 'fm keys': .52, 'lead vocal': 1.2, 'backing octaves': 1.12, 'choir': 1, 'bridge strings': .56, 'bridge plucks': 1.5 };

// helpers: maths, the data strings, the score's timing and notes, and a few DSP tools const { sin, cos, exp, sqrt, floor, round, min, max, abs, log, log2, tanh, imul, PI } = Math, TAU = 2 * PI, SR = ditty.sampleRate; // the site halves the sum of the loops, hence M const M = 2 MASTER, ss = (a, b, x) => (x = clamp((x - a) / (b - a), 0, 1), x x (3 - 2 x)), hz = midi_to_hz; const rnd = n => (n >>>= 0, n ^= n >>> 16, n = imul(n, 0x7feb352d), n ^= n >>> 15, n = imul(n, 0x846ca68b), ((n ^ n >>> 16) >>> 8) / 8388608 - 1); // data strings carry 13 bits in two characters const bytes = s => { const o = [], d = c => c - 32 - (c > 39) - (c > 92); for (let i = 0, a = 0, n = 0; i < s.length; i += 2, a &= (1 << n) - 1) for (a = a << 13 | d(s.charCodeAt(i)) * 91 + d(s.charCodeAt(i + 1)), n += 13; n >= 8;) o.push(a >> (n -= 8) & 255); return new Uint8Array(o); }; // score ticks (24 a beat) to seconds, and the record's fade const T = k => (k /= 24, .39838576 + min(k, 368) .35482526 + max(k - 368, 0) .35409087); const fade = t => (t %= 229) < 207.4 ? 1 : 2 * (-.3737 (t - 207.4)) * ss(228.5, 227, t); // the score: LZ-packed columns per track (SPEC: count, then per column -1 bytes, -2 16 bits or a constant) function unlz(b) { const o = []; for (let i = 0; i < b.length;) { let t = b[i++]; if (t < 128) for (t++; t--;) o.push(b[i++]); else for (let d = b[i++] + b[i++] * 256 + 1, n = t - 125; n--;) o.push(o[o.length - d]); } return o; } let tracks; const track = i => (tracks ||= SPEC.map(((S, p) => ([n, ...f]) => { const c = f.map(x => Array.from({ length: n }, () => x >= 0 ? x : x == -1 ? S[p++] : S[p++] + 256 * S[p++])); let k = 0; return c[0].map((d, i) => [k += d, c[1][i], c[2][i], c[3][i], c[4][i], c[5][i]]); })(unlz(bytes(SCORE)), 0)))[i]; // the shader's note scan skips one note past each finished one, and the approved audio has those gaps: replay it function gaps(notes, flat) { if (notes.done) return notes; notes.done = 1; const cues = [], old = max(...notes.map(n => n[4])) * .35482526 / 24 + .001; notes.forEach(n => flat || n[2] || !cues.length ? cues.push([n]) : cues[cues.length - 1].push(n)); let lo = 0; for (const k of [...new Set(notes.flatMap(n => [n[0], n[0] + n[4]]))].sort((a, b) => a - b)) { while (lo < cues.length && cues[lo][0][0] <= k) lo++; const on = new Set(); for (let step = 16, skip = 0; ; step++) { const i = lo - 1 - (step - 16) - skip; if (i < 0 || step + skip >= (flat ? 112 : 26) || T(k) - T(cues[i][0][0]) > (flat ? old : 13)) break; for (const n of cues[i]) n[0] <= k && k < n[0] + n[4] ? on.add(n) : skip++; } for (const n of notes) if (n[0] <= k && k < n[0] + n[4] && on.has(n) == !!n.out) (n.fl ||= []).push(k - n[0]), n.out = !n.out; } return notes; } // plays the shader's track i (seconds, squared velocity); a note stops at its last gap or where the song has faded out; rewinds after function play(syn, i, opt) { let now = 0; for (const n of gaps(track(i), i != 4 && i != 7)) { const [k, m, v, g, l, a] = n, t = (round(T(k) * SR) - .5) / SR, fl = (n.fl || []).map(f => T(k + f) - T(k)), life = T(k + l) - T(k); sleep(t - now); syn.play(m, { env: one, life, duration: min(fl.length % 2 ? fl.pop() : life, 228.5 - T(k)), gate: T(k + g) - T(k), v: (v / 127) ** 2, aux: a, k, amp: fl.length ? t => fl.reduce((on, f) => t >= f ? 1 - on : on, 1) : 1, ...opt }); now = t; } sleep(-now); } // an instrument is a loop named as in the mix; f schedules one pass of the song, played at the mix level with the record's fade function instrument(name, f, bus, gain = fade) { const g = MIX[name], l = loop(() => { f(); sleep(229); }, { name, amp: bus ? g : t => M g gain(t) }); if (bus) l.connect(bus); } // a note's slow values: f(age) every 16 samples, ramped in between function ctl(s, t, f) { if (s.c) for (let k = 0; k < s.c.length; k++) s.c[k] += s.d[k]; else s.c = f(t), s.n = 0; if (s.n++ % 16 == 0) s.d = f(t + 16 / SR).map((x, k) => (x - s.c[k]) / 16); return s.c; } // wavetables: one period of sum a[k] sin(2 pi k u + p[k]) function wave(a, p = [], n = 2048) { const w = new Float32Array(n + 1); a.forEach((ak, k) => { const c = cos(TAU k / n), s = sin(TAU k / n); let x = sin(p[k] || 0), y = cos(p[k] || 0); if (ak) for (let i = 0; i < n; i++) { w[i] += ak x; const x1 = x c + y s; y = y c - x * s; x = x1; } }); w[n] = w[0]; return w; } const rd = (w, u) => (u = (u - floor(u)) (w.length - 1), w[u | 0] + u % 1 (w[(u | 0) + 1] - w[u | 0])); const at = (T, i, f) => T[i] + f * (T[i + 1] - T[i]), at2 = (T, i, w, a, f) => w > 1e-4 ? lerp(at(T[i], a, f), at(T[i + 1], a, f), w) : at(T[i], a, f); const k6Env = (t, g, a, r) => (1 - exp(-t / a)) exp(-max(t - g, 0) / r), gauss = (x, c, w) => exp(-.5 ((x - c) / w) ** 2);

// drums: every hit of a drum is the same waveform, so it is rendered once from the shader's modal body and band-noise model function drumWave(v) { const [m0, mn, n0, nn] = F1_RANGE.slice(v 4), [tx, end, tz] = F1_TIME.slice(v 3), w = new Float64Array(Math.ceil(end * SR)); const env = (t, a, d, s) => t <= 0 ? 0 : (1 - exp(-t / max(a, 1e-5))) exp(-min((t / max(d, 1e-5)) s, 60)), sinc = x => abs(x) < 1e-5 ? 1 : sin(PI x) / (PI * x); for (let j = m0; j < m0 + mn; j++) { const [ax, ay, az, aw] = F1_MODE_A.slice(j 4), [bx, by, bz, bw] = F1_MODE_B.slice(j 4); for (let i = 0; i < w.length; i++) { const t = max(i / SR - tx, 0); w[i] += aw env(i / SR - tx, bx, by, bz) sin(TAU (ax t + ay az (1 - exp(-t / az))) + bw); } } for (let j = n0; j < n0 + nn; j++) { const [lo0, hi0, amp, att] = F1_NOISE_A.slice(j 4), [dec, sh, off] = F1_NOISE_B.slice(j 3), hi1 = v == 1 ? min(hi0, SR * .47) : hi0; if (lo0 >= hi1) continue; // a windowed-sinc band of interpolated white noise on a 24 or 48 kHz clock const ck = hi1 > 11700 ? 48000 : 24000, lo = clamp(lo0 / ck, 1e-4, .475), hi = clamp(hi1 / ck, lo + 1e-4, .485), seed = imul(1985 + 11 v + j 7919, 1013); const h = Array.from({ length: 33 }, (_, k) => (k -= 16, (2 hi sinc(2 hi k) - 2 lo sinc(2 lo k)) (.42 + .5 cos(PI k / 16) + .08 cos(TAU * k / 16)))); const pw = h.reduce((p, x) => p + x x, 0), adj = h.reduce((p, x, k) => p + (k ? x h[k - 1] : 0), 0), r = Array.from({ length: Math.ceil(end * ck) + 36 }, (_, k) => rnd(k - 16 + seed)); for (let i = 0; i < w.length; i++) { const wa = i / SR - tx - off, e = env(wa, att, dec, v == 1 ? 1 : sh) (v == 1 ? 1 + sh exp(-max(wa, 0) / max(tz, 1e-5)) : 1), p = i / SR * ck, n = floor(p), f = p - n; if (e < 1e-6) continue; let s = 0; for (let k = 0; k < 33; k++) s += h[k] (r[n + k] + f (r[n + k + 1] - r[n + k])); w[i] += amp e s sqrt(3 / max(pw ((1 - f) * 2 + f f) + 2 adj f * (1 - f), 1e-10)); } } return w.map((x, i) => x ss(0, .007, end - i / SR) ss(0, .00025, i / SR) 1.0655 TK_GAIN[v]); } const drumWaves = []; const drum = synth.def(class { constructor(o) { this.w = drumWaves[o.aux] ||= drumWave(o.aux); this.i = 0; } process(n, e, t, o) { return (this.w[this.i++] || 0) * o.v; } }, { name: 'drum' }); instrument('kick', () => play(drum, 0)); instrument('backbeat', () => play(drum, 1)); instrument('low tom', () => play(drum, 2)); instrument('brush accents', () => play(drum, 3));

// bass: the DX7 patch with its level and rate scaling const dx7 = synth.def(class { constructor(o) { const key = this.key = round(o.note), sc = (g, d, c) => (c < 2 ? -1 : 1) (c == 0 || c == 3 ? g d 329 >> 12 : F5_EXP[min(g, 32)] d * 329 >> 15); this.ops = [0, 1, 2, 3, 4, 5].map(op => { const k = F5_KSC.slice(op * 4), off = key - k[0] - 17, x = clamp((key / 3 | 0) - 7, 0, 31), rs = F5_RS[op], rem = x & 7; const ol = max(0, (min(127, F5_OUT[op] + (off >= 0 ? sc((off + 1) / 3 | 0, k[2], k[3] & 3) : sc((1 - off) / 3 | 0, k[1], k[3] >> 2))) << 5) + F5_VEL[op]); const q0 = (rs x >> 3) - (rs == 3 && rem == 3) + (rs == 7 && rem > 0 && rem < 4), L = F5_LSOL.slice(op 4, op * 4 + 4).map(l => max(16, l + ol - 4256) / 256); const r = F5_RATE.slice(op 4, op 4 + 4).map(r => (r = min(63, r + q0), (4 + (r & 3)) 2 (r >> 2) .0105133)); return [...L, ...r, abs(L[0] - L[1]) / r[1], abs(L[1] - L[2]) / r[2]]; }); this.g = new Float64Array(6); this.w = TAU * hz(key - 12); this.i = 0; } process(n, e, t, o) { const age = this.i++ / SR, gate = o.gate, tk = min(age, gate), g = this.g, w = this.w * age; if (age > .6) return 0; for (let j = 0; j < 6; j++) { const p = this.ops[j], d2 = p[8], d3 = p[9]; const l = tk < d2 ? p[0] + Math.sign(p[1] - p[0]) p[5] tk : tk < d2 + d3 ? p[1] + Math.sign(p[2] - p[1]) p[6] (tk - d2) : p[2]; g[j] = 2 * ((age > gate ? max(p[3], l - p[7] (age - gate)) : l) - 14); } let o6 = g[5] sin(w 9); o6 = g[5] sin(w 9 + 3.14159 * o6); o6 = g[5] sin(w 9 + 3.14159 * o6); return g[0] sin(w .5 + TAU (g[1] sin(w .5) + g[2] sin(w .5 + TAU g[3] sin(w 5)) + g[4] sin(w .5 + TAU o6))) -.17476; } }, { name: 'dx7' }); instrument('dx7 bass', () => play(dx7, 4));

// bells: two detuned partial sets, a lowpass closing after the strike, a decay per partial; aux is the octave const bell = synth.def(class { constructor(o) { const s = T(o.k), oct = o.aux, f = this.f = hz(o.note - .011), det = 5.2 (.7 + oct .13), H = min(20, floor(min(10500, .46 * SR) / f)); this.fc = s < 40 ? 6400 : 5530; this.init = ((o.note - 12 oct) .173 + s .137) % 1 TAU + oct * 1.73; this.ka = 2 ** (-det / 2400); this.kb = 2 ** (det / 2400); this.sh = Array.from({ length: H }, (_, h) => (h + 1) * -.8164501 (1 + 2.1777318 * gauss(h + 1, 3, .14))); this.dk = this.sh.map((_, h) => exp(-.07 (f (h + 1) / 1500) ** .8 / SR)); this.dc = this.sh.map(() => 1); this.h4 = this.sh.map((_, h) => (h + 1) ** 4); this.i = 0; } process(n, e, t, o) { const age = this.i++ / SR, f = this.f, I = this.init, m = .43; if (age > o.gate + 1.25) return 0; const c = ctl(this, age, a => [(f / (this.fc + 2400 exp(-a / .07))) 4, cos(TAU 4.42 a + I), cos(TAU 6.03 a + I + 1.1), k6Env(a, o.gate, .0055, .165) exp(-a / 9.5)]); const xa = TAU f (age this.ka + 13.5 .00057762265 / (TAU 4.42) (cos(I) - c[1])) + .11, xb = TAU f (age this.kb + 8 .00057762265 / (TAU 6.03) (cos(I + 1.1) - c[2])) + .11; // sin(h x + c) over the partials by the Chebyshev recurrence const ca = 2 cos(xa), cb = 2 cos(xb); let a0 = 0, a1 = sin(xa), b0 = sin(1.7), b1 = sin(xb + 1.7), y = 0; for (let h = 0; h < this.sh.length; h++) { y += this.sh[h] / sqrt(1 + c[0] this.h4[h]) (this.dc[h] = this.dk[h]) ((1 - m) a1 + m b1); const a2 = ca a1 - a0, b2 = cb b1 - b0; a0 = a1; a1 = a2; b0 = b1; b1 = b2; } return y / sqrt((1 - m) * 2 + m m) o.v TK_GAIN[5] * c[3]; } }, { name: 'bell' }); instrument('bells', () => play(bell, 5));

// orbit pluck: an arpeggiated pluck figure with quarter-note echoes and early reflections, one note per clip const FXF = [0, 1, 2, 3, 4, 5, 6, 7].map(d => hz(80 - d)), FXW = [0, 1, 2, 3, 4, 5, 6, 7, 8].map(h => h ** -1.148513); const FX = [[8064, 16, 128, [.018198, .020713, .01326, .015362, .020599, .055506]], [9985, 8, 31, [.006129, .015353, .022254, .021035, .038608, .078348]]]; const orbit = synth.def(class { constructor(o) { const [k, z, w, fade] = FX[o.aux]; Object.assign(this, { step: (k < 8832 ? .35482526 : .35409087) / 4, z, w, fade, b: new Float64Array(1 << 17), i: 0 }); this.len = this.step z 8; } core(u) { const { step, z, w, len } = this; if (u < 0 || u > len + 1.1) return 0; const top = min(floor(u / step), z 8 - 1), fc = 6612.2725 (1 + .28 sin(TAU .19 u + .4)), lfo = .00082 sin(TAU 4.42 u + 1.3); let body = 0, up = 0; for (let j = top; j >= 0 && j > top - 24; j--) { const slot = j % 8, desc = j >= w, f = FXF[desc ? (j - w) % 4 : min(slot, 7 - slot)], bg = step (!desc && (slot == 3 || slot == 7) ? 2 : 1), age = u - j step; if (age > max(step, bg) + .9) break; if (age < 0) continue; const ph = f age + (j .61803398875 + .37) % 1, e08 = exp(-age / .08), env = k6Env(age, step, .001881, .026) (.514885 + .485115 e08); if (desc || !(slot == 4 || (slot == 0 && j > 0))) body += k6Env(age, bg, .007, .17) exp(-age / 5) sin(TAU * ph); if (env < 1e-5) continue; const m = .62 (1 - e08), pick = 1.190836 exp(-age / .030297), xa = 2 TAU ph + .3, xb = 2 TAU (ph - f lfo) 2 ** (-2.7 / 1200) + .3; const ca = 2 cos(xa), cb = 2 cos(xb); let a0 = 0, a1 = sin(xa), b0 = 0, b1 = sin(xb), v = 0; for (let h = 1; h <= 8; h++) { const x = 2 h f / fc; v += FXW[h] (1 + pick (1 - 1 / h)) / sqrt((1 - x x) 2 + x x / .49) clamp((min(11000, SR .46) - 2 h f) / 800, 0, 1) ((1 - m) a1 + m * b1); const a2 = ca a1 - a0, b2 = cb b1 - b0; a0 = a1; a1 = a2; b0 = b1; b1 = b2; } up += .873044 v env / sqrt((1 - m) * 2 + m m); } return up exp(-max(u - len, 0) / .035) + body exp(-max(u - len, 0) / .145); } process() { const i = this.i++, u = i / SR, len = this.len, b = this.b, P = [0, .12, .35, .6, .78, 1], x = clamp(u / len, 0, 1); if (u > len + 1.5) return 0; b[i & 131071] = this.core(u); let echo = 0, j = 0; for (let k = 1; k < 7; k++) { const d = round((k <= 3 ? k 4 this.step : .037 + .071 (k - 3) 1.32) SR); if (i >= d) echo += (k <= 3 ? .22 .38 (k - 1) : .07 .66 (k - 4)) * b[(i - d) & 131071]; } while (j < 4 && x >= P[j + 1]) j++; return (b[i & 131071] + echo exp(-max(u - len, 0) / .032)) lerp(this.fade[j], this.fade[j + 1], (x - P[j]) / (P[j + 1] - P[j])); } }, { name: 'orbit' }); instrument('orbit pluck', () => FX.forEach(([k], i) => { const t = (round(T(k) * SR) - .5) / SR; sleep(t); orbit.play(80, { env: one, duration: 30, aux: i }); sleep(-t); }));

// Juno: the shader's additive patch as wavetables per pitch and filter level, its room's wobbling phases every 50 ms const junoTabs = {}; function junoTab(m, lay) { const bell = lay != 1, f0 = hz(m), sub = bell ? .15 : .5, H2 = 2 - .95 .49, pw = .5 - .45 .49, hc = bell ? 412 : 1220, cv = .46 200 / 12 + 4 (m - 60) / 60 + .05, K = floor(36000 / f0); const lp = (f, fc) => (f /= fc, 1 / sqrt((1 - f f) 2 + f f / .49)), hp = f => (f /= hc, f / sqrt(1 + f * f)); const set = (fn, n = K) => Array.from({ length: n + 1 }, (_, k) => k ? fn(k, .5 f0 k) : 0), lev = [0, 1, 2, 3, 4].map(l => 7.8 2 (cv + .3 l)), fr = 7.8 * 2 (cv + .36); const rph = k => RPH[k - 1] / 256 * TAU, x = f => clamp(log2(f / 300) / 3.5, 0, 1); const room = o => Array.from({ length: 49 }, (_, i) => wave(set((k, f) => ((k & 1) == o) lp(f, fr) hp(f) ss(120, 320, f) exp(-i .05 / lerp(1.3, 1, x(f))) (k & 1 ? 2 sub / k : (1 + H2 abs(bell sin(PI k / 2 pw))) / (k / 2))), set(k => rph(k) + 2.5 sin(i .05 (1.7 + rph(k) % 1 2.6) + 3 rph(k))), 512)); return junoTabs[m * 3 + lay] ||= { saw: lev.map(fc => wave(set((k, f) => k & 1 ? 0 : -lp(f, fc) * hp(f) / (k / 2)))), sub: lev.map(fc => wave(set((k, f) => k & 1 ? -lp(f, fc) hp(f) 2 * sub / k : 0))), pul: bell && lev.map(fc => wave(set((n, f) => -lp(2 f, fc) hp(2 f) H2 sin(PI n pw) / n, K >> 1), set(n => PI / 2 - PI n * pw, K >> 1))), room: [room(1), room(0)] }; } // the Juno envelope: attack toward 1.632, then 41:1 decays over d and after the gate over r const JA = log(1.632 / .632) / .0184, JT = log(1.632) / JA, L41 = log(41); const junoEnv = (t, g, d, r) => { const h = min(t, g), l = min(1, h < JT ? 1.632 (1 - exp(-JA h)) : exp(-L41 (h - JT) / d)); return t <= g ? l : l exp(-L41 * (t - g) / r); }; // a riff note's layers: 0 the patch and 2 a thin one an octave up (juno 1), 1 a pluck an octave down (juno 2); aux is the seed const juno = synth.def(class { constructor(o) { this.seed = o.aux / 256; this.L = o.layers.map(l => { const m = o.note + [0, -12, 12][l], bell = l != 1; return { tab: junoTab(m, l), bell, f: hz(m) (l == 2 ? 2 (14 (2 ((this.seed 3.71 + .13) % 1) - 1) / 1200) : 1), g: [1, 5.2, .7][l] * .0515, d: bell ? 2.37 : .2736, r: bell ? .4512 : .2292, rv: bell ? .14 : .056 }; }); this.i = 0; } process(n, e, t, o) { const age = this.i++ / SR, ri = min(47, age / .05 | 0), rw = age / .05 - ri; if (age > 2.4) return 0; const c = ctl(this, age, a => this.L.flatMap(L => { const env = junoEnv(a, o.gate, L.d, L.r), sa = junoEnv(a, o.gate, .0866, L.r), rv = L.rv * (1 - exp(-a / .06)); return [env, junoEnv(a, o.gate, .1848, .1848) 4, sa, rv sa / max(env, 1e-6), rv, rv * exp(-a / 1.3)]; })); let y = 0; for (let l = 0, j = 0; l < this.L.length; l++, j += 6) { if (c[j] < .0005 && c[j + 5] < .0005) continue; const L = this.L[l], tb = L.tab, i = min(3, c[j + 1] | 0), w = c[j + 1] - i, u = (L.f * age + .1) / 2 % 1, R = tb.room; const p = u 2048, a = p | 0, fa = p - a, q = u 512, b = q | 0, fb = q - b; let s = c[j] at2(tb.saw, i, w, a, fa) + c[j + 2] at2(tb.sub, i, w, a, fa) + c[j + 3] lerp(at(R[0][ri], b, fb), at(R[0][ri + 1], b, fb), rw) + c[j + 4] lerp(at(R[1][ri], b, fb), at(R[1][ri + 1], b, fb), rw); if (L.bell) { const v = (L.f 1.005096 age + this.seed) % 1 2048, e = v | 0; s += c[j] at2(tb.pul, i, w, e, v - e); } y += L.g * s; } return y; } }, { name: 'juno' }); // both Juno loops share the chorus: two dulled BBD taps swept by a .863 Hz triangle, then the bus saturation const chorus = filter.def(class { constructor() { this.b = new Float64Array(1024); this.n = 0; this.z = [0, 0, 0, 0]; this.k = [7237, 10644].map(f => Math.tan(PI * f / SR)); } process(x) { const n = this.n++, t = n / SR, lfo = 4 abs(t .863 % 1 - .5) - 1, z = this.z, f = M * fade(t); let v = x[0]; for (let j = 0; j < 2; j++) { const k = this.k[j]; v = (k (v + z[2 j]) + (1 - k) z[2 j + 1]) / (1 + k); z[2 j] = j ? z[1] : x[0]; z[2 j + 1] = v; } this.b[n & 1023] = v; const tap = d => this.b[(n - round(d * SR)) & 1023]; return [tanh(1.4 (.44 x[0] + .56 tap(.003345 + lfo .001805))) f, tanh(1.4 (.44 x[0] + .56 tap(.003455 - lfo .001945))) f]; } }, { name: 'juno chorus' }); const junoBus = chorus.createShared(); instrument('juno bell pair', () => play(juno, 7, { layers: [0, 2] }), junoBus); instrument('juno low pluck', () => play(juno, 7, { layers: [1] }), junoBus);

// pads: three detuned drifting oscillators a note, a wavetable per level of the high partials' fade; aux is the patch const PATCH = [[.2877135, 4.5, .019, 4.4, .6, 1.06, 10, .61, 2.06, 9.3, 4.17, 3.3, 7.5, .045, .19, .46], [.2455979, -3.7, .08, 2.5, .78, .39, 3.8, .43, .59, 1.1, 4.18, .28, 1.2, .055, .02, .85], [.3105146, -3.7, .055, .48, .68, .27, 4.5, .44, .59, 1.5, 4.18, .28, 1.2, .055, .06, .8], [.3280919, -3.7, .11, 4, .91, .44, 6.7, .8, .82, 5.5, 4.18, .9, 1.2, .055, .014, .9]]; const CEIL = min(14000, .46 SR), band = f => clamp((CEIL - f) / (CEIL .08), 0, 1); function padPartial(l, m, h) { const f = h hz(m), even = h % 2 < .5, one = l == 1, pu = sin(PI h clamp(.115519 - .0023351 (m - 73), .03, .49)); return band(f) (l == 0 ? h -.15 (even ? .8984815 : 1) (1 + 5.1648574 gauss(h, 1.5809937, .2745189)) (.6601429 + .3398571 (pu pu + .005)) (1 + 2.2855227 gauss(log2(f / 2062.1763), 0, .1300339)) / sqrt(1 + (f / 1300.0624) * 4) : l == 3 ? h -.93 (even ? .56 : 1) / sqrt(1 + (f / 3000) 4) / sqrt(1 + (145 / f) * 2) : h -lerp(one ? 2.3 : 2.05, one ? 1.45 : 1.25, clamp((m - 44) / 12, 0, 1)) / sqrt(1 + (f / (one ? 2200 : 1650)) 4) (1 + (10 ((one ? 7 : 4) / 20) - 1) gauss(log2(f / 295), 0, .43)) * (even ? one ? 1.4 : 1.15 : 1)); } const DECAY = [0, .01, .02, .04, .08, .16, .32, .64, 1.28, 2.56, 5.12], padTabs = {}; const pad = synth.def(class { constructor(o) { const l = this.l = o.aux, m = o.note, p = this.p = PATCH[l]; this.i = this.k = 0; if (l == 4) { const b = hz(m + .0401876); this.f = [-9.371223, -2.963397, 2.963397, 9.371223].map(c => b 2 * (c / 1200)); this.amp = Array.from({ length: 49 }, (_, h) => h && band(h hz(m)) h -.534233 (h % 2 < .5 ? 2.305448 : 1) (.676941 + .323059 abs(sin(PI h .268694))) / sqrt(1 + (h / (4.435344 2 (-.257367 (m - 73) / 12))) * 8)); this.att = this.amp.map((_, h) => h && exp(-1 / SR / (.00737 + .005 / h ** 3))); this.dmp = this.amp.map((_, h) => exp(-.431165 / SR max(0, h - 1) * .693174)); this.a = this.amp.map(() => 1); this.d = this.amp.map(() => 1); this.t0 = T(o.k); return; } const rm = l == 1 || l == 2 ? lerp(.2, 1, clamp((m - 40) / 22, 0, 1)) : 1, f = hz(m + p[1] / 100), sp = TAU ((m .61803398875 + 2.941 + l * .137) % 1); this.f = [-1, 0, 1].map(d => f 2 (d p[6] * rm / 1200)); this.ph = [-1.173, 0, 1.317].map(d => sp + d); const sl = this.ph.map((x, i) => x + [.23, 0, -.34][i]); this.cs = sl.map(cos); this.sn = sl.map(sin); this.cv = this.ph.map(x => cos(x .71)); this.sv = this.ph.map(x => sin(x .71)); this.mo = this.f.map(f => f (2 (p[9] rm / 1200) - 1) / p[8]); this.vi = this.f.map(f => f (2 (p[11] rm / 1200) - 1) / p[10]); this.se = this.f.map(f => TAU f (2 * (p[12] / 1200) - 1) p[13]); this.side = p[7] * rm; const amp = Array.from({ length: 49 }, (_, h) => h && padPartial(l, m, h)); this.norm = p[0] / sqrt(amp.reduce((s, a) => s + a a, 0) (1 + 2 this.side * 2)); this.tab = padTabs[m 4 + l] ||= DECAY.map(d => wave(amp.map((a, h) => a (p[15] + (1 - p[15]) exp(-d (h - 1)))), [], 1024)); } process(n, e, t, o) { const age = this.i++ / SR, p = this.p; if (this.l == 4) return this.air(age, o); const c = ctl(this, age, a => { const h = min(a, o.gate); return [(1 - exp(-h / p[2])) (p[4] + (1 - p[4]) exp(-h / p[3])) exp(-max(a - o.gate, 0) / p[5]) ss(0, .014, o.life - a), cos(TAU p[8] a), sin(TAU p[8] a), cos(TAU p[10] a), sin(TAU p[10] a), 1 - exp(-a / p[13])]; }); const d = age * p[14]; while (this.k < 9 && d >= DECAY[this.k + 1]) this.k++; const k = this.k, w = min(1, (d - DECAY[k]) / (DECAY[k + 1] - DECAY[k])); let y = 0; for (let i = 0; i < 3; i++) { const u = this.f[i] age % 1 + (this.ph[i] + this.mo[i] (this.cs[i] - c[1] this.cs[i] + c[2] this.sn[i]) + this.vi[i] (this.cv[i] - c[3] this.cv[i] + c[4] this.sv[i]) + this.se[i] c[5]) / TAU; y += (i == 1 ? 1 : this.side) * lerp(rd(this.tab[k], u), rd(this.tab[k + 1], u), w); } return y this.norm c[0] * o.v; } // the atmosphere: four carriers, each partial with its own attack and damping air(age, o) { const c = age + this.t0, s = [], tc = [], pr = [0, 0, 0, 0]; this.f.forEach((f, i) => { const r = i < 2 ? 2.164323 : 4.323772, ph = TAU ((f c + [0, .6707402, .5357259, .4566458][i]) % 1) + f (2 ((i < 2 ? 5.43689 : 8.972899) / 1200) - 1) / r sin(TAU (r c + (i < 2 ? .1813177 : .0328645))) + TAU f (2 * (4 / 1200) - 1) .035 * (1 - exp(-age / .035)); s[i] = sin(ph); tc[i] = 2 * cos(ph); }); let y = 0; for (let h = 1; h <= 48; h++) { const a = this.amp[h] (1 - (this.a[h] = this.att[h])) (this.d[h] = this.dmp[h]); for (let i = 0; i < 4; i++) { y += a s[i] (i < 2 ? 1 : 1.033966); const x = tc[i] * s[i] - pr[i]; pr[i] = s[i]; s[i] = x; } } return y / sqrt(2 + 2 1.033966 2) .1189201 o.v exp(-max(age - o.gate, 0) / 1.212509) * ss(0, .014, o.life - age); } }, { name: 'pad' }); // the pads rest from 131.2 to 136.5 s const padRest = t => fade(t) * (t % 229 > 131.07 && t % 229 < 136.54 ? clamp((131.18 - t % 229) / .11, 0, 1) : 1); instrument('atmosphere', () => play(pad, 9), 0, padRest); instrument('glassy pad', () => play(pad, 10), 0, padRest); instrument('warm pad', () => play(pad, 11), 0, padRest); instrument('verse keys', () => play(pad, 12), 0, padRest); instrument('string ensemble', () => play(pad, 13), 0, padRest);

// FM keys: a small FM electric piano const fm = synth.def(class { constructor(o) { this.w = TAU * hz(o.note); this.i = 0; } process(n, e, t, o) { const age = this.i++ / SR, w = this.w * age; if (age > .55) return 0; const c = ctl(this, age, a => [(1 - exp(-a / .045)) (.02758 + .97242 exp(-a / .03147)) / (1 + exp((a - max(o.gate, .09)) / .03)), .2 exp(-a / .068693), 2.211414 exp(-a / .05), 4.16848 * exp(-a / .012477)]); return (sin(w + c[1] sin(w .5) + c[2] sin(w 2) + c[3] sin(w 7)) + .115546 sin(w .5)) c[0] o.v * 2.149943; } }, { name: 'fm' }); instrument('fm keys', () => play(fm, 14));

// vocals: the shader's codec, 5 ms records of shape, pitch and gain driving 72 harmonics and 12 noise bands let VW; const vw = () => VW ||= new Uint32Array(bytes(VOCAL).buffer, 0, 6156), CB = 5092, ANCH = 5988; // kind 0 records are words, kinds 1 (pitch) and 2 (gain) 21 bits from word 3131 const rec = (kind, i) => { const w = vw(), b = 3131 32 + i 21, j = b >> 5, s = b & 31; return kind ? (w[j] >>> s | (s && w[j + 1] << 32 - s)) & 0x1fffff : w[i]; }; const vf = r => 60 2 ((r >> 8 & 4095) 4.1963972128035 / 4095); // a shape code's 32 levels in dB; book 0 lead, 1 repair, 2 backing const shapes = new Map(); const shape = (book, code, key = book * 16777216 + code) => shapes.get(key) || shapes.set(key, Float64Array.from({ length: 32 }, (_, k) => { const st = k >> 3, e = code >>> st * 6 & 63, w = vw(); return book == 1 ? (w[CB + 256 + (st 64 + e) 2 + (k >> 2 & 1)] >>> (k & 3) 8 & 255) / 3 - 80 : (w[CB + (book ? 768 + st 32 + e : st 64 + e)] >>> (k & 7) 4 & 15) * 4 - 60; })).get(key); // a stream in time order: records a, b around now, u between; pitch integrates its phase class Stream { constructor(kind, start, count, t0 = 0, ph = 0) { Object.assign(this, { kind, start, count, t0, p0: ph }); this.seek(); } seek() { this.j = 1; this.t = this.t0; this.ph = this.p0; this.a = rec(this.kind, this.start); this.b = rec(this.kind, this.start + min(1, this.count - 1)); } at(now) { if (now < this.t) this.seek(); for (let d; this.j < this.count - 1 && now >= this.t + (d = (this.a & 255) * .005);) { if (this.kind == 1) this.ph += .5 (vf(this.a) + vf(this.b)) d; this.t += d; this.a = this.b; this.b = rec(this.kind, this.start + ++this.j); } const h = (this.a & 255) * .005, d = clamp(now - this.t, 0, h), f0 = vf(this.a), f1 = vf(this.b); this.u = h > 0 ? d / h : 1; if (this.kind == 1) this.f = lerp(f0, f1, this.u), this.phase = this.ph + f0 d + .5 (f1 - f0) d this.u; return this; } } // noise bands: centre, width, rate, rounded as the shader does const NB = Array.from({ length: 12 }, (_, j) => { const lo = 700 (exp(.1 + j .2309) - 1), hi = 700 (exp(.1 + (j + 1) .2309) - 1), q = x => round(x * 32) / 32, bw = q(hi - lo); return [q(.5 (lo + hi)), bw, q(bw 1.4)]; }), AP = [0, .12, .5, 1]; // a voice: amplitudes every 32 samples, ramped; harmonics by the Chebyshev recurrence class Voice { constructor(streams, book, seed, width = 0, choir = false, gate = true) { Object.assign(this, { streams, book, seed: seed >>> 0, width, choir, gate, fix: 0, n: 0 }); ['amp', 'da', 'to'].forEach(k => this[k] = new Float64Array(84)); ['cs', 'dc', 'sn', 'ds', 'tc', 'tsn'].forEach(k => this[k] = new Float64Array(72)); this.nz = NB.map(() => [-1, 0, 0, 0, 0]); } // amplitudes at time tb, power-normalized to the gain targets(tb, f) { const [S, , G] = this.streams, g = G.at(tb), s = S.at(tb), code = lerp(g.a >> 8 & 127, g.b >> 8 & 127, g.u), db = code * 78 / 127 - 78, out = this.to.fill(0); if (this.book ? code <= 0 : db < -76.9) return this.tc.fill(0), this.tsn.fill(0); const A = shape(this.book, s.a >>> 8), B = shape(this.book, s.b >>> 8), u = s.u, ap0 = lerp(AP[g.a >> 15 & 3], AP[g.b >> 15 & 3], g.u), ap1 = lerp(AP[g.a >> 17 & 3], AP[g.b >> 17 & 3], g.u); const lvl = fr => { const x = clamp((log(1 + fr / 700) - .0887954987831) / 2.7274682869593 31, 0, 31), k = min(x | 0, 30); return 2 (lerp(lerp(A[k], B[k], u), lerp(A[k + 1], B[k + 1], u), x - k) .166096404744); }; let pw = 0; for (let k = 1; k <= 72 && k * f <= 11500; k++) { const fr = k f, ny = lerp(ap0, ap1, ss(1500, 6500, fr)), a = out[k - 1] = lvl(fr) sqrt(max(0, 1 - ny ny)) clamp((11500 - fr) / 600, 0, 1); pw += .5 a a; } NB.forEach(([c, bw], j) => { const a = lvl(c) lerp(ap0, ap1, ss(1500, 6500, c)) sqrt(bw / max(f, 60)); pw += a * a; out[72 + j] = this.choir ? a lerp(.8, .4, ss(1500, 6500, c)) lerp(.4, 1, ss(-62, -42, db)) : a; }); const sc = 2 * (db .166096404744) / sqrt(max(pw, 1e-15)) * (this.gate ? ss(0, 1, code) : 1); out.forEach((a, k) => out[k] = a * sc); // a wide voice's side: each harmonic shifted by 2 pi frac(freq * .017) if (this.width) for (let k = 0; k < 72; k++) { const p = TAU ((k + 1) f .017 % 1); this.tc[k] = out[k] cos(p); this.tsn[k] = out[k] * sin(p); } } // one sample at stream time now: [mid, side] run(now, step) { const P = this.streams[1].at(now), amp = this.amp, da = this.da, W = this.width; if (this.n++ % 32 == 0) { this.targets(now + step * 32, P.f); for (let k = 0; k < 84; k++) da[k] = (this.to[k] - amp[k]) / 32; if (W) for (let k = 0; k < 72; k++) this.dc[k] = (this.tc[k] - this.cs[k]) / 32, this.ds[k] = (this.tsn[k] - this.sn[k]) / 32; } const c1 = cos(TAU (P.phase + this.fix)), c2 = 2 c1; let y = 0, side = 0, cp = 1, c = c1, sp = 0, s = sin(TAU * (P.phase + this.fix)); for (let k = 0; k < 72; k++) { y += (amp[k] += da[k]) * c; if (W) { side += (this.cs[k] += this.dc[k]) s - (this.sn[k] += this.ds[k]) c; const s2 = c2 * s - sp; sp = s; s = s2; } const c3 = c2 * c - cp; cp = c; c = c3; } // noise bands: a smoothed random amplitude on a carrier const sec = floor(now), fr = now - sec; for (let j = 0; j < 12; j++) { const [ce, , rate] = NB[j], z = now rate, n = floor(z), q = this.nz[j], a = amp[72 + j] += da[72 + j], sd = this.seed + j 7919, ph = TAU (sec (ce % 1) + ce * fr); if (q[0] != n) q[0] = n, q[1] = rnd(n + sd + 117), q[2] = rnd(n + sd + 118), q[3] = rnd(n + sd + 719), q[4] = rnd(n + sd + 720); const w = ss(0, 1, z - n) * 2.8431; y += a (q[1] 2.8431 + (q[2] - q[1]) w) cos(ph); if (W) side += a (q[3] 2.8431 + (q[4] - q[3]) w) sin(ph); } return [y, side]; } } const streams = ([s, p, g], t0 = 0, ph = 0) => [new Stream(0, s[0], s[1], t0), new Stream(1, p[0], p[1], t0, ph), new Stream(2, g[0], g[1], t0)];

// the lead vocal: routes replay the second chorus later, repair voices sing three regions, then the soft clip const lead = synth.def(class { constructor() { this.i = 0; this.rep = REPAIR.map(([, id]) => new Voice(streams(VOICES[id]), 1, (id ? id + 2 : 0) 3533 97)); } // the base restarts from each 2 s cell's anchor, as the shader scans it base(st) { const cell = clamp(st * .5 | 0, 0, 89), bv = this.bv ||= new Voice([], 0, 0, .13652, false, false); if (cell != this.cell) { const w = vw(), bit = i => w[ANCH + 164 + (i >> 5)] >>> (i & 31) & 1; let rank = 0; for (let c = 0; c < cell; c++) rank += bit(c); const a = [0, 1, 2, 3].map(k => bit(cell) ? w[ANCH + rank * 4 + k] : 0), [sp, gn, pi] = a.map(x => [x & 8191, x >>> 13 & 65535]); bv.streams = [new Stream(0, sp[0], 2185 - sp[0], sp[1] .005), new Stream(1, 1213 + pi[0], 747 - pi[0], pi[1] .005, (a[2] >>> 29 | a[3] << 3) / 65536), new Stream(2, gn[0], 1213 - gn[0], gn[1] * .005)]; this.cell = cell; } return bv; } process() { const samp = this.i++, time = samp / SR; let src = samp, frac = 0, st = time, step = 1 / SR, l = 0, r = 0; for (const [lo, hi, z, rt] of ROUTES) if (time >= lo && time < hi) { const x = (samp - round(lo SR)) rt; src = round((90.2 + z) * SR) + floor(x), frac = x % 1, st = 90.2 + z + x / SR, step = rt / SR; break; } if (st < 0 || st >= 180) return 0; const wet = clamp(REGIONS.reduce((w, [a, b]) => w + ss(a, a + .06, st) (1 - ss(b - .06, b, st)), 0), 0, 1), mute = ss(10.2, 10.24, st) (1 - ss(11.88, 11.92, st)); if (wet < 1 && mute < 1 && LIVE.some(([a, b]) => st >= a .005 - 1e-4 && st < b .005 + 1e-4)) { const bv = this.base(st); // the shader's phase corrections bv.fix = PHASEFIX.reduce((v, [t, x]) => st * 200 >= t ? x : v, 0); const [y, sd] = bv.run(st, step), g = 1.002722349 .29255608 (1 - wet); l = (y + .13652 sd) g; r = (y - .13652 sd) g; } if (wet > 0) REPAIR.forEach(([on, id, lv, rt], i) => { const len = TEMPLEN[id] .005, age = (src - round(on SR / 44100) + frac) / SR rt, y = age >= 0 && age < len ? this.rep[i].run(age, rt / SR)[0] lv / 128 ss(0, .06, age) (1 - ss(len - .06, len, age)) : 0; l += y; r += y; }); const k = (1 - mute) * 3.1304; return [tanh(l k) / 1.3, tanh(r k) / 1.3]; } }, { name: 'voice' }); instrument('lead vocal', () => { sleep(-.5 / SR); lead.play(0, { env: one, duration: 228.5 }); sleep(.5 / SR); });

// backing octaves and choir: phrases of two voices; phrase 0 is the backing track, 1 and 2 the choir, its upper voice a bit up const phrase = synth.def(class { constructor(o) { const [first, n, len] = PHRASES[o.aux]; this.len = len * .005; this.v = Array.from({ length: n }, (_, k) => { const [c0, c1, c2, seed] = BVOICES[first + k]; return [first + k, new Voice(streams([CURVES[c0], CURVES[c1], CURVES[c2]]), 2, seed 3533 97, 0, first + k >= 2), k]; }); this.i = 0; } process(n, e, t, o) { const age = this.i++ / SR; if (age >= this.len) return 0; let y = 0; for (const [voice, v, k] of this.v) if (voice || age < 1.845) y += v.run(age, 1 / SR)[0] o.lv / 128 (voice ? voice > 1 ? 5.995 : 4.833 : 3.399) * (o.aux && k ? CHOIR_UPPER : 1); return y; } }, { name: 'phrase' }); function phrases(choir) { let now = 0; for (const [k, lv, ph] of BEVENTS) if (ph > 0 == choir) { const t = (round(T(k) * SR) - .5) / SR; sleep(t - now); phrase.play(0, { env: one, duration: min(PHRASES[ph][2] * .005, 228.5 - T(k)), aux: ph, lv }); now = t; } sleep(-now); } instrument('backing octaves', () => phrases(false)); instrument('choir', () => phrases(true));

// bridge strings (aux 0, 2) and bridge plucks (aux 1): three detuned oscillators on wavetables const hTabs = {}; const strings = synth.def(class { constructor(o) { const pl = this.pl = o.aux == 1, reg = o.aux, m = this.m = o.note, f = this.f = hz(m - .03), fc = reg == 2 ? 1700 : 3821.5425; const hs = fn => Array.from({ length: 49 }, (_, h) => h && h f <= min(.47 SR, 11000) && !(pl && h > 40) ? fn(h, h * f) : 0), base = (h, F) => (h == 1 ? 1 : 1.1946317 / h 1.08) / sqrt(1 + (F / 7259.2344) 4); this.tab = hTabs[m 3 + reg] ||= (pl ? [hs(base), hs((h, F) => h % 3 ? 0 : 1.3584493 / (h / 3) .95 / sqrt(1 + (F / 7259.2344) 4)), hs((h, F) => base(h, F) min(h, 5))] : [1, 1.15, 1.3, 1.45].map(c => hs((h, F) => h -1.1697243 / (1 + (F / (fc c)) 2) (h == 1 ? reg == 2 ? 2 : .9461312 : 1)))).map(a => wave(a, [], 1024)); this.t0 = T(o.k); this.i = 0; } process(n, e, t, o) { const age = this.i++ / SR, g = o.gate, m = this.m, pl = this.pl, tb = this.tab; if (age > g + 2) return 0; const c = ctl(this, age, a => { const at = 1 - exp(-a / .015), sp = 1 - exp(-a / .06), e13 = .28775328 exp(-a / 1.3114547), h = min(a, g), r = max(0, a - g), ph = k => k 2.1 + m * .23; return [pl ? exp(-r / .55449176) : (1 - exp(-h / (o.aux == 2 ? .0585 : .045))) (.72 + .28 exp(-h / .8)) exp(-r / (o.aux == 2 ? .34 : .29)) + .07 (1 - exp(-a / .18)) * exp(-r / .58), at (exp(-a / .62741244) + e13), at (exp(-a / .5648082) + .3 e13), at .43058354 exp(-a / .048), .62 sp, exp(-a / .8) * 3, ...[0, 1, 2].map(k => pl ? .00013 sp (sin(TAU (4.3 + k .23) a + ph(k)) - sin(ph(k))) : .0003 sin(TAU (4.4 + k .19) * a + ph(k)))]; }); const k = min(2, c[5] | 0), w = c[5] - k; let y = 0; for (let i = 0; i < 3; i++) { const u = this.f 2 ((i - 1) 5.5 / 1200) (age + c[6 + i]) + i .217 + m * .137; y += (pl ? c[1] rd(tb[0], u) + c[2] rd(tb[1], u) + c[3] rd(tb[2], u) + .12 c[1] sin(PI u) : lerp(rd(tb[k], u), rd(tb[k + 1], u), w)) (i == 1 ? 1 : (pl ? c[4] : .63) .5); } const time = this.t0 + age; return y c[0] o.v (pl ? TK_GAIN[19] .021906372 / sqrt(1 + .5 c[4] 2) (1 - ss(134.94, 135, time)) : TK_GAIN[18] .10257193 / 1.63 (1 - ss(132.94, 133, time))); } }, { name: 'strings' }); instrument('bridge strings', () => play(strings, 18)); instrument('bridge plucks', () => play(strings, 19));

// the shader's constants and the score const F1_RANGE = [0,3,0,4,3,8,4,5,11,6,9,3,17,3,12,5]; const F1_TIME = [.0001466,.110091,1,.01234968,.29,.001554506,.0143125,.190476,1,.0009471,.171315,1]; const F1_MODE_A = [56.521984,99.388466,.0104609,.8690204,44.66338,61.11179,.1096019,1.0628572,371.32767,-209.60164,.0202558,2.1891263,162.7338,188.70526,.0040826774,.19115098,103.71241,121.55322,.093549274,1.0821636,411.91742,-162.21484,.04109863,.035018556,460.50424,-73.43866,.09968459,1.9787202,498.4145,-115.317535,.14869969,1.999999,652.3837,-400,.0041870135,.025139695,669.2244,-42.37903,.2095768,.025192965,1184.9644,134.4754,.23038691,.2970309,99.64422,180,.188449,4.189052,81.6,180,.0282231,.073836,65.01996,166.7576,.0122735,.1315408,155.74792,141.13647,.0210719,.1503048,433.62506,340.48764,.0057907,.0559118,727.4177,242.50304,.0195523,1.3005236,203.0716,103.214134,.0046569,.365095,312.16953,189.54967,.0074404,.0615562,446.14404,220.54875,.0035873,.0302815]; const F1_MODE_B = [.0007551,.0595868,4.5,2.9198966,.0649855,.0584137,3.444767,-2.7846992,.0001963,.0012,.6540088,-.3224215,.00089470734,.03349236,.6976522,-4.0294065,4.0000014e-05,.0041050855,.5,2.8153849,4.0000014e-05,.10954456,1.7137398,.020380974,.00018706633,.008915096,3.3707933,-.39994717,.00092362484,.008690168,4.259287,2.8213234,.0015054478,.025694642,4.3937855,1.9843197,.00042528802,.05905235,.86095166,3.7250051,4.0000014e-05,.0019999999,.61707336,-.24798107,.037603,.0038055,4.5,1.6062821,.0193693,.0465669,4.5,-1.055916,7.59e-05,.0265306,.9453883,5.343179,.0091265,.0051939,.5,8.797241,7.57e-05,.0063697,4.382466,1.1947409,.0426591,.0028681,4.200931,3.7995584,.0016536,.030574,1.8733437,-.9201543,4.5e-05,.0175285,4.5,.8995458,.00017,.0457918,3.0914087,-1.1503042]; const F1_NOISE_A = [220,1700,.0999499,3e-05,1300,4800,.135186,3e-05,4500,11200,.0717348,.0012342,11500,19500,.0435345,.0012342,350,1700,.040932953,.0001132039,1600,4200,.040723957,.0004362425,4000,7800,.07270722,8.375559e-05,7500,11500,.029855778,.00037298712,11500,19500,.012064488,.00010150039,280,1500,.0691241,.0026494,1200,4200,.0232615,.0032722,4200,11200,.0446746,.0061689,300,1800,.1467507,.0063557,1500,4400,.0792241,.0020153,4000,8000,.0573453,.0006215,7500,11500,.0303134,.0025908,11500,19500,.0240286,.0025908]; const F1_NOISE_B = [.0164856,.7939996,-.0002444,.0036939,.5,-.0001783,.0087014,.5000009,-.0024331,.0087014,.5000009,-.0024331,.0836466,3.7561834,-.00052776706,.11086245,12.191938,.0011538635,.1147715,5.473175,.0005253749,.1620931,8.240093,.00020167942,.14292006,13.204054,.00043285557,.0049726,.5,-.0030856,.0124606,.5,-.006,.0104267,.5,-.006,.0178022,.5986578,-.0059922,.0371996,.6503188,-.0032914,.0851633,1.3114171,-.002508,.0828916,1.4003253,-.0049376,.0828916,1.4003253,-.0049376]; const F5_LSOL = [4032,3904,1920,0,4032,0,0,0,3392,2944,0,0,3776,1856,0,0,4032,0,0,0,3840,1792,0,0]; const F5_RATE = [60,39,10,37,63,12,0,0,56,61,20,19,57,26,4,35,63,0,0,0,60,35,15,35]; const F5_OUT = [127,108,127,121,90,113]; const F5_KSC = [36,57,14,12,41,0,0,0,0,0,0,0,0,0,0,0,52,75,0,0,0,0,0,0]; const F5_RS = [7,7,6,5,7,1]; const F5_VEL = [0,0,64,112,64,144]; const F5_EXP = [0,1,2,3,4,5,6,7,8,9,11,14,16,19,23,27,33,39,47,56,66,80,94,110,126,142,158,174,190,206,222,238,250]; const TK_GAIN = [1.0812,1.1119,3,1,1,.027360525,1,1,1,1,1,1,1,1,1,1,1,1,1.7910156,1.5498047]; const SPEC = [[603,-2,60,-1,20,20,0],[317,-2,60,-1,20,20,1],[892,-1,60,-1,20,20,2],[14,-2,60,-1,20,20,3],[662,-2,-1,-1,12,31,0],[48,-2,-1,-1,-1,-2,-1],[0,0,0,0,0,0,0],[216,-2,-1,-1,-1,-2,-1],[0,0,0,0,0,0,0],[6,-2,-1,-1,-1,-2,4],[251,-2,-1,-1,-2,-2,0],[304,-2,-1,-1,-2,-2,1],[229,-2,-1,-1,-1,-1,2],[225,-2,-1,-1,-2,-2,3],[272,-2,-1,-1,-1,38,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[10,-2,-1,-1,-2,-2,-1],[12,-2,-1,-1,-1,-1,1]]; const SCORE = '$v d+)I j # Bg-^"-@ N!!)0TeP%g #%g3;7pS["x eP-oNV )RYl &C/> 1NN !+S :"l7O&; #%dF{ ###. !-r+3 DrS+#TJN g# A B+P]#084 g),X%uWp $Pzyu !-`dK )/&"Sx- E7x!bqm(yIj8D%[-N7TpN 1Yn hN2#`qL-&y6bcBg#D 4hGW/ jbFZ7OB@8e%g1r Q & #&ifw !RHqL]By4S=,:b!N-?E U&& QHt%JyqdB[xyCXpr/L&Pju^6QVBKQ+oo;KZv*t9dBsHM[+ofqLGSDro61[|xnYA=- P<s"oN!.yx,pp:>2$=!u]7FbWxnpRi^L&jst:dRb[yR+gi`KcH1t7dsV<yRXhfrLG1Zu^6APXwHXP 0 1! bcV"pLX elLML1Vu]dsbfDq #u %Z%c_s XbQyS,:Y9N"Bi!ZN!(6xp9I!G*o !rr(u"p7O etwL&SDw&cn]()I,B:>!5jormeXBh e $ p 1.2 bk_ &xoB1^N1r .xLdsVO/& ,foN_Bg&<6rPcz9&h!F/&%d:> yPgwHAuoCCK gw&6bmox.pBi^K!<vqI-4[q!-N!A<J^H)qJ6Ah3vcpC$$ sWt7d2VDMZpw"l (vKa<#&ZXvdpRfp6zH-u[d_mkxo+x#8 Q?& 62#! A<i$6#q%aie!^V:yS+fqL&SA!jN2:0yS+Nd,z9 w%620H !+wo:KcS[OGejBj!S )-TL&H(w*9z)QEUBgsVN&Y;!I K-xnXhr(Kc%`(#eb !!GeT.F 1PL"6V:"xHD-N%ZV, "5" *Ng Ox QPm,8#(N$#F b,ek2[)Y;#w A-U -1A"l %vv6!JN!eP)I E $Sh #8n1s+z7S@W 3V. !!% w reTF$ 3<] >^i{ G&$C0m(qwkhjk. #,aVKSF,:OiN@Y; )XGo9KB<bm64xP]x,+_d*Kc1Jt661K/tX+Fa2J^%G{9d"i"IX`ZSJ^%?rp5mbKn9ovR&J]k&m4dRV.wGXGT{KAunqH4xxtu<p!d Go$gqB4G?jwGAec{Kb<jkic-E?s0Am^=IWv!qCcnP]s3X`o3K!%3m16A?dpEAmD"IW%7f/by:2v!XGr L%<vdhdAy!yRXGa1IWGv#ON#h$q)XOlJKB1_nWdcECv!BQa1J^1Nrn6rK"vdB9LFL%H qF6AE?x.*zfmNVBwF96bK tXB ^DIX%?c@dQE=i?o$O6J[ujde7d_s$P*ba3G,v+&ON*T0 A 9!L/&&"*o8E_t&BeP4a#S U0X"+hK!F,8HDN!7Q0V Sv14!.bm$xq@2V A"l(e,8/&QUBg)NP=N<(jO;, ,m@^$$ "2Y,A BNT(IN*Ul AP,!F>s%tK38&%Z$xfUhV$VNR14cg"|3;,J:> Be{)b )&Y !%` NN3FPLbg$5,<ePNI,:#dN!7f+UNcOHVk 2WY9"u_s,Sk. BfO5xN*N8 A !R$U,@1w$^0H CLP!H.c&+phfsk.".8DH[NPY;1m 22(&!*HP Q>F b]y)UR6,Q=-N.Y;#g ),P Ds$8A 2!VJf$=."17O4l$VNN3?Rgn-QQBw,9 #1r?x8>pi#e7S%p S#(N"f A>J"l$FW;!I!wkD*4 rF|QQ2.OG7g7R ?7S+B 2pd ""[k@3YQK3OXBm&x :%L 9QIlRw1tBg8^=.&WeX%g(fvYOH r`IB,9ROH#q,@3LR>?M h`ei2%.{ !"M,j%p7O&/$8%kBgfv (jgcf#)lqqBs$%NS",eP :OoBm3/N;>@ $9,o 2O; $>24 D<0!Y+3$:$VYM8wU3=x=x4iE>$Y]L(*C^T*5S4(.{zxY-OxS,SucE4hsp BY;rGU6le]a8</8$ZZsaPI9%|cH:gPuzwZsIrK@Sn/T3chP F-@>DNsRy;389rc9<Xya!D>pai"3"/4#7-b8oQbU&F<9"Df5)Z2fdEdRa#H8>s[5)^A!PU5T1w0;iQ.2D-P3IIz%4#O7v#A=LY^8sWD=`/Y;n#-6CY<DVOTk85I9 hCyW- r?LhjkCO>;QAkQ-0wVMO=&=k6QPz+4-@IlNnl=`d=4/CnA-18wX3lM8?9A]A7r.H!LS+&b:q<ME$sr-0aJUs=p@X8<Qs,].%U1L+>42f4I/4!lYN!TTR&A5H8<"e)q*1qaZ0iw;6<Ws[(E-Q-pU:T2/`<1PE(F+Wx&LmS,`]:%"Wy[,LDDU4S^2d:$s`+-BIxZ.& b8=Ec5&/KOM{NT:&Q9bhD6A]]U)VWS55>7X:K(DZ!J@Qd&Y#Z7W:Jh^Y-DVVYT!#W8=:?.$+W&|Iz&0qQ8:hy2>/IWN3%m83;kt(0y-AD!Q"j38:5p/T7v.U!.TP%dcB:#hD/G-1-bP>>m,w5-]@vm-Q!R{N=/ m9B#= AZ1bed+ |#<1Q5q)*ca>N4Ba n2?:t&.Y=39RI&),l<qh@@3V^r/KDSf;2;m#E/J.F3OZo%e=w8>hChX*rwgI9&Xw1:f/8#.,<DHNsk(=u8=Dej!,k,LCf_D$`=m7VPuq-.F>RSl=7#Y76:+3e*AfjQck85D:%Q*,V.%-WHS>"Yv4i"i27[W9+RH&I j9?0))h/Kg>QcSn&J9bsJzzZAweSm>+]j7XF"/H+hDA",eT=i R6N"5*"tLX-EsVUFpj0gN+8. OpF5NfC?!o!o*R%ZAY-acG {ImP, O&ZW{fiIy_Of1by"hwFN!)nP^Yt&)PeT! AU=L[CL2#r8?xvE 3.EUcCCM:EN! k&af{1g%pDD g55vEKUAz!M#q&MaC<8%[]*eX 9od,>6-N*B(-J Y$?S;@P8u9Fk.!, 0je!$yq!F:H6@!oj )&.!,4U$ 5Ia 7S"p 1NB !XGa2NB7O (5,.gyS+wlN*1eT,F 1ei +KfM E<a /8<:Fj(+%r9Li%Kw&6r1v !YO7HR$g`M4&h9!MN*kR COO!K&`%wph #s ,:ph^=Y; CN-E^ AWx 57k: Xh)I b,@,8 IE3 N%c Dg!!LFZ,Y ;,;8uN/$V[YG?,9(eIY"mie.r4aSGY?9$N@vj 7W!J "-O&#H$v-n1rZ%Bi3AN! #88N! !W6 "]kN-Pu I,P!s"l(Qa<t9HE4z7_ec 1r+T!6"lK7rQ4a !4LLX"D4X*Ry--AH/<9GXHJ4e18, (6t;<Q1.GP5*1eQNfIWR?83c,rvmS)SczM*Q2]`TDJqncmS>>4k1%c$_ygkFR+%BlE!0qQC6@Bqer )BQtyMWnyA+es c6 bR%"v6k NgRby(y gN2 !Ew ) !#P2!!F <=..B7O"z QBk d)9#,M= )EVO&,8$5 1,?=neP!FOEC98.Og&- DqjARV,6wk n3/h !r2s71t-:O=- 0,bb fN! c Q OX&TR5L;mQB7x/<3^Z2>4=|<Qhq2=.L8! &t)a 28L fOx$=d+ "0M 6+5,<>RS<fE 9+NN "-Q!TN3CY?|3BiLv -?3 E(#0US[`UHFQQ=9$wNk7X"+YQ)L!%=9&ANk=2!w E x$$#:R626bb#Q A,AP=2<u8XG(,#P&K0L 7,p b $X :,<!EN2%X b!":>eP(H vN$=/3|Bo)ITBY;]3N!2L!1eT/( jVG#x[P>Aas]-L>ImHH^2ct-{&@DoYFKfEq^)jmK"XOLVUjRSp-)ge=|OYQy8qEX5K7/%+o!#LYXQi[.C5F2;g6lLP3.:L(L;,Qa%{q)6=!Q8Jv<e$Z%)j`M,socPIkHjZO 5Ev{`hy8div`i/8$1y<(,.8CED&!>29o #.{[!vU1ZX$@@bP_L,D@fNUtpYyoy%y4t/CF68PXH?yu/W?g/mpQOcP<Z9g)6;F^1Kd&ZBj`8R!GZUYyF?n6a3Mru^t1y&-kcDJ#c*a ABg(#!%$5 *N"nh<R]M(BX(!@KA,tr!BxI(4aKS S!:7Uy4n^)9$XN)Pr0LgM,8 A ^ F ,9*o%: y " Pm% B!eey=/ %eP$5)) ) 8,N,;#| "l!F!X #N)/+NIBhSdN%vE"+ !! 7O"l!w!k 7Ph? b$A %N! b ) " - !Ij 1 & :N#h?$v"3 6N!%Z2V%2 / +7O%Z"+ 1 2eP)I b,#(#N!7O*o&p!$ ,8=-.c N#s!V;h 1Y0R%a )!) ! !=-40 l ,N!/&Bg#y N!=-a]PD + b$))J %Zd+ M&F 7S Pem%[#1eP2? Y9"l19,R ")1 % ,Bg$5) ,k AAz /W> (B 8eP &?#H "N/YB A7S.f #w"1N-G )U(n!G;h !N!N!=-#i!%Qe,8 (g(%Z $[]h?PNBj+&N+ew (&I/v:&:O2>-1U3U8& /t:i/a/JZsr;Q#(%CPND,8RZ[H(DQ!l^;(<Q;(2:Z!I|Z1T*=z=V/8(L[H!NU7>]-#==-M c%k $V]=Y"z !;((K.%UGV[(%QbND,8,`.%>aV& 5SO4 ,^.gIrTS&Q/vN@-;%aN!!h eN!=r;m:x(J- U=QfC.1r"4/X9<Z"!Y#d $ 2O7 cOW#R/&-E:>-e.JU<(G b;/Su`6.%P(a^S>JNpRWEu.J9-g7%]!0IuQ9wj2^-w(:&bf B3j2hw-!P4YOUI!>MD;]&2)0r5^j&a`r@&:/nQ.h9Iu8V=80D7if=b5IgRpuZR!0GnS,=T1wZkZxUWl5@ehPhq4E.JhSU&Z:>^$g/Z4$gBhZV,-+AMi$Vq/m"3Zv+Ua(4mjJq60rh7slSo`n4+Q--) 1G` hRw"p&?/7Y9R7,9N^ -BgS0T!/ (,:4a r 9 u (7O11 E ? +7OI!a *pi;d*N!0 + "S[4@ f 8N"eQph04 C "Y:my+C!e +p|EX2)7R;d+""r #eQY9&`%2 5N"vG9Y!o G &,8Z_/W!k & vE)) r # &=-@],L%p QM = "y8 b"oVJ;C"? -N:ph4a%B ? 5N!F{."/ .7TY95E"S -7OS[ziN"=-2V!B 2N#BhCK#H ` +N"VJ r"E 2 ?x+t*o 0 "Bg#P&? t !Bg0L)z"r =N#"l/G v rN2vE6* I % ),9%Z(#!L 3N"Y94a"[ 2 $BgEU0m c (,8Bg&` | %7Sbb(#,] > ,k.;d"d ` % !6*&xc8 CK;!d5$%w;dD!S]4eeSP6 >,9myI9#Z = &%Z=n"7"L Bia<%R!1 ;N#%Z4a!g 5 #s(D:J ]N(7P1r(m"+ +,9d+G?$Y = #](W/%6 J &vElS++!( /,8h?q]"G + &=-P,$v WN)Sa<3K V O #=--^"N!`f-tC +Y>S[3;!4 >eRePJ.$r ON#ePIj$^ T 0Bi fNJ,c 2Y9!= -7Pbb4@#D BN$bb3|5Q YN*,8_s3[!v +phF{g{ $!"7R,:.sN+lE Bg2"2/G&p;d 1 (!Ef-=1 eQ](.2$f 2BwEU6tBg4a0, ,7O7O-= 1 N!Bg]i A $ #Bgy4 A"- "ePEU)) A 7O,y!V , " !)I$$ $ 5 D2o!q,zY r ; !N#3=26q(1r&` K / E#) " J "BgF: 9!/ % fv 9,B%a#q T K3,H d 17OHD!g#D " ,8`xBo6,$V 9!F&?!@ ",O)P!&7Rd-efHD $YKEU$vN"AA!V G 3N!s84 /$%O8P( "sV#0#] $ &Y9$v&O!( #Y9!F,a,N$v(q&Z %R% . !HDD0$U!R !,:my r f HN!7O`W ) ^ !Bg@]! " 3N#EUO& <!xeP kNdBk"qN&"p#R 3ph"[=9 )!% ? - #q = "N%HD!%;K!G-=%dZ_ K7I)7p%Z.B"5#1N!8, N"r3BFqe3;/x " #N!,8"l"x %N!BhVK 1 &NNBi#lN!!r!9i8#U#@8@-c$$!i &eQh?!F$C-JN!$:!L7W %XZBg $8$1sX_eTkA $PY# V=qkL%< f5*[L#(Z qkI7k/Z!2[[hha+wl5Q %3KrNEY9 B7qN!;4$W&=5*r=u0X%lM@#bhf2[Zcx$*rD!>[RG#=6Q!{`,*QTM!JeP5>2Zg{n2+%n 1r 2CC0<!% b!g"rF:&@#M0r9z`3VmC[J[$>t%4F-r`,XF2uJWQRYu3@sC#/&28uPw%"F7.H:FyFY;2uLgjS I8{PPOfTS-Y;tR?&1Xh+YS,@J "Sm)r7WO`rOUx&X!! $-L !q&5N#( DP4!H#0(4>R9YS[aLSEf-5lrbQ9- 8uAJjZF24FO`ei+VNwTM;TqU0sOX!WX7k{LgT1]d4$"poa*PCh;oR`#^8Zs?#1,;xY[Ql4kr9C:x9*d2uI<Qli82^h|uF*BD<Jnj"QR1:PmgR+hZNN8lTTR8<F+(IXW[CE%>mf;5L[]C#Y.[5I7S4*2;H0#Vv+(Od?K(fq:3 :Jvn/zr"L,>+c69a]#yLWe>:N-hii59a"y7g*afQYI<Zc)5/.`>pUY zDz<cI=.j9jx-.wx)^[UVt`6SQ={&Y=wp"F7S!R 2fY c!V#X/h-=:>$F,?K3!&z I7Z !Zo:J&<8!, 6eVph.!)9 0N"ph_2)r f 67R /W" 0eRvEC+!o {N!eP11#H F " !8u1b!( ,N#my/h"/ JN$HDT@"[!$ &phr1+" ^ 37QBg2%7t,:<8!R 0pk:DMGBgt|1 S pePEU@<(H!B $vEG`"| 7 FePie+d!{ $ (phBg = GN&1rm8!6#] +BiF{84!e 7eQ/&,X b #N( Yz7/ U &eQ>RB%!] a "K38T"O B $1r%Z>: T 6 #zY/7!q 5eV:>Dq#T :N$7O/&(P&w$Zgg NN&HDKt I!i !,:Z_40#X HN!bb](+7 aN,S[$v#0!m -Y;S["l! 6YNVR"2,9OG<8!n!h8> ` *phS[";$- "7PHD+t#L D $S]3;$M @ JBgfv-n"j 3eRh?@<"+ ) !7PDq"| o )N!7O))!6 weQOG<(k5>R#SphDq&x ,9(# 3 1eP !8D:! ,."+ 47Oh@@<"d s %1s]i&G ] (k.U$96_t!L7[yh 1qX!+UU#H.B"PEV!g=Q!s ._v"lH< b /Bj6*1 #V `eQh?t+:J!Q3|"| 67U=-l3$v dN(k/-^+K n =%d-dT#_sI)$=!1 17PZ.c"W 6N$:>L8#< W $N"3|&W z +%ZLX7ak>0! ! )I X &k.4aAA!% /ePoBelS`N?7UPm(#19 KN)BgEU>B!9 , #;d&` O!4 !)IG`$v c #,:k.+l": 6 !h?7/!8 .7PBg-=%F VN"HFV* I!GHf.Sfv$$)- <N#ePIj$n 9 7phrr3d 8 Q,:;d4a n!)eT"l>2#< = ( ua*N!9 1Y:qM;S o]i#("< 9BizYEE j V7O/(Yz*2 2N% !XT,(" %N"Y9EE"g!Q7Oa3 :piY91r#L =7RS7O"|!:N#1rX4#X$6L8 ZS[@<!m .7ZPmEv$E s7Q1s!2f?=s $ePphHD!R <N#Y9IjAb"0 /Y:ph6Z"G ,N-](He*B _N0S[n=L0*oJ.&%F{7qS_6weT4t :D] p#@ $[E8(&#"l 3"rOG!d mg%%Q(43h@^DA $3|!R$e"|@i,8(<CS/i Y x HJG!eb_t!Vf51r BgBg-$<V+SOG :No- "oN#?zKvC."l iY9Gc,H $U[l4dBF)Y(h<Y?{n_q yE b .CD -%Z%B ! !=?*o #"pI) 11r 1/39ZC[S`"l#m#z)9,] bUU],QQ A1r!%!a&FN! .#6eP%b HJg!emvX!<eT&V t#dN! R!=7S&V"l!]&?N,2%Z(a-F 7` K7a%[ b7S&> #k"|N!YS 7QBg"K A ,7s=?!H8u(%UE +T>c $ b&S#5 1P8!G0] (!<fI&( A#R%8Na-=^U /xGd bx`"rNcC#](O:CU#tN!DT 7PHD r8H ! b o!uf=%] !1wf{7b1s#;eP!&NfC8^SN#w:Pz%4 i:g[hw{Uz-A;sR@-#5n!RrHZ1r5N3kOYu/..7.#So-bLj:q5E8|Ek#/&2T_OW%|8;3BDXn0)mU OYQC/v5k#A%u-Q!BQbQ*ho:""|u@-r>LN-:Gi!88gcg:-Q8l!Nc#U6{0@ #*0OY8?=Vu >R"`Vk- I`OX:Ww"1V"<+0Z!-3TJTs/^;):ZyG%mlMI4$x,m6s:RrBV>9&Edi% Z6S/;O^Y^=zD>kP5EO17PO[*28kS+&(i-0q//hcV^a<PxjR*36s:[ >Z 8D>`RG2<01g%q$T!qc??Q{&*2<!oZy&r>R=7hht/3@91iz&rl =wR?:i3 [7aT),&O=7<Y7|0O.!ljUh`^@?:yW5/:c_,+frM_;(FnF>W[tg&r&UD>#)Ht.F9M]=T!I[@g:&K`3?rY^d&c8NDzhi=P169=ehT2NeFFR/Ho6O!c`(6fAAJ$6&+:BQ%ARZ22mRB=hq_=v/?g:+g&[CW#A2:16OhVb)+w,;r#Y `3a[OYR)L n?A,15?2[D8k?)[TZ9!;u5901C|YPWAC`:I#Y`5- [KaR]m8HeR?bc`&m:Javf9`MP4h&]129OKU,^2P!7a;X8H6stP&G26qP=9:NKA)MD4==#r8HXhkF]k2BO8NQ1vOlLd"eYk0M-J@FT4U&PyltSs=wC]&.W3ek8Spb7z6mQ1U7QcO)88Pv!"B.Qf2=ZorP2g=$vaBT::US;kJ8=8mw>)S:l6I1waDfQ.ZFR?=m*Es_d8]O4?LC>Pw E.,XDlfKA>Kkr@GIG&*PLfEOLN{v]-A-URh1C"&7b(g]R@@x8{DPOrA;.g|F!.$0)AmWRTN{RQ<5QEAFD`CZ/man8WdfJ>Da G9/{3A9a=_w*4g_7f.#3oQlW:>>F._BLzWtD6=yhz Y5KEQ(bi"E9pA-^2Q?=RGP[xZwe TPt&Ht"8f%^c(yTW@6ywF*Qs^hYAxE]=;=nU6.ER)f*rO-ssUqCOD_"(^&2L:<FE+?L3.P@lcY=!@FTSVT[HQ2dhteXdA9v*yp*fB1Et&1My P@Ei >+@RZm*17"Ks1A4UeVxOD%w0`wT?C%[f*5tS+jB1%xpn8A3{GSO-Z[0Wt8qNs%;fbG,R"NT5(PkmWpRGcGlJs1uN!s"+&O 0 +7O8u2o-G#YS[ T (Bg8u!%!: / =-,8 A -N#vE>R"[ H (Y9r1>2 ) <px:C&cY9 .R z -7O?x A#, # "e[">7x=1 !Bh8u = ,KV[%[7Obb(e!w " Pma] - /7`Ht!jg{=S (7QIj"+ + 5pxVJ#WN!Ij+d E %eQr3g:N!.D9I7S%Z1=%b O? ? &?|$wN!ACX6q-,8)z p ePOI8T oh?(# S ?N"EU#0 1 #N"N!_4Y=K8O!Bw:e phb !w # 0Bh7O%: ^ #B{KI$vphZ&p E #ePy4,X$?-(N!#p$o7O [Wvph A8UHD 1`P:>XVph7r-r>VLkS^CW9 s`. -1Z` bgJi+;l:cyY,<U)VYTR f;m/D.(,[r5Qb&ID1H%ev<)-r>]U6=/CPN@" !P !aTU4Sn k9AQB#5+x!NS.%3tK:etH+4[xT{NBB.`&>9E1yU[&InX&S^,t;n# #Pm9C-Li&b/t9B/0/F.F!XQ#&9;$O0Bi#I )ke AN{!i(#&70L!iftL%j!NW-!g>YyW a>AK$W)y0Or-J(TDl+E_RO R-crUZvTbT4ASh(W#3 g6YOUh8X=8:&=b3?.crE(F3 >ZQ*- 5*rAaPV<8FC[hWy_-A!oX(TRfx65inez3BOpLn(&I3@$Rp@;6R-fU9UHOGL!;^F.3 r=U=+fD:;/in521U"Y$ZN*.g D9r!H#q(,=-9z_s*q7QHDWO&d KN#ph.B95&F$]95!N!vECK Q !Bk-^ r!N "N!4a3[(L $ #%Z$v #P 9ph,8(e!Z ZN",83[ 9 9N"eP?WZw]<5$"x ) 6k/&?&? C )N!s!F$>"#f-,? %Y:/h+d"n;"+7h?!g!{ ;N1S%Z b ( ePbb.2!c &N"%Z-= 5 CN$BgCK&p p pjS[!F p I "N!M^"l dN$7O?7+C!K 5eQd+!w## JN&=-9Y4L CN7N!YzA $p &Bg:>0m#V -eSk.3; b oN$_t&?(i(k4@7W!L7n=.!jeP>% Y9U5#P11#rN!HD)M!# &k.`W$-#7 #ePPm0,%L +eS"l+t#@ :N4N!5E)r K $ !@^FKHmm8#( : NBjeP)I!Z 8eP)J7O#2"oP,8m 3N"R8)k[fK3,X*T U7R)I@<%! MN#1sr1"d ; $ !(#2g Q o7OvEie!k B $7O1r:V B $,9Wp3["8!q9D&= ( !-^3+"G 3N$?xJN!g!7 "1rIj3+!L 4pj0LF") 3eUPmeq)j pN$N"P,6:"9 /po?x3+)9 =e]7Pt[%: 3N-_tY9(<"" 07Oh?DP"A PN% I)$E 5 4VO$w7pk.-=%q$1PLD ZeQ?x4q>>%[&O!3&eeT74 4[` eR%$C=n.{bbN>7z9!Y9 :(v;W] 0L7h 7a=.!/8P"w 1-) byE:D@],aEUNCpj$DN+?) Cjb!a7v $1u8zS]%87S)R 34L jnM#&6k-]4aRhBi3BN*e2 H(-K8)I j `Pu!< AfMa>z:N!6l$E $,8 f/ 1?#!F!o(J ANZ "$5 [$RN*8! !:>p "uN*2L AD(*qJ/Y94"RF"qt<eP6,*N <HjzQDnnYFQ(P"Bi6"N"TwLiT&=5n# +5,<!8L(&) 6s:S. ,]VJ2V,Hk. GPo!T !/"s 2S6qhH#2Y W B<P!I5E 6#2Y^>eQr0fABRwvYHD7Pk/ iN!#H9).s !Y=>]L8"S!IA .. ,[/)K3 !fv6*%tmy #VRua :`Y9>v_ph9NS[&Jk?Ko2^hGVl,a04 "T 887W!{x-W29#!^7O-!6Qgt.Cd["s[C,GEb H[z&.N!!C! #R:p6w !,]>^&mePCMGk<AF&0r[`oXUx!F!g%_*o7P%[!K7O$"7`7h !,=Z`"s ;=Gmh@F&,>8uochG!I4a J a^tr1aWUy-KMn:V bTa"t2V,@1rNGN! S7P7P jN%&R 1/C b"K"nie,H1rNPBi%hN!!|"q $-E 1.o bSK "hZYR/& pvB{>#a"r!F,@,8P? A7TeQ e $&Z 14q d.2"lR6,CPm )%qvE7`k/#=7S)h 1<< cA1"p!F <yu@^25@9 VXyBC+ #r,uBm!%By+V j].Nb9z,>"Sn)L!%K?NBN#%oN!7[+V!%U%+3%_yQ7s%[!P7O 9NeY9!JNZ!> A@,!F5$%pAA VLLX 12($ED8 e55"n8u,CN#!b )"; B-M!N!% 1:J!Vep F $(% ! 91vQ1St)K8(-s !(*O+3,c"1,SHDNYph #7qBg".fU)RNrN! !g@D# #,{sV#1q0CK%P%ZB%$I&e-$?O $N!%Z](%D f8]9UrQ(&9|jdBbt98!imGQN$S[>R) " V,98uJ>$Q DeWEUeq(m!7N*Y;CKJV!9 KeTB&JaEWk2 A%]k2 "#4RV,P ,9ElPMBgdO^ UOU:T*QV=UtHXEd/sTQe+6!2EcO`VP".a2;n8TCH6?m2=xCG5cCq.(15'; const RPH = bytes('q+TEYxhRG#w,avlvbwg;q>1?{!D46D35Ogqvvq/(l,lQ;IX%jeq$fE<+0_D/:-9zPHMV[zB,-c>k{YNR-^9t#-Nk+H@]s*^3Lo)[53+XS7e-_%Uya#hRiX '); const VOCAL = '6rCZIkFo#u#k2_/:"t[42Q-q7_)upj.1Wvekzr A_a50 HZv4%2+ IUJ#Py96;"%wFn*%e9t!Pj*`%g@pp3*UpSuaFR>9nWvepjp*A+nPz Gkv3<o4H`(b]aG_x"c<{kjd9gP6?Rc4fleUmdhl#[!J_v$W&G*rEf 4u<NJ"TMN>?w3[awH` [wd-^do/a yD,Wq+L2m!#8??zV u@!cntN$Iann(pee`D*qLV]"qN,:UY[T%fEUG-pP-7t<N!G5xd,>%/M!Fm@"v-6.$:rDHF#%<a$W]nBuQ>(D2:Gj *QHy49UB)Oj8BW/H`Ne";G$k883]"Jjs4g8sme!R&32,`39 ,oh4e]C<TP0Cl!8MzK6l!{dLPP_TN"W[g`"S!Uk0%?/h(ld?S`dp3x)Jyf7S1rea*8 NYN"|h?7SC<8!h4^N]1OhO&1X,8Ns2K#QBB #":s"7dgEc$M[[$[;%C.-j4R8,y (N5Kd,ygVem{!2V7%)B pRAr1cL/` )aeQ@yU-"#Pk3n1dt"F+YpsG.o2,ox<YivBWqc7{Y!!953|K5$lO4yLB(vF=c!IG?sWK=[^"K%[k2l%:+t[)pqYi$$40c_espB!%3=.U 6">NVIcL$I$TsW1owe#P?G?xkrwV%JR`_yRUE)8a*rBmBWtl*taT,Ya|Rx!GYtf%FF9zpdq$ ZO+oCDr{,![x=Zhq-PD&.tVE^q#Q )8R]eW3`!N&Y&iO #vbSl={8!xW4@BXqm!QheDs_tgD%|,d=-qi_B hy{"n7;V.$-+=YHC<tKAv?^,JkAyD,bx* Fp)w*p@4y LdAF|7-H{!yVgmz<!0#DR&]+Umgs(hE8Bn1#W`%z`TeXJ]<?t(DJ!+@<]HgIo]NMw/B%EF9v!6!Pd,Z5`9!?VK %a/0y&?@fN&zF@],<)-Bk>-a<&.Gu *jo,y/s[8 rcuk.OMcq bJ,/*cnU/#2J^Q%:z.g--)h%d6FGPXSHv7SD)o3fmu0f!z:b CmS. FO9I)7bXX!F9Yr32eSn)gX_EaE!//#gaTppgi<a+1F97VC=X49xw=7a-XS|Cnut!7P2-a9`P)$dh#r:?kwV*Q34_vi<Ro0Vr&q-^0S|;8#HYM0-bA:Rr!N.F!8usN*yO!u>oD":bv"RDMa@@KwT%E?7],(HChI|CEq!0I<0Vc"Q^/Q`*Obn&Gf*aX3|9uXBN5Vq7O9M74 Sf3if;Ej-!48T?{2Vb-$NDnplDI8]+;7/7zZ,*N2gty 4j!k..H;x 2KY7OB4j; i45Y:$!=r n7x?|I,-I$bH%n@{9)4Mg>O]aQ!idr/N6=@=K/Z^NZ3.9Z7N_o!r+yD1NH@N pO 7R5h#<!Q`nS^qN@]#&!t +r8a<&PFo UZr1=aMn!"Q]d+gvU`&c?`U)-4zY-"$q`&6) b$bBz,Hf$0<S5)N8LaG`WgP(NPCC3|U9u; C!DF|%Ske"3MEk/<K!2"Bvo_vW;qa#PsXY>VAc6(8 =pp2 ff6[Qc 9Gs(F2"ZA"S4:3=YT#R"L>>V".6#$|$pn*!#"x($LV_{B22N0N{hN(/ghO=Gx{7evwH$ ImzOITaG`ep+s d&]=-iVyi!TJ<S]2P{"x>C,CMZ!o-cwq,S1vKCK8BFN6fe5$V6M>NEFDI)rrLX Vq<phg#jl!0*nPoajs:CprZ %]D?76I(nYF"K4@RBIwO!"(E 6Qq!-b8LZd<f+ `;Ea=Vk $ nNR%j;h3x1x&6ebVX$f)KK+Ybhkb1,Pv07s,I$UD|m.PVSYF>neYo!t+ea=>Vz^!R8.bc(e(q#;=p_u^N(]*DD:q ?z(TYf#feiaArQ.g0xN5%rjI@?=& gu.)J#hHF!i>xEWX"GS!n].k6bfWW9i+(Ye=t#q/G0lf;PV&?/x>v!eFbd+PbUt$B^{sX43n&.nIthZ0sI$5[srSg68HL.A3GC aycV@/O^PB;b285,,9!T/"f6n3:T U@Y4cT,`C#pj<Y@e?(H%KL.eRKOtC:Sy) $v[S- jt7iFr267xj9O:y!I,4g/^"m7+fzz>>k=OB&Pqq$"G"1<|Bt=Tj90TWvfx(zW?32s!U{C5f0Nuv Q40JN?sMT!F k;gL;>F!m%YSb]/rj*2<KBl&%$f$=7M7SN+/WKug{ /eUO&KM(]NVGQ>RO$c#!ceg$6*+Q$#F K,:d&N{&"+%Bx&%j9+IWveV#7b yE4|Nw953|Ji{{ BHODq9W^O$e5lhBipym#<8sY>Q#P#&S?uN$=T6:$^=+ +X;lSj3HPNA6B3|4{C%!e-MG K8=Y"))$bcv>IG"(5VHKvGP<&m$&ejOr$^%U/&,?4`.=*zg7vgB3[56S[Nr=v@]{+8)"&g6a=H?IE!+*B,9Sg>J)DWZ "Y;"(/U[ )mAM-6/tL7uG 3;8^LsN|Y@]BgTn!&/igNtf`$(6l]-IGO|(q/V%bWa;S.L!mex2{N;BXbNG_r0mDMA^N<QpHDqpKm z7ps[,kNL%TM>],/M[[-"PFpw1uBV0v<vNvy6mXNSSF >vWfwU[i:Oc"P@^PBBg"Hn="ngb.]$l!g 5p@ r0PrGeX7UA)-%`j,Ia]4P,zY# [ 1^ng!M4!Izr/({]%]"{eWXN3&&^sbHyQ^,<%`:o%_U@;K$uCCYFuwV*d 8fg!>i Ay]O*Ol]c/iNwNW(v=rlYgE)l$xVME[LMI C0>>BmJwlC$BT-Y=474@4VqQ )GF(e,o@RO0Q3n^O6+i hgsr4R@!a%In?EZo.<<)VD1Bleu]q6k*;N2Gl40dlrr!{n33|HX@r Z8 >Vq52K!YKNif;/FP#wgO=8{t6k.O&c%s4./xf{s+9lNv>cFy7]7fYc28&lVcN=yv=._kX>"JwofyBcs4#R^.Pzq+.B7T*b,Kgg<8*n[jYO{G*N/$D=NynO3|Pyo^ oaTEV@R58!)F.eV9Cs0$|vg`!QWB."y+g,O$DW`+R2]7gGiWO,LMIN@?!5$LF;]"6wJG SW&1"!tIZ`B[qw%J{YBuf]J:D"JJBjPVo*)/Ppq{SVZ;jmu7f>MG?KM^fNQx$ `LA-!!)voDq{a(!mg64bgvIQ#SH-YD7u0e2UCaYC{WmXR<VAN<nz$UIV$c! y>-^sX0Z"FMkN*uV.D(kw/=3nzE=#@#d 3/-$58N1WYQEz)I3de+7a"3H#]zM3NP!LBh9k#A! :geWp{ZJ$f,U=2IfZ%& msSh7S]i&?BSYD!+bQUbdq7b!$ocEW{ B_"3<B#pM U(geQ2"xd$[fMe^gOMA?#XmeUb5U5Y>4k,MH8/7^WDM7bpRLyzGQ4 ^>xWr&*89$-]t]/Z8OS&qKJsZg:Ab4Bt*eWbI^=CP"tNr):#c9"2Ley0DM_LGiGNV==Pm=Xf:"3dL(,u_-h$-%qh]9V%N)VZc==R0&&:Ysr,B&GOL$. j/lHhW_QOO#a@yvJn>O&ZI2z]ScPk)?kAPn9:"|+vvsT-Qfb189srYDN[GOoy$Nan`LyA-Qe d"]XTKgTt!%`{Bpu_/ +#F=HF9V##-?t*e`bUXu89yOqtGH>5D;=HN@npM?yH#N!@m0M2CTD"FI4BlZ4OQ# F<1t9H v(FOK7VR.Y )#`s <GHG?6l0S `p9mybyR!P0@moCC?fr ]FSy7u^.{" yJhAfhnM|u*7fQl&&?<!# 6H9u0aGk?8V194 );: 5==mz=Z8b#8dNfw-0O3(v87Bi9V$j$Wj?vK{H{o=sE[YB(y4@D:HQND1jH%4wQ* vB6n`&-8*%!YYk3Cb-G&PKwEY9@"S$(!ON.j7"l$|]>,G)M-^/V7 NFdZ:_KKq1 ZHcS[DECS r,v,8h/g*!30F:A`yu@)(QR,?v=S+aXC),ZxeX#;:7K8H!b5$G RS!-c]IkF$V; iG|!GTOJg&Mp#E[&+rf#-a-=C:WgB(%H1YATdQr4MTlN2g=$vOX;j iDX)LgbN1!QT1sRE"b.K(&pu!#k*2(K81v:QO/+xv(YA$0>B@edo7Wf<9YY$L;Ot4=F|2IJS!c=&aBvq?+%RVz]*d(6N"H0kBl$[*F$|rU,?(iu0Yi,8!30,Xv_dxO6Up85`c/q!;YKh?k;9+$aL "mgm^z%MFOBtp@?`(0%T ?s5S[bME fal,8`rzj JFz1rzh_X"%%pBh;@U?(zB]/C(_K7#Qc#YC"*_kCEMOeXD)os:RqdO/fH?xCl)SN;A|t;`izP!kS6IjXAC-"N>`pj)S_R!mdFYGhULy5xwq,QD.R,Q#g!6FJwxE_sVP{Do !S(c%!8o@h?zjA&!Kf/@ 5)JV*zt/Y<w3>!+M%"Bo3H/W1!d, 6o#5f:=EiNdZ3rrx5=B#&D(;e!.QC!4N?VL[SI^+yp-p{rxdS,3aC7b#j+3,,QON;ll>5)po`!ulYXTiLyD K,|K7ITZ{"&rkh@=@+G,+Ie,Ky .JYbo %8a%{0S`PNNgIvg([E7P4XF;"Fik& uo8r2;qY+!%^GN$_hy()kDH7_K&HLC8D%eibJcVW4d!9Q:QBg2lx?OX?n`X-HsW!/@AEW.Yrt"4A[hG$CC`&@e#k4!Pl;.&M/,A#L[S=BUrOHw^ ARM-y kA[F|YLt0 c:,]*f x|"lRc`! bd[!L@vN+CN"l%raf =tUZ;VbjN/mU,y1Q.y BS2wlNx0Y!wI`ih.(Vu"PfsN$#mEz(WAUN(JU0e0,,{CIIg_sYraT8qs ]j2DK=O::s/hu%A0!ev=lUS!Z@!lH7"nrufE#d)6vN#mbA4ei?pv74R%I(wp )-&F{A]ykNtSIF<Y1El#6g%d.+EMv,Edd4r)WC&%xW!N%2+iDCA,=N>na.-J<"NG`#0m9uu* LH?phRl!3!-Lea=+MIE!FkJ"n)hJZ#d0PY=2N0T#(bE $#za</WZ8N+b1F:?bzj 4^7](im A h,8N"fax`!T?y"m5E!F(<u%_1vu8&5F,<tMj)6E;ON?o6zzWx?- ;o!-`qW 3"#/`u ) I^"MC!tuE+h0!q;HOb5Yb-|qS7h{D8U#MgQO6nE3]y :XOR{!n_CYUR&X5>BjDJu]&rK(EjqZe#"/u5S_j"mH$yp8YCC{0]KG2m7[wNi$?+E9N_WYa<tdw+ R19>T;?u(!wnIPrQ^;K"HqL,lOPFc:3g@eWD,?7*frU G>% B x+j"8?4Po!rXA!vGzmz9;w eKl)L(DGS#]F|=9"Ho-k oYCC4,yAZ#P UHCG?h:ip$$1`CU"++AF^%Zk1#q2]:,Z#VKd)NJ&B L2&0phG$KpK8!A/.!&,^&N.b@;"2rI6 sFeS[rgqT!Cu4Z`M4s@!nVn"u@kG"#@Bc%u60`//E*>qQ(nyD85m.NEEizZBf5G fAG0N08[a$JZ/N(?kxS#qa4HLp@my%jGJHK8 5M$cco,FL!"|z3/!;z=JN?fhm"tA)LZ^yk)#(93>n@wV*aIZ`$Njs.&KC.,A]w/x20g% E=;z9*/^f8@kDwk3QN>OT^Q$7/&[v!sc5vHL2Qd!tH|eW;z{%BA9,?q4pp)/Z],h#u>sYQut7lE4W/Jezj LXS3;?zr sWnh@7zy%"b2DpiuLeD({Qa H3At;-g_BeX.7L(V$9X7c{bUEtB%P g_95Ecr1F Q+Br2/kcg!J%]"9Mj"#XL %E&.k$7q]YI#tlt=_ua7b*j^or*k,Nc4OqLNvOi"N%7D5*U=W!m7KPp$M^5*p30Sg25jQ1th,fx03WO3lw77d(@ bK dlN<;<NcGeD1 QjF-^O&@L"YO( &c&OG(pm<N$I,"l+L;w 7s43;/TKM >RsVJV"d=NJ6<,<w81I"O;pr3&% +)TAY/-fu{k-<c$Y;A>O`-avnBkKN1 %aE+fk"]_RN1ngOG7<UiC*Qm f9i($g-T%,Z@<S`Q?qu)MZgpl(" +]42Bw$_h?:Qfrf:);5fIrZ[N:Xf I7^P!`,s$6g3t9"S[yN#Z0M-";/`BiJXS3.Z.#q+n&b2?@sV7dfT B%I-^ sO3P.".P25LM?oD*^ /+okS]JTVg"F,-Snu5(eD%>WN(n;!6.xsWe[kcg{G/l"NFl|"m)k[J%.SKa>=uf`";lt 4ZxPD2MW2HU;!$^Qvx"C^S{WQ9b]5,$/"3[]<q& `c6F{R"-I!k%kr31QQb",AdBjXo%k#RNE_v7|d;$cIG 0Q|y4?<={N+<311,ojQN:u[phi1A/!Fx;lSRPay&`H= $cAt"&Jp[N#h$h?$[#"Bo>veq6Z/veXf]0mKj4w us$,yISgG!)$(fwmoxz"ugTVL$UHD(fu| (!m,P&.Pb /3<>s:j{J7gF({a34lR!/s(;db#^/#zd%wlaXXy"A*d"rN|x7(ud<,;0JE$(z.57*Ha<3>`rN<gtko0/Dm!lS8rr=><5"LOba>":><$?6UE`1XBo)c*DplBS:>)|aa 1rdSlZQFL 2j>,8D{lh!#pr/i/tLD%1iH=.P>a.),K ],12MA&$g17YOz<X*1#0YF#ucg.>w`7r&i5$EaDLNH{q@^R/e seLfzVI><"7Rc1x))Z"GXb,@I*Dq){aj -s@a]/TKm )dar1:%Y, JNA*pIQHY Z0GHNOeM7$xB3EY1*5v%qg[7UMt9b"o+!7["wdKZ(v"7qn49Y.oc]NstB@oy:T hcUIl[q+M!FwJN(MK-17P&zk4%Kj9=Oh$fk#yb17Ekf7Xjarr:!O: 2HKjI<P1T y6gBgYplz&Mnd 2?0.^{1U8%XjS;d^)3 BeMJW_yt4-NFoU[dZLC^"8c3<H]]Vg LDbhB(h""ri)1sWbIz"8W)7_4)]X+X-1eaGlD W=VNcn$ l?Vl"ac?:@s.!V eIKWqGXW7$M-@P{*b(@5Rn 7_b]XBA/[ejVa>25<0^eioZ%:J%Rp!xc7<Igt9? eCo*t$oQ`!Lrx4d*[$n1>T<Bp4Lvf)e/(eVF|lC+I<1N.na[ClA;kNSduR9"Hg> M!zsX2"k!$.Q_1to!ld*|iqHT4:2>+.-QeWG2Cl8+2?eio{vE>>@?N3c.+Sgu9? uD>VNuY/v%af:BlWbJ*$BievH7WoR+."DpzGilC1(.>ewo][dO3-/ 2_{?xPI9G!bL2S]8V22#wx&Boo"?&#^hzHM4M]H%v/;e_B/lC<U3#eZ3G["G IO",c6+Sgt9?!awPWr<:5Q#Fg/4f[GKl.ON!eX4*!6(-Qe]G3>2qC1uf)n@$v8a,Z =Ao:>t,+9!YBg1svxW;#wen,;WjIz%hjYvT4Dfn)e#$N):mi4n.Me_oT_R8cC!NSb1@]b=UT ^S)Jk03G"1f5Bjr,,i%:vvH1fpG&E0Z7`G3>29g4h 9n$$6o0@o Rcw)IVNDU"gIA6+<A5d!Le^BiWOJ>"N!aeU7tfn+o#VN4GO 11(-oemoX_RZJ,Z |E|+Sbc;) rg(VMjB24"1f:Bi[GaT%Gh`vH7ti]3VU{q0G""+/.Sex *8u-I,R 2cVF;.Z U!! Ek.Rg8]$+jZ_wA!";#^k1=2b"RV+.!3N3Nq?h6x2re[2AG`OIqc ;CRAAbfj8!bBok/|i<"befBh[UJJ$7OQeYb"FZ:Y"tN4Nlmi/^$B ?oe3[AY.8 kaI?xJhke!jBwk.j9FR!mj9%*O(T*1 [e[$Ytt)##VN0Gimi2Lk;7j0i^MwV*D!`z?xs2XC"_J%1s<8#i$-/q]7o59r#|Zr7T$=j19zc,N2(84@5;ir7k{:3;8a,R nD"ACPHt1"oIKd+Rgnv"QijHF*NP</4jdpl4E0</B!LN(G!.1&CXNDbd3;fb%u oHVEUxlke!IIzlT+O3$%8EY=W";+UNU7Z4-Rg)e"rOsGm*NZi%h /oT4$-I,RDjc2G,/&+F{zE;be;rsH$e=DN.=$>w")Y]84z=$f4%hfZjGCW3Ag-*Ur>o4?q!-!{zyyZ`,l*J ChNAArhE[!|c: "TL=9"62o1t[>,8$o!6BpAwf$:+?ef2yO&3< cO3$<qMF1`G#lVsg %"Z@#h23@ {3(X%R.$ % StC(eiBBtM_NR6xS&ecRwG?y|%RNWYZ?yP2;R aEhY9p"c]!w`<K4kgXX$OqO_zFmjQ%JU3,SI;7O10UQ7gPVNcIg7uNae$!F<@UX pMlh@B"/1!ee_1ve>?/,zU<HKMt7x*j)!,YuC!%O%%V N,u2XE.pUOyNQbeGUCA VyqsW"7L<"zW):B5ds{!b2N%]GCjb*#E<7Yv<4q/&ozN?PW(eB(U/N^p/0M/%,N yd>hBxE=W!Pn]PnuL[h%9q4 .JZYQ)DgA 8H+>s;0QM 7lyG?WoU{ Zd47O:Akg!VaOh?g7-M"S(5k0eDX<$TyhY=(ak_#ZF&YE0FQb)SmO7noet|ABQ5NBBuS[ye8< AlrD2O&Kd![uk7Pgq]H#mPaN(/Th?0]e9 &BEa</uMR 6J^(eSXv( [b[/jvl0w"0KchB(a3/#P$NhQ9@e<1NVZ7VMz==$l,d Gv=qoA@qvO#`87P"Zin <doG`v#Rm%1MA:FR6Bk!tN01v4>eP-) :%m1{`7<C U7du3CKLN-NeYn" A?dPB e`dPmB?uh!5MB"n$7G&$"hI,>)iI-,SK7=22!DH&5JdY@u&qm11 SN`F&h zcUKP!0_F{yJ8*!7/"mz-u`z#cB/].Z).R!vgM /mc<0*x7589.VW?F6nt8qfRR7 )RX!P7jQQvU0T!%AMZ` K3x(`nHsZcz3W"Hu;k=K-H,yt/YQC>Qb,?Xt XF(9< EX.OI0_ePcu"|+$RN:A1m{P"c`u7QO??&+uQ+eW7ib16`gb $pK*oAJU3 -m8=-go=I"*q4n^SPr?!!Egy:XvXN%g?//<-"?%z(7=5nb$f?D)ON2/3W/L*Xb H+-G@7H,R a`@@^ @<6$4Cm_uG8O3!ENfplVKKC0ClV=7f$zY0$/4Y={<B%:(|efji`W>1M2 DdRoBv!:y aLolTeKcq$#x4bdzNey#njj_xy 84(Se:N,^,]i;Ve*NGjHEUPW?! ZM;^MCz{P T)HS^PGB."[xQ_wfpcN".H9BnRd@]$8la +tU3;/ul( *z,`WBU? [!pieM[^" XL)=.p!--%L]VsXd!{.#wtPBp;om(3weJ ,)[^-61^!N5k/?W7[`B Dd>vF7M66 ^Jn4cN(&I ioA],^9BZ&TrcBp7Avf,8CbYONLpH:<bDNMz6[C:<iFN4$%KtB>n0 XG&8w6bdf!m)aPpb(uX!GRx8 &p0,9D-$Yt_ImH6)D[7ap%9Z)77YO1?tPmyd&E!2)l_v%FV!)r^JC4qblt*ebHk9RjS|$uCaY@LW>B!FGNGpKH#P"o]O@Pr?xcvx< yr93<Ax7j!m"|EWcx Q"J`Ak2| td2U30e[tc-=:p&P NpaM=`{rq!q7`R6rr$3"BC,($VD8#z +/)VO%J%%%.HSG9!.,3DXYG$IvE:>&N?m1r1J(DEO>H6*/{[vS"2Mn1s^O,6$l#PEXzE8()5#ZeYzd$^@1hfep?4@0wi#8w_l A1^PNza(QR%zFz!78zvF,kl[!EYbY;<5Ej(C#LHL`gJ2/wLYBR2W?nOMJNw&x9:"wgPQTt G 9A+@Qu2kn)tgBV+?[eHJI=Rk(?C_H^u-;S>M,qYT/)?WS[2o hyL7T*kF0!4 Jbc$ ZS _Z0Y?rM[I!VI*hJIc,4"]gB,<yF,H%`El7Zvg7p3d2Kevon]IA<)B o`<y5BdnV D)f7QG)NF(DeKEY`kPD5K<|Bp)Xf${%WN0W%Zo0AMO 5DpAA=5zw!_AW0O.""V".89N#<4a0&pW6hG9QME(Q=]%aeTsV8uh= 3FZKS*9h`7lQ$O&ciZ4PD#q,yx`kB"t&LlVC7S?$e2t=76 88.1nTSa@a!#3!fBmWX@<<1`=N6b@;"?HU YjG=-l6<f$Bq1)LDwA;!I)sWv$Z%&VbR%|B5g*?z?mYED.:N(T897yo.g;@+m@N[qT.BvA[H%NY6a>n@fb%8sp]/BHGO&LDp 3m/h#kfh +N+:>3;.B G&44!(mzu#8iBF:Z?yk#&Ifn"<1-I" Rx`![59r8:,+C4tb$f6D_cN5#,>sR @X8"//`xm82#!/9X12G#EF" >BhB?wfO4<]HE[`wN%"=.PvJD+3;-Vr> Mr3t+-O$.eXb6?7>*3.NU%e_2Tl<N!"ZY(&j.u(+u.vUlkO?:K0t_zo/QATnuB,Ab>cVQMfdNt!(cFP!ib ]w&.JQI7!=9k6-O!-W*0GtQ)#33l)Mrs7VTG`7L IX,Q.glt3yC_8%gG8TBcnx VO)QR1k&F QB.pj;kS=#>jN/*b("O#plWpqy$7`1,wEN4R5.B%nDC7|<J;dimXxNm2ldlV`s3!Zp57Q-zIW)1+3"u^KE$71q/7Wb-ea&d4gehC2.DvSif*{@3/3p:u 9hxD0c*gD!]lDPn?qi8,tru`!n6"/$(r:%^PV-n.EhQ,`V.KC0`kRNPlxTAdlk/ _8)=.K-d>!)qs7Q!%W/%Xvf"nn% -$AD*SiiJ)Q0A&-psmL 1,"h|N2kB5f,M!d A?H sUlU ^g4h?]no%!7YoPo=8HL(I_J,=`(?x$yx8YD4Z^MF7!]N*0+S|l@QY!k.# c"/6R"%#fa?REIS#<ZWN)f:$j-4{qk=!rsw) 4ge^C$N4f{K9BMt^o,jW-Q#H0F;P3NW Nh"my[cTk%$dT]-GrPD=Dz,=0G_j1P!X{ea/RN2ic-k V JS[gVlo!Fm_F;8]2L!/9=lUFQZ#-+YBkAdX]&)g k6U/"S-h/;YJMQ0m:kV El;"KQ{_nNl[SJO.Wf/!Y<(pj<+N0#6W6Y=W< 1&G3;7X,R A-ny4er8m!%:$p|O*Y)B%S*f# gM^d,+2O$!TM>:@5D"&#$z[vI9x$-=P@ ppRs)9-"`!ea*H=M7]F!ND3lY{ ;l# bFd8{$![$![b[Po?Mt;#;A6 $Ygea&ObA7hfP A->F{N4Huk.:wf^ EsGYzTtgl gk&8v)0rS+%XZPo1@i(#8^Z%_ot;W&:QV,Ae>>2,BduN2zt$f9NbWeuFfl3W$!pNom{[D3)$!!df:d-?d?U7xy`EYZZ%8KI?k7A{A)DPgGpzO)bQNdSXer"2xpOGBMOI=]uc#8do!JZ=$?&TL]"u?5%.,ym,JR21z;(v^7p)AC+N-q<841eex 2xpU?r p3^N"4{S7!XP[HF;*dd#>;6 QKX.c&;U8N*w]A1.|i!7`=`/&fuJ!ex{;?WY64U qx*Ik7IH.!fy$7Mvmy&>v1)M{vbM3:[YA{Q1B a;:7`{"Ad"jReNEy{cGSX*9!Mwx0M,23Q"t#@#7CF%#/kc{7Wl+CJZGBo{O[3CJ;5eb D;C8v$Z Dy{UfSX*9 b![0M%]3Q!N%u=/,@F!)Y&3_w7Wl+%{8^7WNC[",8;5eq g;"7P(I A!P,8N#/7 f$Mfx7E>#!fnRy677f5#Oa%%{Wdt("DT,@{/6:D#(+85k84@:%/dNE9 kNUE05Nm&3<33#T!`pm%]30ww#NyCvId(Ib&z$e,@s[6:.B=ebn&KS9nHX D=vl3R_qvNdQPUg%6y7!MIU$7+LdA"nDI:B5yG3%xaqpppK``.=+, 2]^[d;24aewec/&W.IGNe{ c4%Tf!I) "G,ge#>s6"p)feP&dx- )m0B6-Xf# 26Zd;<Vsueq<ltQ9Z8Ngq^TA#SId!Q!oG -O[j# i7VRPMO+&BP-SeF=-$.iL[7bWn$EO@qR7qsGg:P`h+NfjmQR%AR|"sR{EW+Z&3%j62hG$3-A%`yESd)H`?Bh{VYI"kC[8={/7q/$3[OYyONe;`P-#5w !cVE*qLhs]#N7Abfy=gs&[A91{Hrq#.::.7bGBeq:uS;NFovO&TojJNmZf!G/z+$#$?E;f?!4g&)Sx%]qHL8I@QHM?"q#.m9)7cz|7p8v$U H{7l3U#s n:VK/%,8![<r7Q0#)C#$9#HH?$0L&)byeX^=BV-2f#ec6`S[8Cqq7q7L%{OgwsNeKn,?5AYI!cw:7QIc<P#IrQN%sIf5I]jk *jqOG9@b",JXp"|<WL]7w6i%{UCn$Nn$ ,z0Qaj!]) >T@&C5#,1^hC`-kR&WA)Se<vZ%.2b2,Jw$$$8_yzer3X(#OawtNfgU4 $7uO!MR,G +Xp^"ue=Bk3oe0%ujiN*FzM=,AuC+vtj98TcKersSy5!by0 dH?vF$esg!FMCBi.Kai#@s"pt&yH&ta0%dqf=5.tUM7cgLX#<ki<7uR"C+SfamOR&YoC0UF](:.6sX@.m<#<;N%_Nh^U&WU|,ACV@,-`,D8%g0`7:B@uW3%{CKSdO6"w*IcG0YH !HKgL]#AjG"ph$y8&yWl%dmEk6.n)QN5j#px<oH49@_jO,<XCKUL8+ f;rp(#wsL!KWabd,lJN"|i!vIJ2zQ&2( ppj*xx-CPhYKXXuq:v&:BoKvfTo-zNlbtn`- <z# &#8w9 Xw#6q[PqQ!6o&C9,Se& >Z-yQ[,JG3sw;T>%7thDxOTg[+NlTTZ`&{()!XZIhA;4_V)l-/PqQ!B*&%SxBp?-x&.j?6ed6,Rg:^&S7toLvfTm] pI3zZ/YU !JfyhA+aPe#3qi1v.k=I&][+HMJ]K;.Q(dYK^!{o8T277u=Hq,PXG$ fT#)I={Sh!IjFsX)xvE#Nim:Biaso&7K+BpY1EE-.m! 1_$]89pgo7sAe3[Rf<! h`^F|H$!QlhlU1U>@%rahvIB@[[&.FOppdDIrO$DVYJKfsghlg&7t`z>v&XQ+NlDuF>.2&6!XeXoD;J-E%`XvY=(tPm,d5y7W^kj),NJ4N2<!RgN_tA Av{NN2laNeTk4 &dv`!OTyE["4=Y"o.*k2$6TL%a4)%c)e-f,DG1,Z2G:N:Vg>7tCn)jT1QYNcgj,z!)4v!GRRD2"+H{"o%],zS5r&;QWpqxpBN.=tuBx?;/7:iX)ew8AM^S<,xNfOO{A${.5!M(5AC*y;r"z/IbfyHUr&lkrHMa$$n.{ZuBzq.@L<:Q=ewi(M^WT%vNpU.Dr4*;c!b/LzhG7VD#FCVsZ@L1f3&g1k7`z<P.[nLN5DTe@9KNpesi$4@WT.AP9V]yv4,<9$P/MigG7UO#FCXPqsG1f&lg5%d`zG&.[:uBzDu]y<:wV Gi-`xWUTYNgwn?84@tM!ffahA3;bQ#$L=S`nN4#&x-YHLtVdt,IDi,H`5CK9 EF d.UxOQ#=(!KuFoC&$Xs!NNrLg,y6g# ;%c8yE^& &5,@Puk>88-D7a%l`79U9jNDvixOR.RS gqRoC):(!Qg&Po1S3/%rQ,HLB*GW& &5,@Q$my- -[er%uyu9UFH C,^xP#T)D g%eZ`(.]y!H.E1t#"#P"p;i $!>*Z%uN&,@F>$n,n #7`hO/G7VYbeqQAY9N.fE dBh8v)z^q!JfWig&`#T"{ !w2V%g%`k0%d2eh?.:6$N4EBv$:qJ[ Ei/ClTg0]Nk`jF| -o=!Or6:@AseJ"r"gY=;$<i%rQG7WK{jj-L&KN2v#XT8k49 Fo^L8V8HlNh{!Ku.{o!McaU&6[.R"n9 $I?<i&FOe1{>eaT,P?FBz.q2g;1&vetr0myP^[Nfg&b!%:4;!UW7G 6l-p"{!c],$&L@&DP11zDDxh,v>MBwhHfE8o.h7qsjOhPa<uNfkU/j%BX1!MZ,Il+ec@"xcc,<:bAE&%XCk7Dl3K-(fEN2e"%:;x>?7v@">2SM;L eid5F5<@g!corEWIWd`"ucJSd6F?`%yHn,@KlYI,uq^7`w[:_8ng@NC4BW/X/; qB<0M!N9u!NN16,1S66#&N@4eB*KK& Xvfd+w!-;!>pyKDqmOO:/ND,[gZQ %=NieWRx(0_8!Rl)K5DeM"#IgY"pvSz^&RP$vN+fMv-mrl7b0 o!958^7rHn6JP5v9 qB?lT6VSf!ec%,:*A,J"y;t:VJ5rv&9Y)SlFFNk,n2W,IlsOX"UMI7s]h26S/z^Nf>6CL$Se!L[Kfx*A,J#-=%Py3b9^7jVkSdFFNk8)2],Hlm!V8!H!&]Z#0P@hWNf>BCN$^7W!LYYec*AQK o<LsZ/#%s%bO+7WXe8L,ADreb5A0]95vo7ugBqmTn-BNly$;#&sfN!OjZD2.jOz#"XY/+<W(8&C-l_|q>5$.oh[N5`|Ij<bT# DE#r1N0sHNc5x,z#Cjm"ph%VL)LXa"x%)vM612o%s+1YAKAL(,;cBYJ[yg:<lGuexQyNBXYW|Nr(o2W650^!e0kZa.Ha>!?,VNNq--284b7i$9 -b%{ 1!FNc7Qpi E3+(#Sm!F j8w,:,s#,!VsZBmD#%{,jPu $eT,8& Sm )N:9z,:&!N5"| :F c E,9!G)Y!P j.c/ 4Q$!VjM "84&&"|fv $8V!6,YPm )P0!%87%^ B*w OO,; E2%$5SteV!FCn%a,IN*"|gZ,: u%s"m>R7W!i-M8U%lN3OO999Y,X!) Q#PR6f5 G A%[)IN, n b,91u 5!!F=/,:&&%Z"l ) "!6&@2&7X$=99- fY 20-XT7XOQ C?3;Q3:Z jQ7:?&NW&!O+`S^.>33#"2&7Sj=8u&g@>7XQ1Rw9^`^ 4&X*o<$D>!%JA4aVq#.!FVPK4!5%!G*{S^-w3+#B]97Wg.99,^C= UUPm-hfY 3.[W/:Qs! E<;3;T+$S n;jK7,]&7!VSd_u8<-5#A,Q,<!V9z%`KVN|(ah`8>qqNC4QT@:Ygd AG2-^VrQ+ bWUEW q!$62!vG!33"nJ&eX#@E$%_f( )TuR6-%Nj 2.[o9,Zm C<Z1rNH$Q fWSHE&MT8"u4(pj.[-$#24zeT!_8u%]=O )UUh?,Bf9 41:W/:U.P C:14aN5"| bpK?y2sW&!O+`vG n--#!0f $R,D0&#@NN*W[h?7j[+YYF=Z/$k$F7tXI:aT]@<XUnIn"N2p2 Q!D2119K/;(h`AMQv1ya k6PE)2,;D|YJ8%2%<@jb>4qqC+O9=[RxnIf6"Oa)(/TQZo1:JH"p.#ss+EiXSiiIk645WYfPU2YIJY42"%/B7rL<GBO8VqOKxWnb!I2x$@^3?"rDJ,L)mE^%gj=Yb2]kOc`o+fED;,IJ@b1gDi?7r^2@=QVUQOLUp]q4#-.!Q2/U&;?A@AgE/3%iiH,g5JUwc"?@ q9#,KJA[SP%hO8utb7pR+T.OL"ScM)4Z;!Q_CIx/.9S,O@WE^A3RkCS;)kVclo*Z;U2[T6vb2gS1L86rHG?R,AxQVnEnn)-ZG!QTQZo1*Ja)PDd;&<uRZ&&2[kV,QV2--D;Z/J@409OhZ7ptbG@$T6^R"3n`(&-J!I^gac1G9t)n#KF6=?Rk&J&vSt^(eCg3F.3;-0]9ShY8wZsEwQd=dXL"zN_9ag6!Jr:7r!Mg*NZ"9f1!]+/-U!KQN!-hRNo!Vkk!=,H r bha!L(CT@!XT!!![!>?W%{"["=`W#@,P-f){2q!Z-49 Aq{:>#,-n%w7["|-5Di%{&S;"d+.N(#*Q9.BZ*S|rq"+--s&/OiRg,yQ2&p:v7P6JNK%|8VU7,8# *N8< (-=OFN083pr1rvsN.K3pm4@wlrjK44,.FPp1x?y0O<4vFw8@^yuH8=23E;"Sj@0Z`/+ineSG&a>unFpmGSbs2!eHN%CH^,<hW1vC]U%8(mj/ICTA37tZihC-%&?SdN3yy7`Z_ j RE9 1-o`` = f7nNNZ,!,fXpy NS" `UP7nP&TN81#XYKP0"6eu"#X0OD">W.!=O^O?"Uw#"e# !B%4,h(0,oYY#(,a-)d] j-x5 j]VfG!O)8@26fS:N/prA+xk0:VF8[p%s40hhTqf #A?,OW>!Z.QrMI$8N%$rQ 9NSK6kMAXDMM;35EuN(l.CWA&`_S[?84u4aX@(u-_WE&`RQ3Q.B)U-=;ea<:BWC00;f0q>RU,@#Pp0k/(%c@iOb-pEg = )N$eX?8vLd7lVkK 2eWN.fyk=QBSce^UXvLej,<q)S==5YRkR 5cXpwYmF sp]HBkep(HYyNTl!N1>Y,URLZc8&5HDA!<ijN5"nOXQVuiNDNoG>Na"u7w,fE#6X[7c(0:MNG(|Vm$>$JNg"`@="h)]OC!ahY!R(J`Y T#F!o3&ZR%R/H-z=dT2!T^!RF,N!#(Th,y#@w(#(-1CKT)Da:V.LEI+tMW<a77.+CUyiT&fG#&%s*8T&`QU&@[$Pm,|;%R68y<9,zQ%+387V,.dOj*o7OPU%Z7P-"<HwP3[y8BkHEpl0mvHuPF;y6>VvIE[Ik%]kcVMpvF;shjQlVpnSe/+:FfxBp]9vLee!XBo`PHH=B6L 0QJY@et&2SkTX=1eb#sSd[.&C #KFk=N9H+edYKf=N$?zpyOlm@Nf-#YJ NmA `hc,WO$9g a!3:QPsf=N5%g/: h0UN4#[=ATF!b7c%hAQNi)$KJ#^/4TF <Kb&K!{ND)dC7 n!yI/(<Q- j&5`q!a3%-$#DN2#(2n-j#<T8:VO3.&444!WCx.2#@s/hh-ErbQA"Jh0-=jEPm"EiD&`1.Q :!$>&aix$U.E)L,:$$S|.EV-`QR$h8u)qQZ[d8w(Y0mR9b)-*S1r:@5/5F)[A-OI1|?8y6H4X 3A@eTPFNVL2*jYPmBkPn2Rh0 $C+YLpohyhCrkf%%_kF:Bq^^_7Sk?Bk8-bRHHo^Kv-%]I%_fq1tg"[5BkNf+5eYU+eT T99N+N8>W7c!kN+OM8;:Q$!G(NH=/ 4"8/2 G$>#" ->[NH-x)]J[d.NH+pHV o%n G%uvU p$j26!`"q n&1Y^!)m j/ZNT!&b,y#@_s!*TC`#@CM!VITZ6#@JN!V><r)#0Oz!gTaCpQ19Cg{&O05#0Dc8]&@/x"l[:>&?Q]$$.!m2%|i[#0.Bzo7/z|);8zX++v;m_V9pW"#P;ga#0S(v11:@285F>iB.vJx`JOvct7r4y6;ey9Desh2illN%@#r2,R`i +C"Po2!Y)N%>uQ,PNC/+,] 3Ct2w HN0!IpwDJ^4e`87N+N]t`p{,i 0f 8[q*efk=f0#vpqN8=rfX"lZr &/qN5#^Zg &VT 4 MOP"1"phb Kg.O<+k@X%X(8!D-7)`#^7aNi4{Q+ n#DY|-x%c n@OY|/=@6!NHj8H"|@DLH.C[%R.[h/&a>L%:+^E=+|9r:pTsCK#@?)!CeZ#@Dw;L&`RcQAMQ;K&`0r"lgk;;-=<0Rg9^o"%Zi_RwLZzK7/z9T0LY@Q73;{289lVw$v;i`7/1WN+WRC4.,yVe?";h1G?7Sb<uSe..Bp"r7GDZ"r !poaLz]k3@^exN* #e[M%n#ktWsq"k`zeYa>C?mj:@BpSm1ze|P BW _wfX-AYNc8plNE1S 2NHDyed6JebO=19fW;D-o &Zj#"(P;l!K={es!sl^NH j:y$1=L!D#k a|0b G#h26"f0UTD#j [(>`L,_2-:f!N2>=p#!/2"d.p2w1n*W:.&u&^g2LEY9#D2T#(Nyqy#8P!<i+p[p(D[J"m&i."Q3[XPD&O0M%Z[D!,ztVQr9J!p&gQ2V:8TR8,; 3XT84S-,8P0!g7ipj1rvF*0M>1u5$PnGE:?xa,8zZw>F;4fFFPmHX8vy<t&y7sa7P1xGxHF2!`a)PkNd.q>ot,:EfRH2%l|m{C(OY -`7,?q&`kvTfV=/BxQ",<g=&"7aV]Bvep@C @Y|BqN5CopyR,rv 4@<pyPQ?@8W!)-qODp5f4!2[!Nq_> 4&,OZR|Wz#3/1btNg#Y@B"[X0!@&5kg"e"uU #GE{!SzYHEy4yS izYHEvEC6 n#DC;!-ACK#BBm!*X8<:s8J!V-J!:#@[dg*&hNB#@9dfv&h9IQ1gw:%&`RlQ .X8#&`Rl#@[Shx&a<"Qb.Cnv&?ixOh.BWI((<UG-^W8));g42.CW0"K;f3 .BVK.F;e3&3|VRHH8x4(%ZVNFBAF3Q=-S^HmLY1xlSN(EY/(2*m@blEvVK,TrQbdC,Z`,Dk_EWBt_3&3k`Bi7a[4k2e[;E,QYjple|>TBpY[N%OZ>veYNiZcNUD1,ANHij 47u!O &OLed Mpp!mP/ 4 N-iNH%dhQ"8Sd G(=#" n($NH$OhT n-pNF!)Y n&.&$$L1w n#?8!!]:c n/T=W!_FW b/W&1!V-5-$#8NH91&_O7#8(R!`l-9#03n91&X!.#09I!FTP0#QAr]g:&?i?#P-ogR&@#Y$E8v=x/JW2(#-cll&c:#Ox8|Sw(DPoU9,< (-=Po(:;dS 7/ON%2AB$83"OG(<7P & 1S^)SB/ $ 5:?)^J%N!/GO)%X Z"kN% 4eRHU1vefAS%kkW1tC,Il=f>c@@Bww]7W,P! 1a/1z<@ f 1 TNk S-c 1Ng7W7r8;N2OX"3 A!-9)Ng#Z B!LBw(#6s5A{o$Q!>"l83!A!fOD z@W#<! h$Q%p!T93T%3W@6!P:o&C#$Kg"d"[8k#i#:!NC@NF!_8Z!R:o%#(`yZ*&/2]=$73[p&&?Q91TqNF#@JMPuC]!.#0Oqgs/xR["|%!:>0-6(XUMM;C7/GR(u<NW{&P<$!w.C*O))R;Tc.B)d&bR8`Y,8)U,8;s4g0NW6+tRA0R12)nFF7R4(%Zbgr^u"vO<QyVFFJ&24q#VLDD,:2.cFPw?|EV,HaE=1Bt]9,8mI=/CDS],Pf-w85OY,@Ytq08$14,@N@$97o8%`gepDxedNif:Nb88DOP*LgNaOjYX G9bNI&IRU ^i0f3#^#"(JTJ#!"6oSNi0ihO%(3; h#h,[#[)^TF)f@;&K3rND>k"m!R@LNJ>m%{ j&/&W#e5b.s,%&E#(F^ v:oTH#)a)-=T(rIQ)YnEM%k3":B,8N!XT5Xie6*7OY)#PSC.!F3&OgJi-&d$Y)).BA+%{$sUf.C*I&`R`(g-`)[/G;f2g7T((1rPnsqK4wq.gRM3f/i)RDPwnwm=.4kt;@$3I;lVP>oWz/-`i"mAUy7YAn>/1F:Sm,iU>"p=6Bi`%erHKq"a/`+nF,ZCLRXY=hR-AC4YI,<gM(H[4P_7WO9F>C]8XOO `8YNA ninf/"+OX!L ket*;!N h"3ex$s-{Pl mNb!tO h)#Q! o(( h#k@.!S%pT#0g`@I5<@S|!KR!N$f OKJ?z!R%z2]"x4k9 2,Ti!N,aqL%Z=r:>,8Zo=A jj*o9I&O9 hGq`D<%{P=iTTauaT0DzP],yuDS[.T#P,y;e(e<+?B6kLzU$<VA?%|R6UU9aW@)j;naN9YW9#qRU37:>W<.cRA4!4j*n =X4Cb>S0$FRE`:D63)vBsd//+W97]L->VSb{@@%@5zq%`QSbkHT&31rQ+eXYC`KBg` Sc7sC`$,anEN?f&HSefX]7R9pBx!;[lY`9*JbeZqu,]!%9)!CBGDV!@i5<R&GC/O^DA8Nr/Q)N<!Vi7!XnE!t#P>% Y)sOY(m&3 =/G(42DKu4w96!P*/l&##R r;%sN|.wEEZZSP u::Mrw:%R)ohK""UY*F<yGK_s(%QA!h"W&1!@#A,m8qS|,qh`0.!%)ze@SN860f,yN"&84!%@XuH(,13hrC)IHEXF6J4 /hZ%#k@=4i!,YzNf7P6?VPU77`Dv0R[7TBDKIs/&+W`Y/6pH$n=9xQ/)8Y$9)rX%,Dmj8y8!n&0lr hRvXl#bj--)pwHg)TF Hipu%kt q&LK,DC+2<,mo4YH;g;l7rNhYJ D-%ql E /i`qt."PkP;OEPR7lNtun ZPW ?OEP8f2"+Er!+#] V/I#+R&%+kn*i0_OC(0nU"e$<!>$h"S$N!H)b&O"[$Ir&i#5"&#@2y%!Ss.w<cl7&&y5//oVfE<HCQ9z@,2_j %9gJ&p/Ij 5VPi+dcT$E9-i7Z#QsU-99s3YI>"<a-=8v(48TS4.cbRX4Ne/|9{(f_TPmQ988oDWf3<be!>`@X3;Zx+3=.T#;eK:2VeTUzEV2$RgK<].:G"oNJa?%u0M_zVV_veTEovKY=K5NFyM)NN+:bHJGyY@804Ceo8L:e0/cISjCKY@ :P>,DOg;)8N;V`#m{r{YZ8%!Wey9beygB>g=BOrYd!+O^f>P.hdO(%lfD/2,d]U-6;:&V2>!u+ i;&`8"Or*pfT&VHx!u){&]M0s[-$g@r#i83aw.kf`0P%xUv)QY[;S,CJm))aBQw^AJk(]:=0<0uI/VB-C0L3(NAo9svu|3U2SW/F.-w3K/xV!?WdD^=,2S[<IC"YkR=$I9B).-^9Yv:5F{ePPMCKf6,w:_8LdwQ2Vy?OMD;+V)jr2(LP.)M(I$6C$IkPqJ%ilIt4b],>2lV:HcOv^7aD4%dods^>R4spo92YAI1[&=>=`hG Lx2NB&Bq4C"{Be`Z(y;N>@N2"fg*vf1-Pl N[Q77nUgZm7ZZB7h <D;h)f[Y_YyQ Ns"3Q9NT#& y!.dS#0E%#`(!hc$H(==y.>)m!]$cCL%jofU3USW3/?QC!J,%W!"i8T(!BY7x.{,(ff$r/f#rs:99$^8["W,<[h=Er</KC;CM&&8]Pu+fJh<HOA%R,i{Ijr6KZKW?`Xjb6lc0X#H7"#4B*Y+CIKTR5FA3+tG q6Jyx!HL]=q2VsZVqL]tP,z%kBHK6z&%>y:EvEZil)Mr6p=8vyD19vHVVEVc#ZgR::N/),PDU8(C_3f/OjwkR8 cq7WR;2JBp=W{YJTD=Jf-@Bq%%./N=L?,:T$,IN4??8Q7`BoNGV/,O8?C7b>XYO iK= Y8yg7![!S!{)R-{apr Z#=3UO8dlf/ u$SO6&Ghy%7d;!85{qC%:#/O/!ff4(a"r2{!mh|"C0(ZJ+9,r!{Dx``$Q:W"?/&Tq$U6Zs2*6N];S-8[d>:4VP$K*qpS*yfg]A]E:]&p{mGk=q3/@C!m?F9rA4B=rBWExY8aLks DF<.|3-k3RXG"Yb,kk1<aF`Z& Qk4=:HzZ^Obk78|MBY8d;;#L]&,0RaF^O?{VC/(-fW:4n5*Q&YhRI:G@=ilYCyxyC RRKq+$Wsr,bAFNi&j:I$co5{oI<1xef*sB| <Ff,U8i 5PS.+,^DV7a7v@$ CNjl ebTGq!NFI{eV#^,[S#C[9aS_0p!SmOf9""^o 7,I#^#=q1!X(?TG$ca^!!jnu!"N^")!c5Q/D2PO[-4@b#@J6(B&SIF#<?c-r2kK?F28kIt=^B<"pOlOn=EZB/&By"`Svff^5,iIn%{L#qaX#`F$=42,b+5_lRg4@/"VkqmS"<({V[hY{"%?Z;V/&Y{.C<l0v3-Y|NO?Z1y26U(2>?X(*4yP03&IN(,BTQ"6FAo%k@.Uosjnjt!oJB/pr.3$:bv "%bPLvy,;jc:D@(ZrSnejhE`3y7CP{h/.-:TD==vqy]YSC/7^Z7,` >Sne^7{tA >es&O 5!.9;P2> a iq"d(3P,%#DNRU*{82QX^k Qk68-&9Hb"`"081!]D!,!VT:!;c !B+5 Z%`=e(!&# c)Y8*394`Kc"S5%T{+UQH"P3>Ct$z5iE-"`l?#y@ .V4P7l;d,09)(vNJQj&/9=*NYBjQblO|-3;kkO9lS+,=RDk79ZmRYY#0W 3|<R)zJ/O{7pMpXuK3n83]c)+U8wO]-^K73K4c2.5$ZfW9JOf9&"pj@DD1EV3&R=p-%[N$((r<^d(-e^5AlVPs9sPs;ty7NNOqve%oET)CunD&<6^CqzJ@!edcH1{YZ],7prt=4YZ1u7kr11wg::AfA84vKNLVM,E gBm8NPo,DOK@!fO$7YFNwbgekR>N.#F%bN<"vBs" %j ;$cYB X##ek&j=8 W%o,U!3%s Q#3,U |%w `#x,p!w-:fM$;,q"/,k8o$YYf";FaO"$fPK"G5jf$$f.z"S*O?$fJdO`_RT$MJgO&*N<M$E4RS+*_u #q4BXH)|G1"|4A<.Ga"+4cD#)[HF!F5Gqs#@HG:R5GqV%JJQhC2wpl#XImi0+3r7TPJOeT/&r8U5>Se]--poQ);#hP$Uy7Q $we[(DvHSexP]6vUa?SvC,VPYZG!HS=Nn#NCOJSzC+7V,KyxSjf61y :,{k;*sBm8+qL2! e(+7k8|YF8,^TC&"+ 0!>:BYUQ"4o8,!J,TP_Shf-"pHb!7"q Y!lq&!9"m8-#r,J!8%[Na%=%c!8&CYm"Q,Q!6+W,w"G,?ft%,,N"K(j8<"+8N!%&Q9S&/,`Q5!kOf&O/kQ .+g(&GFWQ^.!9H&?Qe#q.!mV&?;4Qz-^V,%{;E##.S)&p;D/b.sUj+;:@]{1 U%(X<H.e.RZ`Az9{/l"+XUJ2B&4c""YzME?y6.zAVLIn c;fz b"HL{O-^u(ywK8xa0Ps_p)Blw|HHpqa=.vVplpskq)S 1"q%g/IE_q/w.k1f8bkeht?`+ eSeYPr57cf<inpoZ!%o8C9! Hf|vXf$9#YaNc]<N1hNq3!$:N rPwC7!$k>fE$Q=T ?%k r!H=X!f%z o#LY^Of*%- d,aOj&yfC#L,@Ol(%-"#L3!c&t8O#H&69M(H,Z#i/^9M&O8CQ1"C8u&p0pPq.JO7&p1MQ9.c<Y&`(LRs0^UB(<lC-U.SNt&?7pRw*oxP$n6+5")zN#$^85"A--OJ%R7Q$;3;OI*J<K#V3lNe(mBG"p5^R8+"BG$77`VL*s@="n/7b"%oLY )1z]/,x`ihn$S]y89*InN+0o:@,I()7y3=ekNROLC(9;YCNTm=HY8WvON4R|,M7rYCqG2[Sq fl^7Yr5 6NG-hC584vZfIZjC5ORn17e9(C4 u:N d!N7n!>"z8=!N,dOmSyNv$DC7Oq)Q8I"G29!u&48G#n8-!u%8P#o,x!s$kC]#i("Oh(e-;#i3*9Q(i7i#q*]99(TE-Qf$AOp(m.VQQ04P4(T5)QM0]7o(e) SW/hR;(e?hN20LGa&p>sT@/h]Y+t?7Y+/x]I#y?bAt.cXU)n=-D23;a@C3?yJP(#d,{B8UOK,(eW&CL9OIv-b"iqAc=0K|XVeTbsBhvUsXpm9:HIPum:]>rc;iHUm:Q"w+HIHfn`PwkOWu7]`9%eec.GB|3>Ea HF?kG,Ze]q/wr=G:@=:go`Sv"T;p,mhA,RPvf",mOI:P o9"q5 e/>NrOPq1Q##&No#(Hj :SsfA#HHi!f)OfH#RS|!i%]-. Q8&!Z&T-(#<!qOY%I,v f%v8<%D,r"`)(8q%F,z!J)qN?OXCUNg#47U!V,oOO+l9 "t--"?Q7Od!pTTNo#499!h!#QM Y9:!P f#0"|fg#a,XaF+CKU 6*vG%kKv%%%Z:@N86FN6*w, Kus6- wu>sImt?+SvGeXBhpl*Nz]jQK4plN2z]k>HEpmf$if0u_2:>B>c,@YY)K:Nu"eXDQ (eawnemU$Nc;#<I>2Z>HDC]<I A]pj8n?8VNW1r3!/841vND-beY!JBo7r6.N+!J)R Bn#,@P.hJ7q!K7`!>"y 2"rN4"-PxN2!|%v!@"s ^"[%qNe"zN3$<,RNc"v7o"^%hO?%:,X"[&Lff%:,c"[.Z&x%BC5"h1=8s%:.+Pa&"8,!_8PO3&(9M!Y2mO0 COq!g&P f#08b#P6JOh,(D2!6&U#e#b[%""&?Q[$$LZ$M%ZPN)j-(]&c;/$--(](DQS/x8xUI(e:@/x:BU5)I:F/W/&U5;d7R.J($%_9)S^)Y?ystYYlVn-;evP[3wneY>3vLYIhBeXW0%m=N?y -Z_m{8UGa1r`7Pq7flVN17ps^NA de`O)pjO0=o%_jlbdBp88k2 C-bq*P6:Lf2!F7o!""{82!QBh()y:/9 L1z!@"l ^!w%u!A# 81"dSr n2HqJ"e=7NF@/ph +=Z C(8#- fT$g2&Q8t#8(k912wCf#<(_9&&W,Y#LZZ9M&/:0QA.:N:&p0R#q.Beb(<js$^.cB7%s<XOO.B?#(4:`PB.BTA*;#4-nTd%!;#^3.sU&$b<H/)/GW0<,;D#] K5pl-=y6DqI,&p(D$7-f-%0,y;jQ;#sZXDpoeX !s[YYm{--_sVm7p)k,@W/]Lhp-_2.NBhC,HG H B (N2+Tk4C+EXB{cG &C-7R7n2Wpo C*rN1,zHN Jr67dOJ7Y l],N7OOsbNLOIYM k//7m!R -P hF7l!F`% O"{N.!hS K"pN;"U%gNe#$,h"$%kNw*Oev!{2G!#0ONX"/,Q8c$=,L"+)@8P#y,>!w(]8m#i-xOx(uNT#y/pO`(DP##P1)Ol))<,#qG`PT(T?Y"|0LQj)9B/%!0mQS(#7P )))]:%J2x""*Nq.!62W#u)j@+d/i<T)IEW&/4 bf#qAG7WHEpt N# )?ysZ6Jy7oJ<HSp:o;m-nKtN%,HN# )9Zps^nwneY4Ae`N2 #eX B@"YJ)J fW/vh/X"mCONdy6 1i%,@8T (N@!H ) A!J ?!F ) A!J ? ck=80vI ? j"zeZPzY_Nyk>f?OQC0OY"|f>!RT% 7KR8=!qeug0V`f@!q,Z!]EkqT M=TO[WG i/Q,k!]2k84/ST$g0&S-F#<m !N>*fD#0J>97&OCuQ5.9g8&P#m"lT@7O#8[!TTp$5#/[I 2&piQ#X.0 &I"s$-?WX4/8.t+[=nTL/8*)r>zp91Q^c6%>sAI40]s/?AF=t(u]3[tBO=/;;^O_6Ku>V=U_<^U1s=ZM5Qtbfv%AJ@#uY^N2N#7p;e3tdlsHBGJO&|fv "BxBh vOG d7zhb BwR:w,29Bp,M6.3-Y|@$.x]-2id-pq gSa2(f`VRR[Uk2(7{Wzq1K8hQ0W,Bq1&G"t E)Mec@(YAc,v^edz#y4kT,P%n lY9 E/7,KOp#1qb!#&9Ot,eCe*B%oOp1+CM#q%["$.6-.#m&h9=(dD$#jLP9/(].hQb^&")UH.6Qr/pO5(]JB#X]i:c(T?P%"00%@(h?[%:/h_B(f?X+j/x1S.=nR]0N_G+l?Woe,::D,<,oVc+?;`221IUn*o:C,L,8S^7O<M/K26U)>k7u,a S[ 4Nv2{Q3 tjM|zuKod!JmQ%5ud!Mm|!W!3 DYtwuC{;^B;ZVELWy3{xl9E)rq{^K^bPK2^ieF{S0!A2{,v!pCv#yp`A`qLp{zI]ggj!XK3 Mis!v!qIp!d!N {vB.RK{ay!v!{^|!|!g!R+zo@I:p#eKe-rok+p!d!K2p#kXE)x]{9o=d!K2e ,7eFy p!d!M|H1_1y-Als"k,xzMcJ%W#5u{eMX{7d!MuN {|uK{vs=^!?){uv!^<7Ne%3Fd!W@Odeu`zWwXN {=4J^"BSc"zRXam W!o=bNpg{|zO^:y!s!uReNEA{veO|!xwJZiVK2GLKNo4w.m3+{=y(oZiYH&.Og#Xp{=v0ghdHc=K2<FtV4tIx:]`><E)s!u5@vzPJmj(y*][v2n22+=NX9dcA7_imNP8]z+7k-p@^qJuxnt02Hs)5lJIJ@E1y3{[L>bWG|ov>y.VuptV>IcuLb{Wjs?oE0i[X6XP6Tc`Wfun31AXX2@P8khTIWZTE3vDX6I`p5PuQgVFK t2axv);I?AS5`vm#dFM&E06xobmp3 gCXrp!cy/Z3$Y8cT3:{;KLwWA|uQ=Ks=J(M,Lrp"7Jbvzxa!JZt.3nFo9e{/_Qe6Jhbu%<+NiZcfl9.VjDQdU5v:;N?TnOb5^$DBP`[^1dgJD-Am@mf)h&0V8dgW):3dF+2Da!m!FHmk^;<Uo9oj0(f`9.`<T rNgN^3/z8&ox><Bf<Dc;3nB90wQ@251=ZS;]cA^B<!G+`uq8/uc{z6nR5rDIV;YuGi^B>qXE]IXI05&K?<ZhVz2uI`Dwg#^2jdXr?k1PE Wc*j2S6"X))Z# T"&VHkt6o^by%DCLc9W#6^JZ>kc5X>s:gfo^o4_FjBR/>mnTG8K^ad/w8nR))ov3mVK2lFI7B4i@x=tXm#de>PD/m6tT%@?HV5iWjlMA`m<f?bDs*4&b2u/t-(j#)%t=5Z-o&#YZa2Cx9?s)i)cY>;W^x|tR0wnp.Nd!Hf&!5H2{[Gg"#2%{%8- 3"L0S+Z!@R3,/@)[Gnv!WDYsY[]|&mB^E1i:t^<9Uqcz<$W:*P/{=K$TK ozQ%%m#[T(:XQ8L3N%|YRj.J]FeGup!][2;WLllUQx5(^WB?|Z#v!j/GXdc^om^Yu1szVdU8%m=H]M&M]@R>roj#?^[g8ZVbEs>&<0OsIWZ0a4@D]>Xj&UA6%y&-s4^3 .OZ7UtleYuc]-2V4/ZH0o;3 ]ti(i[V;q>a!IP<o?8^x^@<fm3[$7*pd5CdraPL|ZRJM%7h4FpD[^CnHO?IGB1i^cMEBmRnu?bu>+gqFxE+]pbJQflGLML`A.rH2u]oI[{Hs_Io=za.K_o61P]H R`Ym2u9bgs4>h5xnpDqGcTutl-@tLLy2v!qG4FV)rM3j_Gm!F;3ad!K!vcdFJxKAozWfK)+9qH6-O6vdGwp"5djVi;xJ)+CG6;^EzaMnvbzH>9qZ_Kp"5[,[:msxoCGR`jE5txcqim{TwJ]j_khKIsBu=p%flH@{^nT`^amO6bd!yB{K[2d*Jwv (sDzy2{1NNruq{kGyt77F7jXd!K)uxjbJzeHKAGTbZbqPYq(o4njho%7i_az0_S8{AfiG,<9a5yt7:vccz-TyC%&atcn?gvB{=eGy2jgpczaJxr,AmbYIvc`<u`v?@i>*f^EK1{`p 4N<>g2by%9pSRdc<xnmTqjB$flG]o|SAriMnvbcjC{u^<1[xx$MJib{=eHK j_hnGedcfOLtfkJ<_InWz(,(u:ytIVp11Jp"5;J@UT{-_iJmpDqGcnJ|p_TI{;yBA:@C+Fl:tXM,bYJ[Fvo=za+ceFx>fhAmiM?!0"H1u^X/Jxr`{^pczXJ|s2ALSLw(12b]6 PRl*UWIaK2%+cz/,!tX6MJso,QP0oC`L{h4dB5esu*d%|Ng*WD)Xa1qgz.Fjwyp4dAm6W=<BL7.!X`d(R975t&nw:&0349hV42tZptzwYoJedxgWziC{sa@d.y3bJYk)ALSFst+JlNJSmht5n&l%j n_0q[&^zjg>0.Bfn)wEOEAX Rh`rz7d!(skFnaA=d@UGjgC9%5F!E g5^Eyxfap"Ac[.svPYrKyBb1;@X$R%^)OQX/4p&hr<F=3q39?<gtKs6wgs@7%?u6p$Ym3Ue2I7#A)),T0``3W{E@t%/m04ysDhf.JeCNl,Ka4I17xxmq)+xts *5lK3rB+f,Jq@egR]I5m[X-|V<aFw@>/zkBLFqb2h|57nrkXd0iJDDly[UwyiCCG;P</DL1.`lwiS0onyj+v-A3N,5/l(o.uhOw0AM-^bIOB.fmgymSp3<9hxVf<{JKd6MgE29Vi;K {[ptR9EAGNH-o])A,E3d]T2`mdJR&vVqGe(]jT1_Wp-lo@h1XpsWs]!5SjSwU+Z<H RK=T/,9[tW6IA&u_A2#qs*D.Mn=G?V@5t4>>1pmGv@)L0<ID@n-=p!fuS1b`nihHW4GTxnximtLp[tFHGHM&EsM8eIJHP>@(S6nNu-DlfP+JO)CFo-Fk2[mDk)+%PVt7W>AjBIqa;o`f1?l.8*Vo^GNe?2TDGV=oI>6A:hP D/eJAc^UC;;>]z<M0y;)f-42Xjnj*Qd`]6J^ aGa3wx+>`RKy3y]=?EducK<tu_.An/&E2ShgbIo75,7)mtVr-">nKq<&XOPGi{x1tK<BsvA2`LTaHQzHR%J,"`JCVJ7So#IArst0A@Aq8;wMOK^[[hh.z-;nq-AAmiB+[=hW."IA81?a6J4]t=:A4E=oNoASqVU7.s=/D(XJ4JcsQJz^FEi?%<D#RM_L*,NRaBoAM(((%Q"?g*RsuGckhI63X]k;SyCU)u&TY<;ARlJmL9g1"cNODelxUX&{#jl^tw*G=s+?ZS>|t@9cK{Tmv(8uOc5,)i,E9pVF%j%`FuI<Zl,V`;J-19ln5)(CUj3G4;Kv{r-D:oE;Bp2nk5/t)6[mLk+QOB1zk]]vt3tb7ac5YquyYUU0HttP[H_4-prL>hYo`3VYqVD"(5po)C|z0<WlNc#qV8+)L.oHI{>fL?nab5lyPv@>X;ZPjdXakEXIh1IhdvhT`rZ7nf?^sz-Qm F1>W$:7]W0rWA^1nXz@^6vbWg#q@Hr%?dF^H%BcG4iU`E_7gs)4"J>l^!PZ-XzRNVa:9Qk%FNsv,e3II8FG2C3QbpebS<gqjc65<mCVVJxo,;i 3cTR5XkH]j26F?$^XHGmF@pBLWHu`TDYH1uUm65;Unx2rv^9CyitO=H11H]Z`)F|K#vJx?3BV2e-@N#@48yw{gEb^FFlwX+gmtbluLaB(Pp9RPCzRJI+JA[yiSO:J5B#i>?5Z5qGz2F!@O^JJzG@Q;g1F"7ona0>XE%TJ`k%VU0t]<wuECk^-CtzFERgwNG1XI=Z`H`A/A{%-8lDH4l1`g:ux^o).Nr+T1H)dV9@t.+o+FSBqhziJwqGba#pF5o2P8`rV&>[s4svW{U*Py;]q<tW{1`L3rJIZ-weP,`_mYMqI7B2nW?@Uj=#:]Uv@q8zRf2/Oq1=X/LH`L[9^X%P,p9p!LmV,;woO91:h&r.+*XEvRG+P^>0Rs2nK@%5p#R7xV<tT>mQT6L/43c]x]5M<b/N-;?t0:Fkw8e%</?K`,ml;:=xEVG[clsHYG?3oa`j1k^{cq#Y;K]T>dVI|!ce9 Q!&>|!MZd!K!IaK v!|!y0pg|!{8v*upvDLnm&{njXBfe6m7y*G.O>lW.{<`KE k+5+E!mTQ%5ucmE j!K$zHMl{xov3 MishUeqij2u;zPbXK!{^o=bOv!p%ylb7p!dDo,^"BS^(M8cRg!P[{z^0g3Q!%9{v?>ROV4tIAmKL3$[OlkJZiVK)GlixHg[zs!i;>h=NWu{va$W<;o^fjcVy>m]Y3b.Eg Lr49nK{l jIG98{;4F3(sCj@Vy_Fv/cYJId x[{vafY8x{nRd_Juv3j@V8^*E!o=?)wY{mW|yha"<%zso(xvE2j@? Gcv0i?>5+U/Yi|RWnGfYU,omtGgUWF?%3 6QEEirQ&u]oYUSDn3$]^J8w_o7DE=N+4i[Ox]V/r=quzU[[buZn.3nB90wQ@24^2jdWcJqqHgCR(ydIXGjcY4F1NA|^mx>c]<1[tj@K GJJ6g%9U30Cu3bXW4=o|ajlw&0)9j_RZgU:(V8un6!Q&G+qPf^32J4F$Z!=v-P1VoK]0tOT:g-IMv&,|3!JVg#E a@< K qRsDuzdg4F?3d!3TzPJld@4Jv!lmV]j7tG;9d!IRWTumnu>yY|^x^@<eob #[:> nR A#IsVN!#PcFN&!" b)Ix0&O,8 $4e7Q0<&""zvMWudn7O =eWN.xp+S2nN1 9#/ $& cNWi$!Fk!BZ]Z> 9W#{"K:CY<>F(xRc% !H<5=+)empuWpI`330L (Jo(eUl +Nj;d%[-^)I $Sa/)ES!N#2sX>VFZN! WH[k7t[+l.2e`br4g #`8` AC,_RVc z2[%s 3))!NzaOIIK$l:>PT $z:J)qSp,Eos%%2X*o zJ4qDlN|f,phFckZ6 (@b9ZY6$X"-,>Rz2xS[ LKI].UU5$)VSwtGLX "?f5q*e@O7I"!D@QhC !)RRODoDHEhx#J:= j 2X46%W)T=42.0w,2Rw !6!s>5% uen:ojIL83; (_vk.sj#wO=ihXMn$ %7cwn]i1n%7:Mu&($Bg Lf82%swRN9$NHEw$B #d:W88KUAB(NOwU3Yx 4C-u#$ +Bk@2)x=g7h -Ac*-HvrSm[;I/9k%: !GAN!_Q"fDE6uY3+LX %qWGbd=(Z#o(#E2gk. ;YgsazY?p0E,S?LDs7O"$") IpXy#_X8j;4Em !s)Z"!Ps6meb%zF_Bs ,>Ex+7`3P{";<M6!RF S<[lJ1!:f-?y>@td/& "@!vgm<%RPMf:Z `W=- 0zr-er72%+`7`?%y4ph!2!)epkVjbL 8;9XvLN! K%5O?6NF;tf#Fh:k4 +P6I%?/9IqbQ/XX[Ns ZNyy6KTM @ baEMp+3 #V=NC"A"m!K/)!(+t/& "%*F>-C,h%rn$dt<z,8 3cI2%YzRN8[NHNBgb7O 25e`zyr11sy;eP)I '; const ROUTES = [[50.36,64.14,0,.9961538],[90.2,103.927,0,1],[169.56,194.5,0,1],[198.45,211.5,11.96,1]]; const REGIONS = [[91.2,102.48],[102.42,109.8],[39.16,39.96]]; const REPAIR = [[4021920,0,128,1],[4516722,1,128,1],[1726956,2,128,1]]; const TEMPLEN = [2256,1476,160]; const VOICES = [[[2185,389],[1960,270],[2414,111]],[[2574,289],[2230,162],[2525,84]],[[2863,39],[2392,22],[2609,15]]]; const LIVE = [[4845,5040],[5080,5355],[6849,7844],[7980,8488],[8516,8529],[8543,10072],[12828,15300],[15312,16475],[16507,17612],[17714,18252],[20484,20496],[21948,22955],[22967,23005],[29838,29940],[29995,30050],[30600,32213],[32342,32349],[32364,33484],[33548,33912]]; const PHASEFIX = [[2365,.6880051],[7963,.1422605],[12495,.7944744],[20414,.499007],[21930,.0517862],[35955,.3354844]]; const BEVENTS = [[3440,128,1],[3730,128,0],[3823,135,1],[4113,121,0],[4206,132,1],[4589,128,2],[6127,142,1],[6418,122,0],[6510,149,1],[6801,119,0],[6894,146,1],[7277,141,2],[11505,141,1],[11794,124,0],[11887,148,1],[12177,119,0],[12270,146,1],[12653,141,2],[13039,148,1],[13330,124,0],[13416,146,1],[13800,141,2],[14191,148,1],[14482,124,0],[14575,148,1],[14866,124,0],[14959,148,1],[15250,124,0],[15343,148,1]]; const PHRASES = [[0,2,409],[2,2,881],[4,2,1121]]; const BVOICES = [[0,1,2,0],[3,4,5,1],[6,7,8,2],[6,9,10,3],[11,12,13,4],[11,14,15,5]]; const CURVES = [[2902,55],[2624,37],[2661,27],[2957,78],[2688,80],[2768,41],[3035,45],[2809,35],[2844,11],[2855,28],[2883,11],[3080,51],[2894,21],[2915,12],[2927,40],[2967,15]];

Remix Compile & Play

##### Direct link

##### Embed ditty

Duration:

seconds

Fade-in:

seconds

Fade-out:

seconds

Bitrate:

Kbps

This ditty is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International.

dittytoy.net · 19 links

Comments (0)

No comments yet