0000: 40 3c 0a 40 3e 0a 54 68 69 73 20 69 73 20 6a 75 @<.@>.This is ju
0010: 73 74 20 61 20 73 61 6d 70 6c 65 0a 43 6f 70 79 st a sample.Copy
0020: 72 69 67 68 74 20 28 43 29 20 32 30 32 31 20 58 right (C) 2021 X
0030: 79 7a 7a 79 20 41 70 70 73 0a 53 65 65 20 68 74 yzzy Apps.See ht
0040: 74 70 73 3a 2f 2f 62 69 74 72 68 79 74 68 6d 2e tps://bitrhythm.
0050: 78 79 7a 7a 79 61 70 70 73 2e 6c 69 6e 6b 2f 64 xyzzyapps.link/d
0060: 6f 63 73 2f 73 6f 75 72 63 65 2d 63 6f 64 65 2e ocs/source-code.
0070: 68 74 6d 6c 20 66 6f 72 20 74 68 65 20 6c 61 74 html for the lat
0080: 65 73 74 20 73 6f 75 72 63 65 20 63 6f 64 65 0a est source code.
0090: 40 40 0a 0a 23 20 43 6f 64 65 20 57 61 6c 6b 74 @@..# Code Walkt
00a0: 68 72 6f 75 67 68 0a 0a 40 3c 0a 69 6d 70 6f 72 hrough..@<.impor
00b0: 74 20 63 6f 67 0a 69 6d 70 6f 72 74 20 6f 73 0a t cog.import os.
00c0: 0a 69 66 20 44 45 56 20 3d 3d 20 22 31 22 3a 0a .if DEV == "1":.
00d0: 20 20 20 20 73 74 75 66 66 20 3d 20 22 22 22 0a stuff = """.
00e0: 23 23 20 52 75 6e 6e 69 6e 67 0a 0a 6c 73 20 73 ## Running..ls s
00f0: 6f 75 72 63 65 2f 6d 61 69 6e 2e 63 6f 67 20 7c ource/main.cog |
0100: 20 65 6e 74 72 20 2d 72 20 72 75 6e 73 65 72 76 entr -r runserv
0110: 65 72 2e 73 68 20 2d 62 0a 22 22 22 0a 20 20 20 er.sh -b.""".
0120: 20 63 6f 67 2e 6f 75 74 28 73 74 75 66 66 29 0a cog.out(stuff).
0130: 40 3e 0a 40 40 0a 23 23 20 43 6f 72 65 20 54 72 @>.@@.## Core Tr
0140: 61 63 6b 65 72 20 4c 6f 6f 70 0a 0a 49 6e 20 62 acker Loop..In b
0150: 69 74 72 68 79 74 68 6d 20 63 6f 64 65 20 69 73 itrhythm code is
0160: 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65 evaluated for e
0170: 76 65 72 79 20 63 79 63 6c 65 2e 0a 0a 31 20 62 very cycle...1 b
0180: 65 61 74 20 3d 20 36 30 20 2f 20 74 65 6d 70 6f eat = 60 / tempo
0190: 0a 31 20 63 79 63 6c 65 20 3d 20 31 20 62 65 61 .1 cycle = 1 bea
01a0: 74 20 2f 20 74 69 63 6b 73 0a 0a 46 6f 72 20 65 t / ticks..For e
01b0: 76 65 72 79 20 63 79 63 6c 65 20 76 69 73 75 61 very cycle visua
01c0: 6c 20 61 6e 64 20 61 75 64 69 6f 20 63 6f 64 65 l and audio code
01d0: 20 69 73 20 65 76 61 6c 75 61 74 65 64 2e 0a 0a is evaluated...
01e0: 54 68 65 20 65 64 69 74 20 63 68 65 63 6b 62 6f The edit checkbo
01f0: 78 20 61 6c 6c 6f 77 73 20 79 6f 75 20 74 6f 20 x allows you to
0200: 70 65 72 66 6f 72 6d 20 6c 6f 6e 67 20 65 64 69 perform long edi
0210: 74 73 2c 20 77 68 65 72 65 20 6f 6e 6c 79 20 6f ts, where only o
0220: 6c 64 20 63 6f 64 65 20 69 73 20 65 76 61 6c 75 ld code is evalu
0230: 61 74 65 64 2e 20 4f 6e 63 65 20 79 6f 75 20 64 ated. Once you d
0240: 69 73 61 62 6c 65 20 69 74 2c 20 61 6c 6c 20 74 isable it, all t
0250: 68 65 20 6e 65 77 20 65 64 69 74 20 63 68 61 6e he new edit chan
0260: 67 65 73 20 61 72 65 20 61 70 70 6c 69 65 64 20 ges are applied
0270: 69 6e 20 74 68 65 20 6e 65 78 74 20 63 79 63 6c in the next cycl
0280: 65 2e 0a 0a 49 66 20 74 68 65 72 65 20 69 73 20 e...If there is
0290: 61 6e 79 20 73 79 6e 74 61 78 20 65 72 72 6f 72 any syntax error
02a0: 2c 20 70 72 65 76 69 6f 75 73 20 77 6f 72 6b 69 , previous worki
02b0: 6e 67 20 63 6f 64 65 20 69 73 20 75 73 65 64 2e ng code is used.
02c0: 0a 0a 49 66 20 74 68 65 20 63 6c 69 63 6b 20 74 ..If the click t
02d0: 68 65 20 60 65 78 65 63 75 74 65 20 74 72 61 6e he `execute tran
02e0: 73 69 74 69 6f 6e 60 20 69 73 20 73 65 6c 65 63 sition` is selec
02f0: 74 65 64 2c 20 74 68 65 20 74 72 61 6e 73 69 74 ted, the transit
0300: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 ion function is
0310: 72 75 6e 2e 20 55 73 65 20 74 68 69 73 20 70 72 run. Use this pr
0320: 6f 67 72 65 73 73 69 6e 67 20 74 68 65 20 73 6f ogressing the so
0330: 6e 67 20 66 72 6f 6d 20 69 6e 69 74 69 61 6c 69 ng from initiali
0340: 7a 69 6e 67 20 74 6f 20 74 77 65 61 6b 69 6e 67 zing to tweaking
0350: 2e 0a 0a 0a 50 61 74 74 65 72 6e 73 20 69 73 20 ....Patterns is
0360: 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72 69 an array of stri
0370: 6e 67 73 2c 20 65 61 63 68 20 73 74 72 69 6e 67 ngs, each string
0380: 20 63 61 6e 20 62 65 20 68 65 78 61 64 65 63 69 can be hexadeci
0390: 6d 61 6c 2c 20 64 65 63 69 6d 61 6c 20 6f 72 20 mal, decimal or
03a0: 73 6f 6d 65 74 68 69 6e 67 20 6c 69 6b 65 20 e2 something like .
03b0: 80 9c 78 30 30 30 20 78 30 30 30 20 78 30 30 30 ..x000 x000 x000
03c0: 20 78 30 30 30 e2 80 9d 2e 0a 69 73 48 69 74 20 x000.....isHit
03d0: 61 6e 64 20 74 72 61 63 6b 5f 6e 6f 20 63 61 6e and track_no can
03e0: 20 62 65 20 75 73 65 64 20 74 6f 20 69 64 65 6e be used to iden
03f0: 74 69 66 79 20 74 68 65 20 6c 61 79 65 72 20 69 tify the layer i
0400: 6e 20 74 68 65 20 6c 69 76 65 20 65 64 69 74 6f n the live edito
0410: 72 2e 20 48 65 78 61 64 65 63 69 6d 61 6c 20 75 r. Hexadecimal u
0420: 73 65 73 20 5c 60 30 20 5c 60 31 20 5c 60 32 20 ses \`0 \`1 \`2
0430: 5c 60 33 20 5c 60 34 20 5c 60 35 20 69 6e 73 74 \`3 \`4 \`5 inst
0440: 65 61 64 20 6f 66 20 74 68 65 20 52 6f 6d 61 6e ead of the Roman
0450: 20 6e 75 6d 65 72 61 6c 73 20 61 62 63 64 65 20 numerals abcde
0460: 66 6f 72 20 31 30 2c 20 31 31 2c 20 31 32 20 2e for 10, 11, 12 .
0470: 2e 2e 0a 0a 53 63 68 65 64 75 6c 65 64 20 54 69 ....Scheduled Ti
0480: 6d 65 20 61 73 20 73 69 67 6e 69 66 69 65 64 20 me as signified
0490: 62 79 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 by the variable
04a0: 74 69 6d 65 20 69 73 20 63 72 75 63 69 61 6c 20 time is crucial
04b0: 77 68 65 6e 20 63 61 6c 6c 69 6e 67 20 6e 6f 74 when calling not
04c0: 65 20 74 72 69 67 67 65 72 73 2e 20 54 68 69 73 e triggers. This
04d0: 20 69 73 20 75 73 65 64 20 62 79 20 54 6f 6e 65 is used by Tone
04e0: 2e 6a 73 20 74 6f 20 73 63 68 65 64 75 6c 65 20 .js to schedule
04f0: 6e 6f 74 65 73 20 74 6f 20 70 6c 61 79 20 69 6e notes to play in
0500: 20 74 68 65 20 66 75 74 75 72 65 2e 0a 0a 23 23 the future...##
0510: 23 20 4f 62 73 65 72 76 65 72 73 0a 0a 53 69 64 # Observers..Sid
0520: 65 63 68 61 69 6e 20 63 6f 6d 70 72 65 73 73 69 echain compressi
0530: 6f 6e 20 69 73 20 61 20 73 69 6d 70 6c 65 20 61 on is a simple a
0540: 6c 67 6f 72 69 74 68 6d 20 77 68 69 63 68 20 6f lgorithm which o
0550: 62 73 65 72 76 65 73 20 61 6d 70 6c 69 74 75 64 bserves amplitud
0560: 65 20 6f 66 20 61 6e 6f 74 68 65 72 20 69 6e 73 e of another ins
0570: 74 72 75 6d 65 6e 74 20 62 75 74 20 79 6f 75 20 trument but you
0580: 63 61 6e 20 67 65 6e 65 72 61 6c 69 73 65 20 69 can generalise i
0590: 74 20 74 6f 20 61 6e 79 74 68 69 6e 67 2e 20 42 t to anything. B
05a0: 79 20 61 74 74 61 63 68 69 6e 67 20 6f 62 73 65 y attaching obse
05b0: 72 76 65 72 73 20 20 74 6f 20 74 69 6d 65 20 6f rvers to time o
05c0: 72 20 6f 74 68 65 72 20 69 6e 73 74 72 75 6d 65 r other instrume
05d0: 6e 74 73 20 79 6f 75 20 63 61 6e 20 63 72 65 61 nts you can crea
05e0: 74 65 20 73 65 63 74 69 6f 6e 73 20 77 69 74 68 te sections with
05f0: 69 6e 20 74 68 65 20 73 6f 6e 67 20 74 68 61 74 in the song that
0600: 20 63 61 6e 20 74 72 69 67 67 65 72 20 6f 74 68 can trigger oth
0610: 65 72 73 20 77 69 74 68 20 63 6f 6e 64 69 74 69 ers with conditi
0620: 6f 6e 61 6c 20 6c 6f 67 69 63 2e 20 54 68 69 73 onal logic. This
0630: 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 70 is similar to p
0640: 75 72 65 20 64 61 74 61 27 73 20 62 61 6e 67 73 ure data's bangs
0650: 20 2d 20 5b 73 65 65 20 74 68 69 73 5d 28 68 74 - [see this](ht
0660: 74 70 73 3a 2f 2f 77 77 77 2e 79 6f 75 74 75 62 tps://www.youtub
0670: 65 2e 63 6f 6d 2f 77 61 74 63 68 3f 76 3d 6e 54 e.com/watch?v=nT
0680: 54 5a 5a 79 44 34 78 6c 45 29 2e 20 49 6e 20 66 TZZyD4xlE). In f
0690: 75 74 75 72 65 20 74 68 69 73 20 77 69 6c 6c 20 uture this will
06a0: 62 65 20 72 65 66 65 72 72 65 64 20 74 6f 20 61 be referred to a
06b0: 73 20 73 69 64 65 20 65 76 65 6e 74 73 2e 20 59 s side events. Y
06c0: 6f 75 20 63 6f 75 6c 64 20 64 65 63 72 65 61 73 ou could decreas
06d0: 65 20 74 68 65 20 76 6f 6c 75 6d 65 20 6f 66 20 e the volume of
06e0: 74 68 65 20 64 72 75 6d 73 20 74 6f 20 68 61 76 the drums to hav
06f0: 65 20 74 68 65 20 73 6e 61 72 65 73 20 64 72 6f e the snares dro
0700: 70 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 p automatically
0710: 66 6f 72 20 65 78 61 6d 70 6c 65 2e 0a 0a 54 68 for example...Th
0720: 69 73 20 69 73 20 73 6f 6d 65 74 68 69 6e 67 20 is is something
0730: 74 68 61 74 20 79 6f 75 20 63 61 6e 27 74 20 64 that you can't d
0740: 6f 20 69 6e 20 44 41 57 73 2e 0a 0a 60 60 60 7b o in DAWs...```{
0750: 63 6f 64 65 2d 62 6c 6f 63 6b 7d 20 6a 73 0a 2d code-block} js.-
0760: 2d 2d 0a 66 6f 72 63 65 3a 20 74 72 75 65 0a 2d --.force: true.-
0770: 2d 2d 0a 0a 40 3c 0a 63 6f 72 65 5f 6c 6f 6f 70 --..@<.core_loop
0780: 20 3d 20 22 22 22 0a 0a 61 73 79 6e 63 20 70 6c = """..async pl
0790: 61 79 28 29 20 7b 0a 20 20 20 20 76 61 72 20 73 ay() {. var s
07a0: 65 6c 66 20 3d 20 74 68 69 73 3b 0a 20 20 20 20 elf = this;.
07b0: 76 61 72 20 63 65 6c 6c 78 20 3d 20 77 69 6e 64 var cellx = wind
07c0: 6f 77 2e 63 65 6c 6c 78 2e 63 65 6c 6c 78 3b 0a ow.cellx.cellx;.
07d0: 20 20 20 20 76 61 72 20 24 20 3d 20 6a 51 75 65 var $ = jQue
07e0: 72 79 3b 0a 0a 20 20 20 20 61 77 61 69 74 20 54 ry;.. await T
07f0: 6f 6e 65 2e 63 6f 6e 74 65 78 74 2e 72 65 73 75 one.context.resu
0800: 6d 65 28 29 0a 20 20 20 20 61 77 61 69 74 20 54 me(). await T
0810: 6f 6e 65 2e 73 74 61 72 74 28 29 3b 0a 20 20 20 one.start();.
0820: 20 61 77 61 69 74 20 54 6f 6e 65 2e 54 72 61 6e await Tone.Tran
0830: 73 70 6f 72 74 2e 73 74 61 72 74 28 29 3b 0a 20 sport.start();.
0840: 20 20 20 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 Tone.Transpor
0850: 74 2e 62 70 6d 2e 76 61 6c 75 65 20 3d 20 74 68 t.bpm.value = th
0860: 69 73 2e 73 74 61 74 65 2e 74 65 6d 70 6f 3b 0a is.state.tempo;.
0870: 20 20 20 20 54 6f 6e 65 2e 54 72 61 6e 73 70 6f Tone.Transpo
0880: 72 74 2e 73 77 69 6e 67 2e 76 61 6c 75 65 20 3d rt.swing.value =
0890: 20 30 3b 0a 0a 20 20 20 20 77 69 6e 64 6f 77 2e 0;.. window.
08a0: 68 69 74 5f 6d 61 70 20 3d 20 7b 7d 3b 0a 0a 20 hit_map = {};..
08b0: 20 20 20 76 61 72 20 74 72 61 6e 73 69 74 69 6f var transitio
08c0: 6e 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 n = function ()
08d0: 7b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 76 61 72 {. }.. var
08e0: 20 61 6c 77 61 79 73 20 3d 20 66 75 6e 63 74 69 always = functi
08f0: 6f 6e 20 28 29 20 7b 0a 20 20 20 20 7d 0a 0a 20 on () {. }..
0900: 20 20 20 76 61 72 20 72 65 6e 64 65 72 5f 6c 6f var render_lo
0910: 6f 70 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 op = function ()
0920: 20 7b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 76 61 {. }.. va
0930: 72 20 61 6e 69 6d 61 74 69 6f 6e 20 3d 20 66 75 r animation = fu
0940: 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 nction () {.
0950: 20 20 20 20 72 65 6e 64 65 72 5f 6c 6f 6f 70 28 render_loop(
0960: 29 3b 0a 20 20 20 20 20 20 20 20 77 69 6e 64 6f );. windo
0970: 77 2e 72 65 71 75 65 73 74 41 6e 69 6d 61 74 69 w.requestAnimati
0980: 6f 6e 46 72 61 6d 65 28 61 6e 69 6d 61 74 69 6f onFrame(animatio
0990: 6e 29 0a 20 20 20 20 7d 0a 0a 20 20 20 20 54 6f n). }.. To
09a0: 6e 65 2e 4d 61 73 74 65 72 2e 6d 75 74 65 20 3d ne.Master.mute =
09b0: 20 66 61 6c 73 65 3b 0a 20 20 20 20 64 6f 63 75 false;. docu
09c0: 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 ment.getElementB
09d0: 79 49 64 28 27 74 65 6d 70 6f 2d 76 61 6c 75 65 yId('tempo-value
09e0: 27 29 2e 64 69 73 61 62 6c 65 64 20 3d 20 74 72 ').disabled = tr
09f0: 75 65 3b 0a 20 20 20 20 64 6f 63 75 6d 65 6e 74 ue;. document
0a00: 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 49 64 28 .getElementById(
0a10: 27 74 69 63 6b 2d 76 61 6c 75 65 27 29 2e 64 69 'tick-value').di
0a20: 73 61 62 6c 65 64 20 3d 20 74 72 75 65 3b 0a 0a sabled = true;..
0a30: 20 20 20 20 76 61 72 20 6d 65 6d 20 3d 20 73 65 var mem = se
0a40: 6c 66 2e 73 74 61 74 65 2e 6d 65 6d 3b 0a 20 20 lf.state.mem;.
0a50: 20 20 77 69 6e 64 6f 77 2e 6d 65 6d 20 3d 20 6d window.mem = m
0a60: 65 6d 3b 0a 20 20 20 20 76 61 72 20 68 61 6e 64 em;. var hand
0a70: 6c 65 72 73 20 3d 20 7b 7d 3b 0a 20 20 20 20 77 lers = {};. w
0a80: 69 6e 64 6f 77 2e 63 6f 75 6e 74 20 3d 20 2d 31 indow.count = -1
0a90: 3b 0a 0a 20 20 20 20 76 61 72 20 74 65 78 74 20 ;.. var text
0aa0: 3d 20 65 64 69 74 6f 72 2e 67 65 74 56 61 6c 75 = editor.getValu
0ab0: 65 28 29 3b 0a 0a 20 20 20 20 65 64 69 74 6f 72 e();.. editor
0ac0: 2e 6f 6e 28 22 63 68 61 6e 67 65 22 2c 20 66 75 .on("change", fu
0ad0: 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 nction () {.
0ae0: 20 20 20 20 74 65 78 74 20 3d 20 65 64 69 74 6f text = edito
0af0: 72 2e 67 65 74 56 61 6c 75 65 28 29 3b 0a 20 20 r.getValue();.
0b00: 20 20 7d 29 3b 0a 0a 20 20 20 20 76 61 72 20 70 });.. var p
0b10: 61 74 74 65 72 6e 73 20 3d 20 5b 20 63 65 6c 6c atterns = [ cell
0b20: 78 28 22 30 30 30 30 22 29 20 5d 3b 20 2f 2f 20 x("0000") ]; //
0b30: 6e 65 65 64 20 74 68 69 73 20 66 6f 72 20 66 69 need this for fi
0b40: 72 73 74 20 65 76 61 6c 0a 0a 20 20 20 20 76 61 rst eval.. va
0b50: 72 20 62 61 72 73 20 3d 20 30 3b 0a 20 20 20 20 r bars = 0;.
0b60: 76 61 72 20 74 69 63 6b 20 3d 20 30 3b 0a 0a 20 var tick = 0;..
0b70: 20 20 20 76 61 72 20 71 75 61 72 74 65 72 5f 62 var quarter_b
0b80: 65 61 74 5f 6c 65 6e 67 74 68 20 3d 20 36 30 30 eat_length = 600
0b90: 30 30 2e 30 20 2f 20 74 68 69 73 2e 73 74 61 74 00.0 / this.stat
0ba0: 65 2e 74 65 6d 70 6f 3b 0a 20 20 20 20 76 61 72 e.tempo;. var
0bb0: 20 62 65 61 74 5f 6c 65 6e 67 74 68 20 3d 20 71 beat_length = q
0bc0: 75 61 72 74 65 72 5f 62 65 61 74 5f 6c 65 6e 67 uarter_beat_leng
0bd0: 74 68 20 2a 20 34 3b 0a 20 20 20 20 76 61 72 20 th * 4;. var
0be0: 64 65 6c 74 61 20 3d 20 62 65 61 74 5f 6c 65 6e delta = beat_len
0bf0: 67 74 68 20 2f 20 74 68 69 73 2e 73 74 61 74 65 gth / this.state
0c00: 2e 74 69 63 6b 73 3b 0a 0a 20 20 20 20 77 69 6e .ticks;.. win
0c10: 64 6f 77 2e 73 61 6d 70 6c 65 73 20 3d 20 74 68 dow.samples = th
0c20: 69 73 2e 73 74 61 74 65 2e 73 61 6d 70 6c 65 73 is.state.samples
0c30: 3b 0a 20 20 20 20 76 61 72 20 65 76 61 6c 5f 67 ;. var eval_g
0c40: 75 61 72 64 20 3d 20 66 61 6c 73 65 3b 0a 20 20 uard = false;.
0c50: 20 20 73 65 6c 66 2e 74 69 6d 65 72 20 3d 20 73 self.timer = s
0c60: 65 74 49 6e 74 65 72 76 61 6c 28 66 75 6e 63 74 etInterval(funct
0c70: 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 63 6f 75 ion () {. cou
0c80: 6e 74 20 3d 20 63 6f 75 6e 74 20 2b 20 31 3b 0a nt = count + 1;.
0c90: 20 20 20 20 74 69 63 6b 20 3d 20 28 63 6f 75 6e tick = (coun
0ca0: 74 20 25 20 74 68 69 73 2e 73 74 61 74 65 2e 74 t % this.state.t
0cb0: 69 63 6b 73 29 3b 0a 20 20 20 20 69 66 20 28 74 icks);. if (t
0cc0: 69 63 6b 20 3d 3d 3d 20 30 29 20 2b 2b 62 61 72 ick === 0) ++bar
0cd0: 73 3b 0a 0a 20 20 20 20 24 28 22 23 64 75 72 61 s;.. $("#dura
0ce0: 74 69 6f 6e 22 29 2e 68 74 6d 6c 28 22 22 20 2b tion").html("" +
0cf0: 20 62 61 72 73 20 2b 20 22 2e 22 20 2b 20 74 69 bars + "." + ti
0d00: 63 6b 20 2b 20 22 20 2f 20 22 20 2b 20 63 6f 75 ck + " / " + cou
0d10: 6e 74 20 2b 20 22 20 2f 20 22 20 2b 20 77 69 6e nt + " / " + win
0d20: 64 6f 77 2e 72 6f 75 6e 64 54 6f 28 54 6f 6e 65 dow.roundTo(Tone
0d30: 2e 54 72 61 6e 73 70 6f 72 74 2e 73 65 63 6f 6e .Transport.secon
0d40: 64 73 2c 20 32 29 29 3b 0a 20 20 20 20 61 6c 77 ds, 2));. alw
0d50: 61 79 73 28 29 3b 0a 20 20 20 20 66 6f 72 20 28 ays();. for (
0d60: 76 61 72 20 69 20 3d 20 30 3b 20 69 20 3c 20 70 var i = 0; i < p
0d70: 61 74 74 65 72 6e 73 2e 6c 65 6e 67 74 68 3b 20 atterns.length;
0d80: 69 2b 2b 29 20 7b 0a 20 20 20 20 20 20 20 20 69 i++) {. i
0d90: 66 20 28 69 20 3d 3d 20 30 29 20 7b 0a 20 20 20 f (i == 0) {.
0da0: 20 20 20 20 20 20 20 20 20 65 76 61 6c 5f 67 75 eval_gu
0db0: 61 72 64 20 3d 20 74 72 75 65 3b 0a 20 20 20 20 ard = true;.
0dc0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 } else {.
0dd0: 20 20 20 20 20 20 20 20 20 65 76 61 6c 5f 67 75 eval_gu
0de0: 61 72 64 20 3d 20 66 61 6c 73 65 3b 0a 0a 20 20 ard = false;..
0df0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 }.
0e00: 76 61 72 20 64 69 61 6c 73 20 3d 20 73 65 6c 66 var dials = self
0e10: 2e 73 74 61 74 65 2e 64 69 61 6c 73 3b 0a 20 20 .state.dials;.
0e20: 20 20 20 20 20 20 76 61 72 20 6e 75 6d 62 65 72 var number
0e30: 73 20 3d 20 73 65 6c 66 2e 73 74 61 74 65 2e 6e s = self.state.n
0e40: 75 6d 62 65 72 73 3b 0a 0a 20 20 20 20 20 20 20 umbers;..
0e50: 20 69 66 20 28 64 6f 63 75 6d 65 6e 74 2e 67 65 if (document.ge
0e60: 74 45 6c 65 6d 65 6e 74 42 79 49 64 28 27 65 64 tElementById('ed
0e70: 69 74 2d 6d 6f 64 65 27 29 2e 63 68 65 63 6b 65 it-mode').checke
0e80: 64 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 d) {.
0e90: 20 76 61 72 20 70 5f 74 65 78 74 20 20 3d 20 6f var p_text = o
0ea0: 6c 64 50 61 74 74 65 72 6e 73 5b 69 5d 3b 0a 20 ldPatterns[i];.
0eb0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a } else {.
0ec0: 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20 var
0ed0: 70 5f 74 65 78 74 20 3d 20 70 61 74 74 65 72 6e p_text = pattern
0ee0: 73 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 s[i];.
0ef0: 20 20 6f 6c 64 50 61 74 74 65 72 6e 73 5b 69 5d oldPatterns[i]
0f00: 20 3d 20 70 5f 74 65 78 74 3b 0a 20 20 20 20 20 = p_text;.
0f10: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20 }. if
0f20: 28 70 5f 74 65 78 74 28 29 20 26 26 20 70 5f 74 (p_text() && p_t
0f30: 65 78 74 28 29 2e 6c 65 6e 67 74 68 20 21 3d 3d ext().length !==
0f40: 20 30 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 0) {.
0f50: 20 20 76 61 72 20 74 72 61 63 6b 5f 6e 6f 20 3d var track_no =
0f60: 20 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 20 20 i + 1;.
0f70: 20 20 20 20 76 61 72 20 70 61 74 74 65 72 6e 20 var pattern
0f80: 3d 20 70 61 74 74 65 72 6e 5f 70 61 72 73 65 28 = pattern_parse(
0f90: 70 5f 74 65 78 74 28 29 29 3b 0a 20 20 20 20 20 p_text());.
0fa0: 20 20 20 20 20 20 20 76 61 72 20 6d 65 74 61 20 var meta
0fb0: 3d 20 70 61 74 74 65 72 6e 5f 6d 65 74 61 28 70 = pattern_meta(p
0fc0: 5f 74 65 78 74 28 29 29 3b 0a 20 20 20 20 20 20 _text());.
0fd0: 20 20 20 20 20 20 76 61 72 20 69 73 48 69 74 20 var isHit
0fe0: 3d 20 28 70 61 74 74 65 72 6e 2e 73 70 6c 69 74 = (pattern.split
0ff0: 28 27 27 29 5b 74 69 63 6b 5d 20 3d 3d 20 22 31 ('')[tick] == "1
1000: 22 29 20 3f 20 74 72 75 65 20 3a 20 66 61 6c 73 ") ? true : fals
1010: 65 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
1020: 74 72 79 20 7b 0a 20 20 20 20 20 20 20 20 20 20 try {.
1030: 20 20 20 20 20 20 69 66 20 28 64 6f 63 75 6d 65 if (docume
1040: 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 49 nt.getElementByI
1050: 64 28 27 65 64 69 74 2d 6d 6f 64 65 27 29 2e 63 d('edit-mode').c
1060: 68 65 63 6b 65 64 29 20 7b 0a 20 20 20 20 20 20 hecked) {.
1070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 76 ev
1080: 61 6c 28 6f 6c 64 43 6f 64 65 29 3b 0a 20 20 20 al(oldCode);.
1090: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 } e
10a0: 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 lse {.
10b0: 20 20 20 20 20 20 20 20 20 20 65 76 61 6c 28 74 eval(t
10c0: 65 78 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 ext);.
10d0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 6f if (do
10e0: 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e cument.getElemen
10f0: 74 42 79 49 64 28 27 72 65 64 6f 27 29 2e 63 68 tById('redo').ch
1100: 65 63 6b 65 64 29 20 7b 0a 20 20 20 20 20 20 20 ecked) {.
1110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1120: 20 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 document.getEle
1130: 6d 65 6e 74 42 79 49 64 28 27 72 65 64 6f 27 29 mentById('redo')
1140: 2e 63 68 65 63 6b 65 64 20 3d 20 66 61 6c 73 65 .checked = false
1150: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ;.
1160: 20 20 20 20 20 20 20 20 20 20 74 69 63 6b 20 3d tick =
1170: 20 28 63 6f 75 6e 74 20 25 20 74 68 69 73 2e 73 (count % this.s
1180: 74 61 74 65 2e 74 69 63 6b 73 29 3b 0a 20 20 20 tate.ticks);.
1190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11a0: 20 20 20 20 20 63 6f 75 6e 74 20 2d 3d 20 74 69 count -= ti
11b0: 63 6b 20 2b 20 31 3b 0a 20 20 20 20 20 20 20 20 ck + 1;.
11c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11d0: 69 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 i = 0;.
11e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 c
11f0: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 ontinue;.
1200: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 }.
1210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1220: 20 20 20 69 66 20 28 64 6f 63 75 6d 65 6e 74 2e if (document.
1230: 67 65 74 45 6c 65 6d 65 6e 74 42 79 49 64 28 27 getElementById('
1240: 6c 6f 61 64 2d 6d 6f 64 65 27 29 2e 63 68 65 63 load-mode').chec
1250: 6b 65 64 29 20 7b 0a 20 20 20 20 20 20 20 20 20 ked) {.
1260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 d
1270: 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65 ocument.getEleme
1280: 6e 74 42 79 49 64 28 27 6c 6f 61 64 2d 6d 6f 64 ntById('load-mod
1290: 65 27 29 2e 63 68 65 63 6b 65 64 20 3d 20 66 61 e').checked = fa
12a0: 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 lse;.
12b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 tra
12c0: 6e 73 69 74 69 6f 6e 28 29 3b 0a 20 20 20 20 20 nsition();.
12d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
12e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
12f0: 20 20 20 20 20 6f 6c 64 43 6f 64 65 20 3d 20 74 oldCode = t
1300: 65 78 74 3b 0a 20 20 20 20 20 20 20 20 20 20 20 ext;.
1310: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 }.
1320: 20 20 20 20 20 20 20 24 28 22 23 65 72 72 6f 72 $("#error
1330: 22 29 2e 68 74 6d 6c 28 22 22 29 3b 0a 20 20 20 ").html("");.
1340: 20 20 20 20 20 20 20 20 20 7d 20 63 61 74 63 68 } catch
1350: 20 28 65 78 29 20 7b 0a 20 20 20 20 20 20 20 20 (ex) {.
1360: 20 20 20 20 20 20 20 20 24 28 22 23 65 72 72 6f $("#erro
1370: 72 22 29 2e 68 74 6d 6c 28 65 78 29 3b 0a 20 20 r").html(ex);.
1380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 76 ev
1390: 61 6c 28 6f 6c 64 43 6f 64 65 29 3b 0a 20 20 20 al(oldCode);.
13a0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 }.
13b0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 2e 62 }. }. }.b
13c0: 69 6e 64 28 74 68 69 73 29 2c 20 64 65 6c 74 61 ind(this), delta
13d0: 29 0a 0a 20 20 77 69 6e 64 6f 77 2e 72 65 71 75 ).. window.requ
13e0: 65 73 74 41 6e 69 6d 61 74 69 6f 6e 46 72 61 6d estAnimationFram
13f0: 65 28 61 6e 69 6d 61 74 69 6f 6e 29 3b 0a 0a 7d e(animation);..}
1400: 0a 22 22 22 0a 63 6f 67 2e 6f 75 74 28 63 6f 72 .""".cog.out(cor
1410: 65 5f 6c 6f 6f 70 29 0a 40 3e 0a 40 40 0a 60 60 e_loop).@>.@@.``
1420: 60 0a 0a 23 23 20 44 69 61 6c 73 0a 0a 42 69 74 `..## Dials..Bit
1430: 72 68 79 74 68 6d 20 70 72 6f 76 69 64 65 73 20 rhythm provides
1440: 63 75 73 74 6f 6d 20 64 69 61 6c 73 2e 20 54 68 custom dials. Th
1450: 65 73 65 20 64 69 61 6c 73 20 63 61 6e 20 62 65 ese dials can be
1460: 20 6d 61 70 70 65 64 20 74 6f 20 61 6e 79 20 61 mapped to any a
1470: 73 70 65 63 74 73 20 6f 66 20 54 6f 6e 65 2e 6a spects of Tone.j
1480: 73 2e 20 41 6c 6c 20 64 69 61 6c 73 20 61 72 65 s. All dials are
1490: 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 61 6e available as an
14a0: 20 61 72 72 61 79 20 64 69 61 6c 73 20 69 6e 20 array dials in
14b0: 74 68 65 20 6c 69 76 65 20 63 6f 64 65 20 65 64 the live code ed
14c0: 69 74 6f 72 2e 0a 0a 60 60 60 7b 63 6f 64 65 2d itor...```{code-
14d0: 62 6c 6f 63 6b 7d 20 68 74 6d 6c 0a 2d 2d 2d 0a block} html.---.
14e0: 66 6f 72 63 65 3a 20 74 72 75 65 0a 2d 2d 2d 0a force: true.---.
14f0: 0a 40 3c 0a 69 6d 70 6f 72 74 20 63 6f 67 0a 69 .@<.import cog.i
1500: 6d 70 6f 72 74 20 6f 73 0a 0a 64 69 61 6c 20 3d mport os..dial =
1510: 20 22 22 22 0a 3c 64 69 61 6c 3e 0a 20 20 20 20 """.<dial>.
1520: 3c 76 62 6f 78 3e 0a 20 20 20 20 20 20 20 20 3c <vbox>. <
1530: 64 69 76 20 63 6c 61 73 73 3d 22 6d 6c 2d 34 22 div class="ml-4"
1540: 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 3c 68 >. <h
1550: 73 74 61 63 6b 3e 0a 20 20 20 20 20 20 20 20 20 stack>.
1560: 20 20 20 20 20 20 20 3c 64 69 76 20 69 64 3d 7b <div id={
1570: 22 6b 6e 6f 62 22 20 2b 20 70 72 6f 70 73 2e 74 "knob" + props.t
1580: 69 7d 3e 3c 2f 64 69 76 3e 0a 20 20 20 20 20 20 i}></div>.
1590: 20 20 20 20 20 20 20 20 20 20 3c 64 69 76 20 63 <div c
15a0: 6c 61 73 73 3d 22 6d 74 2d 31 22 20 73 74 79 6c lass="mt-1" styl
15b0: 65 3d 22 68 65 69 67 68 74 3a 20 32 32 70 78 22 e="height: 22px"
15c0: 20 69 64 3d 7b 22 6b 6e 6f 62 2d 76 61 6c 75 65 id={"knob-value
15d0: 22 20 2b 20 70 72 6f 70 73 2e 74 69 7d 3e 3c 2f " + props.ti}></
15e0: 64 69 76 3e 0a 20 20 20 20 20 20 20 20 20 20 20 div>.
15f0: 20 20 20 20 20 3c 73 70 61 6e 20 63 6c 61 73 73 <span class
1600: 3d 22 63 75 72 73 6f 72 2d 70 6f 69 6e 74 65 72 ="cursor-pointer
1610: 22 20 69 64 3d 7b 22 73 61 6d 70 6c 65 22 20 2b " id={"sample" +
1620: 20 74 68 69 73 2e 70 72 6f 70 73 2e 74 69 7d 20 this.props.ti}
1630: 6f 6e 63 6c 69 63 6b 3d 7b 72 65 6d 6f 76 65 28 onclick={remove(
1640: 74 68 69 73 2e 70 72 6f 70 73 2e 74 69 20 2d 31 this.props.ti -1
1650: 29 7d 3e 28 78 29 3c 2f 73 70 61 6e 3e 0a 20 20 )}>(x)</span>.
1660: 20 20 20 20 20 20 20 20 20 20 3c 2f 68 73 74 61 </hsta
1670: 63 6b 3e 0a 20 20 20 20 20 20 20 20 3c 2f 64 69 ck>. </di
1680: 76 3e 0a 20 20 20 20 3c 2f 76 62 6f 78 3e 0a 0a v>. </vbox>..
1690: 20 20 20 20 3c 73 63 72 69 70 74 3e 0a 0a 74 68 <script>..th
16a0: 69 73 2e 70 72 6f 70 73 20 3d 20 6f 70 74 73 3b is.props = opts;
16b0: 0a 0a 72 65 6d 6f 76 65 28 69 6e 64 65 78 29 20 ..remove(index)
16c0: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 28 29 20 {. return ()
16d0: 3d 3e 20 7b 0a 20 20 20 20 20 20 20 20 74 68 69 => {. thi
16e0: 73 2e 70 72 6f 70 73 2e 72 6d 64 69 61 6c 28 69 s.props.rmdial(i
16f0: 6e 64 65 78 29 3b 0a 20 20 20 20 7d 0a 7d 0a 0a ndex);. }.}..
1700: 74 68 69 73 2e 6f 6e 28 22 6d 6f 75 6e 74 22 2c this.on("mount",
1710: 20 28 29 20 3d 3e 20 7b 0a 20 20 20 20 69 66 20 () => {. if
1720: 28 6f 70 74 73 2e 76 29 20 7b 0a 0a 20 20 20 20 (opts.v) {..
1730: 20 20 20 20 4e 65 78 75 73 2e 63 6f 6c 6f 72 73 Nexus.colors
1740: 2e 61 63 63 65 6e 74 20 3d 20 22 23 30 30 30 30 .accent = "#0000
1750: 30 30 22 0a 20 20 20 20 20 20 20 20 4e 65 78 75 00". Nexu
1760: 73 2e 63 6f 6c 6f 72 73 2e 66 69 6c 6c 20 3d 20 s.colors.fill =
1770: 22 23 66 66 66 66 66 66 22 0a 0a 20 20 20 20 20 "#ffffff"..
1780: 20 20 20 76 61 72 20 63 65 6c 6c 20 3d 20 77 69 var cell = wi
1790: 6e 64 6f 77 2e 63 65 6c 6c 78 2e 63 65 6c 6c 78 ndow.cellx.cellx
17a0: 28 30 2e 35 29 3b 0a 20 20 20 20 20 20 20 20 76 (0.5);. v
17b0: 61 72 20 64 69 61 6c 20 3d 20 6e 65 77 20 4e 65 ar dial = new Ne
17c0: 78 75 73 2e 44 69 61 6c 28 27 23 6b 6e 6f 62 27 xus.Dial('#knob'
17d0: 20 2b 20 74 68 69 73 2e 70 72 6f 70 73 2e 74 69 + this.props.ti
17e0: 2c 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 , {.
17f0: 27 73 69 7a 65 27 3a 20 5b 34 35 2c 20 34 35 5d 'size': [45, 45]
1800: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 27 76 ,. 'v
1810: 61 6c 75 65 27 3a 20 30 2e 35 0a 20 20 20 20 20 alue': 0.5.
1820: 20 20 20 7d 29 3b 0a 20 20 20 20 20 20 20 20 63 });. c
1830: 65 6c 6c 2e 6f 6e 43 68 61 6e 67 65 28 65 76 74 ell.onChange(evt
1840: 20 3d 3e 20 7b 0a 20 20 20 20 20 20 20 20 20 20 => {.
1850: 20 20 69 66 20 28 65 76 74 2e 64 61 74 61 2e 70 if (evt.data.p
1860: 72 65 76 56 61 6c 75 65 20 21 3d 3d 20 65 76 74 revValue !== evt
1870: 2e 64 61 74 61 2e 76 61 6c 75 65 29 20 7b 0a 20 .data.value) {.
1880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 d
1890: 69 61 6c 2e 76 61 6c 75 65 20 3d 20 65 76 74 2e ial.value = evt.
18a0: 64 61 74 61 2e 76 61 6c 75 65 3b 0a 20 20 20 20 data.value;.
18b0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
18c0: 20 20 7d 29 3b 0a 20 20 20 20 20 20 20 20 64 69 });. di
18d0: 61 6c 2e 63 6f 6c 6f 72 69 7a 65 28 22 61 63 63 al.colorize("acc
18e0: 65 6e 74 22 2c 22 23 30 30 30 22 29 0a 20 20 20 ent","#000").
18f0: 20 20 20 20 20 64 69 61 6c 2e 6f 6e 28 27 63 68 dial.on('ch
1900: 61 6e 67 65 27 2c 20 28 76 61 6c 29 20 3d 3e 20 ange', (val) =>
1910: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 61 {. va
1920: 6c 20 3d 20 77 69 6e 64 6f 77 2e 72 6f 75 6e 64 l = window.round
1930: 54 6f 28 76 61 6c 2c 20 34 29 3b 0a 20 20 20 20 To(val, 4);.
1940: 20 20 20 20 20 20 20 20 24 28 27 23 6b 6e 6f 62 $('#knob
1950: 2d 76 61 6c 75 65 27 20 2b 20 74 68 69 73 2e 70 -value' + this.p
1960: 72 6f 70 73 2e 74 69 29 2e 68 74 6d 6c 28 76 61 rops.ti).html(va
1970: 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 l);.
1980: 63 65 6c 6c 28 76 61 6c 29 3b 0a 20 20 20 20 20 cell(val);.
1990: 20 20 20 7d 29 3b 0a 20 20 20 20 20 20 20 74 68 });. th
19a0: 69 73 2e 70 72 6f 70 73 2e 76 5b 22 63 65 6c 6c is.props.v["cell
19b0: 22 5d 20 3d 20 63 65 6c 6c 3b 0a 20 20 20 20 7d "] = cell;. }
19c0: 0a 7d 29 3b 0a 20 20 20 3c 2f 73 63 72 69 70 74 .});. </script
19d0: 3e 0a 0a 3c 2f 64 69 61 6c 3e 0a 22 22 22 0a 0a >..</dial>."""..
19e0: 63 6f 67 2e 6f 75 74 28 64 69 61 6c 29 0a 6f 73 cog.out(dial).os
19f0: 2e 73 79 73 74 65 6d 28 22 72 6d 20 70 75 62 6c .system("rm publ
1a00: 69 63 2f 63 6f 6d 70 6f 6e 65 6e 74 73 2f 64 69 ic/components/di
1a10: 61 6c 2e 74 61 67 22 29 0a 66 20 3d 20 6f 70 65 al.tag").f = ope
1a20: 6e 28 22 70 75 62 6c 69 63 2f 63 6f 6d 70 6f 6e n("public/compon
1a30: 65 6e 74 73 2f 64 69 61 6c 2e 74 61 67 22 2c 20 ents/dial.tag",
1a40: 22 77 22 29 0a 66 2e 77 72 69 74 65 28 64 69 61 "w").f.write(dia
1a50: 6c 29 0a 66 2e 63 6c 6f 73 65 28 29 0a 40 3e 0a l).f.close().@>.
1a60: 40 40 0a 60 60 60 0a 0a 23 23 20 4e 75 6d 62 65 @@.```..## Numbe
1a70: 72 73 0a 0a 54 68 65 73 65 20 6e 75 6d 62 65 72 rs..These number
1a80: 73 20 63 61 6e 20 62 65 20 6d 61 70 70 65 64 20 s can be mapped
1a90: 74 6f 20 61 6e 79 20 61 73 70 65 63 74 20 6f 66 to any aspect of
1aa0: 20 54 6f 6e 65 2e 6a 73 2e 20 41 6c 6c 20 6e 75 Tone.js. All nu
1ab0: 6d 62 65 72 20 62 6f 78 65 73 20 61 72 65 20 61 mber boxes are a
1ac0: 76 61 69 6c 61 62 6c 65 20 61 73 20 61 6e 20 61 vailable as an a
1ad0: 72 72 61 79 20 6e 75 6d 62 65 72 73 20 69 6e 20 rray numbers in
1ae0: 74 68 65 20 6c 69 76 65 20 63 6f 64 65 20 65 64 the live code ed
1af0: 69 74 6f 72 2e 20 55 73 65 66 75 6c 20 66 6f 72 itor. Useful for
1b00: 20 64 65 62 75 67 67 69 6e 67 20 70 75 72 70 6f debugging purpo
1b10: 73 65 73 2e 0a 0a 60 60 60 7b 63 6f 64 65 2d 62 ses...```{code-b
1b20: 6c 6f 63 6b 7d 20 68 74 6d 6c 0a 2d 2d 2d 0a 66 lock} html.---.f
1b30: 6f 72 63 65 3a 20 74 72 75 65 0a 2d 2d 2d 0a 0a orce: true.---..
1b40: 40 3c 0a 69 6d 70 6f 72 74 20 63 6f 67 0a 69 6d @<.import cog.im
1b50: 70 6f 72 74 20 6f 73 0a 0a 6e 75 6d 62 65 72 20 port os..number
1b60: 3d 20 22 22 22 0a 3c 6e 75 6d 62 65 72 3e 0a 20 = """.<number>.
1b70: 20 20 20 3c 76 62 6f 78 3e 0a 20 20 20 20 20 20 <vbox>.
1b80: 20 20 3c 64 69 76 20 20 63 6c 61 73 73 3d 22 6d <div class="m
1b90: 6c 2d 34 22 3e 0a 20 20 20 20 20 20 20 20 20 20 l-4">.
1ba0: 20 20 3c 68 73 74 61 63 6b 3e 0a 20 20 20 20 20 <hstack>.
1bb0: 20 20 20 20 20 20 20 3c 64 69 76 20 69 64 3d 7b <div id={
1bc0: 22 6e 75 6d 62 65 72 22 20 2b 20 70 72 6f 70 73 "number" + props
1bd0: 2e 74 69 7d 3e 3c 2f 64 69 76 3e 0a 20 20 20 20 .ti}></div>.
1be0: 20 20 20 20 20 20 20 20 3c 64 69 76 20 63 6c 61 <div cla
1bf0: 73 73 3d 22 6d 74 2d 31 22 20 73 74 79 6c 65 3d ss="mt-1" style=
1c00: 22 68 65 69 67 68 74 3a 20 32 32 70 78 22 20 69 "height: 22px" i
1c10: 64 3d 7b 22 6e 75 6d 62 65 72 2d 76 61 6c 75 65 d={"number-value
1c20: 22 20 2b 20 70 72 6f 70 73 2e 74 69 7d 3e 3c 2f " + props.ti}></
1c30: 64 69 76 3e 0a 20 20 20 20 20 20 20 20 20 20 20 div>.
1c40: 20 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 63 75 <span class="cu
1c50: 72 73 6f 72 2d 70 6f 69 6e 74 65 72 22 20 6f 6e rsor-pointer" on
1c60: 63 6c 69 63 6b 3d 7b 72 65 6d 6f 76 65 28 74 68 click={remove(th
1c70: 69 73 2e 70 72 6f 70 73 2e 74 69 20 2d 31 29 7d is.props.ti -1)}
1c80: 3e 28 78 29 3c 2f 73 70 61 6e 3e 0a 20 20 20 20 >(x)</span>.
1c90: 20 20 20 20 3c 2f 68 73 74 61 63 6b 3e 0a 20 20 </hstack>.
1ca0: 20 20 20 20 20 20 3c 2f 64 69 76 3e 0a 20 20 20 </div>.
1cb0: 20 3c 2f 76 62 6f 78 3e 0a 0a 20 20 20 20 3c 73 </vbox>.. <s
1cc0: 63 72 69 70 74 3e 0a 0a 74 68 69 73 2e 70 72 6f cript>..this.pro
1cd0: 70 73 20 3d 20 6f 70 74 73 3b 0a 0a 20 20 20 20 ps = opts;..
1ce0: 72 65 6d 6f 76 65 28 69 6e 64 65 78 29 20 7b 0a remove(index) {.
1cf0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 return (
1d00: 29 20 3d 3e 20 7b 0a 20 20 20 20 20 20 20 20 20 ) => {.
1d10: 20 20 20 74 68 69 73 2e 70 72 6f 70 73 2e 72 6d this.props.rm
1d20: 6e 75 6d 62 65 72 28 69 6e 64 65 78 29 3b 0a 20 number(index);.
1d30: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a }. }..
1d40: 74 68 69 73 2e 6f 6e 28 22 6d 6f 75 6e 74 22 2c this.on("mount",
1d50: 20 28 29 20 3d 3e 20 7b 0a 20 20 20 20 69 66 20 () => {. if
1d60: 28 6f 70 74 73 2e 76 29 20 7b 0a 0a 20 20 20 20 (opts.v) {..
1d70: 20 20 20 20 4e 65 78 75 73 2e 63 6f 6c 6f 72 73 Nexus.colors
1d80: 2e 61 63 63 65 6e 74 20 3d 20 22 23 30 30 30 30 .accent = "#0000
1d90: 30 30 22 0a 20 20 20 20 20 20 20 20 4e 65 78 75 00". Nexu
1da0: 73 2e 63 6f 6c 6f 72 73 2e 66 69 6c 6c 20 3d 20 s.colors.fill =
1db0: 22 23 66 66 66 66 66 66 22 0a 0a 20 20 20 20 20 "#ffffff"..
1dc0: 20 20 20 76 61 72 20 63 65 6c 6c 20 3d 20 77 69 var cell = wi
1dd0: 6e 64 6f 77 2e 63 65 6c 6c 78 2e 63 65 6c 6c 78 ndow.cellx.cellx
1de0: 28 30 29 0a 20 20 20 20 20 20 20 20 76 61 72 20 (0). var
1df0: 6e 75 6d 62 65 72 20 3d 20 6e 65 77 20 4e 65 78 number = new Nex
1e00: 75 73 2e 4e 75 6d 62 65 72 28 27 23 6e 75 6d 62 us.Number('#numb
1e10: 65 72 27 20 2b 20 74 68 69 73 2e 70 72 6f 70 73 er' + this.props
1e20: 2e 74 69 2c 20 7b 0a 20 20 20 20 20 20 20 20 20 .ti, {.
1e30: 20 20 20 27 76 61 6c 75 65 27 3a 20 30 2c 0a 20 'value': 0,.
1e40: 20 20 20 20 20 20 20 20 20 20 20 27 73 74 65 70 'step
1e50: 27 3a 20 30 2e 30 31 0a 20 20 20 20 20 20 20 20 ': 0.01.
1e60: 7d 29 3b 0a 20 20 20 20 20 20 20 20 63 65 6c 6c });. cell
1e70: 2e 6f 6e 43 68 61 6e 67 65 28 65 76 74 20 3d 3e .onChange(evt =>
1e80: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 {. i
1e90: 66 20 28 65 76 74 2e 64 61 74 61 2e 70 72 65 76 f (evt.data.prev
1ea0: 56 61 6c 75 65 20 21 3d 3d 20 65 76 74 2e 64 61 Value !== evt.da
1eb0: 74 61 2e 76 61 6c 75 65 29 20 7b 0a 20 20 20 20 ta.value) {.
1ec0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6d 62 numb
1ed0: 65 72 2e 76 61 6c 75 65 20 3d 20 65 76 74 2e 64 er.value = evt.d
1ee0: 61 74 61 2e 76 61 6c 75 65 3b 0a 20 20 20 20 20 ata.value;.
1ef0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 }.
1f00: 20 7d 29 3b 0a 0a 20 20 20 20 20 20 20 20 74 68 });.. th
1f10: 69 73 2e 70 72 6f 70 73 2e 76 5b 22 76 22 5d 20 is.props.v["v"]
1f20: 3d 20 63 65 6c 6c 3b 0a 20 20 20 20 7d 0a 7d 29 = cell;. }.})
1f30: 3b 0a 20 20 20 3c 2f 73 63 72 69 70 74 3e 0a 0a ;. </script>..
1f40: 3c 2f 6e 75 6d 62 65 72 3e 0a 22 22 22 0a 0a 63 </number>."""..c
1f50: 6f 67 2e 6f 75 74 28 6e 75 6d 62 65 72 29 0a 6f og.out(number).o
1f60: 73 2e 73 79 73 74 65 6d 28 22 72 6d 20 70 75 62 s.system("rm pub
1f70: 6c 69 63 2f 63 6f 6d 70 6f 6e 65 6e 74 73 2f 6e lic/components/n
1f80: 75 6d 62 65 72 2e 74 61 67 22 29 0a 66 20 3d 20 umber.tag").f =
1f90: 6f 70 65 6e 28 22 70 75 62 6c 69 63 2f 63 6f 6d open("public/com
1fa0: 70 6f 6e 65 6e 74 73 2f 6e 75 6d 62 65 72 2e 74 ponents/number.t
1fb0: 61 67 22 2c 20 22 77 22 29 0a 66 2e 77 72 69 74 ag", "w").f.writ
1fc0: 65 28 6e 75 6d 62 65 72 29 0a 66 2e 63 6c 6f 73 e(number).f.clos
1fd0: 65 28 29 0a 40 3e 0a 40 40 0a 60 60 60 0a 0a 23 e().@>.@@.```..#
1fe0: 23 20 41 75 74 6f 4b 6e 6f 62 0a 0a 41 75 74 6f # AutoKnob..Auto
1ff0: 4b 6e 6f 62 20 65 6e 61 62 6c 65 73 20 70 72 6f Knob enables pro
2000: 67 72 61 6d 6d 61 74 69 63 20 61 75 74 6f 6d 61 grammatic automa
2010: 74 69 6f 6e 20 69 6e 20 42 69 74 72 68 79 74 68 tion in Bitrhyth
2020: 6d 0a 0a 60 78 20 2d 3e 20 5b 31 2c 20 32 2e 35 m..`x -> [1, 2.5
2030: 2c 20 34 2c 20 33 2e 32 5d 20 7c 20 62 79 20 30 , 4, 3.2] | by 0
2040: 2e 33 60 0a 0a 78 20 77 69 6c 6c 20 67 6f 20 66 .3`..x will go f
2050: 72 6f 6d 20 31 20 74 6f 20 32 2e 35 20 74 6f 20 rom 1 to 2.5 to
2060: 34 20 74 6f 20 33 2e 32 20 69 6e 20 69 6e 63 72 4 to 3.2 in incr
2070: 65 6d 65 6e 74 73 20 6f 66 20 30 2e 33 20 66 6f ements of 0.3 fo
2080: 72 20 65 76 65 72 79 20 74 69 63 6b 2e 20 57 68 r every tick. Wh
2090: 69 6c 65 20 78 20 77 69 6c 6c 20 69 6e 63 72 65 ile x will incre
20a0: 61 73 65 20 74 69 6c 6c 20 34 20 2e 2e 2e 20 69 ase till 4 ... i
20b0: 74 20 77 69 6c 6c 20 64 65 63 72 65 61 73 65 20 t will decrease
20c0: 6f 6e 63 65 20 69 74 20 72 65 61 63 68 65 73 20 once it reaches
20d0: 34 20 61 6e 64 20 64 72 6f 70 20 64 6f 77 6e 20 4 and drop down
20e0: 74 6f 20 33 2e 32 2e 20 41 66 74 65 72 20 72 65 to 3.2. After re
20f0: 61 63 68 69 6e 67 20 33 2e 32 20 79 6f 75 20 63 aching 3.2 you c
2100: 61 6e 20 73 74 61 79 20 74 68 65 72 65 20 6f 72 an stay there or
2110: 20 72 65 76 65 72 73 65 20 62 61 63 6b 2e 20 41 reverse back. A
2120: 74 20 61 6e 79 20 70 6f 69 6e 74 20 64 75 72 69 t any point duri
2130: 6e 67 20 6c 69 76 65 20 65 64 69 74 69 6e 67 2c ng live editing,
2140: 20 79 6f 75 20 63 61 6e 20 61 64 64 20 61 6e 20 you can add an
2150: 65 78 74 72 61 20 65 6c 65 6d 65 6e 74 20 74 6f extra element to
2160: 20 74 68 65 20 61 72 72 61 79 2e 20 49 66 20 79 the array. If y
2170: 6f 75 20 61 64 64 20 35 20 66 6f 72 20 65 78 61 ou add 5 for exa
2180: 6d 70 6c 65 2c 20 74 68 65 20 6c 6f 6f 70 20 77 mple, the loop w
2190: 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 66 72 6f ill continue fro
21a0: 6d 20 33 2e 32 20 74 6f 20 35 2e 0a 0a 59 6f 75 m 3.2 to 5...You
21b0: 20 63 61 6e 20 74 68 69 6e 6b 20 6f 66 20 65 61 can think of ea
21c0: 63 68 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 ch element in th
21d0: 65 20 61 72 72 61 79 20 61 73 20 74 68 65 20 22 e array as the "
21e0: 66 69 6e 61 6c 20 6b 6e 6f 62 20 70 6f 73 69 74 final knob posit
21f0: 69 6f 6e 22 20 61 6e 64 20 69 6e 20 65 61 63 68 ion" and in each
2200: 20 63 79 63 6c 65 20 77 65 20 61 72 65 20 6d 6f cycle we are mo
2210: 76 69 6e 67 20 74 6f 20 74 68 65 20 6e 65 78 74 ving to the next
2220: 20 6b 6e 6f 62 20 70 6f 73 69 74 69 6f 6e 20 69 knob position i
2230: 6e 20 69 6e 63 72 65 6d 65 6e 74 73 20 6f 66 20 n increments of
2240: 30 2e 33 0a 0a 41 6e 20 61 6c 74 65 72 6e 61 74 0.3..An alternat
2250: 65 20 74 6f 20 41 75 74 6f 4b 6e 6f 62 20 69 73 e to AutoKnob is
2260: 20 74 6f 20 75 73 65 20 54 69 6d 65 64 4b 6e 6f to use TimedKno
2270: 62 2e 20 49 6e 20 74 68 65 20 65 6e 64 6c 65 73 b. In the endles
2280: 73 20 61 63 69 64 20 62 61 6e 67 65 72 20 20 70 s acid banger p
2290: 72 6f 6a 65 63 74 2c 20 74 68 65 20 62 61 73 69 roject, the basi
22a0: 63 20 63 6f 64 65 20 77 61 73 20 75 73 69 6e 67 c code was using
22b0: 20 61 20 73 69 6d 70 6c 65 20 74 69 6d 65 72 20 a simple timer
22c0: 74 6f 20 72 61 6e 64 6f 6d 6c 79 20 6d 6f 76 65 to randomly move
22d0: 20 74 68 65 20 6b 6e 6f 62 20 70 6f 73 69 74 69 the knob positi
22e0: 6f 6e 20 61 6c 6f 6e 67 20 77 69 74 68 20 6e 6f on along with no
22f0: 74 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 73 20 61 te collections a
2300: 6e 64 20 77 65 69 67 68 74 65 64 20 72 61 6e 64 nd weighted rand
2310: 6f 6d 20 63 68 6f 69 63 65 20 6f 6e 20 6e 6f 74 om choice on not
2320: 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 73 20 66 6f e collections fo
2330: 72 20 67 65 6e 65 72 61 74 69 6e 67 20 72 68 79 r generating rhy
2340: 74 68 6d 73 2e 0a 0a 54 69 6d 65 64 4b 6e 6f 62 thms...TimedKnob
2350: 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f s can be used to
2360: 20 61 64 64 20 73 6d 61 6c 6c 20 76 61 72 69 61 add small varia
2370: 74 69 6f 6e 73 20 69 6e 20 76 6f 6c 75 6d 65 20 tions in volume
2380: 74 6f 20 6d 61 6b 65 20 74 68 65 20 64 72 75 6d to make the drum
2390: 73 20 73 6f 75 6e 64 73 20 6d 6f 72 65 20 6e 61 s sounds more na
23a0: 74 75 72 61 6c 2e 0a 0a 60 60 60 7b 63 6f 64 65 tural...```{code
23b0: 2d 62 6c 6f 63 6b 7d 20 6a 73 0a 2d 2d 2d 0a 66 -block} js.---.f
23c0: 6f 72 63 65 3a 20 74 72 75 65 0a 2d 2d 2d 0a 0a orce: true.---..
23d0: 40 3c 0a 69 6d 70 6f 72 74 20 63 6f 67 0a 0a 6b @<.import cog..k
23e0: 6e 6f 62 5f 63 6f 64 65 20 3d 20 22 22 22 0a 66 nob_code = """.f
23f0: 75 6e 63 74 69 6f 6e 20 6b 6e 6f 62 28 6f 70 74 unction knob(opt
2400: 69 6f 6e 73 29 20 7b 0a 20 20 20 20 6f 70 74 69 ions) {. opti
2410: 6f 6e 73 20 3d 20 6f 70 74 69 6f 6e 73 20 7c 7c ons = options ||
2420: 20 7b 7d 3b 0a 20 20 20 20 76 61 72 20 63 6f 6e {};. var con
2430: 74 65 78 74 20 3d 20 7b 7d 3b 0a 20 20 20 20 63 text = {};. c
2440: 6f 6e 74 65 78 74 2e 72 61 6d 70 20 3d 20 6f 70 ontext.ramp = op
2450: 74 69 6f 6e 73 2e 72 61 6d 70 20 7c 7c 20 5b 30 tions.ramp || [0
2460: 20 2c 20 31 5d 3b 0a 20 20 20 20 63 6f 6e 74 65 , 1];. conte
2470: 78 74 2e 63 6f 75 6e 74 5f 73 6b 69 70 20 3d 20 xt.count_skip =
2480: 6f 70 74 69 6f 6e 73 2e 73 70 65 65 64 20 7c 7c options.speed ||
2490: 20 34 3b 0a 20 20 20 20 63 6f 6e 74 65 78 74 2e 4;. context.
24a0: 73 74 65 70 20 3d 20 6f 70 74 69 6f 6e 73 2e 73 step = options.s
24b0: 74 65 70 20 7c 7c 20 30 2e 30 31 3b 0a 20 20 20 tep || 0.01;.
24c0: 20 63 6f 6e 74 65 78 74 2e 72 65 76 65 72 73 65 context.reverse
24d0: 20 3d 20 6f 70 74 69 6f 6e 73 2e 72 65 76 65 72 = options.rever
24e0: 73 65 20 7c 7c 20 74 72 75 65 3b 0a 20 20 20 20 se || true;.
24f0: 63 6f 6e 74 65 78 74 2e 6e 75 6d 62 65 72 20 3d context.number =
2500: 20 6f 70 74 69 6f 6e 73 2e 6e 75 6d 62 65 72 20 options.number
2510: 7c 7c 20 6e 75 6c 6c 3b 0a 0a 20 20 20 20 63 6f || null;.. co
2520: 6e 74 65 78 74 2e 63 75 72 72 65 6e 74 5f 63 6f ntext.current_co
2530: 75 6e 74 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e unt = 0;. con
2540: 74 65 78 74 2e 69 6e 64 65 78 20 3d 20 30 3b 0a text.index = 0;.
2550: 0a 20 20 20 20 2f 2f 20 53 6d 6f 6f 74 68 20 74 . // Smooth t
2560: 72 61 6e 73 69 74 69 6f 6e 20 66 72 6f 6d 20 70 ransition from p
2570: 72 65 76 69 6f 75 73 20 6b 6e 6f 62 20 76 61 6c revious knob val
2580: 75 65 73 0a 20 20 20 20 69 66 20 28 63 6f 6e 74 ues. if (cont
2590: 65 78 74 2e 6e 75 6d 62 65 72 29 20 7b 0a 20 20 ext.number) {.
25a0: 20 20 20 20 20 20 63 6f 6e 74 65 78 74 2e 76 61 context.va
25b0: 6c 20 3d 20 77 69 6e 64 6f 77 2e 63 65 6c 6c 78 l = window.cellx
25c0: 2e 63 65 6c 6c 78 28 63 6f 6e 74 65 78 74 2e 6e .cellx(context.n
25d0: 75 6d 62 65 72 28 29 29 0a 20 20 20 20 7d 20 65 umber()). } e
25e0: 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 63 6f lse {. co
25f0: 6e 74 65 78 74 2e 76 61 6c 20 3d 20 77 69 6e 64 ntext.val = wind
2600: 6f 77 2e 63 65 6c 6c 78 2e 63 65 6c 6c 78 28 6f ow.cellx.cellx(o
2610: 70 74 69 6f 6e 73 2e 69 6e 69 74 69 61 6c 20 7c ptions.initial |
2620: 7c 20 30 2e 35 29 0a 20 20 20 20 7d 0a 0a 20 20 | 0.5). }..
2630: 20 20 66 75 6e 63 74 69 6f 6e 20 63 68 61 6e 67 function chang
2640: 65 43 6f 6e 74 65 78 74 28 29 20 7b 0a 20 20 20 eContext() {.
2650: 20 20 20 20 20 63 6f 6e 74 65 78 74 2e 6e 65 78 context.nex
2660: 74 5f 76 61 6c 20 3d 20 63 6f 6e 74 65 78 74 2e t_val = context.
2670: 72 61 6d 70 5b 63 6f 6e 74 65 78 74 2e 69 6e 64 ramp[context.ind
2680: 65 78 20 2b 20 31 5d 3b 0a 0a 20 20 20 20 20 20 ex + 1];..
2690: 20 20 63 6f 6e 74 65 78 74 2e 76 61 6c 28 63 6f context.val(co
26a0: 6e 74 65 78 74 2e 72 61 6d 70 5b 63 6f 6e 74 65 ntext.ramp[conte
26b0: 78 74 2e 69 6e 64 65 78 5d 29 3b 0a 20 20 20 20 xt.index]);.
26c0: 20 20 20 20 69 66 20 28 63 6f 6e 74 65 78 74 2e if (context.
26d0: 76 61 6c 28 29 20 3e 20 63 6f 6e 74 65 78 74 2e val() > context.
26e0: 6e 65 78 74 5f 76 61 6c 29 20 7b 0a 20 20 20 20 next_val) {.
26f0: 20 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 2e context.
2700: 64 69 72 65 63 74 69 6f 6e 20 3d 20 2d 31 3b 0a direction = -1;.
2710: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else {
2720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e . con
2730: 74 65 78 74 2e 64 69 72 65 63 74 69 6f 6e 20 3d text.direction =
2740: 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 1;. }.
2750: 20 20 7d 0a 0a 20 20 20 20 63 68 61 6e 67 65 43 }.. changeC
2760: 6f 6e 74 65 78 74 28 29 3b 0a 0a 20 20 20 20 72 ontext();.. r
2770: 65 74 75 72 6e 20 7b 0a 20 20 20 20 20 20 20 20 eturn {.
2780: 22 63 65 6c 6c 22 3a 20 63 6f 6e 74 65 78 74 2e "cell": context.
2790: 76 61 6c 2c 0a 20 20 20 20 20 20 20 20 22 70 75 val,. "pu
27a0: 73 68 22 3a 20 66 75 6e 63 74 69 6f 6e 20 28 76 sh": function (v
27b0: 61 6c 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 al) {.
27c0: 20 20 63 6f 6e 74 65 78 74 2e 72 61 6d 70 2e 70 context.ramp.p
27d0: 75 73 68 28 76 61 6c 29 3b 0a 20 20 20 20 20 20 ush(val);.
27e0: 20 20 7d 2c 0a 20 20 20 20 20 20 20 20 22 72 65 },. "re
27f0: 70 6c 61 63 65 22 3a 20 66 75 6e 63 74 69 6f 6e place": function
2800: 20 28 76 61 6c 29 20 7b 0a 20 20 20 20 20 20 20 (val) {.
2810: 20 20 20 20 20 63 6f 6e 74 65 78 74 2e 72 61 6d context.ram
2820: 70 20 3d 20 76 61 6c 3b 0a 20 20 20 20 20 20 20 p = val;.
2830: 20 7d 2c 0a 20 20 20 20 20 20 20 20 22 73 70 65 },. "spe
2840: 65 64 22 3a 20 66 75 6e 63 74 69 6f 6e 20 28 76 ed": function (v
2850: 61 6c 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 al) {.
2860: 20 20 63 6f 6e 74 65 78 74 2e 63 6f 75 6e 74 5f context.count_
2870: 73 6b 69 70 20 3d 20 76 61 6c 3b 0a 20 20 20 20 skip = val;.
2880: 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 20 20 22 },. "
2890: 73 74 65 70 22 3a 20 66 75 6e 63 74 69 6f 6e 20 step": function
28a0: 28 76 61 6c 29 20 7b 0a 20 20 20 20 20 20 20 20 (val) {.
28b0: 20 20 20 20 63 6f 6e 74 65 78 74 2e 73 74 65 70 context.step
28c0: 20 3d 20 76 61 6c 3b 0a 20 20 20 20 20 20 20 20 = val;.
28d0: 7d 2c 0a 20 20 20 20 20 20 20 20 22 75 70 22 3a },. "up":
28e0: 20 66 75 6e 63 74 69 6f 6e 20 28 76 61 6c 29 20 function (val)
28f0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 61 {. va
2900: 6c 20 3d 20 76 61 6c 20 7c 7c 20 30 2e 31 3b 0a l = val || 0.1;.
2910: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 cont
2920: 65 78 74 2e 72 61 6d 70 2e 70 75 73 68 28 63 6f ext.ramp.push(co
2930: 6e 74 65 78 74 2e 72 61 6d 70 5b 63 6f 6e 74 65 ntext.ramp[conte
2940: 78 74 2e 72 61 6d 70 2e 6c 65 6e 67 74 68 20 2d xt.ramp.length -
2950: 20 31 5d 20 2b 20 76 61 6c 29 3b 0a 20 20 20 20 1] + val);.
2960: 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 20 20 22 },. "
2970: 64 6f 77 6e 22 3a 20 66 75 6e 63 74 69 6f 6e 20 down": function
2980: 28 76 61 6c 29 20 7b 0a 20 20 20 20 20 20 20 20 (val) {.
2990: 20 20 20 20 76 61 6c 20 3d 20 76 61 6c 20 7c 7c val = val ||
29a0: 20 2d 30 2e 31 3b 0a 20 20 20 20 20 20 20 20 20 -0.1;.
29b0: 20 20 20 63 6f 6e 74 65 78 74 2e 72 61 6d 70 2e context.ramp.
29c0: 70 75 73 68 28 63 6f 6e 74 65 78 74 2e 72 61 6d push(context.ram
29d0: 70 5b 63 6f 6e 74 65 78 74 2e 72 61 6d 70 2e 6c p[context.ramp.l
29e0: 65 6e 67 74 68 20 2d 20 31 5d 20 2b 20 76 61 6c ength - 1] + val
29f0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 );. },.
2a00: 20 20 20 20 20 22 6d 6f 76 65 22 3a 20 66 75 6e "move": fun
2a10: 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20 ction () {.
2a20: 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 74 65 if (conte
2a30: 78 74 2e 63 75 72 72 65 6e 74 5f 63 6f 75 6e 74 xt.current_count
2a40: 20 3e 3d 20 63 6f 6e 74 65 78 74 2e 63 6f 75 6e >= context.coun
2a50: 74 5f 73 6b 69 70 29 20 7b 0a 20 20 20 20 20 20 t_skip) {.
2a60: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 65 78 contex
2a70: 74 2e 63 75 72 72 65 6e 74 5f 63 6f 75 6e 74 20 t.current_count
2a80: 3d 20 31 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 = 1;..
2a90: 20 20 20 20 20 20 69 66 20 28 63 6f 6e 74 65 78 if (contex
2aa0: 74 2e 64 69 72 65 63 74 69 6f 6e 20 3d 3d 20 31 t.direction == 1
2ab0: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 ) {.
2ac0: 20 20 20 20 20 20 20 20 76 61 72 20 63 6d 70 20 var cmp
2ad0: 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a = function () {.
2ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2af0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 return (
2b00: 63 6f 6e 74 65 78 74 2e 76 61 6c 28 29 20 3e 3d context.val() >=
2b10: 20 63 6f 6e 74 65 78 74 2e 6e 65 78 74 5f 76 61 context.next_va
2b20: 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 l);.
2b30: 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 };.
2b40: 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 } els
2b50: 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 e {.
2b60: 20 20 20 20 20 20 20 20 76 61 72 20 63 6d 70 20 var cmp
2b70: 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a = function () {.
2b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2b90: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 return (
2ba0: 63 6f 6e 74 65 78 74 2e 6e 65 78 74 5f 76 61 6c context.next_val
2bb0: 20 3e 3d 20 63 6f 6e 74 65 78 74 2e 76 61 6c 28 >= context.val(
2bc0: 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 ));.
2bd0: 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 };.
2be0: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 }..
2bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
2c00: 20 28 63 6d 70 28 29 29 20 7b 0a 20 20 20 20 20 (cmp()) {.
2c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 c
2c20: 6f 6e 74 65 78 74 2e 76 61 6c 28 63 6f 6e 74 65 ontext.val(conte
2c30: 78 74 2e 6e 65 78 74 5f 76 61 6c 29 3b 0a 20 20 xt.next_val);.
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c50: 20 20 63 6f 6e 74 65 78 74 2e 69 6e 64 65 78 20 context.index
2c60: 3d 20 63 6f 6e 74 65 78 74 2e 69 6e 64 65 78 20 = context.index
2c70: 2b 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 20 + 1;.
2c80: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e if (con
2c90: 74 65 78 74 2e 69 6e 64 65 78 20 3d 3d 3d 20 63 text.index === c
2ca0: 6f 6e 74 65 78 74 2e 72 61 6d 70 2e 6c 65 6e 67 ontext.ramp.leng
2cb0: 74 68 20 2d 31 29 20 7b 0a 20 20 20 20 20 20 20 th -1) {.
2cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2cd0: 20 69 66 20 28 63 6f 6e 74 65 78 74 2e 72 65 76 if (context.rev
2ce0: 65 72 73 65 29 20 7b 0a 20 20 20 20 20 20 20 20 erse) {.
2cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d00: 20 20 20 20 63 6f 6e 74 65 78 74 2e 69 6e 64 65 context.inde
2d10: 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 x = 0;.
2d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d30: 20 20 20 63 6f 6e 74 65 78 74 2e 72 61 6d 70 20 context.ramp
2d40: 3d 20 63 6f 6e 74 65 78 74 2e 72 61 6d 70 2e 72 = context.ramp.r
2d50: 65 76 65 72 73 65 28 29 3b 0a 20 20 20 20 20 20 everse();.
2d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d70: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 } else {.
2d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d90: 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 2e 69 context.i
2da0: 6e 64 65 78 20 3d 20 63 6f 6e 74 65 78 74 2e 69 ndex = context.i
2db0: 6e 64 65 78 20 2d 20 31 3b 0a 20 20 20 20 20 20 ndex - 1;.
2dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2dd0: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.
2de0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
2df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 ch
2e00: 61 6e 67 65 43 6f 6e 74 65 78 74 28 29 3b 0a 20 angeContext();.
2e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2e20: 20 20 20 63 6f 6e 74 65 78 74 2e 76 61 6c 28 63 context.val(c
2e30: 6f 6e 74 65 78 74 2e 76 61 6c 28 29 20 2b 20 63 ontext.val() + c
2e40: 6f 6e 74 65 78 74 2e 73 74 65 70 20 2a 20 63 6f ontext.step * co
2e50: 6e 74 65 78 74 2e 64 69 72 65 63 74 69 6f 6e 29 ntext.direction)
2e60: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ;.
2e70: 20 20 20 20 20 20 69 66 20 28 63 6f 6e 74 65 78 if (contex
2e80: 74 2e 6e 75 6d 62 65 72 29 20 63 6f 6e 74 65 78 t.number) contex
2e90: 74 2e 6e 75 6d 62 65 72 28 63 6f 6e 74 65 78 74 t.number(context
2ea0: 2e 76 61 6c 28 29 29 3b 0a 20 20 20 20 20 20 20 .val());.
2eb0: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else
2ec0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
2ed0: 20 20 20 20 20 20 63 6f 6e 74 65 78 74 2e 76 61 context.va
2ee0: 6c 28 63 6f 6e 74 65 78 74 2e 76 61 6c 28 29 20 l(context.val()
2ef0: 2b 20 63 6f 6e 74 65 78 74 2e 73 74 65 70 20 2a + context.step *
2f00: 20 63 6f 6e 74 65 78 74 2e 64 69 72 65 63 74 69 context.directi
2f10: 6f 6e 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 on);.
2f20: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e if (con
2f30: 74 65 78 74 2e 6e 75 6d 62 65 72 29 20 63 6f 6e text.number) con
2f40: 74 65 78 74 2e 6e 75 6d 62 65 72 28 63 6f 6e 74 text.number(cont
2f50: 65 78 74 2e 76 61 6c 28 29 29 3b 0a 20 20 20 20 ext.val());.
2f60: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 }.
2f70: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else
2f80: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
2f90: 20 20 20 63 6f 6e 74 65 78 74 2e 63 75 72 72 65 context.curre
2fa0: 6e 74 5f 63 6f 75 6e 74 20 2b 3d 20 31 3b 0a 20 nt_count += 1;.
2fb0: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 }..
2fc0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
2fd0: 63 6f 6e 74 65 78 74 2e 76 61 6c 28 29 3b 0a 20 context.val();.
2fe0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 7d }. }.}
2ff0: 0a 0a 66 75 6e 63 74 69 6f 6e 20 74 69 6d 65 64 ..function timed
3000: 4b 6e 6f 62 28 6f 70 74 69 6f 6e 73 29 20 7b 0a Knob(options) {.
3010: 20 20 20 20 6f 70 74 69 6f 6e 73 20 3d 20 6f 70 options = op
3020: 74 69 6f 6e 73 20 7c 7c 20 7b 7d 3b 0a 20 20 20 tions || {};.
3030: 20 76 61 72 20 63 6f 6e 74 65 78 74 20 3d 20 7b var context = {
3040: 7d 3b 0a 20 20 20 20 63 6f 6e 74 65 78 74 2e 69 };. context.i
3050: 6e 74 65 72 76 61 6c 20 3d 20 6f 70 74 69 6f 6e nterval = option
3060: 73 2e 69 6e 74 65 72 76 61 6c 20 7c 7c 20 31 30 s.interval || 10
3070: 30 3b 0a 20 20 20 20 63 6f 6e 74 65 78 74 2e 6b 0;. context.k
3080: 6e 6f 62 20 3d 20 6b 6e 6f 62 28 6f 70 74 69 6f nob = knob(optio
3090: 6e 73 29 3b 0a 0a 20 20 20 20 63 6f 6e 74 65 78 ns);.. contex
30a0: 74 2e 74 69 6d 65 72 20 3d 20 73 65 74 49 6e 74 t.timer = setInt
30b0: 65 72 76 61 6c 28 66 75 6e 63 74 69 6f 6e 20 28 erval(function (
30c0: 29 20 7b 0a 20 20 20 20 20 20 20 63 6f 6e 74 65 ) {. conte
30d0: 78 74 2e 6b 6e 6f 62 2e 6d 6f 76 65 28 29 3b 0a xt.knob.move();.
30e0: 20 20 20 20 7d 2c 20 63 6f 6e 74 65 78 74 2e 69 }, context.i
30f0: 6e 74 65 72 76 61 6c 29 3b 0a 0a 20 20 20 20 63 nterval);.. c
3100: 6f 6e 74 65 78 74 2e 6b 6e 6f 62 5b 22 63 6c 65 ontext.knob["cle
3110: 61 72 22 5d 20 3d 20 66 75 6e 63 74 69 6f 6e 20 ar"] = function
3120: 28 29 20 7b 0a 20 20 20 20 20 20 20 20 63 6c 65 () {. cle
3130: 61 72 49 6e 74 65 72 76 61 6c 28 63 6f 6e 74 65 arInterval(conte
3140: 78 74 2e 74 69 6d 65 72 29 3b 0a 20 20 20 20 7d xt.timer);. }
3150: 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6e .. return con
3160: 74 65 78 74 2e 6b 6e 6f 62 3b 0a 7d 0a 22 22 22 text.knob;.}."""
3170: 0a 63 6f 67 2e 6f 75 74 28 6b 6e 6f 62 5f 63 6f .cog.out(knob_co
3180: 64 65 29 0a 40 3e 0a 40 40 0a 60 60 60 0a 0a 23 de).@>.@@.```..#
3190: 23 20 4d 61 69 6e 20 55 49 0a 0a 60 60 60 7b 63 # Main UI..```{c
31a0: 6f 64 65 2d 62 6c 6f 63 6b 7d 20 68 74 6d 6c 0a ode-block} html.
31b0: 2d 2d 2d 0a 66 6f 72 63 65 3a 20 74 72 75 65 0a ---.force: true.
31c0: 2d 2d 2d 0a 0a 40 3c 0a 69 6d 70 6f 72 74 20 63 ---..@<.import c
31d0: 6f 67 0a 69 6d 70 6f 72 74 20 6f 73 0a 0a 62 69 og.import os..bi
31e0: 74 72 68 79 74 68 6d 20 3d 20 22 22 22 0a 3c 62 trhythm = """.<b
31f0: 69 74 72 68 79 74 68 6d 3e 0a 0a 3c 64 69 76 3e itrhythm>..<div>
3200: 0a 20 20 20 20 3c 76 73 74 61 63 6b 20 69 64 3d . <vstack id=
3210: 22 68 65 61 64 65 72 2d 70 6c 61 79 62 61 63 6b "header-playback
3220: 22 3e 0a 20 20 20 20 20 20 20 20 3c 68 73 74 61 ">. <hsta
3230: 63 6b 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 ck>.
3240: 3c 64 69 76 20 63 6c 61 73 73 3d 22 6d 6c 2d 32 <div class="ml-2
3250: 22 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ">.
3260: 20 20 20 3c 62 75 74 74 6f 6e 20 74 79 70 65 3d <button type=
3270: 22 62 75 74 74 6f 6e 22 20 63 6c 61 73 73 3d 22 "button" class="
3280: 62 74 6e 20 62 74 6e 2d 70 72 69 6d 61 72 79 20 btn btn-primary
3290: 77 2d 31 2f 31 30 20 6d 6c 2d 32 20 6d 74 2d 31 w-1/10 ml-2 mt-1
32a0: 22 20 6f 6e 63 6c 69 63 6b 3d 7b 61 64 64 44 69 " onclick={addDi
32b0: 61 6c 7d 3e 2b 20 44 69 61 6c 3c 2f 62 75 74 74 al}>+ Dial</butt
32c0: 6f 6e 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 on>.
32d0: 20 20 20 20 3c 62 75 74 74 6f 6e 20 74 79 70 65 <button type
32e0: 3d 22 62 75 74 74 6f 6e 22 20 63 6c 61 73 73 3d ="button" class=
32f0: 22 62 74 6e 20 62 74 6e 2d 70 72 69 6d 61 72 79 "btn btn-primary
3300: 20 77 2d 31 2f 31 30 20 6d 6c 2d 32 20 6d 74 2d w-1/10 ml-2 mt-
3310: 31 22 20 6f 6e 63 6c 69 63 6b 3d 7b 61 64 64 4e 1" onclick={addN
3320: 75 6d 62 65 72 7d 3e 2b 20 4e 75 6d 62 65 72 3c umber}>+ Number<
3330: 2f 62 75 74 74 6f 6e 3e 0a 20 20 20 20 20 20 20 /button>.
3340: 20 20 20 20 20 20 20 20 20 3c 21 2d 2d 20 3c 62 <!-- <b
3350: 75 74 74 6f 6e 20 74 79 70 65 3d 22 62 75 74 74 utton type="butt
3360: 6f 6e 22 20 63 6c 61 73 73 3d 22 62 74 6e 20 62 on" class="btn b
3370: 74 6e 2d 70 72 69 6d 61 72 79 20 77 2d 31 2f 31 tn-primary w-1/1
3380: 30 20 6d 6c 2d 32 20 6d 74 2d 31 22 20 6f 6e 63 0 ml-2 mt-1" onc
3390: 6c 69 63 6b 3d 7b 61 64 64 53 61 6d 70 6c 65 7d lick={addSample}
33a0: 3e 2b 20 53 61 6d 70 6c 65 20 46 69 6c 65 3c 2f >+ Sample File</
33b0: 62 75 74 74 6f 6e 3e 20 2d 2d 3e 0a 20 20 20 20 button> -->.
33c0: 20 20 20 20 20 20 20 20 20 20 20 20 3c 62 75 74 <but
33d0: 74 6f 6e 20 74 79 70 65 3d 22 62 75 74 74 6f 6e ton type="button
33e0: 22 20 63 6c 61 73 73 3d 22 62 74 6e 20 62 74 6e " class="btn btn
33f0: 2d 70 72 69 6d 61 72 79 20 77 2d 31 2f 31 30 20 -primary w-1/10
3400: 6d 6c 2d 32 20 6d 74 2d 31 22 20 6f 6e 63 6c 69 ml-2 mt-1" oncli
3410: 63 6b 3d 7b 61 64 64 53 61 6d 70 6c 65 55 52 4c ck={addSampleURL
3420: 7d 3e 2b 20 53 61 6d 70 6c 65 20 55 52 4c 3c 2f }>+ Sample URL</
3430: 62 75 74 74 6f 6e 3e 0a 20 20 20 20 20 20 20 20 button>.
3440: 20 20 20 20 3c 2f 64 69 76 3e 0a 0a 20 20 20 20 </div>..
3450: 20 20 20 20 20 20 20 20 3c 64 69 76 20 63 6c 61 <div cla
3460: 73 73 3d 22 6d 6c 2d 32 22 20 3e 0a 20 20 20 20 ss="ml-2" >.
3470: 20 20 20 20 20 20 20 20 20 20 20 20 3c 6c 61 62 <lab
3480: 65 6c 20 66 6f 72 3d 22 74 65 6d 70 6f 2d 76 61 el for="tempo-va
3490: 6c 75 65 22 3e 54 65 6d 70 6f 20 2f 20 54 69 63 lue">Tempo / Tic
34a0: 6b 73 3c 2f 6c 61 62 65 6c 3e 3c 62 72 3e 0a 20 ks</label><br>.
34b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c <
34c0: 69 6e 70 75 74 20 74 79 70 65 3d 22 74 65 78 74 input type="text
34d0: 22 20 69 64 3d 22 74 65 6d 70 6f 2d 76 61 6c 75 " id="tempo-valu
34e0: 65 22 20 76 61 6c 75 65 3d 7b 73 74 61 74 65 2e e" value={state.
34f0: 74 65 6d 70 6f 7d 20 73 74 79 6c 65 3d 22 77 69 tempo} style="wi
3500: 64 74 68 3a 20 31 35 30 70 78 22 20 6f 6e 6b 65 dth: 150px" onke
3510: 79 75 70 3d 7b 20 65 64 69 74 54 65 6d 70 6f 20 yup={ editTempo
3520: 7d 2f 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 }/>.
3530: 20 20 20 20 3c 69 6e 70 75 74 20 74 79 70 65 3d <input type=
3540: 22 74 65 78 74 22 20 20 63 6c 61 73 73 3d 22 6d "text" class="m
3550: 74 2d 32 22 20 69 64 3d 22 74 69 63 6b 2d 76 61 t-2" id="tick-va
3560: 6c 75 65 22 20 76 61 6c 75 65 3d 7b 73 74 61 74 lue" value={stat
3570: 65 2e 74 69 63 6b 73 7d 20 73 74 79 6c 65 3d 22 e.ticks} style="
3580: 77 69 64 74 68 3a 20 31 35 30 70 78 22 20 6f 6e width: 150px" on
3590: 6b 65 79 75 70 3d 7b 65 64 69 74 54 69 63 6b 73 keyup={editTicks
35a0: 7d 2f 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 }/>.
35b0: 3c 2f 64 69 76 3e 0a 20 20 20 20 20 20 20 20 20 </div>.
35c0: 20 20 20 3c 64 69 76 20 63 6c 61 73 73 3d 22 6d <div class="m
35d0: 6c 2d 32 22 20 73 74 79 6c 65 3d 22 6d 69 6e 2d l-2" style="min-
35e0: 77 69 64 74 68 3a 20 32 35 30 70 78 3b 22 3e 0a width: 250px;">.
35f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3600: 3c 6c 61 62 65 6c 20 66 6f 72 3d 22 64 75 72 61 <label for="dura
3610: 74 69 6f 6e 22 3e 42 61 72 73 20 2f 20 54 69 63 tion">Bars / Tic
3620: 6b 73 20 2f 20 53 65 63 6f 6e 64 73 3c 2f 6c 61 ks / Seconds</la
3630: 62 65 6c 3e 3c 62 72 3e 0a 20 20 20 20 20 20 20 bel><br>.
3640: 20 20 20 20 20 20 20 20 20 3c 64 69 76 20 69 64 <div id
3650: 3d 22 64 75 72 61 74 69 6f 6e 22 20 3e 3c 2f 64 ="duration" ></d
3660: 69 76 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 iv>.
3670: 3c 2f 64 69 76 3e 0a 20 20 20 20 20 20 20 20 3c </div>. <
3680: 2f 68 73 74 61 63 6b 3e 0a 0a 20 20 20 20 20 20 /hstack>..
3690: 20 20 3c 64 69 76 20 63 6c 61 73 73 3d 22 6d 74 <div class="mt
36a0: 2d 32 20 6d 6c 2d 32 22 20 3e 0a 20 20 20 20 20 -2 ml-2" >.
36b0: 20 20 20 20 20 20 20 3c 62 75 74 74 6f 6e 20 74 <button t
36c0: 79 70 65 3d 22 62 75 74 74 6f 6e 22 20 63 6c 61 ype="button" cla
36d0: 73 73 3d 22 62 74 6e 20 62 74 6e 2d 70 72 69 6d ss="btn btn-prim
36e0: 61 72 79 20 77 2d 31 2f 31 30 20 6d 6c 2d 32 20 ary w-1/10 ml-2
36f0: 6d 74 2d 31 22 20 20 6f 6e 63 6c 69 63 6b 3d 7b mt-1" onclick={
3700: 70 6c 61 79 7d 3e 50 6c 61 79 3c 2f 62 75 74 74 play}>Play</butt
3710: 6f 6e 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 on>.
3720: 3c 62 75 74 74 6f 6e 20 74 79 70 65 3d 22 62 75 <button type="bu
3730: 74 74 6f 6e 22 20 63 6c 61 73 73 3d 22 62 74 6e tton" class="btn
3740: 20 62 74 6e 2d 70 72 69 6d 61 72 79 20 6d 6c 2d btn-primary ml-
3750: 32 22 20 6f 6e 63 6c 69 63 6b 3d 7b 73 61 76 65 2" onclick={save
3760: 7d 3e 53 61 76 65 3c 2f 62 75 74 74 6f 6e 3e 0a }>Save</button>.
3770: 20 20 20 20 20 20 20 20 20 20 20 20 3c 62 75 74 <but
3780: 74 6f 6e 20 74 79 70 65 3d 22 62 75 74 74 6f 6e ton type="button
3790: 22 20 63 6c 61 73 73 3d 22 62 74 6e 20 62 74 6e " class="btn btn
37a0: 2d 70 72 69 6d 61 72 79 20 6d 6c 2d 32 22 20 6f -primary ml-2" o
37b0: 6e 63 6c 69 63 6b 3d 7b 72 65 73 65 74 7d 3e 52 nclick={reset}>R
37c0: 65 73 65 74 3c 2f 62 75 74 74 6f 6e 3e 0a 20 20 eset</button>.
37d0: 20 20 20 20 20 20 20 20 20 20 3c 62 75 74 74 6f <butto
37e0: 6e 20 74 79 70 65 3d 22 62 75 74 74 6f 6e 22 20 n type="button"
37f0: 63 6c 61 73 73 3d 22 62 74 6e 20 62 74 6e 2d 70 class="btn btn-p
3800: 72 69 6d 61 72 79 20 6d 6c 2d 32 22 20 6f 6e 63 rimary ml-2" onc
3810: 6c 69 63 6b 3d 7b 72 65 6c 6f 61 64 7d 3e 57 69 lick={reload}>Wi
3820: 6e 64 6f 77 20 52 65 6c 6f 61 64 3c 2f 62 75 74 ndow Reload</but
3830: 74 6f 6e 3e 0a 20 20 20 20 20 20 20 20 20 20 20 ton>.
3840: 20 3c 62 75 74 74 6f 6e 20 74 79 70 65 3d 22 62 <button type="b
3850: 75 74 74 6f 6e 22 20 63 6c 61 73 73 3d 22 62 74 utton" class="bt
3860: 6e 20 62 74 6e 2d 70 72 69 6d 61 72 79 20 6d 6c n btn-primary ml
3870: 2d 32 22 20 6f 6e 63 6c 69 63 6b 3d 7b 64 6f 77 -2" onclick={dow
3880: 6e 6c 6f 61 64 7d 3e 53 61 76 65 20 46 69 6c 65 nload}>Save File
3890: 3c 2f 62 75 74 74 6f 6e 3e 0a 0a 20 20 20 20 20 </button>..
38a0: 20 20 20 20 20 20 20 3c 69 6e 70 75 74 20 63 6c <input cl
38b0: 61 73 73 3d 22 6d 6c 2d 31 22 20 6e 61 6d 65 3d ass="ml-1" name=
38c0: 22 65 64 69 74 2d 6d 6f 64 65 22 20 69 64 3d 22 "edit-mode" id="
38d0: 65 64 69 74 2d 6d 6f 64 65 22 20 74 79 70 65 3d edit-mode" type=
38e0: 22 63 68 65 63 6b 62 6f 78 22 2f 3e 0a 20 20 20 "checkbox"/>.
38f0: 20 20 20 20 20 20 20 20 20 3c 6c 61 62 65 6c 20 <label
3900: 66 6f 72 3d 22 65 64 69 74 2d 6d 6f 64 65 22 3e for="edit-mode">
3910: 45 64 69 74 3c 2f 6c 61 62 65 6c 3e 0a 20 20 20 Edit</label>.
3920: 20 20 20 20 20 20 20 20 20 3c 69 6e 70 75 74 20 <input
3930: 63 6c 61 73 73 3d 22 6d 6c 2d 31 22 20 6e 61 6d class="ml-1" nam
3940: 65 3d 22 6c 6f 61 64 2d 6d 6f 64 65 22 20 69 64 e="load-mode" id
3950: 3d 22 6c 6f 61 64 2d 6d 6f 64 65 22 20 74 79 70 ="load-mode" typ
3960: 65 3d 22 63 68 65 63 6b 62 6f 78 22 2f 3e 0a 20 e="checkbox"/>.
3970: 20 20 20 20 20 20 20 20 20 20 20 3c 6c 61 62 65 <labe
3980: 6c 20 66 6f 72 3d 22 6c 6f 61 64 2d 6d 6f 64 65 l for="load-mode
3990: 22 3e 45 78 65 63 75 74 65 20 54 72 61 6e 73 69 ">Execute Transi
39a0: 74 69 6f 6e 3c 2f 6c 61 62 65 6c 3e 0a 20 20 20 tion</label>.
39b0: 20 20 20 20 20 20 20 20 20 3c 69 6e 70 75 74 20 <input
39c0: 63 6c 61 73 73 3d 22 6d 6c 2d 31 22 20 6e 61 6d class="ml-1" nam
39d0: 65 3d 22 6c 6f 61 64 2d 6d 6f 64 65 22 20 69 64 e="load-mode" id
39e0: 3d 22 72 65 64 6f 22 20 74 79 70 65 3d 22 63 68 ="redo" type="ch
39f0: 65 63 6b 62 6f 78 22 2f 3e 0a 20 20 20 20 20 20 eckbox"/>.
3a00: 20 20 20 20 20 20 3c 6c 61 62 65 6c 20 66 6f 72 <label for
3a10: 3d 22 72 65 64 6f 22 3e 52 65 64 6f 20 42 61 72 ="redo">Redo Bar
3a20: 3c 2f 6c 61 62 65 6c 3e 0a 20 20 20 20 20 20 20 </label>.
3a30: 20 3c 2f 64 69 76 3e 0a 0a 20 20 20 20 20 20 20 </div>..
3a40: 20 3c 76 73 74 61 63 6b 20 69 64 3d 22 73 61 6d <vstack id="sam
3a50: 70 6c 65 73 2d 62 6c 6f 63 6b 22 3e 0a 20 20 20 ples-block">.
3a60: 20 20 20 20 20 20 20 20 20 3c 64 69 76 20 65 61 <div ea
3a70: 63 68 3d 7b 20 6b 65 79 2c 20 69 6e 64 65 78 20 ch={ key, index
3a80: 69 6e 20 73 74 61 74 65 2e 73 61 6d 70 6c 65 73 in state.samples
3a90: 7d 20 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 } >.
3aa0: 20 20 20 20 3c 64 69 76 20 69 66 3d 7b 20 73 74 <div if={ st
3ab0: 61 74 65 2e 73 61 6d 70 6c 65 73 20 26 26 20 73 ate.samples && s
3ac0: 74 61 74 65 2e 73 61 6d 70 6c 65 73 5b 69 6e 64 tate.samples[ind
3ad0: 65 78 5d 20 7d 3e 0a 20 20 20 20 20 20 20 20 20 ex] }>.
3ae0: 20 20 20 20 20 20 20 20 20 20 20 3c 73 61 6d 70 <samp
3af0: 6c 65 20 20 73 65 74 73 61 6d 70 6c 65 3d 7b 73 le setsample={s
3b00: 65 74 53 61 6d 70 6c 65 7d 20 72 6d 73 61 6d 70 etSample} rmsamp
3b10: 6c 65 3d 7b 72 6d 53 61 6d 70 6c 65 7d 20 73 61 le={rmSample} sa
3b20: 6d 70 6c 65 73 3d 7b 73 74 61 74 65 2e 73 61 6d mples={state.sam
3b30: 70 6c 65 73 7d 20 74 69 3d 7b 69 6e 64 65 78 20 ples} ti={index
3b40: 2b 20 31 7d 3e 3c 2f 73 61 6d 70 6c 65 3e 0a 20 + 1}></sample>.
3b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c <
3b60: 2f 64 69 76 3e 0a 20 20 20 20 20 20 20 20 20 20 /div>.
3b70: 20 20 3c 2f 64 69 76 3e 0a 20 20 20 20 20 20 20 </div>.
3b80: 20 3c 2f 76 73 74 61 63 6b 3e 0a 0a 20 20 20 20 </vstack>..
3b90: 20 20 20 20 3c 68 73 74 61 63 6b 20 73 74 79 6c <hstack styl
3ba0: 65 3d 22 6d 61 72 67 69 6e 2d 74 6f 70 3a 20 31 e="margin-top: 1
3bb0: 36 70 78 22 3e 0a 20 20 20 20 20 20 20 20 20 20 6px">.
3bc0: 20 20 3c 64 69 76 20 65 61 63 68 3d 7b 20 6b 65 <div each={ ke
3bd0: 79 2c 20 69 6e 64 65 78 20 69 6e 20 73 74 61 74 y, index in stat
3be0: 65 2e 64 69 61 6c 73 7d 3e 0a 20 20 20 20 20 20 e.dials}>.
3bf0: 20 20 20 20 20 20 20 20 20 20 3c 64 69 61 6c 20 <dial
3c00: 72 6d 64 69 61 6c 3d 7b 72 6d 44 69 61 6c 7d 20 rmdial={rmDial}
3c10: 20 76 3d 7b 73 74 61 74 65 2e 64 69 61 6c 73 5b v={state.dials[
3c20: 69 6e 64 65 78 5d 7d 20 74 69 3d 7b 69 6e 64 65 index]} ti={inde
3c30: 78 20 2b 20 31 7d 3e 3c 2f 64 69 61 6c 3e 0a 20 x + 1}></dial>.
3c40: 20 20 20 20 20 20 20 20 20 20 20 3c 2f 64 69 76 </div
3c50: 3e 0a 20 20 20 20 20 20 20 20 3c 2f 68 73 74 61 >. </hsta
3c60: 63 6b 3e 0a 0a 20 20 20 20 20 20 20 20 3c 68 73 ck>.. <hs
3c70: 74 61 63 6b 3e 0a 20 20 20 20 20 20 20 20 20 20 tack>.
3c80: 20 20 3c 64 69 76 20 65 61 63 68 3d 7b 20 6b 65 <div each={ ke
3c90: 79 2c 20 69 6e 64 65 78 20 69 6e 20 73 74 61 74 y, index in stat
3ca0: 65 2e 6e 75 6d 62 65 72 73 7d 3e 0a 20 20 20 20 e.numbers}>.
3cb0: 20 20 20 20 20 20 20 20 20 20 20 20 3c 6e 75 6d <num
3cc0: 62 65 72 20 72 6d 6e 75 6d 62 65 72 3d 7b 72 6d ber rmnumber={rm
3cd0: 4e 75 6d 62 65 72 7d 20 76 3d 7b 73 74 61 74 65 Number} v={state
3ce0: 2e 6e 75 6d 62 65 72 73 5b 69 6e 64 65 78 5d 7d .numbers[index]}
3cf0: 20 74 69 3d 7b 69 6e 64 65 78 20 2b 20 31 7d 3e ti={index + 1}>
3d00: 3c 2f 6e 75 6d 62 65 72 3e 0a 20 20 20 20 20 20 </number>.
3d10: 20 20 20 20 20 20 3c 2f 64 69 76 3e 0a 20 20 20 </div>.
3d20: 20 20 20 20 20 3c 2f 68 73 74 61 63 6b 3e 0a 0a </hstack>..
3d30: 20 20 20 20 3c 2f 76 73 74 61 63 6b 3e 0a 0a 20 </vstack>..
3d40: 20 20 20 3c 64 69 76 20 69 64 3d 22 63 75 65 64 <div id="cued
3d50: 22 20 63 6c 61 73 73 3d 22 70 2d 32 22 20 73 74 " class="p-2" st
3d60: 79 6c 65 3d 22 63 6f 6c 6f 72 3a 20 77 68 69 74 yle="color: whit
3d70: 65 20 21 69 6d 70 6f 72 74 61 6e 74 3b 20 68 65 e !important; he
3d80: 69 67 68 74 3a 20 33 32 70 78 3b 20 66 6f 6e 74 ight: 32px; font
3d90: 2d 73 69 7a 65 3a 20 32 34 70 78 3b 22 3e 3c 2f -size: 24px;"></
3da0: 64 69 76 3e 0a 20 20 20 20 3c 64 69 76 20 69 64 div>. <div id
3db0: 3d 22 65 72 72 6f 72 22 20 63 6c 61 73 73 3d 22 ="error" class="
3dc0: 70 2d 32 22 20 73 74 79 6c 65 3d 22 63 6f 6c 6f p-2" style="colo
3dd0: 72 3a 20 79 65 6c 6c 6f 77 20 21 69 6d 70 6f 72 r: yellow !impor
3de0: 74 61 6e 74 3b 20 68 65 69 67 68 74 3a 20 33 32 tant; height: 32
3df0: 70 78 3b 20 66 6f 6e 74 2d 73 69 7a 65 3a 20 31 px; font-size: 1
3e00: 32 70 78 3b 22 3e 3c 2f 64 69 76 3e 0a 20 20 20 2px;"></div>.
3e10: 20 3c 64 69 76 20 69 64 3d 22 63 61 6e 76 61 73 <div id="canvas
3e20: 2d 63 6f 6e 74 61 69 6e 65 72 22 20 73 74 79 6c -container" styl
3e30: 65 3d 22 70 6f 73 69 74 69 6f 6e 3a 20 72 65 6c e="position: rel
3e40: 61 74 69 76 65 3b 22 3e 0a 20 20 20 20 20 20 20 ative;">.
3e50: 20 3c 64 69 76 20 69 64 3d 22 70 35 22 20 73 74 <div id="p5" st
3e60: 79 6c 65 3d 22 70 6f 73 69 74 69 6f 6e 3a 20 61 yle="position: a
3e70: 62 73 6f 6c 75 74 65 3b 20 77 69 64 74 68 3a 20 bsolute; width:
3e80: 31 30 30 25 3b 20 62 61 63 6b 67 72 6f 75 6e 64 100%; background
3e90: 3a 20 62 6c 61 63 6b 22 3e 3c 2f 64 69 76 3e 0a : black"></div>.
3ea0: 20 20 20 20 20 20 20 20 3c 63 61 6e 76 61 73 20 <canvas
3eb0: 69 64 3d 22 76 69 73 75 61 6c 22 20 73 74 79 6c id="visual" styl
3ec0: 65 3d 22 70 6f 73 69 74 69 6f 6e 3a 20 61 62 73 e="position: abs
3ed0: 6f 6c 75 74 65 3b 20 77 69 64 74 68 3a 20 31 30 olute; width: 10
3ee0: 30 25 3b 20 62 61 63 6b 67 72 6f 75 6e 64 3a 20 0%; background:
3ef0: 62 6c 61 63 6b 3b 22 3e 3c 2f 63 61 6e 76 61 73 black;"></canvas
3f00: 3e 0a 20 20 20 20 20 20 20 20 3c 64 69 76 20 69 >. <div i
3f10: 64 3d 22 63 6f 64 65 22 20 73 74 79 6c 65 3d 22 d="code" style="
3f20: 70 6f 73 69 74 69 6f 6e 3a 20 61 62 73 6f 6c 75 position: absolu
3f30: 74 65 3b 22 3e 3c 2f 64 69 76 3e 0a 20 20 20 20 te;"></div>.
3f40: 3c 2f 64 69 76 3e 0a 20 20 20 20 0a 3c 2f 64 69 </div>. .</di
3f50: 76 3e 0a 0a 3c 73 74 79 6c 65 3e 0a 3a 68 6f 73 v>..<style>.:hos
3f60: 74 20 7b 0a 20 20 20 20 6d 61 72 67 69 6e 2d 74 t {. margin-t
3f70: 6f 70 3a 20 34 76 68 3b 0a 7d 0a 3c 2f 73 74 79 op: 4vh;.}.</sty
3f80: 6c 65 3e 0a 0a 3c 73 63 72 69 70 74 3e 0a 76 61 le>..<script>.va
3f90: 72 20 6f 6c 64 43 6f 64 65 20 3d 20 22 22 3b 0a r oldCode = "";.
3fa0: 76 61 72 20 6f 6c 64 50 61 74 74 65 72 6e 73 20 var oldPatterns
3fb0: 3d 20 5b 5d 3b 0a 0a 4d 6f 75 73 65 74 72 61 70 = [];..Mousetrap
3fc0: 2e 73 74 6f 70 43 61 6c 6c 62 61 63 6b 20 3d 20 .stopCallback =
3fd0: 66 75 6e 63 74 69 6f 6e 28 65 2c 20 65 6c 65 6d function(e, elem
3fe0: 65 6e 74 2c 20 63 6f 6d 62 6f 29 20 7b 0a 20 20 ent, combo) {.
3ff0: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a return false;.
4000: 7d 0a 0a 4d 6f 75 73 65 74 72 61 70 2e 62 69 6e }..Mousetrap.bin
4010: 64 28 5b 27 66 39 27 5d 2c 20 66 75 6e 63 74 69 d(['f9'], functi
4020: 6f 6e 28 65 29 20 7b 0a 20 20 20 20 69 66 20 28 on(e) {. if (
4030: 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d document.getElem
4040: 65 6e 74 42 79 49 64 28 27 65 64 69 74 2d 6d 6f entById('edit-mo
4050: 64 65 27 29 2e 63 68 65 63 6b 65 64 29 20 7b 0a de').checked) {.
4060: 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 document
4070: 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 49 64 28 .getElementById(
4080: 27 65 64 69 74 2d 6d 6f 64 65 27 29 2e 63 68 65 'edit-mode').che
4090: 63 6b 65 64 20 3d 20 66 61 6c 73 65 3b 0a 20 20 cked = false;.
40a0: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 } else {.
40b0: 20 20 20 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 document.getE
40c0: 6c 65 6d 65 6e 74 42 79 49 64 28 27 65 64 69 74 lementById('edit
40d0: 2d 6d 6f 64 65 27 29 2e 63 68 65 63 6b 65 64 20 -mode').checked
40e0: 3d 20 74 72 75 65 3b 0a 20 20 20 20 7d 0a 0a 20 = true;. }..
40f0: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b return false;
4100: 0a 7d 29 3b 0a 0a 4d 6f 75 73 65 74 72 61 70 2e .});..Mousetrap.
4110: 62 69 6e 64 28 5b 27 63 74 72 6c 2b 31 27 5d 2c bind(['ctrl+1'],
4120: 20 66 75 6e 63 74 69 6f 6e 28 65 29 20 7b 0a 0a function(e) {..
4130: 20 20 20 20 69 66 20 28 64 6f 63 75 6d 65 6e 74 if (document
4140: 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 49 64 28 .getElementById(
4150: 27 72 65 64 6f 27 29 2e 63 68 65 63 6b 65 64 29 'redo').checked)
4160: 20 7b 0a 20 20 20 20 20 20 20 20 64 6f 63 75 6d {. docum
4170: 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 ent.getElementBy
4180: 49 64 28 27 72 65 64 6f 27 29 2e 63 68 65 63 6b Id('redo').check
4190: 65 64 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20 ed = false;.
41a0: 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 } else {.
41b0: 20 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 document.getEle
41c0: 6d 65 6e 74 42 79 49 64 28 27 72 65 64 6f 27 29 mentById('redo')
41d0: 2e 63 68 65 63 6b 65 64 20 3d 20 74 72 75 65 3b .checked = true;
41e0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 72 65 74 75 . }.. retu
41f0: 72 6e 20 66 61 6c 73 65 3b 0a 7d 29 3b 0a 0a 4d rn false;.});..M
4200: 6f 75 73 65 74 72 61 70 2e 62 69 6e 64 28 5b 27 ousetrap.bind(['
4210: 66 31 30 27 5d 2c 20 66 75 6e 63 74 69 6f 6e 28 f10'], function(
4220: 65 29 20 7b 0a 20 20 20 20 69 66 20 28 64 6f 63 e) {. if (doc
4230: 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 ument.getElement
4240: 42 79 49 64 28 27 6c 6f 61 64 2d 6d 6f 64 65 27 ById('load-mode'
4250: 29 2e 63 68 65 63 6b 65 64 29 20 7b 0a 20 20 20 ).checked) {.
4260: 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 67 65 document.ge
4270: 74 45 6c 65 6d 65 6e 74 42 79 49 64 28 27 6c 6f tElementById('lo
4280: 61 64 2d 6d 6f 64 65 27 29 2e 63 68 65 63 6b 65 ad-mode').checke
4290: 64 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20 7d d = false;. }
42a0: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 else {.
42b0: 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d document.getElem
42c0: 65 6e 74 42 79 49 64 28 27 6c 6f 61 64 2d 6d 6f entById('load-mo
42d0: 64 65 27 29 2e 63 68 65 63 6b 65 64 20 3d 20 74 de').checked = t
42e0: 72 75 65 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 rue;. }. r
42f0: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a 7d 29 3b eturn false;.});
4300: 0a 0a 4d 6f 75 73 65 74 72 61 70 2e 62 69 6e 64 ..Mousetrap.bind
4310: 28 5b 27 63 74 72 6c 2b 30 27 5d 2c 20 66 75 6e (['ctrl+0'], fun
4320: 63 74 69 6f 6e 28 65 29 20 7b 0a 20 20 20 20 24 ction(e) {. $
4330: 28 22 23 73 61 6d 70 6c 65 73 2d 62 6c 6f 63 6b ("#samples-block
4340: 22 29 2e 74 6f 67 67 6c 65 28 29 3b 0a 20 20 20 ").toggle();.
4350: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a 7d return false;.}
4360: 29 3b 0a 0a 0a 66 6f 72 20 28 6c 65 74 20 69 20 );...for (let i
4370: 3d 20 31 3b 20 69 20 3c 3d 20 38 3b 20 69 2b 2b = 1; i <= 8; i++
4380: 29 20 7b 0a 20 20 20 20 4d 6f 75 73 65 74 72 61 ) {. Mousetra
4390: 70 2e 62 69 6e 64 28 5b 27 66 27 20 2b 20 69 5d p.bind(['f' + i]
43a0: 2c 20 66 75 6e 63 74 69 6f 6e 28 65 29 20 7b 0a , function(e) {.
43b0: 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3c 3d if (i <=
43c0: 20 73 61 6d 70 6c 65 73 2e 6c 65 6e 67 74 68 29 samples.length)
43d0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 {. p
43e0: 28 69 20 2d 20 31 29 3b 0a 20 20 20 20 20 20 20 (i - 1);.
43f0: 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 }. retur
4400: 6e 20 66 61 6c 73 65 3b 0a 20 20 20 20 7d 29 3b n false;. });
4410: 0a 7d 0a 0a 2f 2f 20 76 61 72 20 61 75 64 69 6f .}..// var audio
4420: 20 3d 20 6e 65 77 20 41 75 64 69 6f 28 29 3b 0a = new Audio();.
4430: 2f 2f 20 61 75 64 69 6f 2e 6c 6f 6f 70 20 3d 20 // audio.loop =
4440: 74 72 75 65 3b 0a 63 6f 6e 73 74 20 61 63 74 78 true;.const actx
4450: 20 3d 20 54 6f 6e 65 2e 63 6f 6e 74 65 78 74 3b = Tone.context;
4460: 0a 63 6f 6e 73 74 20 64 65 73 74 20 3d 20 61 63 .const dest = ac
4470: 74 78 2e 63 72 65 61 74 65 4d 65 64 69 61 53 74 tx.createMediaSt
4480: 72 65 61 6d 44 65 73 74 69 6e 61 74 69 6f 6e 28 reamDestination(
4490: 29 3b 0a 63 6f 6e 73 74 20 72 65 63 6f 72 64 65 );.const recorde
44a0: 72 20 3d 20 6e 65 77 20 4d 65 64 69 61 52 65 63 r = new MediaRec
44b0: 6f 72 64 65 72 28 64 65 73 74 2e 73 74 72 65 61 order(dest.strea
44c0: 6d 29 3b 0a 6c 65 74 20 63 68 75 6e 6b 73 20 3d m);.let chunks =
44d0: 20 5b 5d 3b 0a 76 61 72 20 73 61 6d 70 6c 65 55 [];.var sampleU
44e0: 52 4c 20 3d 20 22 22 3b 0a 76 61 72 20 73 61 6d RL = "";.var sam
44f0: 3b 0a 74 68 69 73 2e 70 72 6f 70 73 20 3d 20 6f ;.this.props = o
4500: 70 74 73 3b 0a 0a 74 68 69 73 2e 73 74 61 74 65 pts;..this.state
4510: 20 3d 20 7b 0a 20 20 20 20 6d 65 6d 3a 20 7b 7d = {. mem: {}
4520: 2c 0a 20 20 20 20 64 69 61 6c 73 3a 20 5b 5d 2c ,. dials: [],
4530: 0a 20 20 20 20 6e 75 6d 62 65 72 73 3a 20 5b 5d . numbers: []
4540: 2c 0a 20 20 20 20 73 61 6d 70 6c 65 73 3a 20 5b ,. samples: [
4550: 5d 2c 0a 20 20 20 20 74 65 6d 70 6f 3a 20 31 32 ],. tempo: 12
4560: 30 2c 0a 20 20 20 20 74 69 63 6b 73 3a 20 31 36 0,. ticks: 16
4570: 2c 0a 7d 0a 0a 61 73 79 6e 63 20 66 75 6e 63 74 ,.}..async funct
4580: 69 6f 6e 20 63 6f 70 79 54 65 78 74 54 6f 43 6c ion copyTextToCl
4590: 69 70 62 6f 61 72 64 28 74 65 78 74 29 20 7b 0a ipboard(text) {.
45a0: 20 20 20 20 74 72 79 20 7b 20 61 77 61 69 74 20 try { await
45b0: 6e 61 76 69 67 61 74 6f 72 2e 63 6c 69 70 62 6f navigator.clipbo
45c0: 61 72 64 2e 77 72 69 74 65 54 65 78 74 28 74 65 ard.writeText(te
45d0: 78 74 29 3b 20 7d 0a 20 20 20 20 63 61 74 63 68 xt); }. catch
45e0: 28 65 72 72 29 20 7b 0a 20 20 20 20 20 20 20 20 (err) {.
45f0: 61 6c 65 72 74 28 27 45 72 72 6f 72 20 69 6e 20 alert('Error in
4600: 63 6f 70 79 69 6e 67 20 74 65 78 74 3a 20 27 2c copying text: ',
4610: 20 65 72 72 29 3b 0a 20 20 20 20 7d 0a 7d 0a 0a err);. }.}..
4620: 73 68 6f 75 6c 64 55 70 64 61 74 65 28 64 61 74 shouldUpdate(dat
4630: 61 2c 20 6e 65 78 74 4f 70 74 73 29 20 7b 0a 20 a, nextOpts) {.
4640: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a return true;.
4650: 7d 0a 0a 74 68 69 73 2e 6f 6e 28 27 6d 6f 75 6e }..this.on('moun
4660: 74 27 2c 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b t', function() {
4670: 0a 20 20 20 20 76 61 72 20 73 65 6c 66 20 3d 20 . var self =
4680: 74 68 69 73 3b 0a 20 20 20 20 24 28 22 23 6c 6f this;. $("#lo
4690: 61 64 2d 6d 6f 64 65 22 29 2e 63 6c 69 63 6b 28 ad-mode").click(
46a0: 29 3b 0a 20 20 20 20 65 64 69 74 6f 72 20 3d 20 );. editor =
46b0: 43 6f 64 65 4d 69 72 72 6f 72 28 64 6f 63 75 6d CodeMirror(docum
46c0: 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 ent.getElementBy
46d0: 49 64 28 22 63 6f 64 65 22 29 2c 20 7b 0a 20 20 Id("code"), {.
46e0: 20 20 20 20 20 20 6d 6f 64 65 3a 20 22 6e 75 6c mode: "nul
46f0: 6c 22 2c 0a 20 20 20 20 20 20 20 20 73 70 65 6c l",. spel
4700: 6c 63 68 65 63 6b 3a 20 66 61 6c 73 65 2c 0a 20 lcheck: false,.
4710: 20 20 20 20 20 20 20 61 75 74 6f 63 6f 72 72 65 autocorre
4720: 63 74 3a 20 66 61 6c 73 65 2c 0a 20 20 20 20 20 ct: false,.
4730: 20 20 20 73 63 72 6f 6c 6c 62 61 72 53 74 79 6c scrollbarStyl
4740: 65 3a 20 22 6e 75 6c 6c 22 2c 0a 20 20 20 20 20 e: "null",.
4750: 20 20 20 6c 69 6e 65 57 72 61 70 70 69 6e 67 3a lineWrapping:
4760: 20 66 61 6c 73 65 2c 0a 20 20 20 20 20 20 20 20 false,.
4770: 6c 69 6e 65 4e 75 6d 62 65 72 73 3a 20 66 61 6c lineNumbers: fal
4780: 73 65 2c 0a 20 20 20 20 20 20 20 20 73 74 79 6c se,. styl
4790: 65 41 63 74 69 76 65 4c 69 6e 65 3a 20 66 61 6c eActiveLine: fal
47a0: 73 65 2c 0a 20 20 20 20 20 20 20 20 73 74 79 6c se,. styl
47b0: 65 53 65 6c 65 63 74 65 64 54 65 78 74 3a 20 74 eSelectedText: t
47c0: 72 75 65 2c 0a 20 20 20 20 20 20 20 20 6d 61 74 rue,. mat
47d0: 63 68 42 72 61 63 6b 65 74 73 3a 20 66 61 6c 73 chBrackets: fals
47e0: 65 2c 0a 20 20 20 20 20 20 20 20 76 61 6c 75 65 e,. value
47f0: 3a 20 60 2f 2f 20 74 72 61 63 6b 5f 6e 6f 2c 20 : `// track_no,
4800: 70 61 74 74 65 72 6e 2c 20 63 75 72 72 65 6e 74 pattern, current
4810: 5f 62 69 74 2c 20 73 61 6d 70 6c 65 73 2c 20 73 _bit, samples, s
4820: 61 6d 70 6c 65 20 61 6e 64 20 54 6f 6e 65 20 61 ample and Tone a
4830: 72 65 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 re available as
4840: 67 6c 6f 62 61 6c 73 60 0a 20 20 20 20 7d 29 3b globals`. });
4850: 0a 0a 20 20 20 20 65 64 69 74 6f 72 2e 73 65 74 .. editor.set
4860: 53 69 7a 65 28 6e 75 6c 6c 2c 20 77 69 6e 64 6f Size(null, windo
4870: 77 2e 69 6e 6e 65 72 48 65 69 67 68 74 20 2d 20 w.innerHeight -
4880: 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d document.getElem
4890: 65 6e 74 42 79 49 64 28 22 68 65 61 64 65 72 2d entById("header-
48a0: 70 6c 61 79 62 61 63 6b 22 29 2e 63 6c 69 65 6e playback").clien
48b0: 74 48 65 69 67 68 74 20 2d 20 31 36 30 29 3b 0a tHeight - 160);.
48c0: 0a 20 20 20 20 69 66 20 28 74 68 69 73 2e 70 72 . if (this.pr
48d0: 6f 70 73 2e 73 6f 6e 67 29 20 7b 0a 20 20 20 20 ops.song) {.
48e0: 20 20 20 20 63 6f 6e 73 74 20 6c 69 62 20 3d 20 const lib =
48f0: 77 69 6e 64 6f 77 2e 4a 73 6f 6e 55 72 6c 28 27 window.JsonUrl('
4900: 6c 7a 6d 61 27 29 3b 0a 20 20 20 20 20 20 20 20 lzma');.
4910: 6c 69 62 2e 64 65 63 6f 6d 70 72 65 73 73 28 74 lib.decompress(t
4920: 68 69 73 2e 70 72 6f 70 73 2e 73 6f 6e 67 29 2e his.props.song).
4930: 74 68 65 6e 28 64 61 74 61 20 3d 3e 20 7b 0a 20 then(data => {.
4940: 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20 73 var s
4950: 61 6d 70 6c 65 5f 6e 61 6d 65 73 20 3d 20 64 61 ample_names = da
4960: 74 61 5b 22 73 61 6d 70 6c 65 5f 6e 61 6d 65 73 ta["sample_names
4970: 22 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 "];.
4980: 76 61 72 20 64 69 61 6c 5f 63 6f 75 6e 74 20 3d var dial_count =
4990: 20 64 61 74 61 5b 22 64 69 61 6c 5f 63 6f 75 6e data["dial_coun
49a0: 74 22 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 t"];.
49b0: 20 76 61 72 20 6e 75 6d 62 65 72 73 5f 63 6f 75 var numbers_cou
49c0: 6e 74 20 3d 20 64 61 74 61 5b 22 6e 75 6d 62 65 nt = data["numbe
49d0: 72 73 5f 63 6f 75 6e 74 22 5d 3b 0a 20 20 20 20 rs_count"];.
49e0: 20 20 20 20 20 20 20 20 64 65 6c 65 74 65 20 64 delete d
49f0: 61 74 61 5b 22 73 61 6d 70 6c 65 5f 6e 61 6d 65 ata["sample_name
4a00: 73 22 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 s"];.
4a10: 20 64 65 6c 65 74 65 20 64 61 74 61 5b 22 64 69 delete data["di
4a20: 61 6c 5f 63 6f 75 6e 74 22 5d 3b 0a 20 20 20 20 al_count"];.
4a30: 20 20 20 20 20 20 20 20 64 65 6c 65 74 65 20 64 delete d
4a40: 61 74 61 5b 22 6e 75 6d 62 65 72 73 5f 63 6f 75 ata["numbers_cou
4a50: 6e 74 22 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 nt"];.
4a60: 20 20 74 68 69 73 2e 73 74 61 74 65 2e 74 65 6d this.state.tem
4a70: 70 6f 20 3d 20 64 61 74 61 2e 74 65 6d 70 6f 3b po = data.tempo;
4a80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 . thi
4a90: 73 2e 73 74 61 74 65 2e 74 69 63 6b 73 20 3d 20 s.state.ticks =
4aa0: 64 61 74 61 2e 74 69 63 6b 73 3b 0a 20 20 20 20 data.ticks;.
4ab0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 74 61 this.sta
4ac0: 74 65 2e 63 6f 64 65 20 3d 20 64 61 74 61 2e 63 te.code = data.c
4ad0: 6f 64 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 ode;.
4ae0: 20 73 61 6d 70 6c 65 5f 6e 61 6d 65 73 2e 6d 61 sample_names.ma
4af0: 70 28 66 75 6e 63 74 69 6f 6e 20 28 75 72 6c 29 p(function (url)
4b00: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
4b10: 20 20 20 73 65 6c 66 2e 61 64 64 55 52 4c 28 75 self.addURL(u
4b20: 72 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 rl);.
4b30: 20 7d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 });.
4b40: 20 66 6f 72 20 28 76 61 72 20 69 20 3d 20 30 3b for (var i = 0;
4b50: 20 69 20 3c 20 64 69 61 6c 5f 63 6f 75 6e 74 3b i < dial_count;
4b60: 20 69 2b 2b 29 20 7b 0a 20 20 20 20 20 20 20 20 i++) {.
4b70: 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 74 61 this.sta
4b80: 74 65 2e 64 69 61 6c 73 2e 70 75 73 68 28 7b 7d te.dials.push({}
4b90: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d );. }
4ba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 . for
4bb0: 20 28 76 61 72 20 69 20 3d 20 30 3b 20 69 20 3c (var i = 0; i <
4bc0: 20 6e 75 6d 62 65 72 73 5f 63 6f 75 6e 74 3b 20 numbers_count;
4bd0: 69 2b 2b 29 20 7b 0a 20 20 20 20 20 20 20 20 20 i++) {.
4be0: 20 20 20 20 20 20 20 74 68 69 73 2e 73 74 61 74 this.stat
4bf0: 65 2e 6e 75 6d 62 65 72 73 2e 70 75 73 68 28 7b e.numbers.push({
4c00: 7d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 });.
4c10: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 64 }. ed
4c20: 69 74 6f 72 2e 73 65 74 56 61 6c 75 65 28 74 68 itor.setValue(th
4c30: 69 73 2e 73 74 61 74 65 2e 63 6f 64 65 29 3b 0a is.state.code);.
4c40: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 this
4c50: 2e 75 70 64 61 74 65 28 29 3b 0a 20 20 20 20 20 .update();.
4c60: 20 20 20 20 20 20 20 72 69 6f 74 2e 6d 6f 75 6e riot.moun
4c70: 74 28 27 27 29 3b 0a 20 20 20 20 20 20 20 20 7d t('');. }
4c80: 29 0a 20 20 20 20 7d 0a 0a 0a 7d 29 3b 0a 0a 0a ). }...});...
4c90: 0a 0a 64 6f 77 6e 6c 6f 61 64 28 29 20 7b 0a 20 ..download() {.
4ca0: 20 20 20 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e . function
4cb0: 20 64 6f 77 6e 6c 6f 61 64 28 64 61 74 61 2c 20 download(data,
4cc0: 66 69 6c 65 6e 61 6d 65 20 3d 20 22 73 6f 6e 67 filename = "song
4cd0: 2e 74 78 74 22 2c 20 74 79 70 65 20 3d 20 22 74 .txt", type = "t
4ce0: 65 78 74 2f 70 6c 61 69 6e 22 29 20 7b 0a 20 20 ext/plain") {.
4cf0: 20 20 20 20 20 20 20 20 20 20 76 61 72 20 66 69 var fi
4d00: 6c 65 20 3d 20 6e 65 77 20 42 6c 6f 62 28 5b 64 le = new Blob([d
4d10: 61 74 61 5d 2c 20 7b 74 79 70 65 3a 20 74 79 70 ata], {type: typ
4d20: 65 7d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 e});.
4d30: 20 76 61 72 20 61 20 3d 20 64 6f 63 75 6d 65 6e var a = documen
4d40: 74 2e 63 72 65 61 74 65 45 6c 65 6d 65 6e 74 28 t.createElement(
4d50: 22 61 22 29 2c 0a 20 20 20 20 20 20 20 20 20 20 "a"),.
4d60: 20 20 20 20 20 20 20 20 20 20 75 72 6c 20 3d 20 url =
4d70: 55 52 4c 2e 63 72 65 61 74 65 4f 62 6a 65 63 74 URL.createObject
4d80: 55 52 4c 28 66 69 6c 65 29 3b 0a 20 20 20 20 20 URL(file);.
4d90: 20 20 20 20 20 20 20 61 2e 68 72 65 66 20 3d 20 a.href =
4da0: 75 72 6c 3b 0a 20 20 20 20 20 20 20 20 20 20 20 url;.
4db0: 20 61 2e 64 6f 77 6e 6c 6f 61 64 20 3d 20 66 69 a.download = fi
4dc0: 6c 65 6e 61 6d 65 3b 0a 20 20 20 20 20 20 20 20 lename;.
4dd0: 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 62 6f 64 document.bod
4de0: 79 2e 61 70 70 65 6e 64 43 68 69 6c 64 28 61 29 y.appendChild(a)
4df0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 2e ;. a.
4e00: 63 6c 69 63 6b 28 29 3b 0a 20 20 20 20 20 20 20 click();.
4e10: 20 20 20 20 20 73 65 74 54 69 6d 65 6f 75 74 28 setTimeout(
4e20: 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 function() {.
4e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 doc
4e40: 75 6d 65 6e 74 2e 62 6f 64 79 2e 72 65 6d 6f 76 ument.body.remov
4e50: 65 43 68 69 6c 64 28 61 29 3b 0a 20 20 20 20 20 eChild(a);.
4e60: 20 20 20 20 20 20 20 20 20 20 20 77 69 6e 64 6f windo
4e70: 77 2e 55 52 4c 2e 72 65 76 6f 6b 65 4f 62 6a 65 w.URL.revokeObje
4e80: 63 74 55 52 4c 28 75 72 6c 29 3b 20 20 0a 20 20 ctURL(url); .
4e90: 20 20 20 20 20 20 20 20 20 20 7d 2c 20 30 29 3b }, 0);
4ea0: 20 0a 20 20 20 20 7d 0a 20 20 20 20 64 6f 77 6e . }. down
4eb0: 6c 6f 61 64 28 65 64 69 74 6f 72 2e 67 65 74 56 load(editor.getV
4ec0: 61 6c 75 65 28 29 29 0a 7d 0a 0a 73 61 76 65 28 alue()).}..save(
4ed0: 29 20 7b 0a 20 20 20 20 74 68 69 73 2e 73 74 61 ) {. this.sta
4ee0: 74 65 2e 63 6f 64 65 20 3d 20 65 64 69 74 6f 72 te.code = editor
4ef0: 2e 67 65 74 56 61 6c 75 65 28 29 3b 0a 20 20 20 .getValue();.
4f00: 20 76 61 72 20 74 65 78 74 20 3d 20 7b 0a 20 20 var text = {.
4f10: 20 20 20 20 20 20 74 65 6d 70 6f 3a 20 74 68 69 tempo: thi
4f20: 73 2e 73 74 61 74 65 2e 74 65 6d 70 6f 2c 0a 20 s.state.tempo,.
4f30: 20 20 20 20 20 20 20 64 69 61 6c 5f 63 6f 75 6e dial_coun
4f40: 74 3a 20 74 68 69 73 2e 73 74 61 74 65 2e 64 69 t: this.state.di
4f50: 61 6c 73 2e 6c 65 6e 67 74 68 2c 0a 20 20 20 20 als.length,.
4f60: 20 20 20 20 6e 75 6d 62 65 72 73 5f 63 6f 75 6e numbers_coun
4f70: 74 3a 20 74 68 69 73 2e 73 74 61 74 65 2e 6e 75 t: this.state.nu
4f80: 6d 62 65 72 73 2e 6c 65 6e 67 74 68 2c 0a 20 20 mbers.length,.
4f90: 20 20 20 20 20 20 73 61 6d 70 6c 65 5f 6e 61 6d sample_nam
4fa0: 65 73 3a 20 74 68 69 73 2e 73 74 61 74 65 2e 73 es: this.state.s
4fb0: 61 6d 70 6c 65 73 2e 6d 61 70 28 66 75 6e 63 74 amples.map(funct
4fc0: 69 6f 6e 20 28 69 74 65 6d 29 20 7b 72 65 74 75 ion (item) {retu
4fd0: 72 6e 20 69 74 65 6d 5b 22 5f 5f 75 72 6c 22 5d rn item["__url"]
4fe0: 7d 29 2c 0a 20 20 20 20 20 20 20 20 74 69 63 6b }),. tick
4ff0: 73 3a 20 31 36 2c 0a 20 20 20 20 20 20 20 20 63 s: 16,. c
5000: 6f 64 65 3a 20 74 68 69 73 2e 73 74 61 74 65 2e ode: this.state.
5010: 63 6f 64 65 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 code,. };.
5020: 20 63 6f 6e 73 74 20 6c 69 62 20 3d 20 77 69 6e const lib = win
5030: 64 6f 77 2e 4a 73 6f 6e 55 72 6c 28 27 6c 7a 6d dow.JsonUrl('lzm
5040: 61 27 29 3b 0a 09 6c 69 62 2e 63 6f 6d 70 72 65 a');..lib.compre
5050: 73 73 28 74 65 78 74 29 2e 74 68 65 6e 28 65 6e ss(text).then(en
5060: 63 6f 64 65 64 44 61 74 61 20 3d 3e 20 7b 0a 20 codedData => {.
5070: 20 20 20 20 20 20 20 76 61 72 20 6c 69 6e 6b 20 var link
5080: 3d 20 22 2f 73 6f 6e 67 2f 22 20 2b 20 65 6e 63 = "/song/" + enc
5090: 6f 64 65 64 44 61 74 61 3b 0a 20 20 20 20 20 20 odedData;.
50a0: 20 20 77 69 6e 64 6f 77 2e 68 69 73 74 6f 72 79 window.history
50b0: 2e 70 75 73 68 53 74 61 74 65 28 7b 7d 2c 20 27 .pushState({}, '
50c0: 42 69 74 72 68 79 74 68 6d 27 2c 20 6c 69 6e 6b Bitrhythm', link
50d0: 29 3b 0a 20 20 20 20 20 20 20 20 2f 2f 77 69 6e );. //win
50e0: 64 6f 77 2e 6f 70 65 6e 28 6c 69 6e 6b 2c 20 22 dow.open(link, "
50f0: 5f 62 6c 61 6e 6b 22 29 3b 0a 20 20 20 20 7d 29 _blank");. })
5100: 3b 0a 7d 0a 0a 72 65 6c 6f 61 64 28 29 20 7b 0a ;.}..reload() {.
5110: 20 20 20 20 77 69 6e 64 6f 77 2e 6c 6f 63 61 74 window.locat
5120: 69 6f 6e 2e 72 65 70 6c 61 63 65 28 20 22 2f 2f ion.replace( "//
5130: 22 20 2b 20 77 69 6e 64 6f 77 2e 6c 6f 63 61 74 " + window.locat
5140: 69 6f 6e 2e 68 6f 73 74 29 0a 7d 0a 0a 72 65 73 ion.host).}..res
5150: 65 74 28 29 20 7b 0a 0a 20 20 20 20 54 6f 6e 65 et() {.. Tone
5160: 2e 4d 61 73 74 65 72 2e 6d 75 74 65 20 3d 20 74 .Master.mute = t
5170: 72 75 65 3b 0a 20 20 20 20 54 6f 6e 65 2e 54 72 rue;. Tone.Tr
5180: 61 6e 73 70 6f 72 74 2e 73 74 6f 70 28 29 3b 0a ansport.stop();.
5190: 20 20 20 20 76 61 72 20 73 65 6c 66 20 3d 20 74 var self = t
51a0: 68 69 73 3b 0a 0a 20 20 20 20 69 66 20 28 73 65 his;.. if (se
51b0: 6c 66 2e 74 69 6d 65 72 29 20 7b 0a 20 20 20 20 lf.timer) {.
51c0: 20 20 20 20 63 6c 65 61 72 49 6e 74 65 72 76 61 clearInterva
51d0: 6c 28 73 65 6c 66 2e 74 69 6d 65 72 29 3b 0a 20 l(self.timer);.
51e0: 20 20 20 7d 0a 20 20 20 20 64 6f 63 75 6d 65 6e }. documen
51f0: 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 49 64 t.getElementById
5200: 28 27 74 65 6d 70 6f 2d 76 61 6c 75 65 27 29 2e ('tempo-value').
5210: 64 69 73 61 62 6c 65 64 20 3d 20 66 61 6c 73 65 disabled = false
5220: 3b 0a 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 67 ;. document.g
5230: 65 74 45 6c 65 6d 65 6e 74 42 79 49 64 28 27 74 etElementById('t
5240: 69 63 6b 2d 76 61 6c 75 65 27 29 2e 64 69 73 61 ick-value').disa
5250: 62 6c 65 64 20 3d 20 66 61 6c 73 65 3b 0a 20 20 bled = false;.
5260: 20 20 65 64 69 74 6f 72 2e 73 65 74 56 61 6c 75 editor.setValu
5270: 65 28 22 22 29 3b 0a 0a 20 20 20 20 74 68 69 73 e("");.. this
5280: 2e 73 74 61 74 65 20 3d 20 7b 0a 20 20 20 20 20 .state = {.
5290: 20 20 20 6d 65 6d 3a 20 7b 7d 2c 0a 20 20 20 20 mem: {},.
52a0: 20 20 20 20 64 69 61 6c 73 3a 20 5b 5d 2c 0a 20 dials: [],.
52b0: 20 20 20 20 20 20 20 73 61 6d 70 6c 65 73 3a 20 samples:
52c0: 5b 5d 2c 0a 20 20 20 20 20 20 20 20 74 65 6d 70 [],. temp
52d0: 6f 3a 20 31 32 30 2c 0a 20 20 20 20 20 20 20 20 o: 120,.
52e0: 74 69 63 6b 73 3a 20 31 36 2c 0a 20 20 20 20 7d ticks: 16,. }
52f0: 0a 0a 20 20 20 20 74 68 69 73 2e 75 70 64 61 74 .. this.updat
5300: 65 28 29 3b 0a 20 20 20 20 72 69 6f 74 2e 6d 6f e();. riot.mo
5310: 75 6e 74 28 27 62 69 74 72 68 79 74 68 6d 27 2c unt('bitrhythm',
5320: 20 7b 0a 20 20 20 20 20 20 20 20 73 6f 6e 67 3a {. song:
5330: 20 74 68 69 73 2e 70 72 6f 70 73 2e 73 6f 6e 67 this.props.song
5340: 0a 20 20 20 20 7d 29 0a 0a 0a 7d 0a 0a 65 64 69 . })...}..edi
5350: 74 54 65 6d 70 6f 28 65 29 20 7b 0a 20 20 20 20 tTempo(e) {.
5360: 74 68 69 73 2e 75 70 64 61 74 65 28 7b 0a 20 20 this.update({.
5370: 20 20 20 20 20 20 73 74 61 74 65 3a 20 7b 0a 20 state: {.
5380: 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 74 68 ...th
5390: 69 73 2e 73 74 61 74 65 2c 0a 20 20 20 20 20 20 is.state,.
53a0: 20 20 20 20 20 20 74 65 6d 70 6f 3a 20 70 61 72 tempo: par
53b0: 73 65 49 6e 74 28 65 2e 74 61 72 67 65 74 2e 76 seInt(e.target.v
53c0: 61 6c 75 65 29 0a 20 20 20 20 20 20 20 20 7d 0a alue). }.
53d0: 20 20 20 20 7d 29 0a 7d 0a 0a 65 64 69 74 54 69 }).}..editTi
53e0: 63 6b 73 28 65 29 20 7b 0a 20 20 20 20 74 68 69 cks(e) {. thi
53f0: 73 2e 75 70 64 61 74 65 28 7b 0a 20 20 20 20 20 s.update({.
5400: 20 20 20 73 74 61 74 65 3a 20 7b 0a 20 20 20 20 state: {.
5410: 20 20 20 20 20 20 20 20 2e 2e 2e 74 68 69 73 2e ...this.
5420: 73 74 61 74 65 2c 0a 20 20 20 20 20 20 20 20 20 state,.
5430: 20 20 20 74 69 63 6b 73 3a 20 65 2e 74 61 72 67 ticks: e.targ
5440: 65 74 2e 76 61 6c 75 65 0a 20 20 20 20 20 20 20 et.value.
5450: 20 7d 0a 20 20 20 20 7d 29 0a 7d 0a 0a 24 7b 63 }. }).}..${c
5460: 6f 72 65 5f 6c 6f 6f 70 7d 0a 0a 73 74 61 72 74 ore_loop}..start
5470: 28 29 20 7b 0a 20 20 20 20 72 65 63 6f 72 64 65 () {. recorde
5480: 72 2e 73 74 61 72 74 28 29 3b 0a 7d 0a 0a 73 74 r.start();.}..st
5490: 6f 70 28 29 20 7b 0a 20 20 20 20 72 65 63 6f 72 op() {. recor
54a0: 64 65 72 2e 73 74 6f 70 28 29 3b 0a 7d 0a 0a 61 der.stop();.}..a
54b0: 64 64 44 69 61 6c 28 29 20 7b 0a 20 20 20 20 74 ddDial() {. t
54c0: 68 69 73 2e 73 74 61 74 65 2e 64 69 61 6c 73 2e his.state.dials.
54d0: 70 75 73 68 28 7b 7d 29 3b 0a 20 20 20 20 74 68 push({});. th
54e0: 69 73 2e 75 70 64 61 74 65 28 29 3b 0a 7d 0a 0a is.update();.}..
54f0: 61 64 64 4e 75 6d 62 65 72 28 29 20 7b 0a 20 20 addNumber() {.
5500: 20 20 74 68 69 73 2e 73 74 61 74 65 2e 6e 75 6d this.state.num
5510: 62 65 72 73 2e 70 75 73 68 28 7b 7d 29 3b 0a 20 bers.push({});.
5520: 20 20 20 74 68 69 73 2e 75 70 64 61 74 65 28 29 this.update()
5530: 3b 0a 7d 0a 0a 61 64 64 55 52 4c 28 76 61 6c 75 ;.}..addURL(valu
5540: 65 29 20 7b 0a 20 20 20 20 76 61 72 20 73 65 6c e) {. var sel
5550: 66 20 3d 20 74 68 69 73 3b 0a 20 20 20 20 74 68 f = this;. th
5560: 69 73 2e 73 74 61 74 65 2e 73 61 6d 70 6c 65 73 is.state.samples
5570: 2e 70 75 73 68 28 7b 22 5f 5f 6e 61 6d 65 22 3a .push({"__name":
5580: 20 76 61 6c 75 65 7d 29 3b 0a 20 20 20 20 76 61 value});. va
5590: 72 20 73 61 6d 3b 0a 20 20 20 20 73 61 6d 20 3d r sam;. sam =
55a0: 20 6e 65 77 20 54 6f 6e 65 2e 53 61 6d 70 6c 65 new Tone.Sample
55b0: 72 28 7b 0a 20 20 20 20 20 20 20 20 75 72 6c 73 r({. urls
55c0: 3a 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 : {.
55d0: 20 22 43 33 22 3a 20 76 61 6c 75 65 2c 0a 20 20 "C3": value,.
55e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 29 3b 0a }. });.
55f0: 20 20 20 20 73 61 6d 5b 22 5f 5f 6e 61 6d 65 22 sam["__name"
5600: 5d 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20 20 73 ] = value;. s
5610: 61 6d 5b 22 5f 5f 75 72 6c 22 5d 20 3d 20 76 61 am["__url"] = va
5620: 6c 75 65 3b 0a 20 20 20 20 73 65 6c 66 2e 73 65 lue;. self.se
5630: 74 53 61 6d 70 6c 65 28 73 61 6d 2c 20 73 65 6c tSample(sam, sel
5640: 66 2e 73 74 61 74 65 2e 73 61 6d 70 6c 65 73 2e f.state.samples.
5650: 6c 65 6e 67 74 68 20 2d 20 31 29 3b 0a 7d 0a 0a length - 1);.}..
5660: 61 64 64 53 61 6d 70 6c 65 55 52 4c 28 29 20 7b addSampleURL() {
5670: 0a 20 20 20 20 76 61 72 20 73 65 6c 66 20 3d 20 . var self =
5680: 74 68 69 73 3b 0a 20 20 20 20 61 6c 65 72 74 69 this;. alerti
5690: 66 79 2e 70 72 6f 6d 70 74 28 20 27 45 6e 74 65 fy.prompt( 'Ente
56a0: 72 20 53 61 6d 70 6c 65 20 55 52 4c 27 2c 20 27 r Sample URL', '
56b0: 27 2c 20 27 27 0a 20 20 20 20 20 20 20 20 2c 20 ', ''. ,
56c0: 66 75 6e 63 74 69 6f 6e 28 65 76 74 2c 20 76 61 function(evt, va
56d0: 6c 75 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20 lue) {.
56e0: 20 20 20 73 65 6c 66 2e 61 64 64 55 52 4c 28 76 self.addURL(v
56f0: 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 20 20 7d alue);. }
5700: 0a 20 20 20 20 20 20 20 20 2c 20 66 75 6e 63 74 . , funct
5710: 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 20 20 ion() {.
5720: 20 20 20 20 61 6c 65 72 74 69 66 79 2e 65 72 72 alertify.err
5730: 6f 72 28 27 43 61 6e 63 65 6c 27 29 0a 20 20 20 or('Cancel').
5740: 20 20 20 20 20 7d 0a 20 20 20 20 29 3b 0a 7d 0a }. );.}.
5750: 0a 61 64 64 53 61 6d 70 6c 65 28 29 20 7b 0a 20 .addSample() {.
5760: 20 20 20 74 68 69 73 2e 73 74 61 74 65 2e 73 61 this.state.sa
5770: 6d 70 6c 65 73 2e 70 75 73 68 28 7b 7d 29 3b 0a mples.push({});.
5780: 20 20 20 20 74 68 69 73 2e 75 70 64 61 74 65 28 this.update(
5790: 29 3b 0a 7d 0a 0a 72 6d 53 61 6d 70 6c 65 28 69 );.}..rmSample(i
57a0: 6e 64 65 78 29 20 7b 0a 20 20 20 74 68 69 73 2e ndex) {. this.
57b0: 73 74 61 74 65 2e 73 61 6d 70 6c 65 73 2e 73 70 state.samples.sp
57c0: 6c 69 63 65 28 69 6e 64 65 78 2c 20 31 29 3b 0a lice(index, 1);.
57d0: 20 20 20 74 68 69 73 2e 75 70 64 61 74 65 28 29 this.update()
57e0: 3b 0a 7d 0a 0a 72 6d 44 69 61 6c 28 69 6e 64 65 ;.}..rmDial(inde
57f0: 78 29 20 7b 0a 20 20 20 74 68 69 73 2e 73 74 61 x) {. this.sta
5800: 74 65 2e 64 69 61 6c 73 2e 73 70 6c 69 63 65 28 te.dials.splice(
5810: 69 6e 64 65 78 2c 20 31 29 3b 0a 20 20 20 74 68 index, 1);. th
5820: 69 73 2e 75 70 64 61 74 65 28 29 3b 0a 7d 0a 0a is.update();.}..
5830: 72 6d 4e 75 6d 62 65 72 28 69 6e 64 65 78 29 20 rmNumber(index)
5840: 7b 0a 20 20 20 74 68 69 73 2e 73 74 61 74 65 2e {. this.state.
5850: 6e 75 6d 62 65 72 73 2e 73 70 6c 69 63 65 28 69 numbers.splice(i
5860: 6e 64 65 78 2c 20 31 29 3b 0a 20 20 20 74 68 69 ndex, 1);. thi
5870: 73 2e 75 70 64 61 74 65 28 29 3b 0a 7d 0a 0a 73 s.update();.}..s
5880: 65 74 53 61 6d 70 6c 65 28 65 2c 20 69 29 20 7b etSample(e, i) {
5890: 0a 20 20 20 20 74 68 69 73 2e 73 74 61 74 65 2e . this.state.
58a0: 73 61 6d 70 6c 65 73 5b 69 5d 20 3d 20 65 3b 0a samples[i] = e;.
58b0: 20 20 20 20 74 68 69 73 2e 75 70 64 61 74 65 28 this.update(
58c0: 29 3b 0a 7d 0a 0a 3c 2f 73 63 72 69 70 74 3e 0a );.}..</script>.
58d0: 0a 3c 2f 62 69 74 72 68 79 74 68 6d 3e 0a 0a 22 .</bitrhythm>.."
58e0: 22 22 0a 66 72 6f 6d 20 6d 61 6b 6f 2e 74 65 6d "".from mako.tem
58f0: 70 6c 61 74 65 20 69 6d 70 6f 72 74 20 54 65 6d plate import Tem
5900: 70 6c 61 74 65 0a 0a 63 6f 64 65 20 3d 20 54 65 plate..code = Te
5910: 6d 70 6c 61 74 65 28 62 69 74 72 68 79 74 68 6d mplate(bitrhythm
5920: 29 2e 72 65 6e 64 65 72 28 63 6f 72 65 5f 6c 6f ).render(core_lo
5930: 6f 70 3d 63 6f 72 65 5f 6c 6f 6f 70 29 0a 63 6f op=core_loop).co
5940: 67 2e 6f 75 74 28 62 69 74 72 68 79 74 68 6d 29 g.out(bitrhythm)
5950: 0a 6f 73 2e 73 79 73 74 65 6d 28 22 72 6d 20 70 .os.system("rm p
5960: 75 62 6c 69 63 2f 63 6f 6d 70 6f 6e 65 6e 74 73 ublic/components
5970: 2f 62 69 74 72 68 79 74 68 6d 2e 74 61 67 22 29 /bitrhythm.tag")
5980: 0a 66 20 3d 20 6f 70 65 6e 28 22 70 75 62 6c 69 .f = open("publi
5990: 63 2f 63 6f 6d 70 6f 6e 65 6e 74 73 2f 62 69 74 c/components/bit
59a0: 72 68 79 74 68 6d 2e 74 61 67 22 2c 20 22 77 22 rhythm.tag", "w"
59b0: 29 0a 66 2e 77 72 69 74 65 28 63 6f 64 65 29 0a ).f.write(code).
59c0: 66 2e 63 6c 6f 73 65 28 29 0a 40 3e 0a 40 40 0a f.close().@>.@@.
59d0: 60 60 60 0a 0a 23 23 20 57 6f 72 6b 6c 65 74 0a ```..## Worklet.
59e0: 0a 4d 6f 72 65 20 77 6f 72 6b 6c 65 74 20 69 6d .More worklet im
59f0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 0a 0a 2d plementations..-
5a00: 20 3c 68 74 74 70 73 3a 2f 2f 6d 69 6d 69 63 70 <https://mimicp
5a10: 72 6f 6a 65 63 74 2e 63 6f 6d 2f 67 75 69 64 65 roject.com/guide
5a20: 73 2f 6d 61 78 69 6d 4a 53 3e 20 20 0a 2d 20 47 s/maximJS> .- G
5a30: 69 62 62 65 72 69 73 68 0a 0a 53 6f 6d 65 20 69 ibberish..Some i
5a40: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6c 69 mplementation li
5a50: 6e 6b 73 0a 0a 3c 68 74 74 70 73 3a 2f 2f 73 74 nks..<https://st
5a60: 61 63 6b 6f 76 65 72 66 6c 6f 77 2e 63 6f 6d 2f ackoverflow.com/
5a70: 71 75 65 73 74 69 6f 6e 73 2f 31 32 30 38 39 36 questions/120896
5a80: 36 32 2f 6d 69 78 69 6e 67 2d 31 36 2d 62 69 74 62/mixing-16-bit
5a90: 2d 6c 69 6e 65 61 72 2d 70 63 6d 2d 73 74 72 65 -linear-pcm-stre
5aa0: 61 6d 73 2d 61 6e 64 2d 61 76 6f 69 64 69 6e 67 ams-and-avoiding
5ab0: 2d 63 6c 69 70 70 69 6e 67 2d 6f 76 65 72 66 6c -clipping-overfl
5ac0: 6f 77 3e 20 20 20 20 0a 3c 68 74 74 70 73 3a 2f ow> .<https:/
5ad0: 2f 77 77 77 2e 65 75 6d 75 73 2e 65 64 75 2e 75 /www.eumus.edu.u
5ae0: 79 2f 65 6d 65 2f 65 6e 73 65 6e 61 6e 7a 61 2f y/eme/ensenanza/
5af0: 65 6c 65 63 74 69 76 61 73 2f 64 73 70 2f 70 72 electivas/dsp/pr
5b00: 65 73 65 6e 74 61 63 69 6f 6e 65 73 2f 50 68 61 esentaciones/Pha
5b10: 73 65 56 6f 63 6f 64 65 72 54 75 74 6f 72 69 61 seVocoderTutoria
5b20: 6c 2e 70 64 66 3e 20 20 20 0a 0a 60 60 60 7b 63 l.pdf> ..```{c
5b30: 6f 64 65 2d 62 6c 6f 63 6b 7d 20 6a 73 0a 2d 2d ode-block} js.--
5b40: 2d 0a 66 6f 72 63 65 3a 20 74 72 75 65 0a 2d 2d -.force: true.--
5b50: 2d 0a 0a 40 3c 0a 69 6d 70 6f 72 74 20 63 6f 67 -..@<.import cog
5b60: 0a 69 6d 70 6f 72 74 20 6f 73 0a 0a 73 61 6d 70 .import os..samp
5b70: 6c 65 72 20 3d 20 22 22 22 0a 63 6c 61 73 73 20 ler = """.class
5b80: 53 61 6d 70 6c 65 72 20 65 78 74 65 6e 64 73 20 Sampler extends
5b90: 41 75 64 69 6f 57 6f 72 6b 6c 65 74 50 72 6f 63 AudioWorkletProc
5ba0: 65 73 73 6f 72 20 7b 0a 20 20 66 69 6c 65 73 20 essor {. files
5bb0: 3d 20 5b 5d 0a 20 20 72 65 61 64 49 64 78 20 3d = []. readIdx =
5bc0: 20 7b 7d 0a 20 20 6c 6f 6f 70 53 74 61 72 74 49 {}. loopStartI
5bd0: 64 78 20 3d 20 5b 5d 0a 0a 20 20 63 6f 6e 73 74 dx = [].. const
5be0: 72 75 63 74 6f 72 28 6f 70 74 69 6f 6e 73 29 20 ructor(options)
5bf0: 7b 0a 20 20 20 20 73 75 70 65 72 28 29 0a 20 20 {. super().
5c00: 20 20 74 68 69 73 2e 70 6f 72 74 2e 6f 6e 6d 65 this.port.onme
5c10: 73 73 61 67 65 20 3d 20 28 7b 20 64 61 74 61 20 ssage = ({ data
5c20: 7d 29 20 3d 3e 20 7b 0a 20 20 20 20 20 20 69 66 }) => {. if
5c30: 20 28 64 61 74 61 2e 69 6e 69 74 29 20 7b 0a 20 (data.init) {.
5c40: 20 20 20 20 20 20 20 74 68 69 73 2e 66 69 6c 65 this.file
5c50: 73 20 3d 20 64 61 74 61 2e 69 6e 69 74 0a 20 20 s = data.init.
5c60: 20 20 20 20 20 20 74 68 69 73 2e 6c 6f 6f 70 53 this.loopS
5c70: 74 61 72 74 49 64 78 20 3d 20 74 68 69 73 2e 66 tartIdx = this.f
5c80: 69 6c 65 73 2e 6d 61 70 28 66 75 6e 63 74 69 6f iles.map(functio
5c90: 6e 20 28 66 29 20 7b 0a 20 20 20 20 20 20 20 20 n (f) {.
5ca0: 20 20 20 20 72 65 74 75 72 6e 20 30 0a 20 20 20 return 0.
5cb0: 20 20 20 20 20 7d 29 0a 20 20 20 20 20 20 7d 0a }). }.
5cc0: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 64 else if (d
5cd0: 61 74 61 2e 6e 6f 74 65 4f 6e 29 20 7b 0a 20 20 ata.noteOn) {.
5ce0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 72 this.r
5cf0: 65 61 64 49 64 78 5b 64 61 74 61 2e 73 61 6d 70 eadIdx[data.samp
5d00: 6c 65 5d 20 3d 20 74 68 69 73 2e 6c 6f 6f 70 53 le] = this.loopS
5d10: 74 61 72 74 49 64 78 5b 64 61 74 61 2e 73 61 6d tartIdx[data.sam
5d20: 70 6c 65 5d 0a 20 20 20 20 20 20 7d 0a 20 20 20 ple]. }.
5d30: 20 20 20 65 6c 73 65 20 69 66 20 28 64 61 74 61 else if (data
5d40: 2e 6e 6f 74 65 4f 66 66 29 20 7b 0a 20 20 20 20 .noteOff) {.
5d50: 20 20 20 20 20 20 20 20 64 65 6c 65 74 65 20 74 delete t
5d60: 68 69 73 2e 72 65 61 64 49 64 78 5b 64 61 74 61 his.readIdx[data
5d70: 2e 73 61 6d 70 6c 65 5d 3b 0a 20 20 20 20 20 20 .sample];.
5d80: 7d 0a 20 20 20 20 7d 3b 0a 20 20 7d 0a 0a 20 20 }. };. }..
5d90: 70 72 6f 63 65 73 73 28 69 6e 70 75 74 73 2c 20 process(inputs,
5da0: 6f 75 74 70 75 74 73 29 20 7b 0a 20 20 20 20 76 outputs) {. v
5db0: 61 72 20 6f 75 74 4c 65 66 74 20 3d 20 6f 75 74 ar outLeft = out
5dc0: 70 75 74 73 5b 30 5d 5b 30 5d 0a 20 20 20 20 76 puts[0][0]. v
5dd0: 61 72 20 6f 75 74 52 69 67 68 74 20 3d 20 6f 75 ar outRight = ou
5de0: 74 70 75 74 73 5b 30 5d 5b 31 5d 0a 0a 20 20 20 tputs[0][1]..
5df0: 20 4f 62 6a 65 63 74 2e 6b 65 79 73 28 74 68 69 Object.keys(thi
5e00: 73 2e 72 65 61 64 49 64 78 29 2e 6d 61 70 28 28 s.readIdx).map((
5e10: 73 61 6d 70 6c 65 29 20 3d 3e 20 7b 0a 20 20 20 sample) => {.
5e20: 20 20 20 20 20 66 6f 72 20 28 6c 65 74 20 69 3d for (let i=
5e30: 30 3b 20 69 20 3c 20 6f 75 74 4c 65 66 74 2e 6c 0; i < outLeft.l
5e40: 65 6e 67 74 68 3b 20 69 2b 2b 2c 20 74 68 69 73 ength; i++, this
5e50: 2e 72 65 61 64 49 64 78 5b 73 61 6d 70 6c 65 5d .readIdx[sample]
5e60: 2b 2b 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 ++) {.
5e70: 20 20 69 66 20 28 74 68 69 73 2e 72 65 61 64 49 if (this.readI
5e80: 64 78 5b 73 61 6d 70 6c 65 5d 20 3c 20 74 68 69 dx[sample] < thi
5e90: 73 2e 66 69 6c 65 73 5b 73 61 6d 70 6c 65 5d 2e s.files[sample].
5ea0: 70 63 6d 4c 65 66 74 2e 6c 65 6e 67 74 68 29 20 pcmLeft.length)
5eb0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
5ec0: 20 20 6f 75 74 4c 65 66 74 5b 69 5d 20 2b 3d 20 outLeft[i] +=
5ed0: 74 68 69 73 2e 66 69 6c 65 73 5b 73 61 6d 70 6c this.files[sampl
5ee0: 65 5d 2e 70 63 6d 4c 65 66 74 5b 74 68 69 73 2e e].pcmLeft[this.
5ef0: 72 65 61 64 49 64 78 5b 73 61 6d 70 6c 65 5d 5d readIdx[sample]]
5f00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
5f10: 20 6f 75 74 52 69 67 68 74 5b 69 5d 20 2b 3d 20 outRight[i] +=
5f20: 74 68 69 73 2e 66 69 6c 65 73 5b 73 61 6d 70 6c this.files[sampl
5f30: 65 5d 2e 70 63 6d 52 69 67 68 74 5b 74 68 69 73 e].pcmRight[this
5f40: 2e 72 65 61 64 49 64 78 5b 73 61 6d 70 6c 65 5d .readIdx[sample]
5f50: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a ]. }.
5f60: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 29 }. })
5f70: 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 .. return tru
5f80: 65 0a 20 20 7d 0a 7d 0a 0a 72 65 67 69 73 74 65 e. }.}..registe
5f90: 72 50 72 6f 63 65 73 73 6f 72 28 27 73 61 6d 70 rProcessor('samp
5fa0: 6c 65 72 27 2c 20 53 61 6d 70 6c 65 72 29 0a 22 ler', Sampler)."
5fb0: 22 22 0a 0a 63 6f 67 2e 6f 75 74 28 73 61 6d 70 ""..cog.out(samp
5fc0: 6c 65 72 29 0a 6f 73 2e 73 79 73 74 65 6d 28 22 ler).os.system("
5fd0: 72 6d 20 70 75 62 6c 69 63 2f 73 61 6d 70 6c 65 rm public/sample
5fe0: 72 2e 6a 73 22 29 0a 66 20 3d 20 6f 70 65 6e 28 r.js").f = open(
5ff0: 22 70 75 62 6c 69 63 2f 73 61 6d 70 6c 65 72 2e "public/sampler.
6000: 6a 73 22 2c 20 22 77 22 29 0a 66 2e 77 72 69 74 js", "w").f.writ
6010: 65 28 73 61 6d 70 6c 65 72 29 0a 66 2e 63 6c 6f e(sampler).f.clo
6020: 73 65 28 29 0a 40 3e 0a 40 40 0a 60 60 60 0a 0a se().@>.@@.```..
6030: 23 23 20 53 61 6d 70 6c 65 0a 0a 59 6f 75 20 63 ## Sample..You c
6040: 61 6e 20 61 64 64 20 73 61 6d 70 6c 65 73 20 75 an add samples u
6050: 73 69 6e 67 20 74 68 65 20 66 69 6c 65 20 75 70 sing the file up
6060: 6c 6f 61 64 2e 20 41 6c 6c 20 73 61 6d 70 6c 65 load. All sample
6070: 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 s are available
6080: 61 73 20 61 6e 20 61 72 72 61 79 20 e2 80 93 20 as an array ...
6090: 73 61 6d 70 6c 65 73 2e 20 49 6e 69 74 69 61 6c samples. Initial
60a0: 69 73 65 20 73 61 6d 70 6c 65 73 2c 20 67 6c 6f ise samples, glo
60b0: 62 61 6c 20 76 61 72 69 61 62 6c 65 73 20 61 6e bal variables an
60c0: 64 20 73 79 6e 74 68 65 73 69 73 65 72 73 20 75 d synthesisers u
60d0: 73 69 6e 67 20 74 68 65 20 74 72 61 6e 73 69 74 sing the transit
60e0: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 ion function and
60f0: 20 63 68 61 6e 67 65 20 74 68 65 20 73 61 6d 70 change the samp
6100: 6c 65 20 70 61 72 61 6d 65 74 65 72 73 20 75 73 le parameters us
6110: 69 6e 67 20 74 68 65 20 73 61 6d 65 20 64 75 72 ing the same dur
6120: 69 6e 67 20 6c 69 76 65 20 63 6f 64 69 6e 67 2e ing live coding.
6130: 0a 0a 60 60 60 7b 63 6f 64 65 2d 62 6c 6f 63 6b ..```{code-block
6140: 7d 20 68 74 6d 6c 0a 2d 2d 2d 0a 66 6f 72 63 65 } html.---.force
6150: 3a 20 74 72 75 65 0a 2d 2d 2d 0a 0a 40 3c 0a 69 : true.---..@<.i
6160: 6d 70 6f 72 74 20 63 6f 67 0a 69 6d 70 6f 72 74 mport cog.import
6170: 20 6f 73 0a 0a 73 61 6d 70 6c 65 20 3d 20 22 22 os..sample = ""
6180: 22 0a 3c 73 61 6d 70 6c 65 3e 0a 20 20 20 20 3c ".<sample>. <
6190: 76 62 6f 78 20 63 6c 61 73 73 3d 22 6d 6c 2d 32 vbox class="ml-2
61a0: 22 3e 0a 20 20 20 20 20 20 20 20 3c 76 73 74 61 ">. <vsta
61b0: 63 6b 20 63 6c 61 73 73 3d 22 6d 6c 2d 32 22 3e ck class="ml-2">
61c0: 0a 20 20 20 20 20 20 20 20 3c 21 2d 2d 20 3c 69 . <!-- <i
61d0: 6e 70 75 74 20 74 79 70 65 3d 22 66 69 6c 65 22 nput type="file"
61e0: 20 69 64 3d 7b 22 73 61 6d 70 6c 65 2d 66 69 6c id={"sample-fil
61f0: 65 22 20 2b 20 74 68 69 73 2e 70 72 6f 70 73 2e e" + this.props.
6200: 74 69 7d 20 73 74 79 6c 65 3d 22 77 69 64 74 68 ti} style="width
6210: 3a 20 31 32 30 70 78 3b 22 2f 3e 20 2d 2d 3e 0a : 120px;"/> -->.
6220: 20 20 20 20 20 20 20 20 3c 64 69 76 3e 0a 20 20 <div>.
6230: 20 20 20 20 20 20 20 20 20 20 3c 73 70 61 6e 20 <span
6240: 63 6c 61 73 73 3d 22 6d 61 78 2d 77 69 64 74 68 class="max-width
6250: 3a 20 31 32 30 70 78 3b 74 65 78 74 2d 6f 76 65 : 120px;text-ove
6260: 72 66 6c 6f 77 3a 20 65 6c 6c 69 70 73 69 73 3b rflow: ellipsis;
6270: 20 77 68 69 74 65 2d 73 70 61 63 65 3a 20 6e 6f white-space: no
6280: 77 72 61 70 3b 22 3e 7b 20 67 65 74 4c 61 73 74 wrap;">{ getLast
6290: 28 74 68 69 73 2e 70 72 6f 70 73 2e 74 69 20 2d (this.props.ti -
62a0: 31 29 7d 20 3c 2f 73 70 61 6e 3e 0a 20 20 20 20 1)} </span>.
62b0: 20 20 20 20 20 20 20 20 3c 73 70 61 6e 20 63 6c <span cl
62c0: 61 73 73 3d 22 63 75 72 73 6f 72 2d 70 6f 69 6e ass="cursor-poin
62d0: 74 65 72 22 20 69 64 3d 7b 22 73 61 6d 70 6c 65 ter" id={"sample
62e0: 22 20 2b 20 74 68 69 73 2e 70 72 6f 70 73 2e 74 " + this.props.t
62f0: 69 7d 20 6f 6e 63 6c 69 63 6b 3d 7b 72 65 6d 6f i} onclick={remo
6300: 76 65 28 74 68 69 73 2e 70 72 6f 70 73 2e 74 69 ve(this.props.ti
6310: 20 2d 31 29 7d 3e 28 78 29 3c 2f 73 70 61 6e 3e -1)}>(x)</span>
6320: 0a 20 20 20 20 20 20 20 20 3c 2f 64 69 76 3e 0a . </div>.
6330: 20 20 20 20 20 20 20 20 3c 2f 76 73 74 61 63 6b </vstack
6340: 3e 0a 20 20 20 20 3c 2f 76 62 6f 78 3e 0a 0a 20 >. </vbox>..
6350: 20 20 20 3c 73 63 72 69 70 74 3e 0a 20 20 20 20 <script>.
6360: 74 68 69 73 2e 70 72 6f 70 73 20 3d 20 6f 70 74 this.props = opt
6370: 73 3b 0a 0a 20 20 20 20 72 65 6d 6f 76 65 28 69 s;.. remove(i
6380: 6e 64 65 78 29 20 7b 0a 20 20 20 20 20 20 20 20 ndex) {.
6390: 72 65 74 75 72 6e 20 28 29 20 3d 3e 20 7b 0a 20 return () => {.
63a0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e this.
63b0: 70 72 6f 70 73 2e 72 6d 73 61 6d 70 6c 65 28 69 props.rmsample(i
63c0: 6e 64 65 78 29 3b 0a 20 20 20 20 20 20 20 20 7d ndex);. }
63d0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 67 65 74 4c . }.. getL
63e0: 61 73 74 20 28 69 6e 64 65 78 29 20 7b 0a 20 20 ast (index) {.
63f0: 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 70 if (this.p
6400: 72 6f 70 73 2e 73 61 6d 70 6c 65 73 20 26 26 20 rops.samples &&
6410: 74 68 69 73 2e 70 72 6f 70 73 2e 73 61 6d 70 6c this.props.sampl
6420: 65 73 5b 69 6e 64 65 78 5d 20 26 26 20 74 68 69 es[index] && thi
6430: 73 2e 70 72 6f 70 73 2e 73 61 6d 70 6c 65 73 5b s.props.samples[
6440: 69 6e 64 65 78 5d 5b 22 5f 5f 6e 61 6d 65 22 5d index]["__name"]
6450: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 ) {.
6460: 76 61 72 20 65 20 3d 20 74 68 69 73 2e 70 72 6f var e = this.pro
6470: 70 73 2e 73 61 6d 70 6c 65 73 5b 69 6e 64 65 78 ps.samples[index
6480: 5d 5b 22 5f 5f 6e 61 6d 65 22 5d 3b 0a 20 20 20 ]["__name"];.
6490: 20 20 20 20 20 20 20 20 20 76 61 72 20 65 6c 65 var ele
64a0: 6d 73 20 3d 20 65 2e 73 70 6c 69 74 28 22 2f 22 ms = e.split("/"
64b0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 );. v
64c0: 61 72 20 6e 61 6d 65 20 3d 20 65 6c 65 6d 73 5b ar name = elems[
64d0: 65 6c 65 6d 73 2e 6c 65 6e 67 74 68 20 2d 20 31 elems.length - 1
64e0: 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 ];. r
64f0: 65 74 75 72 6e 20 6e 61 6d 65 3b 0a 20 20 20 20 eturn name;.
6500: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 } else {.
6510: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 6f 6c 65 console
6520: 2e 6c 6f 67 28 74 68 69 73 2e 70 72 6f 70 73 29 .log(this.props)
6530: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 . ret
6540: 75 72 6e 20 22 22 3b 0a 20 20 20 20 20 20 20 20 urn "";.
6550: 7d 0a 20 20 20 20 7d 0a 0a 0a 20 20 20 20 74 68 }. }... th
6560: 69 73 2e 6f 6e 28 22 6d 6f 75 6e 74 22 2c 20 66 is.on("mount", f
6570: 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 unction () {.
6580: 20 7d 29 3b 0a 20 20 20 3c 2f 73 63 72 69 70 74 });. </script
6590: 3e 0a 3c 2f 73 61 6d 70 6c 65 3e 0a 22 22 22 0a >.</sample>.""".
65a0: 0a 63 6f 67 2e 6f 75 74 28 73 61 6d 70 6c 65 29 .cog.out(sample)
65b0: 0a 6f 73 2e 73 79 73 74 65 6d 28 22 72 6d 20 70 .os.system("rm p
65c0: 75 62 6c 69 63 2f 63 6f 6d 70 6f 6e 65 6e 74 73 ublic/components
65d0: 2f 73 61 6d 70 6c 65 2e 74 61 67 22 29 0a 66 20 /sample.tag").f
65e0: 3d 20 6f 70 65 6e 28 22 70 75 62 6c 69 63 2f 63 = open("public/c
65f0: 6f 6d 70 6f 6e 65 6e 74 73 2f 73 61 6d 70 6c 65 omponents/sample
6600: 2e 74 61 67 22 2c 20 22 77 22 29 0a 66 2e 77 72 .tag", "w").f.wr
6610: 69 74 65 28 73 61 6d 70 6c 65 29 0a 66 2e 63 6c ite(sample).f.cl
6620: 6f 73 65 28 29 0a 40 3e 0a 40 40 0a 60 60 60 0a ose().@>.@@.```.
6630: 0a 40 3c 0a 69 6d 70 6f 72 74 20 63 6f 67 0a 69 .@<.import cog.i
6640: 6d 70 6f 72 74 20 6f 73 0a 0a 61 70 70 20 3d 20 mport os..app =
6650: 22 22 22 0a 28 69 6d 70 6f 72 74 20 5b 73 61 6e """.(import [san
6660: 69 63 20 5b 53 61 6e 69 63 20 72 65 73 70 6f 6e ic [Sanic respon
6670: 73 65 5d 5d 29 0a 28 69 6d 70 6f 72 74 20 5b 73 se]]).(import [s
6680: 61 6e 69 63 2e 72 65 73 70 6f 6e 73 65 20 5b 6a anic.response [j
6690: 73 6f 6e 20 74 65 78 74 5d 5d 29 0a 28 69 6d 70 son text]]).(imp
66a0: 6f 72 74 20 5b 73 61 6e 69 63 2e 65 78 63 65 70 ort [sanic.excep
66b0: 74 69 6f 6e 73 20 5b 4e 6f 74 46 6f 75 6e 64 20 tions [NotFound
66c0: 61 62 6f 72 74 5d 5d 29 0a 28 69 6d 70 6f 72 74 abort]]).(import
66d0: 20 5b 6a 69 6e 6a 61 32 20 5b 45 6e 76 69 72 6f [jinja2 [Enviro
66e0: 6e 6d 65 6e 74 20 46 69 6c 65 53 79 73 74 65 6d nment FileSystem
66f0: 4c 6f 61 64 65 72 5d 5d 29 0a 28 69 6d 70 6f 72 Loader]]).(impor
6700: 74 20 72 65 29 0a 28 69 6d 70 6f 72 74 20 69 70 t re).(import ip
6710: 64 62 29 0a 28 69 6d 70 6f 72 74 20 73 79 73 29 db).(import sys)
6720: 0a 28 69 6d 70 6f 72 74 20 74 72 61 63 65 62 61 .(import traceba
6730: 63 6b 29 0a 28 69 6d 70 6f 72 74 20 6a 73 6f 6e ck).(import json
6740: 29 0a 28 69 6d 70 6f 72 74 20 64 61 74 65 74 69 ).(import dateti
6750: 6d 65 29 0a 28 69 6d 70 6f 72 74 20 5b 65 6d 61 me).(import [ema
6760: 69 6c 2e 75 74 69 6c 73 20 5b 66 6f 72 6d 61 74 il.utils [format
6770: 5f 64 61 74 65 74 69 6d 65 5d 5d 29 0a 28 69 6d _datetime]]).(im
6780: 70 6f 72 74 20 5b 75 72 6c 6c 69 62 2e 70 61 72 port [urllib.par
6790: 73 65 20 5b 75 72 6c 70 61 72 73 65 5d 5d 29 0a se [urlparse]]).
67a0: 28 69 6d 70 6f 72 74 20 62 61 73 65 36 34 29 0a (import base64).
67b0: 0a 28 73 65 74 76 20 66 69 6c 65 2d 6c 6f 61 64 .(setv file-load
67c0: 65 72 20 28 46 69 6c 65 53 79 73 74 65 6d 4c 6f er (FileSystemLo
67d0: 61 64 65 72 20 22 74 65 6d 70 6c 61 74 65 73 22 ader "templates"
67e0: 29 29 0a 28 73 65 74 76 20 65 6e 76 20 28 45 6e )).(setv env (En
67f0: 76 69 72 6f 6e 6d 65 6e 74 20 3a 6c 6f 61 64 65 vironment :loade
6800: 72 20 66 69 6c 65 2d 6c 6f 61 64 65 72 29 29 0a r file-loader)).
6810: 0a 28 73 65 74 76 20 61 70 70 20 28 53 61 6e 69 .(setv app (Sani
6820: 63 20 22 42 69 74 72 68 79 74 68 6d 22 29 29 0a c "Bitrhythm")).
6830: 0a 28 77 69 74 68 2d 64 65 63 6f 72 61 74 6f 72 .(with-decorator
6840: 0a 20 20 28 61 70 70 2e 65 78 63 65 70 74 69 6f . (app.exceptio
6850: 6e 20 4e 6f 74 46 6f 75 6e 64 29 0a 20 20 28 64 n NotFound). (d
6860: 65 66 6e 2f 61 20 69 67 6e 6f 72 65 5f 34 30 34 efn/a ignore_404
6870: 73 20 5b 72 65 71 75 65 73 74 20 65 78 63 65 70 s [request excep
6880: 74 69 6f 6e 5d 0a 20 20 20 20 28 72 65 74 75 72 tion]. (retur
6890: 6e 20 28 74 65 78 74 20 28 2b 20 22 59 65 70 2c n (text (+ "Yep,
68a0: 20 49 20 74 6f 74 61 6c 6c 79 20 66 6f 75 6e 64 I totally found
68b0: 20 74 68 65 20 70 61 67 65 20 22 20 72 65 71 75 the page " requ
68c0: 65 73 74 2e 75 72 6c 29 29 29 0a 20 20 29 0a 29 est.url))). ).)
68d0: 0a 0a 28 77 69 74 68 2d 64 65 63 6f 72 61 74 6f ..(with-decorato
68e0: 72 0a 20 20 28 61 70 70 2e 72 6f 75 74 65 20 22 r. (app.route "
68f0: 2f 73 6f 6e 67 2f 3c 6e 61 6d 65 3e 22 29 0a 20 /song/<name>").
6900: 20 28 64 65 66 6e 2f 61 20 67 65 74 2d 69 6e 64 (defn/a get-ind
6910: 65 78 20 5b 72 65 71 75 65 73 74 20 6e 61 6d 65 ex [request name
6920: 5d 0a 20 20 20 20 28 73 65 74 76 20 74 65 6d 70 ]. (setv temp
6930: 6c 61 74 65 20 28 65 6e 76 2e 67 65 74 5f 74 65 late (env.get_te
6940: 6d 70 6c 61 74 65 20 22 69 6e 64 65 78 2e 68 74 mplate "index.ht
6950: 6d 6c 22 29 29 0a 20 20 20 20 28 72 65 74 75 72 ml")). (retur
6960: 6e 20 28 72 65 73 70 6f 6e 73 65 2e 68 74 6d 6c n (response.html
6970: 20 28 74 65 6d 70 6c 61 74 65 2e 72 65 6e 64 65 (template.rende
6980: 72 20 7b 22 64 61 74 61 22 20 6e 61 6d 65 7d 29 r {"data" name})
6990: 29 29 0a 20 20 29 0a 29 0a 0a 28 77 69 74 68 2d )). ).)..(with-
69a0: 64 65 63 6f 72 61 74 6f 72 0a 20 20 28 61 70 70 decorator. (app
69b0: 2e 72 6f 75 74 65 20 22 2f 22 29 0a 20 20 28 64 .route "/"). (d
69c0: 65 66 6e 2f 61 20 67 65 74 2d 69 6e 64 65 78 20 efn/a get-index
69d0: 5b 72 65 71 75 65 73 74 5d 0a 20 20 20 20 28 73 [request]. (s
69e0: 65 74 76 20 74 65 6d 70 6c 61 74 65 20 28 65 6e etv template (en
69f0: 76 2e 67 65 74 5f 74 65 6d 70 6c 61 74 65 20 22 v.get_template "
6a00: 69 6e 64 65 78 2e 68 74 6d 6c 22 29 29 0a 20 20 index.html")).
6a10: 20 20 28 72 65 74 75 72 6e 20 28 72 65 73 70 6f (return (respo
6a20: 6e 73 65 2e 68 74 6d 6c 20 28 74 65 6d 70 6c 61 nse.html (templa
6a30: 74 65 2e 72 65 6e 64 65 72 20 7b 22 64 61 74 61 te.render {"data
6a40: 22 20 22 22 7d 29 29 29 0a 20 20 29 0a 29 0a 0a " ""}))). ).)..
6a50: 28 77 69 74 68 2d 64 65 63 6f 72 61 74 6f 72 0a (with-decorator.
6a60: 20 20 28 61 70 70 2e 72 6f 75 74 65 20 22 2f 69 (app.route "/i
6a70: 73 73 75 65 22 29 0a 20 20 28 64 65 66 6e 2f 61 ssue"). (defn/a
6a80: 20 67 65 74 2d 69 6e 64 65 78 20 5b 72 65 71 75 get-index [requ
6a90: 65 73 74 5d 0a 20 20 20 20 28 73 65 74 76 20 74 est]. (setv t
6aa0: 65 6d 70 6c 61 74 65 20 28 65 6e 76 2e 67 65 74 emplate (env.get
6ab0: 5f 74 65 6d 70 6c 61 74 65 20 22 70 61 67 65 2e _template "page.
6ac0: 68 74 6d 6c 22 29 29 0a 20 20 20 20 28 72 65 74 html")). (ret
6ad0: 75 72 6e 20 28 72 65 73 70 6f 6e 73 65 2e 68 74 urn (response.ht
6ae0: 6d 6c 20 28 74 65 6d 70 6c 61 74 65 2e 72 65 6e ml (template.ren
6af0: 64 65 72 29 29 29 0a 20 20 29 0a 29 0a 0a 28 61 der))). ).)..(a
6b00: 70 70 2e 73 74 61 74 69 63 20 22 2f 22 20 22 2e pp.static "/" ".
6b10: 2f 70 75 62 6c 69 63 22 29 0a 0a 28 64 65 66 6d /public")..(defm
6b20: 61 69 6e 20 5b 26 72 65 73 74 20 61 72 67 73 5d ain [&rest args]
6b30: 0a 20 20 20 20 28 61 70 70 2e 72 75 6e 20 3a 68 . (app.run :h
6b40: 6f 73 74 20 22 30 2e 30 2e 30 2e 30 22 20 3a 70 ost "0.0.0.0" :p
6b50: 6f 72 74 20 38 30 31 35 29 0a 29 0a 22 22 22 0a ort 8015).).""".
6b60: 0a 69 66 20 44 45 56 20 3d 3d 20 22 31 22 3a 0a .if DEV == "1":.
6b70: 20 20 20 20 66 6f 72 5f 64 6f 63 73 20 3d 20 22 for_docs = "
6b80: 22 22 0a 23 23 20 41 70 70 0a 0a 60 60 60 7b 63 "".## App..```{c
6b90: 6f 64 65 2d 62 6c 6f 63 6b 7d 20 68 79 6c 61 6e ode-block} hylan
6ba0: 67 0a 2d 2d 2d 0a 66 6f 72 63 65 3a 20 74 72 75 g.---.force: tru
6bb0: 65 0a 2d 2d 2d 0a 25 73 0a 60 60 60 0a 22 22 22 e.---.%s.```."""
6bc0: 0a 20 20 20 20 63 6f 67 2e 6f 75 74 28 66 6f 72 . cog.out(for
6bd0: 5f 64 6f 63 73 20 25 20 28 61 70 70 2c 29 29 0a _docs % (app,)).
6be0: 6f 73 2e 73 79 73 74 65 6d 28 22 72 6d 20 62 69 os.system("rm bi
6bf0: 74 72 68 79 74 68 6d 2e 68 79 22 29 0a 66 20 3d trhythm.hy").f =
6c00: 20 6f 70 65 6e 28 22 62 69 74 72 68 79 74 68 6d open("bitrhythm
6c10: 2e 68 79 22 2c 20 22 77 22 29 0a 66 2e 77 72 69 .hy", "w").f.wri
6c20: 74 65 28 61 70 70 29 0a 66 2e 63 6c 6f 73 65 28 te(app).f.close(
6c30: 29 0a 40 3e 0a 40 40 0a 0a 40 3c 0a 69 6d 70 6f ).@>.@@..@<.impo
6c40: 72 74 20 63 6f 67 0a 69 6d 70 6f 72 74 20 6f 73 rt cog.import os
6c50: 0a 0a 69 6e 64 65 78 20 3d 20 22 22 22 0a 3c 21 ..index = """.<!
6c60: 44 4f 43 54 59 50 45 20 68 74 6d 6c 3e 0a 3c 68 DOCTYPE html>.<h
6c70: 74 6d 6c 20 6c 61 6e 67 3d 22 65 6e 22 3e 0a 0a tml lang="en">..
6c80: 20 20 20 20 3c 68 65 61 64 3e 0a 20 20 20 20 20 <head>.
6c90: 20 20 20 3c 6d 65 74 61 20 63 68 61 72 73 65 74 <meta charset
6ca0: 3d 22 75 74 66 2d 38 22 3e 0a 0a 20 20 20 20 20 ="utf-8">..
6cb0: 20 20 20 3c 74 69 74 6c 65 3e 42 69 74 72 68 79 <title>Bitrhy
6cc0: 74 68 6d 3c 2f 74 69 74 6c 65 3e 0a 0a 20 20 20 thm</title>..
6cd0: 20 20 20 20 20 3c 6d 65 74 61 20 68 74 74 70 2d <meta http-
6ce0: 65 71 75 69 76 3d 22 43 61 63 68 65 2d 43 6f 6e equiv="Cache-Con
6cf0: 74 72 6f 6c 22 20 63 6f 6e 74 65 6e 74 3d 22 6e trol" content="n
6d00: 6f 2d 63 61 63 68 65 2c 20 6e 6f 2d 73 74 6f 72 o-cache, no-stor
6d10: 65 2c 20 6d 75 73 74 2d 72 65 76 61 6c 69 64 61 e, must-revalida
6d20: 74 65 22 20 2f 3e 0a 20 20 20 20 20 20 20 20 3c te" />. <
6d30: 6d 65 74 61 20 68 74 74 70 2d 65 71 75 69 76 3d meta http-equiv=
6d40: 22 50 72 61 67 6d 61 22 20 63 6f 6e 74 65 6e 74 "Pragma" content
6d50: 3d 22 6e 6f 2d 63 61 63 68 65 22 20 2f 3e 0a 20 ="no-cache" />.
6d60: 20 20 20 20 20 20 20 3c 6d 65 74 61 20 68 74 74 <meta htt
6d70: 70 2d 65 71 75 69 76 3d 22 45 78 70 69 72 65 73 p-equiv="Expires
6d80: 22 20 63 6f 6e 74 65 6e 74 3d 22 30 22 20 2f 3e " content="0" />
6d90: 0a 0a 20 20 20 20 20 20 20 20 3c 6d 65 74 61 20 .. <meta
6da0: 63 6f 6e 74 65 6e 74 3d 22 42 69 74 72 68 79 74 content="Bitrhyt
6db0: 68 6d 22 20 6e 61 6d 65 3d 22 64 65 73 63 72 69 hm" name="descri
6dc0: 70 74 69 6f 6e 22 20 78 6d 6c 3a 6c 61 6e 67 3d ption" xml:lang=
6dd0: 22 65 6e 22 20 6c 61 6e 67 3d 22 65 6e 22 3e 0a "en" lang="en">.
6de0: 20 20 20 20 20 20 20 20 3c 6d 65 74 61 20 63 6f <meta co
6df0: 6e 74 65 6e 74 3d 22 6c 69 74 65 72 61 74 65 20 ntent="literate
6e00: 70 72 6f 67 72 61 6d 6d 69 6e 67 2c 20 70 35 2c programming, p5,
6e10: 20 6c 69 76 65 20 63 6f 64 69 6e 67 2c 20 61 6c live coding, al
6e20: 67 6f 72 61 76 65 2c 20 64 65 6d 6f 73 63 65 6e gorave, demoscen
6e30: 65 2c 20 63 72 65 61 74 69 76 65 20 70 72 6f 67 e, creative prog
6e40: 72 61 6d 6d 69 6e 67 2c 20 6d 75 73 69 63 2c 20 ramming, music,
6e50: 74 65 63 68 6e 6f 2c 20 70 72 6f 67 72 61 6d 6d techno, programm
6e60: 69 6e 67 2c 20 77 65 62 61 75 64 69 6f 2c 20 77 ing, webaudio, w
6e70: 65 62 67 6c 2c 20 70 35 2c 20 69 6d 70 72 6f 76 ebgl, p5, improv
6e80: 69 73 69 6e 67 22 3e 0a 0a 20 20 20 20 20 20 20 ising">..
6e90: 24 7b 63 6f 6d 6d 6f 6e 5f 73 63 72 69 70 74 73 ${common_scripts
6ea0: 7d 0a 0a 20 20 20 20 20 20 20 20 3c 6c 69 6e 6b }.. <link
6eb0: 20 72 65 6c 3d 22 70 72 65 63 6f 6e 6e 65 63 74 rel="preconnect
6ec0: 22 20 68 72 65 66 3d 22 68 74 74 70 73 3a 2f 2f " href="https://
6ed0: 66 6f 6e 74 73 2e 67 73 74 61 74 69 63 2e 63 6f fonts.gstatic.co
6ee0: 6d 22 3e 0a 20 20 20 20 20 20 20 20 3c 6c 69 6e m">. <lin
6ef0: 6b 20 68 72 65 66 3d 22 68 74 74 70 73 3a 2f 2f k href="https://
6f00: 66 6f 6e 74 73 2e 67 6f 6f 67 6c 65 61 70 69 73 fonts.googleapis
6f10: 2e 63 6f 6d 2f 63 73 73 32 3f 66 61 6d 69 6c 79 .com/css2?family
6f20: 3d 52 6f 62 6f 74 6f 2b 4d 6f 6e 6f 3a 69 74 61 =Roboto+Mono:ita
6f30: 6c 2c 77 67 68 74 40 30 2c 31 30 30 3b 30 2c 32 l,wght@0,100;0,2
6f40: 30 30 3b 30 2c 33 30 30 3b 30 2c 34 30 30 3b 30 00;0,300;0,400;0
6f50: 2c 35 30 30 3b 30 2c 37 30 30 3b 31 2c 31 30 30 ,500;0,700;1,100
6f60: 3b 31 2c 32 30 30 3b 31 2c 33 30 30 3b 31 2c 34 ;1,200;1,300;1,4
6f70: 30 30 3b 31 2c 35 30 30 3b 31 2c 37 30 30 26 64 00;1,500;1,700&d
6f80: 69 73 70 6c 61 79 3d 73 77 61 70 22 20 72 65 6c isplay=swap" rel
6f90: 3d 22 73 74 79 6c 65 73 68 65 65 74 22 3e 0a 20 ="stylesheet">.
6fa0: 20 20 20 20 20 20 20 3c 6c 69 6e 6b 20 68 72 65 <link hre
6fb0: 66 3d 22 68 74 74 70 73 3a 2f 2f 66 6f 6e 74 73 f="https://fonts
6fc0: 2e 67 6f 6f 67 6c 65 61 70 69 73 2e 63 6f 6d 2f .googleapis.com/
6fd0: 63 73 73 32 3f 66 61 6d 69 6c 79 3d 4d 61 6a 6f css2?family=Majo
6fe0: 72 2b 4d 6f 6e 6f 2b 44 69 73 70 6c 61 79 26 66 r+Mono+Display&f
6ff0: 61 6d 69 6c 79 3d 52 6f 62 6f 74 6f 2b 4d 6f 6e amily=Roboto+Mon
7000: 6f 3a 69 74 61 6c 2c 77 67 68 74 40 30 2c 31 30 o:ital,wght@0,10
7010: 30 3b 30 2c 32 30 30 3b 30 2c 33 30 30 3b 30 2c 0;0,200;0,300;0,
7020: 34 30 30 3b 30 2c 35 30 30 3b 30 2c 37 30 30 3b 400;0,500;0,700;
7030: 31 2c 31 30 30 3b 31 2c 32 30 30 3b 31 2c 33 30 1,100;1,200;1,30
7040: 30 3b 31 2c 34 30 30 3b 31 2c 35 30 30 3b 31 2c 0;1,400;1,500;1,
7050: 37 30 30 26 64 69 73 70 6c 61 79 3d 73 77 61 70 700&display=swap
7060: 22 20 72 65 6c 3d 22 73 74 79 6c 65 73 68 65 65 " rel="styleshee
7070: 74 22 3e 0a 0a 20 20 20 20 20 20 20 20 3c 73 63 t">.. <sc
7080: 72 69 70 74 20 73 72 63 3d 22 68 74 74 70 73 3a ript src="https:
7090: 2f 2f 63 6f 64 65 2e 6a 71 75 65 72 79 2e 63 6f //code.jquery.co
70a0: 6d 2f 75 69 2f 31 2e 31 32 2e 30 2f 6a 71 75 65 m/ui/1.12.0/jque
70b0: 72 79 2d 75 69 2e 6d 69 6e 2e 6a 73 22 3e 3c 2f ry-ui.min.js"></
70c0: 73 63 72 69 70 74 3e 0a 20 20 20 20 20 20 20 20 script>.
70d0: 3c 6c 69 6e 6b 20 72 65 6c 3d 22 73 74 79 6c 65 <link rel="style
70e0: 73 68 65 65 74 22 20 68 72 65 66 3d 22 68 74 74 sheet" href="htt
70f0: 70 73 3a 2f 2f 63 6f 64 65 2e 6a 71 75 65 72 79 ps://code.jquery
7100: 2e 63 6f 6d 2f 75 69 2f 31 2e 31 32 2e 30 2f 74 .com/ui/1.12.0/t
7110: 68 65 6d 65 73 2f 73 6d 6f 6f 74 68 6e 65 73 73 hemes/smoothness
7120: 2f 6a 71 75 65 72 79 2d 75 69 2e 63 73 73 22 3e /jquery-ui.css">
7130: 0a 20 20 20 20 20 20 20 20 3c 73 63 72 69 70 74 . <script
7140: 20 73 72 63 3d 22 68 74 74 70 73 3a 2f 2f 63 64 src="https://cd
7150: 6e 6a 73 2e 63 6c 6f 75 64 66 6c 61 72 65 2e 63 njs.cloudflare.c
7160: 6f 6d 2f 61 6a 61 78 2f 6c 69 62 73 2f 6d 69 63 om/ajax/libs/mic
7170: 72 6f 6d 6f 64 61 6c 2f 30 2e 34 2e 36 2f 6d 69 romodal/0.4.6/mi
7180: 63 72 6f 6d 6f 64 61 6c 2e 6d 69 6e 2e 6a 73 22 cromodal.min.js"
7190: 20 69 6e 74 65 67 72 69 74 79 3d 22 73 68 61 35 integrity="sha5
71a0: 31 32 2d 52 4d 4d 68 2b 49 48 7a 66 5a 4c 73 56 12-RMMh+IHzfZLsV
71b0: 46 6f 31 72 58 39 50 42 6f 79 73 78 72 4a 4a 71 Fo1rX9PBoysxrJJq
71c0: 6a 79 4f 53 33 31 48 59 57 66 74 6f 62 57 74 76 jyOS31HYWftobWtv
71d0: 32 41 74 36 4b 42 54 71 4b 70 76 56 44 49 57 41 2At6KBTqKpvVDIWA
71e0: 6a 4c 35 61 69 56 2b 4c 6a 46 71 6b 51 36 65 35 jL5aiV+LjFqkQ6e5
71f0: 33 52 64 77 33 56 4f 42 67 3d 3d 22 20 63 72 6f 3Rdw3VOBg==" cro
7200: 73 73 6f 72 69 67 69 6e 3d 22 61 6e 6f 6e 79 6d ssorigin="anonym
7210: 6f 75 73 22 3e 3c 2f 73 63 72 69 70 74 3e 0a 20 ous"></script>.
7220: 20 20 20 20 20 20 20 3c 73 63 72 69 70 74 20 73 <script s
7230: 72 63 3d 22 68 74 74 70 73 3a 2f 2f 63 64 6e 2e rc="https://cdn.
7240: 6a 73 64 65 6c 69 76 72 2e 6e 65 74 2f 6e 70 6d jsdelivr.net/npm
7250: 2f 77 68 65 6e 69 70 72 65 73 73 40 31 2e 38 2e /whenipress@1.8.
7260: 30 2f 64 69 73 74 2f 77 68 65 6e 69 70 72 65 73 0/dist/whenipres
7270: 73 2e 6a 73 22 3e 3c 2f 73 63 72 69 70 74 3e 0a s.js"></script>.
7280: 0a 20 20 20 20 20 20 20 20 3c 73 63 72 69 70 74 . <script
7290: 20 73 72 63 3d 22 68 74 74 70 73 3a 2f 2f 63 64 src="https://cd
72a0: 6e 6a 73 2e 63 6c 6f 75 64 66 6c 61 72 65 2e 63 njs.cloudflare.c
72b0: 6f 6d 2f 61 6a 61 78 2f 6c 69 62 73 2f 41 6c 65 om/ajax/libs/Ale
72c0: 72 74 69 66 79 4a 53 2f 31 2e 31 33 2e 31 2f 61 rtifyJS/1.13.1/a
72d0: 6c 65 72 74 69 66 79 2e 6d 69 6e 2e 6a 73 22 20 lertify.min.js"
72e0: 69 6e 74 65 67 72 69 74 79 3d 22 73 68 61 35 31 integrity="sha51
72f0: 32 2d 4a 6e 6a 47 2b 57 74 35 33 47 73 70 55 51 2-JnjG+Wt53GspUQ
7300: 58 51 68 63 2b 63 34 6a 38 53 42 45 52 73 67 4a XQhc+c4j8SBERsgJ
7310: 41 6f 48 65 65 68 61 67 4b 48 6c 78 51 4e 2b 4d AoHeehagKHlxQN+M
7320: 74 43 43 6d 46 44 67 68 58 39 2f 41 63 62 6b 6b tCCmFDghX9/Acbkk
7330: 4e 52 5a 70 74 79 5a 55 34 7a 43 38 75 74 4b 35 NRZptyZU4zC8utK5
7340: 39 4d 35 4c 34 35 49 77 3d 3d 22 20 63 72 6f 73 9M5L45Iw==" cros
7350: 73 6f 72 69 67 69 6e 3d 22 61 6e 6f 6e 79 6d 6f sorigin="anonymo
7360: 75 73 22 3e 3c 2f 73 63 72 69 70 74 3e 0a 20 20 us"></script>.
7370: 20 20 20 20 20 20 3c 6c 69 6e 6b 20 72 65 6c 3d <link rel=
7380: 22 73 74 79 6c 65 73 68 65 65 74 22 20 68 72 65 "stylesheet" hre
7390: 66 3d 22 68 74 74 70 73 3a 2f 2f 63 64 6e 6a 73 f="https://cdnjs
73a0: 2e 63 6c 6f 75 64 66 6c 61 72 65 2e 63 6f 6d 2f .cloudflare.com/
73b0: 61 6a 61 78 2f 6c 69 62 73 2f 41 6c 65 72 74 69 ajax/libs/Alerti
73c0: 66 79 4a 53 2f 31 2e 31 33 2e 31 2f 63 73 73 2f fyJS/1.13.1/css/
73d0: 61 6c 65 72 74 69 66 79 2e 6d 69 6e 2e 63 73 73 alertify.min.css
73e0: 22 20 69 6e 74 65 67 72 69 74 79 3d 22 73 68 61 " integrity="sha
73f0: 35 31 32 2d 49 58 75 6f 71 31 61 46 64 32 77 58 512-IXuoq1aFd2wX
7400: 73 34 4e 71 47 73 6b 77 58 32 56 62 2b 49 38 55 s4NqGskwX2Vb+I8U
7410: 4a 2b 74 47 4a 45 75 2f 44 63 30 7a 77 4c 4e 4b J+tGJEu/Dc0zwLNK
7420: 65 51 37 43 57 33 53 72 36 76 30 79 55 33 7a 35 eQ7CW3Sr6v0yU3z5
7430: 4f 51 57 65 33 65 53 63 56 49 6b 45 52 34 4a 39 OQWe3eScVIkER4J9
7440: 4c 37 62 79 72 67 52 2f 66 41 3d 3d 22 20 63 72 L7byrgR/fA==" cr
7450: 6f 73 73 6f 72 69 67 69 6e 3d 22 61 6e 6f 6e 79 ossorigin="anony
7460: 6d 6f 75 73 22 20 2f 3e 0a 20 20 20 20 20 20 20 mous" />.
7470: 20 3c 6c 69 6e 6b 20 72 65 6c 3d 22 73 74 79 6c <link rel="styl
7480: 65 73 68 65 65 74 22 20 68 72 65 66 3d 22 68 74 esheet" href="ht
7490: 74 70 73 3a 2f 2f 63 64 6e 6a 73 2e 63 6c 6f 75 tps://cdnjs.clou
74a0: 64 66 6c 61 72 65 2e 63 6f 6d 2f 61 6a 61 78 2f dflare.com/ajax/
74b0: 6c 69 62 73 2f 41 6c 65 72 74 69 66 79 4a 53 2f libs/AlertifyJS/
74c0: 31 2e 31 33 2e 31 2f 63 73 73 2f 74 68 65 6d 65 1.13.1/css/theme
74d0: 73 2f 64 65 66 61 75 6c 74 2e 6d 69 6e 2e 63 73 s/default.min.cs
74e0: 73 22 20 69 6e 74 65 67 72 69 74 79 3d 22 73 68 s" integrity="sh
74f0: 61 35 31 32 2d 52 67 55 6a 44 70 77 6a 45 44 7a a512-RgUjDpwjEDz
7500: 41 62 37 6e 6b 53 68 69 7a 43 43 4a 2b 51 54 53 Ab7nkShizCCJ+QTS
7510: 4c 49 69 4a 4f 31 6c 64 74 75 78 7a 73 30 55 49 LIiJO1ldtuxzs0UI
7520: 42 52 48 34 51 70 4f 6a 55 55 39 77 34 37 41 46 BRH4QpOjUU9w47AF
7530: 39 5a 6c 76 69 71 56 2f 64 4f 46 47 57 46 36 6f 9ZlviqV/dOFGWF6o
7540: 37 6c 33 6c 74 74 45 46 62 36 67 3d 3d 22 20 63 7l3lttEFb6g==" c
7550: 72 6f 73 73 6f 72 69 67 69 6e 3d 22 61 6e 6f 6e rossorigin="anon
7560: 79 6d 6f 75 73 22 20 2f 3e 0a 0a 20 20 20 20 20 ymous" />..
7570: 20 20 20 3c 73 63 72 69 70 74 20 73 72 63 3d 22 <script src="
7580: 2f 6a 73 6f 6e 2d 75 72 6c 2d 6d 61 73 74 65 72 /json-url-master
7590: 2f 64 69 73 74 2f 62 72 6f 77 73 65 72 2f 6a 73 /dist/browser/js
75a0: 6f 6e 2d 75 72 6c 2e 6a 73 22 3e 3c 2f 73 63 72 on-url.js"></scr
75b0: 69 70 74 3e 0a 20 20 20 20 20 20 20 20 3c 73 63 ipt>. <sc
75c0: 72 69 70 74 20 73 72 63 3d 22 2f 72 69 6f 74 2d ript src="/riot-
75d0: 33 2e 31 33 2e 32 2f 72 69 6f 74 2b 63 6f 6d 70 3.13.2/riot+comp
75e0: 69 6c 65 72 2e 6a 73 22 3e 3c 2f 73 63 72 69 70 iler.js"></scrip
75f0: 74 3e 0a 0a 20 20 20 20 20 20 20 20 3c 6c 69 6e t>.. <lin
7600: 6b 20 72 65 6c 3d 22 73 74 79 6c 65 73 68 65 65 k rel="styleshee
7610: 74 22 20 68 72 65 66 3d 22 68 74 74 70 73 3a 2f t" href="https:/
7620: 2f 63 64 6e 6a 73 2e 63 6c 6f 75 64 66 6c 61 72 /cdnjs.cloudflar
7630: 65 2e 63 6f 6d 2f 61 6a 61 78 2f 6c 69 62 73 2f e.com/ajax/libs/
7640: 74 61 69 6c 77 69 6e 64 63 73 73 2f 32 2e 31 2e tailwindcss/2.1.
7650: 32 2f 74 61 69 6c 77 69 6e 64 2e 6d 69 6e 2e 63 2/tailwind.min.c
7660: 73 73 22 20 69 6e 74 65 67 72 69 74 79 3d 22 73 ss" integrity="s
7670: 68 61 35 31 32 2d 52 6e 74 61 74 50 4f 68 45 63 ha512-RntatPOhEc
7680: 51 45 41 38 31 67 43 2f 65 73 59 6f 43 6b 47 6b QEA81gC/esYoCkGk
7690: 4c 37 41 59 56 37 54 65 54 50 6f 55 2b 52 39 7a L7AYV7TeTPoU+R9z
76a0: 45 34 34 2f 79 57 78 56 76 4c 49 42 66 42 53 61 E44/yWxVvLIBfBSa
76b0: 4d 75 37 38 72 68 6f 44 64 37 33 5a 65 52 48 58 Mu78rhoDd73ZeRHX
76c0: 52 4a 4e 35 2b 61 50 45 4b 35 33 51 3d 3d 22 20 RJN5+aPEK53Q=="
76d0: 63 72 6f 73 73 6f 72 69 67 69 6e 3d 22 61 6e 6f crossorigin="ano
76e0: 6e 79 6d 6f 75 73 22 20 2f 3e 0a 20 20 20 20 20 nymous" />.
76f0: 20 20 20 3c 73 63 72 69 70 74 20 73 72 63 3d 22 <script src="
7700: 68 74 74 70 73 3a 2f 2f 73 74 61 63 6b 70 61 74 https://stackpat
7710: 68 2e 62 6f 6f 74 73 74 72 61 70 63 64 6e 2e 63 h.bootstrapcdn.c
7720: 6f 6d 2f 62 6f 6f 74 73 74 72 61 70 2f 34 2e 33 om/bootstrap/4.3
7730: 2e 31 2f 6a 73 2f 62 6f 6f 74 73 74 72 61 70 2e .1/js/bootstrap.
7740: 6d 69 6e 2e 6a 73 22 20 69 6e 74 65 67 72 69 74 min.js" integrit
7750: 79 3d 22 73 68 61 33 38 34 2d 4a 6a 53 6d 56 67 y="sha384-JjSmVg
7760: 79 64 30 70 33 70 58 42 31 72 52 69 62 5a 55 41 yd0p3pXB1rRibZUA
7770: 59 6f 49 49 79 36 4f 72 51 36 56 72 6a 49 45 61 YoIIy6OrQ6VrjIEa
7780: 46 66 2f 6e 4a 47 7a 49 78 46 44 73 66 34 78 30 Ff/nJGzIxFDsf4x0
7790: 78 49 4d 2b 42 30 37 6a 52 4d 22 20 63 72 6f 73 xIM+B07jRM" cros
77a0: 73 6f 72 69 67 69 6e 3d 22 61 6e 6f 6e 79 6d 6f sorigin="anonymo
77b0: 75 73 22 3e 3c 2f 73 63 72 69 70 74 3e 0a 0a 20 us"></script>..
77c0: 20 20 20 20 20 20 20 3c 6c 69 6e 6b 20 72 65 6c <link rel
77d0: 3d 22 73 74 79 6c 65 73 68 65 65 74 22 20 68 72 ="stylesheet" hr
77e0: 65 66 3d 22 68 74 74 70 73 3a 2f 2f 65 73 69 72 ef="https://esir
77f0: 6f 6e 61 6c 2e 67 69 74 68 75 62 2e 69 6f 2f 63 onal.github.io/c
7800: 6d 74 6f 75 63 68 2f 6c 69 62 2f 63 6f 64 65 6d mtouch/lib/codem
7810: 69 72 72 6f 72 2e 63 73 73 22 3e 0a 20 20 20 20 irror.css">.
7820: 20 20 20 20 3c 6c 69 6e 6b 20 72 65 6c 3d 22 73 <link rel="s
7830: 74 79 6c 65 73 68 65 65 74 22 20 68 72 65 66 3d tylesheet" href=
7840: 22 68 74 74 70 73 3a 2f 2f 65 73 69 72 6f 6e 61 "https://esirona
7850: 6c 2e 67 69 74 68 75 62 2e 69 6f 2f 63 6d 74 6f l.github.io/cmto
7860: 75 63 68 2f 61 64 64 6f 6e 2f 68 69 6e 74 2f 73 uch/addon/hint/s
7870: 68 6f 77 2d 68 69 6e 74 2e 63 73 73 22 3e 0a 20 how-hint.css">.
7880: 20 20 20 20 20 20 20 3c 73 63 72 69 70 74 20 73 <script s
7890: 72 63 3d 22 68 74 74 70 73 3a 2f 2f 65 73 69 72 rc="https://esir
78a0: 6f 6e 61 6c 2e 67 69 74 68 75 62 2e 69 6f 2f 63 onal.github.io/c
78b0: 6d 74 6f 75 63 68 2f 6c 69 62 2f 63 6f 64 65 6d mtouch/lib/codem
78c0: 69 72 72 6f 72 2e 6a 73 22 3e 3c 2f 73 63 72 69 irror.js"></scri
78d0: 70 74 3e 0a 0a 20 20 20 20 20 20 20 20 3c 73 63 pt>.. <sc
78e0: 72 69 70 74 20 73 72 63 3d 22 68 74 74 70 73 3a ript src="https:
78f0: 2f 2f 65 73 69 72 6f 6e 61 6c 2e 67 69 74 68 75 //esironal.githu
7900: 62 2e 69 6f 2f 63 6d 74 6f 75 63 68 2f 61 64 64 b.io/cmtouch/add
7910: 6f 6e 2f 68 69 6e 74 2f 73 68 6f 77 2d 68 69 6e on/hint/show-hin
7920: 74 2e 6a 73 22 3e 3c 2f 73 63 72 69 70 74 3e 0a t.js"></script>.
7930: 20 20 20 20 20 20 20 20 3c 73 63 72 69 70 74 20 <script
7940: 73 72 63 3d 22 68 74 74 70 3a 2f 2f 65 73 69 72 src="http://esir
7950: 6f 6e 61 6c 2e 67 69 74 68 75 62 2e 69 6f 2f 63 onal.github.io/c
7960: 6d 74 6f 75 63 68 2f 61 64 64 6f 6e 2f 68 69 6e mtouch/addon/hin
7970: 74 2f 78 6d 6c 2d 68 69 6e 74 2e 6a 73 22 3e 3c t/xml-hint.js"><
7980: 2f 73 63 72 69 70 74 3e 0a 20 20 20 20 20 20 20 /script>.
7990: 20 3c 73 63 72 69 70 74 20 73 72 63 3d 22 68 74 <script src="ht
79a0: 74 70 73 3a 2f 2f 65 73 69 72 6f 6e 61 6c 2e 67 tps://esironal.g
79b0: 69 74 68 75 62 2e 69 6f 2f 63 6d 74 6f 75 63 68 ithub.io/cmtouch
79c0: 2f 61 64 64 6f 6e 2f 68 69 6e 74 2f 68 74 6d 6c /addon/hint/html
79d0: 2d 68 69 6e 74 2e 6a 73 22 3e 3c 2f 73 63 72 69 -hint.js"></scri
79e0: 70 74 3e 0a 20 20 20 20 20 20 20 20 3c 73 63 72 pt>. <scr
79f0: 69 70 74 20 73 72 63 3d 22 68 74 74 70 73 3a 2f ipt src="https:/
7a00: 2f 65 73 69 72 6f 6e 61 6c 2e 67 69 74 68 75 62 /esironal.github
7a10: 2e 69 6f 2f 63 6d 74 6f 75 63 68 2f 6d 6f 64 65 .io/cmtouch/mode
7a20: 2f 78 6d 6c 2f 78 6d 6c 2e 6a 73 22 3e 3c 2f 73 /xml/xml.js"></s
7a30: 63 72 69 70 74 3e 0a 20 20 20 20 20 20 20 20 3c cript>. <
7a40: 73 63 72 69 70 74 20 73 72 63 3d 22 68 74 74 70 script src="http
7a50: 73 3a 2f 2f 65 73 69 72 6f 6e 61 6c 2e 67 69 74 s://esironal.git
7a60: 68 75 62 2e 69 6f 2f 63 6d 74 6f 75 63 68 2f 6d hub.io/cmtouch/m
7a70: 6f 64 65 2f 6a 61 76 61 73 63 72 69 70 74 2f 6a ode/javascript/j
7a80: 61 76 61 73 63 72 69 70 74 2e 6a 73 22 3e 3c 2f avascript.js"></
7a90: 73 63 72 69 70 74 3e 0a 20 20 20 20 20 20 20 20 script>.
7aa0: 3c 73 63 72 69 70 74 20 73 72 63 3d 22 68 74 74 <script src="htt
7ab0: 70 73 3a 2f 2f 65 73 69 72 6f 6e 61 6c 2e 67 69 ps://esironal.gi
7ac0: 74 68 75 62 2e 69 6f 2f 63 6d 74 6f 75 63 68 2f thub.io/cmtouch/
7ad0: 6d 6f 64 65 2f 63 73 73 2f 63 73 73 2e 6a 73 22 mode/css/css.js"
7ae0: 3e 3c 2f 73 63 72 69 70 74 3e 0a 20 20 20 20 20 ></script>.
7af0: 20 20 20 3c 73 63 72 69 70 74 20 73 72 63 3d 22 <script src="
7b00: 68 74 74 70 73 3a 2f 2f 65 73 69 72 6f 6e 61 6c https://esironal
7b10: 2e 67 69 74 68 75 62 2e 69 6f 2f 63 6d 74 6f 75 .github.io/cmtou
7b20: 63 68 2f 6d 6f 64 65 2f 68 74 6d 6c 6d 69 78 65 ch/mode/htmlmixe
7b30: 64 2f 68 74 6d 6c 6d 69 78 65 64 2e 6a 73 22 3e d/htmlmixed.js">
7b40: 3c 2f 73 63 72 69 70 74 3e 0a 20 20 20 20 20 20 </script>.
7b50: 20 20 3c 73 63 72 69 70 74 20 73 72 63 3d 22 68 <script src="h
7b60: 74 74 70 73 3a 2f 2f 65 73 69 72 6f 6e 61 6c 2e ttps://esironal.
7b70: 67 69 74 68 75 62 2e 69 6f 2f 63 6d 74 6f 75 63 github.io/cmtouc
7b80: 68 2f 61 64 64 6f 6e 2f 73 65 6c 65 63 74 69 6f h/addon/selectio
7b90: 6e 2f 61 63 74 69 76 65 2d 6c 69 6e 65 2e 6a 73 n/active-line.js
7ba0: 22 3e 3c 2f 73 63 72 69 70 74 3e 0a 20 20 20 20 "></script>.
7bb0: 3c 73 63 72 69 70 74 20 73 72 63 3d 22 68 74 74 <script src="htt
7bc0: 70 73 3a 2f 2f 65 73 69 72 6f 6e 61 6c 2e 67 69 ps://esironal.gi
7bd0: 74 68 75 62 2e 69 6f 2f 63 6d 74 6f 75 63 68 2f thub.io/cmtouch/
7be0: 61 64 64 6f 6e 2f 73 65 6c 65 63 74 69 6f 6e 2f addon/selection/
7bf0: 6d 61 72 6b 2d 73 65 6c 65 63 74 69 6f 6e 2e 6a mark-selection.j
7c00: 73 22 3e 3c 2f 73 63 72 69 70 74 3e 0a 0a 20 20 s"></script>..
7c10: 20 20 20 20 20 20 3c 73 63 72 69 70 74 20 73 72 <script sr
7c20: 63 3d 22 68 74 74 70 73 3a 2f 2f 65 73 69 72 6f c="https://esiro
7c30: 6e 61 6c 2e 67 69 74 68 75 62 2e 69 6f 2f 63 6d nal.github.io/cm
7c40: 74 6f 75 63 68 2f 61 64 64 6f 6e 2f 65 64 69 74 touch/addon/edit
7c50: 2f 6d 61 74 63 68 62 72 61 63 6b 65 74 73 2e 6a /matchbrackets.j
7c60: 73 22 3e 3c 2f 73 63 72 69 70 74 3e 0a 20 20 20 s"></script>.
7c70: 20 20 20 20 20 3c 6c 69 6e 6b 20 72 65 6c 3d 22 <link rel="
7c80: 73 74 79 6c 65 73 68 65 65 74 22 20 68 72 65 66 stylesheet" href
7c90: 3d 22 68 74 74 70 73 3a 2f 2f 65 73 69 72 6f 6e ="https://esiron
7ca0: 61 6c 2e 67 69 74 68 75 62 2e 69 6f 2f 63 6d 74 al.github.io/cmt
7cb0: 6f 75 63 68 2f 74 68 65 6d 65 2f 6e 65 6f 6e 73 ouch/theme/neons
7cc0: 79 6e 74 61 78 2e 63 73 73 22 3e 0a 20 20 20 20 yntax.css">.
7cd0: 20 20 20 20 3c 6c 69 6e 6b 20 72 65 6c 3d 22 73 <link rel="s
7ce0: 74 79 6c 65 73 68 65 65 74 22 20 68 72 65 66 3d tylesheet" href=
7cf0: 22 68 74 74 70 73 3a 2f 2f 75 6e 70 6b 67 2e 63 "https://unpkg.c
7d00: 6f 6d 2f 70 79 6c 6f 6e 63 73 73 40 6c 61 74 65 om/pyloncss@late
7d10: 73 74 2f 63 73 73 2f 70 79 6c 6f 6e 2e 63 73 73 st/css/pylon.css
7d20: 22 2f 3e 0a 0a 0a 20 20 20 20 20 20 20 20 3c 73 "/>... <s
7d30: 63 72 69 70 74 20 73 72 63 3d 22 2f 74 75 6e 65 cript src="/tune
7d40: 2e 6a 73 22 3e 3c 2f 73 63 72 69 70 74 3e 0a 20 .js"></script>.
7d50: 20 20 20 20 20 20 20 3c 73 63 72 69 70 74 20 73 <script s
7d60: 72 63 3d 22 2f 6d 69 73 63 2e 6a 73 22 3e 3c 2f rc="/misc.js"></
7d70: 73 63 72 69 70 74 3e 0a 0a 20 20 20 20 20 20 20 script>..
7d80: 20 3c 73 74 79 6c 65 20 74 79 70 65 3d 22 74 65 <style type="te
7d90: 78 74 2f 63 73 73 22 3e 0a 62 6f 64 79 20 7b 0a xt/css">.body {.
7da0: 20 20 20 20 62 61 63 6b 67 72 6f 75 6e 64 3a 20 background:
7db0: 62 6c 61 63 6b 3b 0a 20 20 20 20 63 6f 6c 6f 72 black;. color
7dc0: 3a 20 77 68 69 74 65 3b 0a 20 20 20 20 66 6f 6e : white;. fon
7dd0: 74 2d 66 61 6d 69 6c 79 3a 20 27 52 6f 62 6f 74 t-family: 'Robot
7de0: 6f 20 4d 6f 6e 6f 27 2c 20 6d 6f 6e 6f 73 70 61 o Mono', monospa
7df0: 63 65 3b 0a 20 20 20 20 6f 76 65 72 66 6c 6f 77 ce;. overflow
7e00: 2d 78 3a 20 68 69 64 64 65 6e 3b 0a 7d 0a 0a 61 -x: hidden;.}..a
7e10: 20 7b 0a 20 20 20 20 63 6f 6c 6f 72 3a 20 77 68 {. color: wh
7e20: 69 74 65 3b 0a 7d 0a 0a 69 6e 70 75 74 20 7b 0a ite;.}..input {.
7e30: 20 20 20 20 63 6f 6c 6f 72 3a 20 62 6c 61 63 6b color: black
7e40: 3b 0a 7d 0a 0a 2e 62 74 6e 20 7b 0a 20 20 20 20 ;.}...btn {.
7e50: 62 61 63 6b 67 72 6f 75 6e 64 3a 20 77 68 69 74 background: whit
7e60: 65 3b 0a 20 20 20 20 63 6f 6c 6f 72 3a 20 62 6c e;. color: bl
7e70: 61 63 6b 3b 0a 20 20 20 20 70 61 64 64 69 6e 67 ack;. padding
7e80: 3a 20 34 70 78 3b 0a 7d 0a 0a 2e 43 6f 64 65 4d : 4px;.}...CodeM
7e90: 69 72 72 6f 72 2d 73 65 6c 65 63 74 65 64 20 20 irror-selected
7ea0: 7b 20 62 61 63 6b 67 72 6f 75 6e 64 2d 63 6f 6c { background-col
7eb0: 6f 72 3a 20 74 72 61 6e 73 70 61 72 65 6e 74 20 or: transparent
7ec0: 21 69 6d 70 6f 72 74 61 6e 74 3b 20 20 20 7a 2d !important; z-
7ed0: 69 6e 64 65 78 3a 20 32 30 20 21 69 6d 70 6f 72 index: 20 !impor
7ee0: 74 61 6e 74 3b 20 7d 0a 0a 2e 43 6f 64 65 4d 69 tant; }...CodeMi
7ef0: 72 72 6f 72 2d 73 65 6c 65 63 74 65 64 74 65 78 rror-selectedtex
7f00: 74 20 7b 0a 20 20 20 20 63 6f 6c 6f 72 3a 20 72 t {. color: r
7f10: 65 64 20 21 69 6d 70 6f 72 74 61 6e 74 3b 0a 20 ed !important;.
7f20: 20 20 20 20 7a 2d 69 6e 64 65 78 3a 20 32 35 20 z-index: 25
7f30: 21 69 6d 70 6f 72 74 61 6e 74 3b 0a 7d 0a 0a 2e !important;.}...
7f40: 43 6f 64 65 4d 69 72 72 6f 72 20 70 72 65 20 7b CodeMirror pre {
7f50: 0a 20 20 7a 2d 69 6e 64 65 78 3a 20 35 3b 0a 20 . z-index: 5;.
7f60: 20 62 61 63 6b 67 72 6f 75 6e 64 3a 20 62 6c 61 background: bla
7f70: 63 6b 3b 0a 20 20 70 61 64 64 69 6e 67 3a 20 32 ck;. padding: 2
7f80: 70 78 3b 0a 7d 0a 0a 2e 43 6f 64 65 4d 69 72 72 px;.}...CodeMirr
7f90: 6f 72 2d 63 75 72 73 6f 72 20 7b 0a 20 20 62 6f or-cursor {. bo
7fa0: 72 64 65 72 2d 6c 65 66 74 3a 20 32 70 78 20 73 rder-left: 2px s
7fb0: 6f 6c 69 64 20 77 68 69 74 65 20 21 69 6d 70 6f olid white !impo
7fc0: 72 74 61 6e 74 3b 0a 20 20 7a 2d 69 6e 64 65 78 rtant;. z-index
7fd0: 3a 20 31 30 20 21 69 6d 70 6f 72 74 61 6e 74 3b : 10 !important;
7fe0: 0a 20 20 63 6f 6c 6f 72 3a 20 77 68 69 74 65 20 . color: white
7ff0: 21 69 6d 70 6f 72 74 61 6e 74 3b 0a 20 20 62 61 !important;. ba
8000: 63 6b 67 72 6f 75 6e 64 3a 20 77 68 69 74 65 20 ckground: white
8010: 21 69 6d 70 6f 72 74 61 6e 74 3b 0a 7d 0a 0a 2e !important;.}...
8020: 43 6f 64 65 4d 69 72 72 6f 72 2d 6c 69 6e 65 20 CodeMirror-line
8030: 73 70 61 6e 20 7b 0a 20 20 63 6f 6c 6f 72 3a 20 span {. color:
8040: 77 68 69 74 65 20 21 69 6d 70 6f 72 74 61 6e 74 white !important
8050: 3b 0a 7d 0a 0a 2e 43 6f 64 65 4d 69 72 72 6f 72 ;.}...CodeMirror
8060: 2d 6c 69 6e 65 20 3e 20 73 70 61 6e 20 7b 0a 20 -line > span {.
8070: 20 62 61 63 6b 67 72 6f 75 6e 64 3a 20 62 6c 61 background: bla
8080: 63 6b 3b 0a 20 20 70 61 64 64 69 6e 67 3a 20 30 ck;. padding: 0
8090: 20 21 69 6d 70 6f 72 74 61 6e 74 3b 0a 7d 0a 0a !important;.}..
80a0: 2e 43 6f 64 65 4d 69 72 72 6f 72 2d 6c 69 6e 65 .CodeMirror-line
80b0: 73 20 7b 0a 20 20 70 61 64 64 69 6e 67 3a 20 30 s {. padding: 0
80c0: 20 21 69 6d 70 6f 72 74 61 6e 74 3b 0a 7d 0a 0a !important;.}..
80d0: 0a 2e 43 6f 64 65 4d 69 72 72 6f 72 20 7b 0a 20 ..CodeMirror {.
80e0: 20 20 20 66 6f 6e 74 2d 73 69 7a 65 3a 20 31 32 font-size: 12
80f0: 70 78 3b 0a 20 20 20 20 77 69 64 74 68 3a 20 31 px;. width: 1
8100: 30 30 25 3b 0a 20 20 20 20 70 61 64 64 69 6e 67 00%;. padding
8110: 2d 6c 65 66 74 3a 20 34 70 78 3b 0a 20 20 20 20 -left: 4px;.
8120: 6c 69 6e 65 2d 68 65 69 67 68 74 3a 20 31 3b 0a line-height: 1;.
8130: 20 20 20 20 62 61 63 6b 67 72 6f 75 6e 64 3a 20 background:
8140: 74 72 61 6e 73 70 61 72 65 6e 74 20 21 69 6d 70 transparent !imp
8150: 6f 72 74 61 6e 74 3b 0a 20 20 20 20 63 6f 6c 6f ortant;. colo
8160: 72 3a 20 77 68 69 74 65 20 21 69 6d 70 6f 72 74 r: white !import
8170: 61 6e 74 3b 0a 20 20 20 20 66 6f 6e 74 2d 66 61 ant;. font-fa
8180: 6d 69 6c 79 3a 20 27 52 6f 62 6f 74 6f 20 4d 6f mily: 'Roboto Mo
8190: 6e 6f 27 2c 20 6d 6f 6e 6f 73 70 61 63 65 20 21 no', monospace !
81a0: 69 6d 70 6f 72 74 61 6e 74 3b 0a 7d 0a 0a 2e 43 important;.}...C
81b0: 6f 64 65 4d 69 72 72 6f 72 2d 76 73 63 72 6f 6c odeMirror-vscrol
81c0: 6c 62 61 72 2c 20 2e 43 6f 64 65 4d 69 72 72 6f lbar, .CodeMirro
81d0: 72 2d 68 73 63 72 6f 6c 6c 62 61 72 20 7b 0a 20 r-hscrollbar {.
81e0: 20 20 20 6f 76 65 72 66 6c 6f 77 2d 78 3a 20 68 overflow-x: h
81f0: 69 64 64 65 6e 20 21 69 6d 70 6f 72 74 61 6e 74 idden !important
8200: 3b 0a 20 20 20 20 6f 76 65 72 66 6c 6f 77 2d 79 ;. overflow-y
8210: 3a 20 68 69 64 64 65 6e 20 21 69 6d 70 6f 72 74 : hidden !import
8220: 61 6e 74 3b 0a 7d 0a 0a 2e 43 6f 64 65 4d 69 72 ant;.}...CodeMir
8230: 72 6f 72 2d 63 75 72 73 6f 72 20 7b 0a 20 20 62 ror-cursor {. b
8240: 6f 72 64 65 72 2d 6c 65 66 74 3a 20 32 70 78 20 order-left: 2px
8250: 73 6f 6c 69 64 20 77 68 69 74 65 20 21 69 6d 70 solid white !imp
8260: 6f 72 74 61 6e 74 3b 0a 7d 0a 0a 0a 0a 20 20 20 ortant;.}....
8270: 20 20 20 20 20 3c 2f 73 74 79 6c 65 3e 0a 0a 20 </style>..
8280: 20 20 20 20 20 20 20 3c 73 63 72 69 70 74 20 74 <script t
8290: 79 70 65 3d 22 72 69 6f 74 2f 74 61 67 22 20 73 ype="riot/tag" s
82a0: 72 63 3d 22 2f 63 6f 6d 70 6f 6e 65 6e 74 73 2f rc="/components/
82b0: 62 69 74 72 68 79 74 68 6d 2e 74 61 67 22 3e 3c bitrhythm.tag"><
82c0: 2f 73 63 72 69 70 74 3e 0a 20 20 20 20 20 20 20 /script>.
82d0: 20 3c 73 63 72 69 70 74 20 74 79 70 65 3d 22 72 <script type="r
82e0: 69 6f 74 2f 74 61 67 22 20 73 72 63 3d 22 2f 63 iot/tag" src="/c
82f0: 6f 6d 70 6f 6e 65 6e 74 73 2f 64 69 61 6c 2e 74 omponents/dial.t
8300: 61 67 22 3e 3c 2f 73 63 72 69 70 74 3e 0a 20 20 ag"></script>.
8310: 20 20 20 20 20 20 3c 73 63 72 69 70 74 20 74 79 <script ty
8320: 70 65 3d 22 72 69 6f 74 2f 74 61 67 22 20 73 72 pe="riot/tag" sr
8330: 63 3d 22 2f 63 6f 6d 70 6f 6e 65 6e 74 73 2f 73 c="/components/s
8340: 61 6d 70 6c 65 2e 74 61 67 22 20 3e 3c 2f 73 63 ample.tag" ></sc
8350: 72 69 70 74 3e 0a 20 20 20 20 20 20 20 20 3c 73 ript>. <s
8360: 63 72 69 70 74 20 74 79 70 65 3d 22 72 69 6f 74 cript type="riot
8370: 2f 74 61 67 22 20 73 72 63 3d 22 2f 63 6f 6d 70 /tag" src="/comp
8380: 6f 6e 65 6e 74 73 2f 6e 75 6d 62 65 72 2e 74 61 onents/number.ta
8390: 67 22 20 3e 3c 2f 73 63 72 69 70 74 3e 0a 0a 20 g" ></script>..
83a0: 20 20 20 3c 73 63 72 69 70 74 20 74 79 70 65 3d <script type=
83b0: 22 74 65 78 74 2f 6a 61 76 61 73 63 72 69 70 74 "text/javascript
83c0: 22 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 ">. v
83d0: 61 72 20 5f 70 61 71 20 3d 20 77 69 6e 64 6f 77 ar _paq = window
83e0: 2e 5f 70 61 71 20 3d 20 77 69 6e 64 6f 77 2e 5f ._paq = window._
83f0: 70 61 71 20 7c 7c 20 5b 5d 3b 0a 20 20 20 20 5f paq || [];. _
8400: 70 61 71 2e 70 75 73 68 28 5b 27 74 72 61 63 6b paq.push(['track
8410: 50 61 67 65 56 69 65 77 27 5d 29 3b 5f 70 61 71 PageView']);_paq
8420: 2e 70 75 73 68 28 5b 27 65 6e 61 62 6c 65 4c 69 .push(['enableLi
8430: 6e 6b 54 72 61 63 6b 69 6e 67 27 5d 29 3b 5f 70 nkTracking']);_p
8440: 61 71 2e 70 75 73 68 28 5b 27 61 6c 77 61 79 73 aq.push(['always
8450: 55 73 65 53 65 6e 64 42 65 61 63 6f 6e 27 5d 29 UseSendBeacon'])
8460: 3b 5f 70 61 71 2e 70 75 73 68 28 5b 27 73 65 74 ;_paq.push(['set
8470: 54 72 61 63 6b 65 72 55 72 6c 27 2c 20 22 5c 2f TrackerUrl', "\/
8480: 5c 2f 62 6c 6f 67 2e 78 79 7a 7a 79 61 70 70 73 \/blog.xyzzyapps
8490: 2e 6c 69 6e 6b 5c 2f 6f 77 6f 61 6d 69 6d 73 5c .link\/owoamims\
84a0: 2f 6d 61 74 6f 6d 6f 5c 2f 61 70 70 5c 2f 6d 61 /matomo\/app\/ma
84b0: 74 6f 6d 6f 2e 70 68 70 22 5d 29 3b 5f 70 61 71 tomo.php"]);_paq
84c0: 2e 70 75 73 68 28 5b 27 73 65 74 53 69 74 65 49 .push(['setSiteI
84d0: 64 27 2c 20 27 31 27 5d 29 3b 76 61 72 20 64 3d d', '1']);var d=
84e0: 64 6f 63 75 6d 65 6e 74 2c 20 67 3d 64 2e 63 72 document, g=d.cr
84f0: 65 61 74 65 45 6c 65 6d 65 6e 74 28 27 73 63 72 eateElement('scr
8500: 69 70 74 27 29 2c 20 73 3d 64 2e 67 65 74 45 6c ipt'), s=d.getEl
8510: 65 6d 65 6e 74 73 42 79 54 61 67 4e 61 6d 65 28 ementsByTagName(
8520: 27 73 63 72 69 70 74 27 29 5b 30 5d 3b 0a 20 20 'script')[0];.
8530: 20 20 67 2e 74 79 70 65 3d 27 74 65 78 74 2f 6a g.type='text/j
8540: 61 76 61 73 63 72 69 70 74 27 3b 20 67 2e 61 73 avascript'; g.as
8550: 79 6e 63 3d 74 72 75 65 3b 20 67 2e 73 72 63 3d ync=true; g.src=
8560: 22 5c 2f 5c 2f 62 6c 6f 67 2e 78 79 7a 7a 79 61 "\/\/blog.xyzzya
8570: 70 70 73 2e 6c 69 6e 6b 5c 2f 6f 6f 7a 6f 74 63 pps.link\/oozotc
8580: 68 65 5c 2f 6d 61 74 6f 6d 6f 5c 2f 6d 61 74 6f he\/matomo\/mato
8590: 6d 6f 2e 6a 73 22 3b 20 73 2e 70 61 72 65 6e 74 mo.js"; s.parent
85a0: 4e 6f 64 65 2e 69 6e 73 65 72 74 42 65 66 6f 72 Node.insertBefor
85b0: 65 28 67 2c 73 29 3b 0a 20 20 20 20 3c 2f 73 63 e(g,s);. </sc
85c0: 72 69 70 74 3e 0a 0a 20 20 20 20 3c 2f 68 65 61 ript>.. </hea
85d0: 64 3e 0a 0a 20 20 20 20 3c 62 6f 64 79 3e 0a 20 d>.. <body>.
85e0: 20 20 20 20 20 20 20 3c 64 69 76 20 63 6c 61 73 <div clas
85f0: 73 3d 22 63 6f 6e 74 61 69 6e 65 72 61 2d 66 75 s="containera-fu
8600: 6c 6c 22 3e 0a 20 20 20 20 20 20 20 20 20 20 20 ll">.
8610: 20 3c 68 73 74 61 63 6b 20 63 6c 61 73 73 3d 22 <hstack class="
8620: 6d 62 2d 32 22 3e 0a 20 20 20 20 20 20 20 20 20 mb-2">.
8630: 20 20 20 20 20 20 20 3c 68 35 20 63 6c 61 73 73 <h5 class
8640: 3d 22 6d 6c 2d 34 22 3e 3c 61 20 68 72 65 66 3d ="ml-4"><a href=
8650: 22 2f 64 6f 63 73 2f 69 6e 64 65 78 2e 68 74 6d "/docs/index.htm
8660: 6c 22 20 74 61 72 67 65 74 3d 22 5f 62 6c 61 6e l" target="_blan
8670: 6b 22 3e 64 6f 63 73 3c 2f 61 3e 3c 2f 68 35 3e k">docs</a></h5>
8680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
8690: 20 3c 68 35 20 63 6c 61 73 73 3d 22 6d 6c 2d 34 <h5 class="ml-4
86a0: 22 3e 3c 61 20 20 68 72 65 66 3d 22 2f 73 6f 6e "><a href="/son
86b0: 67 2f 58 51 41 41 41 41 4a 77 46 41 41 41 41 41 g/XQAAAAJwFAAAAA
86c0: 41 41 41 41 42 44 4b 55 71 47 55 35 76 49 38 45 AAAABDKUqGU5vI8E
86d0: 79 67 76 38 56 4c 63 36 48 31 4e 46 49 7a 64 59 ygv8VLc6H1NFIzdY
86e0: 51 65 35 6d 54 2d 37 39 42 54 4b 6f 73 48 36 58 Qe5mT-79BTKosH6X
86f0: 6a 65 32 49 59 6e 4e 52 67 45 4f 70 65 75 68 67 je2IYnNRgEOpeuhg
8700: 39 4e 54 66 49 54 2d 5f 75 45 67 2d 6e 70 47 58 9NTfIT-_uEg-npGX
8710: 30 79 39 43 6d 7a 79 79 56 70 77 67 61 4f 55 72 0y9CmzyyVpwgaOUr
8720: 4b 4e 6c 46 2d 70 7a 56 58 66 33 59 6e 51 32 67 KNlF-pzVXf3YnQ2g
8730: 53 66 70 7a 59 33 7a 6c 59 4c 75 6a 61 76 51 52 SfpzY3zlYLujavQR
8740: 71 37 33 68 53 45 4d 2d 52 61 47 78 54 78 75 75 q73hSEM-RaGxTxuu
8750: 64 39 6e 61 75 47 5f 56 64 58 43 6d 45 5f 6c 76 d9nauG_VdXCmE_lv
8760: 5a 38 38 58 76 55 48 4f 49 47 6a 4f 6b 43 55 4b Z88XvUHOIGjOkCUK
8770: 56 2d 31 6f 74 33 69 39 66 78 35 4e 50 2d 55 73 V-1ot3i9fx5NP-Us
8780: 55 6d 56 70 6e 6a 55 44 6e 71 5f 39 65 55 4a 66 UmVpnjUDnq_9eUJf
8790: 6f 6e 78 35 42 5f 6f 47 34 63 33 47 76 4c 69 74 onx5B_oG4c3GvLit
87a0: 4e 52 45 6c 5f 4f 39 65 6d 55 38 43 53 54 30 76 NREl_O9emU8CST0v
87b0: 35 52 56 71 48 53 75 64 71 5a 71 73 72 6f 72 74 5RVqHSudqZqsrort
87c0: 70 44 6a 64 4d 6c 65 6b 68 51 32 79 37 5a 6c 4e pDjdMlekhQ2y7ZlN
87d0: 63 55 44 6a 47 6f 54 72 48 34 76 46 4d 72 4c 56 cUDjGoTrH4vFMrLV
87e0: 49 36 30 77 49 4e 6f 75 66 53 30 69 4f 36 6f 75 I60wINoufS0iO6ou
87f0: 72 78 69 7a 53 31 49 66 76 5f 69 69 72 6b 64 50 rxizS1Ifv_iirkdP
8800: 30 55 30 5a 70 32 31 72 48 48 4b 58 6c 77 68 57 0U0Zp21rHHKXlwhW
8810: 47 30 68 6d 54 43 78 59 6f 38 5a 49 66 30 43 6d G0hmTCxYo8ZIf0Cm
8820: 62 69 75 32 32 47 69 46 46 6d 52 66 49 63 75 57 biu22GiFFmRfIcuW
8830: 62 63 71 2d 5f 53 57 64 79 4d 4a 30 73 57 49 73 bcq-_SWdyMJ0sWIs
8840: 6c 68 4b 70 47 46 45 61 70 4e 36 30 34 65 4e 62 lhKpGFEapN604eNb
8850: 6c 70 79 35 69 6d 32 50 73 49 74 6a 57 53 63 75 lpy5im2PsItjWScu
8860: 2d 63 53 30 4a 49 33 7a 65 48 62 38 4a 4d 4e 7a -cS0JI3zeHb8JMNz
8870: 57 66 6c 71 30 2d 58 57 48 47 35 57 4c 73 6d 50 Wflq0-XWHG5WLsmP
8880: 71 43 62 6e 33 47 67 66 52 36 42 69 41 78 31 41 qCbn3GgfR6BiAx1A
8890: 70 6d 54 75 69 38 34 57 58 67 58 36 53 75 4a 50 pmTui84WXgX6SuJP
88a0: 6b 58 52 71 48 45 4f 4b 70 42 5a 34 64 4b 45 50 kXRqHEOKpBZ4dKEP
88b0: 72 35 50 5f 2d 44 44 70 77 7a 30 4c 37 69 38 58 r5P_-DDpwz0L7i8X
88c0: 5f 46 48 45 2d 4c 42 4d 61 63 74 44 42 6f 4b 67 _FHE-LBMactDBoKg
88d0: 49 62 49 6f 79 56 6e 52 65 36 44 4a 39 73 35 41 IbIoyVnRe6DJ9s5A
88e0: 5a 4c 4a 6a 55 72 57 47 47 56 43 4c 63 70 35 62 ZLJjUrWGGVCLcp5b
88f0: 45 4b 4f 6e 48 5f 33 48 66 5a 75 44 71 39 55 6c EKOnH_3HfZuDq9Ul
8900: 4f 76 5a 52 56 6b 7a 33 42 77 70 55 65 61 6a 4c OvZRVkz3BwpUeajL
8910: 65 55 4a 63 41 59 78 44 6d 55 32 4a 62 4e 55 61 eUJcAYxDmU2JbNUa
8920: 69 70 4d 4a 4e 37 4c 46 39 59 41 58 32 4c 61 54 ipMJN7LF9YAX2LaT
8930: 34 34 4c 41 43 77 32 41 37 49 73 2d 70 51 5f 45 44LACw2A7Is-pQ_E
8940: 47 7a 6e 6a 68 45 6f 37 53 53 37 4a 75 73 51 50 GznjhEo7SS7JusQP
8950: 4e 36 47 34 33 67 34 4f 55 5a 53 55 59 35 57 4e N6G43g4OUZSUY5WN
8960: 6c 50 55 43 57 66 58 53 65 57 4e 55 30 58 78 5f lPUCWfXSeWNU0Xx_
8970: 2d 62 34 72 36 74 34 48 48 51 53 32 50 32 73 74 -b4r6t4HHQS2P2st
8980: 49 51 4f 53 39 36 4a 71 4c 7a 58 72 78 2d 51 36 IQOS96JqLzXrx-Q6
8990: 32 59 38 52 53 52 49 76 69 65 45 37 36 6a 5f 2d 2Y8RSRIvieE76j_-
89a0: 64 77 34 69 63 54 44 69 41 54 66 78 38 64 6f 4c dw4icTDiATfx8doL
89b0: 6b 53 7a 58 67 4f 7a 4e 54 63 5a 59 75 6d 65 32 kSzXgOzNTcZYume2
89c0: 63 48 4c 45 47 2d 30 54 62 67 52 31 4d 36 57 43 cHLEG-0TbgR1M6WC
89d0: 50 69 48 34 70 76 48 49 52 66 63 54 78 45 44 5a PiH4pvHIRfcTxEDZ
89e0: 4b 35 62 37 69 71 49 68 59 30 4d 4e 57 38 4b 6b K5b7iqIhY0MNW8Kk
89f0: 79 6e 37 4b 46 56 71 51 66 5f 35 64 5f 6d 73 69 yn7KFVqQf_5d_msi
8a00: 76 35 37 44 57 49 48 67 36 51 69 36 63 6d 42 64 v57DWIHg6Qi6cmBd
8a10: 4f 46 30 4c 69 5f 43 59 38 6b 46 42 56 34 42 57 OF0Li_CY8kFBV4BW
8a20: 4c 73 4f 6c 61 6e 4e 36 5f 68 65 68 49 52 45 56 LsOlanN6_hehIREV
8a30: 55 38 57 67 57 62 4d 39 72 64 72 4b 63 71 7a 68 U8WgWbM9rdrKcqzh
8a40: 48 44 38 46 70 35 71 54 6d 62 79 69 56 6e 6a 44 HD8Fp5qTmbyiVnjD
8a50: 38 33 42 44 68 4b 59 35 7a 77 46 38 78 46 4d 31 83BDhKY5zwF8xFM1
8a60: 70 37 5a 6d 45 6a 6c 49 46 31 61 67 36 32 42 44 p7ZmEjlIF1ag62BD
8a70: 52 74 35 6a 5f 4d 5a 39 71 35 43 4f 73 58 39 67 Rt5j_MZ9q5COsX9g
8a80: 70 56 36 44 66 41 30 46 61 44 77 79 4f 6d 6b 4d pV6DfA0FaDwyOmkM
8a90: 73 4f 46 69 47 65 55 4e 49 72 38 42 5f 45 4e 59 sOFiGeUNIr8B_ENY
8aa0: 47 2d 45 70 59 62 68 55 48 5a 75 6b 76 2d 51 74 G-EpYbhUHZukv-Qt
8ab0: 74 63 6a 46 77 52 79 70 46 31 65 53 4e 33 44 4d tcjFwRypF1eSN3DM
8ac0: 72 47 55 6d 31 65 42 36 32 50 57 33 73 2d 2d 58 rGUm1eB62PW3s--X
8ad0: 63 75 67 77 54 35 47 4a 51 52 61 36 36 57 5a 46 cugwT5GJQRa66WZF
8ae0: 34 44 5a 7a 50 50 54 4b 45 5a 68 74 4e 4c 32 38 4DZzPPTKEZhtNL28
8af0: 4b 67 42 63 48 6d 33 44 65 75 53 66 4e 5f 48 52 KgBcHm3DeuSfN_HR
8b00: 73 67 42 57 31 6f 32 59 44 70 4d 31 51 50 2d 4b sgBW1o2YDpM1QP-K
8b10: 30 61 65 64 4b 42 5f 75 6d 6c 57 68 64 42 7a 65 0aedKB_umlWhdBze
8b20: 37 47 73 37 32 2d 76 44 66 6a 42 36 4c 47 49 5f 7Gs72-vDfjB6LGI_
8b30: 5f 74 6e 63 4c 4e 53 33 47 61 71 59 61 6c 74 46 _tncLNS3GaqYaltF
8b40: 6e 7a 63 36 34 45 4f 56 2d 6d 7a 31 78 76 6c 79 nzc64EOV-mz1xvly
8b50: 41 75 46 53 6a 2d 54 38 72 38 65 35 65 62 4a 6b AuFSj-T8r8e5ebJk
8b60: 79 37 6f 36 50 5a 58 50 54 76 76 43 4c 65 54 4c y7o6PZXPTvvCLeTL
8b70: 30 35 36 54 70 70 2d 47 68 2d 57 67 78 6d 79 4d 056Tpp-Gh-WgxmyM
8b80: 49 53 49 68 6b 62 35 6b 4b 50 6a 32 33 35 48 37 ISIhkb5kKPj235H7
8b90: 4f 59 2d 4a 41 6f 54 32 38 56 56 72 41 30 31 57 OY-JAoT28VVrA01W
8ba0: 70 58 6f 41 72 4f 4a 61 45 32 69 6a 42 74 32 6f pXoArOJaE2ijBt2o
8bb0: 4c 4f 59 58 77 57 69 4f 31 68 55 49 33 4e 74 54 LOYXwWiO1hUI3NtT
8bc0: 4f 32 76 49 5f 5f 73 6c 6c 78 48 4e 48 53 36 45 O2vI__sllxHNHS6E
8bd0: 69 48 58 50 79 4c 6a 38 5f 50 47 46 34 37 52 55 iHXPyLj8_PGF47RU
8be0: 71 37 6f 63 2d 39 69 62 69 46 39 46 55 75 6f 6f q7oc-9ibiF9FUuoo
8bf0: 6e 4d 4c 45 30 50 77 79 47 4f 55 4a 36 4c 55 39 nMLE0PwyGOUJ6LU9
8c00: 53 44 62 34 46 4c 50 77 6b 30 67 4a 42 50 34 47 SDb4FLPwk0gJBP4G
8c10: 69 57 4c 66 74 76 66 45 72 72 58 44 4e 63 6b 39 iWLftvfErrXDNck9
8c20: 4f 36 5f 4a 5a 76 70 4a 5f 39 4f 35 71 6d 4e 44 O6_JZvpJ_9O5qmND
8c30: 55 67 65 35 79 44 59 62 4f 5f 5f 76 4a 65 6a 78 Uge5yDYbO__vJejx
8c40: 30 62 6f 6d 55 37 65 47 32 6b 75 76 50 41 6d 47 0bomU7eG2kuvPAmG
8c50: 74 69 57 72 59 6f 38 42 5f 33 4a 6f 45 41 4f 4d tiWrYo8B_3JoEAOM
8c60: 67 56 61 39 53 78 45 34 6b 5a 2d 69 6a 64 68 2d gVa9SxE4kZ-ijdh-
8c70: 67 6c 49 4b 72 65 64 6c 4d 43 55 47 35 65 59 4a glIKredlMCUG5eYJ
8c80: 63 2d 36 48 5f 39 34 70 74 65 79 4f 2d 6f 63 42 c-6H_94pteyO-ocB
8c90: 38 72 72 6c 66 53 47 72 36 4d 32 72 39 78 6c 62 8rrlfSGr6M2r9xlb
8ca0: 65 4d 65 63 43 76 4a 54 52 6a 6d 77 4d 62 42 31 eMecCvJTRjmwMbB1
8cb0: 32 44 57 47 62 44 71 35 53 78 6e 38 74 67 58 39 2DWGbDq5Sxn8tgX9
8cc0: 38 4f 39 6c 54 2d 35 31 5f 6f 61 6a 71 4b 56 4d 8O9lT-51_oajqKVM
8cd0: 6d 6f 78 33 66 37 6b 58 68 73 4a 50 78 79 49 4d mox3f7kXhsJPxyIM
8ce0: 73 55 61 56 56 46 52 6d 70 50 4a 76 4d 74 35 6e sUaVVFRmpPJvMt5n
8cf0: 74 39 2d 69 31 56 67 6d 75 78 34 61 33 74 37 61 t9-i1Vgmux4a3t7a
8d00: 31 6f 56 50 64 4e 33 35 50 4f 4f 6a 75 6e 36 33 1oVPdN35POOjun63
8d10: 4e 6b 79 4f 44 4b 68 54 55 48 6d 6a 64 43 37 68 NkyODKhTUHmjdC7h
8d20: 39 74 76 36 5a 49 38 57 50 66 32 47 68 39 5f 5f 9tv6ZI8WPf2Gh9__
8d30: 6b 36 71 66 35 78 70 33 75 33 4f 6a 7a 6b 49 53 k6qf5xp3u3OjzkIS
8d40: 6a 37 61 69 6e 48 6f 6f 6a 69 5f 33 43 6e 6a 6d j7ainHooji_3Cnjm
8d50: 33 54 33 30 65 36 70 6d 33 4d 68 6c 69 4a 67 31 3T30e6pm3MhliJg1
8d60: 65 7a 46 69 38 4e 65 74 55 77 77 59 5a 7a 36 55 ezFi8NetUwwYZz6U
8d70: 4e 43 4d 4f 54 55 61 57 41 71 4a 35 42 6d 46 32 NCMOTUaWAqJ5BmF2
8d80: 68 41 68 35 53 64 73 6f 67 39 33 6f 72 52 76 72 hAh5Sdsog93orRvr
8d90: 4f 75 50 54 4e 68 52 41 31 57 6c 79 6a 72 73 79 OuPTNhRA1Wlyjrsy
8da0: 38 7a 56 57 33 57 6c 4f 34 63 68 63 4b 56 59 41 8zVW3WlO4chcKVYA
8db0: 30 4f 73 48 31 5a 77 6a 6f 37 6b 6f 58 62 66 58 0OsH1Zwjo7koXbfX
8dc0: 37 45 52 72 50 6e 41 62 5a 73 57 66 6b 50 65 50 7ERrPnAbZsWfkPeP
8dd0: 77 49 34 74 6f 2d 4b 75 50 46 31 76 30 55 34 6a wI4to-KuPF1v0U4j
8de0: 77 46 65 6c 7a 77 6e 33 6e 34 43 31 45 32 42 6b wFelzwn3n4C1E2Bk
8df0: 71 50 66 4e 63 76 6e 56 6c 46 44 6d 50 48 6c 79 qPfNcvnVlFDmPHly
8e00: 4f 43 5a 48 72 66 73 72 47 39 47 55 50 73 43 72 OCZHrfsrG9GUPsCr
8e10: 5a 64 72 58 32 45 48 69 57 48 5f 62 52 6b 58 56 ZdrX2EHiWH_bRkXV
8e20: 4a 77 6b 48 54 4c 69 72 38 64 5f 63 6a 49 30 44 JwkHTLir8d_cjI0D
8e30: 49 72 56 59 6a 69 34 58 42 49 44 58 39 50 6d 74 IrVYji4XBIDX9Pmt
8e40: 2d 30 79 6c 72 30 46 65 48 4c 58 56 48 4e 62 34 -0ylr0FeHLXVHNb4
8e50: 51 37 56 2d 2d 33 64 34 2d 6d 4a 32 7a 58 73 5a Q7V--3d4-mJ2zXsZ
8e60: 44 52 39 37 4d 5f 69 6b 61 51 56 48 5a 42 57 63 DR97M_ikaQVHZBWc
8e70: 4b 6e 79 57 6d 78 5f 61 50 6f 57 4b 6e 46 59 6b KnyWmx_aPoWKnFYk
8e80: 6b 5f 36 50 62 52 32 34 36 59 55 33 66 56 69 41 k_6PbR246YU3fViA
8e90: 39 50 64 5a 4b 54 59 72 4e 32 42 33 4b 6d 63 72 9PdZKTYrN2B3Kmcr
8ea0: 6c 69 48 32 54 32 59 52 63 52 64 57 51 47 78 58 liH2T2YRcRdWQGxX
8eb0: 6c 58 5a 68 33 42 73 64 35 50 74 4f 43 31 45 75 lXZh3Bsd5PtOC1Eu
8ec0: 56 37 2d 44 48 6c 6b 49 36 37 44 36 56 2d 41 46 V7-DHlkI67D6V-AF
8ed0: 53 63 4a 66 64 6a 36 34 50 76 31 77 4b 77 47 51 ScJfdj64Pv1wKwGQ
8ee0: 5a 37 6c 45 5a 74 72 6d 76 5f 56 56 52 6d 6b 57 Z7lEZtrmv_VVRmkW
8ef0: 59 57 46 74 62 42 6a 35 48 48 6e 74 68 31 73 4b YWFtbBj5HHnth1sK
8f00: 68 42 6a 56 67 47 49 56 48 37 34 79 39 62 30 68 hBjVgGIVH74y9b0h
8f10: 48 6a 70 6f 35 6b 77 2d 31 5f 33 6a 4e 5a 31 6f Hjpo5kw-1_3jNZ1o
8f20: 6f 78 70 2d 79 38 46 54 48 62 6c 6d 53 6b 53 6f oxp-y8FTHblmSkSo
8f30: 51 65 38 62 65 79 39 58 51 37 42 78 47 62 55 50 Qe8bey9XQ7BxGbUP
8f40: 73 47 30 58 35 4c 66 54 38 46 70 5a 48 33 36 41 sG0X5LfT8FpZH36A
8f50: 36 56 7a 36 6e 65 64 46 45 76 75 6f 51 43 79 56 6Vz6nedFEvuoQCyV
8f60: 35 35 71 63 6e 44 44 35 49 4b 73 4a 65 79 4b 5a 55qcnDD5IKsJeyKZ
8f70: 7a 31 75 67 72 59 47 6f 5a 49 66 4a 4d 72 31 58 z1ugrYGoZIfJMr1X
8f80: 54 69 75 6c 57 55 69 61 78 65 61 74 37 51 36 58 TiulWUiaxeat7Q6X
8f90: 71 31 59 58 4f 6a 76 57 56 37 6b 69 5f 77 34 6d q1YXOjvWV7ki_w4m
8fa0: 5f 5f 2d 77 56 50 35 67 22 3e 74 65 63 68 6e 6f __-wVP5g">techno
8fb0: 3c 2f 61 3e 3c 2f 68 35 3e 0a 20 20 20 20 20 20 </a></h5>.
8fc0: 20 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 20 .
8fd0: 20 20 20 20 20 20 20 20 20 20 20 3c 68 35 20 63 <h5 c
8fe0: 6c 61 73 73 3d 22 6d 6c 2d 34 22 3e 3c 61 20 20 lass="ml-4"><a
8ff0: 68 72 65 66 3d 22 2f 73 6f 6e 67 2f 58 51 41 41 href="/song/XQAA
9000: 41 41 49 62 43 41 41 41 41 41 41 41 41 41 42 44 AAIbCAAAAAAAAABD
9010: 4b 55 71 47 55 35 76 49 38 45 79 67 76 38 56 4c KUqGU5vI8Eygv8VL
9020: 63 36 48 31 4e 46 49 7a 64 59 51 65 35 6d 54 2d c6H1NFIzdYQe5mT-
9030: 37 39 42 54 4b 6f 73 48 36 58 6a 65 32 49 59 6e 79BTKosH6Xje2IYn
9040: 4e 52 67 45 4f 70 65 75 68 67 39 4f 54 42 37 59 NRgEOpeuhg9OTB7Y
9050: 33 34 63 5a 6d 65 4c 62 35 4d 4b 5a 69 63 37 62 34cZmeLb5MKZic7b
9060: 58 4d 4f 37 76 57 72 6a 48 79 66 63 32 46 76 49 XMO7vWrjHyfc2FvI
9070: 50 30 76 31 47 70 2d 2d 4e 59 35 74 55 73 59 37 P0v1Gp--NY5tUsY7
9080: 73 51 37 31 5a 7a 70 68 35 57 6d 4b 55 5a 32 6f sQ71Zzph5WmKUZ2o
9090: 4e 74 6e 78 7a 38 2d 48 61 56 70 4b 31 53 47 51 Ntnxz8-HaVpK1SGQ
90a0: 7a 45 4f 71 33 2d 6c 57 6b 65 4a 37 36 61 32 4a zEOq3-lWkeJ76a2J
90b0: 38 4e 67 32 4f 45 5a 78 4f 4d 4e 41 6b 36 56 54 8Ng2OEZxOMNAk6VT
90c0: 6e 75 38 66 52 52 54 54 6f 4d 6c 6f 77 44 65 33 nu8fRRTToMlowDe3
90d0: 77 6a 73 38 44 6f 72 73 78 64 6e 57 34 39 54 68 wjs8DorsxdnW49Th
90e0: 46 68 47 62 4f 65 6b 34 51 41 77 7a 50 6e 65 61 FhGbOek4QAwzPnea
90f0: 70 44 6d 6a 75 44 4b 52 71 69 71 4e 33 62 74 67 pDmjuDKRqiqN3btg
9100: 6e 66 5a 44 7a 6f 6b 65 4f 54 68 36 43 7a 77 41 nfZDzokeOTh6CzwA
9110: 49 32 72 42 62 4c 30 37 59 55 42 45 46 61 4d 7a I2rBbL07YUBEFaMz
9120: 69 4f 4a 5f 32 58 35 39 66 59 42 50 4d 33 65 43 iOJ_2X59fYBPM3eC
9130: 6e 4c 37 47 6c 4f 43 6b 32 75 36 5f 32 32 57 6e nL7GlOCk2u6_22Wn
9140: 59 67 5a 50 62 63 33 52 75 4a 4c 66 38 4a 4c 41 YgZPbc3RuJLf8JLA
9150: 68 62 44 72 58 76 5a 48 79 59 65 6b 72 50 75 47 hbDrXvZHyYekrPuG
9160: 6f 5f 52 36 56 32 42 43 50 45 31 34 72 5a 46 46 o_R6V2BCPE14rZFF
9170: 77 4a 51 57 45 71 79 5f 4b 44 74 48 5f 59 50 4d wJQWEqy_KDtH_YPM
9180: 68 6a 31 54 50 53 36 32 71 63 50 72 36 71 41 57 hj1TPS62qcPr6qAW
9190: 72 49 39 6e 73 6e 64 70 52 72 63 7a 77 42 46 43 rI9nsndpRrczwBFC
91a0: 68 48 53 50 4b 69 5a 58 6a 43 5a 4a 5a 4b 48 31 hHSPKiZXjCZJZKH1
91b0: 4b 68 31 39 41 34 2d 76 70 58 77 62 72 31 42 43 Kh19A4-vpXwbr1BC
91c0: 69 4e 64 4f 54 51 38 39 4b 4b 76 30 4f 58 70 49 iNdOTQ89KKv0OXpI
91d0: 46 55 4d 77 78 35 51 64 35 6a 73 72 62 32 63 2d FUMwx5Qd5jsrb2c-
91e0: 68 79 77 4d 36 38 38 43 6c 5a 38 36 41 35 6f 34 hywM688ClZ86A5o4
91f0: 4b 7a 72 45 32 78 6a 47 34 56 62 63 65 78 6d 50 KzrE2xjG4VbcexmP
9200: 64 4f 58 53 2d 4b 36 50 52 55 34 63 36 64 4a 4f dOXS-K6PRU4c6dJO
9210: 55 43 6c 4f 4c 4e 5a 70 62 6d 5a 76 4c 38 42 6f UClOLNZpbmZvL8Bo
9220: 34 65 70 36 37 77 4c 30 62 46 45 4f 4d 71 68 4e 4ep67wL0bFEOMqhN
9230: 33 30 70 4c 47 6d 5a 6c 6e 66 64 35 6d 67 48 38 30pLGmZlnfd5mgH8
9240: 4a 39 64 50 72 47 73 45 67 6c 4b 4c 47 73 6b 51 J9dPrGsEglKLGskQ
9250: 5f 67 32 76 45 65 52 39 43 7a 4f 73 74 7a 63 74 _g2vEeR9CzOstzct
9260: 6a 43 4b 74 4c 31 4f 38 6f 4e 6b 53 75 43 6e 58 jCKtL1O8oNkSuCnX
9270: 53 47 45 30 75 59 35 72 78 47 6d 42 75 37 41 57 SGE0uY5rxGmBu7AW
9280: 39 39 74 52 78 30 69 38 68 4e 7a 42 34 6c 31 53 99tRx0i8hNzB4l1S
9290: 31 6d 78 6e 7a 6b 4c 65 66 69 39 56 4d 36 59 59 1mxnzkLefi9VM6YY
92a0: 5a 72 61 58 37 54 32 6b 47 6e 52 67 44 35 48 4f ZraX7T2kGnRgD5HO
92b0: 67 30 57 48 32 4c 65 55 73 56 75 57 70 6e 70 31 g0WH2LeUsVuWpnp1
92c0: 38 39 50 68 5f 4f 73 39 35 5f 58 55 56 42 63 36 89Ph_Os95_XUVBc6
92d0: 37 54 77 55 38 49 57 62 7a 61 74 31 64 65 63 43 7TwU8IWbzat1decC
92e0: 74 30 6a 4b 4b 50 31 33 4c 37 61 30 4f 43 4f 31 t0jKKP13L7a0OCO1
92f0: 38 46 71 32 44 56 72 39 76 65 48 71 32 6d 52 65 8Fq2DVr9veHq2mRe
9300: 70 69 4f 62 57 47 73 59 63 71 6a 58 6b 55 4e 6a piObWGsYcqjXkUNj
9310: 61 78 6f 49 74 67 5f 70 57 64 4b 36 67 79 76 65 axoItg_pWdK6gyve
9320: 56 58 6a 66 73 33 50 61 4a 34 37 37 55 62 70 69 VXjfs3PaJ477Ubpi
9330: 5a 42 57 78 6f 63 2d 45 62 6e 38 46 5a 75 36 62 ZBWxoc-Ebn8FZu6b
9340: 5a 5a 34 67 4f 5a 45 2d 4d 6f 4a 48 55 44 69 51 ZZ4gOZE-MoJHUDiQ
9350: 5a 67 6f 33 2d 6c 69 72 58 54 76 70 63 70 73 67 Zgo3-lirXTvpcpsg
9360: 73 61 49 55 45 53 44 41 63 47 55 4e 45 34 61 49 saIUESDAcGUNE4aI
9370: 4b 36 77 49 46 47 6e 45 61 45 46 59 6f 34 76 65 K6wIFGnEaEFYo4ve
9380: 51 71 54 4c 65 69 63 34 4e 68 50 74 55 70 54 64 QqTLeic4NhPtUpTd
9390: 66 52 71 64 4e 54 4b 4f 61 56 53 55 45 5f 4b 47 fRqdNTKOaVSUE_KG
93a0: 58 4b 58 61 5a 6c 30 45 6e 69 31 44 42 6d 45 47 XKXaZl0Eni1DBmEG
93b0: 79 6b 6d 6c 34 75 78 48 73 57 42 45 45 34 34 4b ykml4uxHsWBEE44K
93c0: 75 33 34 59 49 62 36 4b 5a 55 63 43 75 32 44 75 u34YIb6KZUcCu2Du
93d0: 58 44 69 58 63 62 61 62 73 57 6b 41 2d 63 7a 58 XDiXcbabsWkA-czX
93e0: 57 42 74 52 6e 7a 57 4a 36 69 62 34 73 63 6e 79 WBtRnzWJ6ib4scny
93f0: 31 6f 36 43 73 56 6e 75 67 55 6a 45 39 77 76 38 1o6CsVnugUjE9wv8
9400: 34 62 7a 32 22 3e 63 68 69 70 74 75 6e 65 3c 2f 4bz2">chiptune</
9410: 61 3e 3c 2f 68 35 3e 0a 0a 20 20 20 20 20 20 20 a></h5>..
9420: 20 20 20 20 20 20 20 20 20 3c 68 35 20 63 6c 61 <h5 cla
9430: 73 73 3d 22 6d 6c 2d 34 22 3e 3c 61 20 20 68 72 ss="ml-4"><a hr
9440: 65 66 3d 22 2f 73 6f 6e 67 2f 58 51 41 41 41 41 ef="/song/XQAAAA
9450: 4b 4a 43 41 41 41 41 41 41 41 41 41 42 44 4b 55 KJCAAAAAAAAABDKU
9460: 71 47 55 35 76 49 38 45 79 67 76 38 56 4c 63 36 qGU5vI8Eygv8VLc6
9470: 48 31 4e 46 49 7a 64 59 51 46 67 6d 54 2d 37 39 H1NFIzdYQFgmT-79
9480: 42 54 4b 6f 73 48 36 58 6a 65 32 49 59 6e 4e 52 BTKosH6Xje2IYnNR
9490: 67 45 4f 70 65 75 68 67 38 6a 61 68 4f 45 64 33 gEOpeuhg8jahOEd3
94a0: 79 4d 43 5f 50 58 46 71 2d 69 5f 43 6c 76 4c 38 yMC_PXFq-i_ClvL8
94b0: 43 74 33 57 67 66 36 75 4a 62 35 64 6d 44 59 77 Ct3Wgf6uJb5dmDYw
94c0: 74 55 48 6b 64 64 4c 33 44 4c 45 63 41 30 41 6f tUHkddL3DLEcA0Ao
94d0: 44 33 72 50 5f 5a 79 41 31 6c 44 75 69 4f 4f 51 D3rP_ZyA1lDuiOOQ
94e0: 4a 53 4a 49 65 44 79 6c 7a 38 61 6a 67 5f 79 4e JSJIeDylz8ajg_yN
94f0: 73 52 38 31 31 39 53 74 4b 37 53 45 31 2d 51 4f sR8119StK7SE1-QO
9500: 6d 35 4f 5a 75 73 37 49 53 73 33 2d 55 71 6a 73 m5OZus7ISs3-Uqjs
9510: 58 31 57 30 56 53 5a 65 6f 46 31 65 62 48 38 68 X1W0VSZeoF1ebH8h
9520: 67 44 46 69 73 53 76 6a 79 6b 6d 66 57 32 5f 6f gDFisSvjykmfW2_o
9530: 44 4c 72 36 61 78 51 4c 35 6d 65 55 56 76 45 53 DLr6axQL5meUVvES
9540: 5a 42 51 68 65 34 6c 45 37 38 69 79 74 78 72 50 ZBQhe4lE78iytxrP
9550: 72 62 68 6a 64 78 35 76 34 71 77 4b 57 62 44 47 rbhjdx5v4qwKWbDG
9560: 6d 32 70 53 64 65 75 7a 39 46 4d 47 71 36 33 44 m2pSdeuz9FMGq63D
9570: 66 70 6e 62 41 79 2d 52 48 56 59 33 64 43 44 43 fpnbAy-RHVY3dCDC
9580: 5a 49 59 7a 4f 76 77 66 4f 4f 52 31 51 56 30 4d ZIYzOvwfOOR1QV0M
9590: 63 45 58 49 71 62 47 70 4c 7a 52 63 76 49 4f 65 cEXIqbGpLzRcvIOe
95a0: 35 54 55 6e 61 47 4b 6d 37 71 61 51 71 48 68 44 5TUnaGKm7qaQqHhD
95b0: 79 6a 74 35 72 4c 30 6a 46 78 69 6f 52 35 79 4b yjt5rL0jFxioR5yK
95c0: 6e 55 41 70 30 67 4c 36 7a 79 35 54 4c 71 52 53 nUAp0gL6zy5TLqRS
95d0: 38 30 43 49 69 7a 30 64 6a 30 4e 61 36 33 55 78 80CIiz0dj0Na63Ux
95e0: 59 74 50 4c 70 66 34 76 57 71 4f 4a 46 58 36 56 YtPLpf4vWqOJFX6V
95f0: 5a 70 54 46 52 43 37 6f 31 57 38 54 6d 65 68 65 ZpTFRC7o1W8Tmehe
9600: 45 72 5f 55 67 70 58 62 6c 48 56 49 64 67 38 7a Er_UgpXblHVIdg8z
9610: 55 50 36 39 58 41 43 4b 6f 5f 58 37 4d 4a 2d 67 UP69XACKo_X7MJ-g
9620: 39 2d 73 35 65 6a 58 78 65 43 57 74 35 59 5a 2d 9-s5ejXxeCWt5YZ-
9630: 54 38 2d 6b 46 62 44 58 2d 62 46 51 73 6f 76 30 T8-kFbDX-bFQsov0
9640: 43 35 6b 32 53 4d 64 73 54 46 35 49 7a 42 75 6c C5k2SMdsTF5IzBul
9650: 43 33 61 4c 36 2d 32 4d 61 7a 66 35 77 56 55 31 C3aL6-2Mazf5wVU1
9660: 36 76 2d 72 39 74 36 2d 55 30 69 61 51 43 71 4c 6v-r9t6-U0iaQCqL
9670: 38 55 59 58 55 6c 72 39 61 62 4a 53 58 4f 59 6b 8UYXUlr9abJSXOYk
9680: 7a 53 61 78 35 36 50 7a 5a 69 50 7a 52 7a 44 76 zSax56PzZiPzRzDv
9690: 31 53 6a 38 51 68 73 5a 33 78 64 46 58 66 58 4e 1Sj8QhsZ3xdFXfXN
96a0: 65 2d 33 46 35 6f 34 59 6a 58 5a 39 4a 77 70 74 e-3F5o4YjXZ9Jwpt
96b0: 56 77 51 4c 61 6a 33 55 63 50 76 6b 42 34 5f 45 VwQLaj3UcPvkB4_E
96c0: 6f 77 33 4a 43 37 6d 50 53 74 63 74 6a 32 52 6f ow3JC7mPStctj2Ro
96d0: 6f 53 65 66 36 33 74 62 4d 6c 70 5f 37 59 42 7a oSef63tbMlp_7YBz
96e0: 61 49 6a 52 6e 6a 4a 70 32 6e 39 6d 31 31 5f 36 aIjRnjJp2n9m11_6
96f0: 30 36 58 47 61 59 6e 31 4a 70 58 4d 71 32 47 61 06XGaYn1JpXMq2Ga
9700: 72 7a 33 46 55 59 55 43 58 6b 4e 7a 69 49 4c 4a rz3FUYUCXkNziILJ
9710: 6c 4d 61 4b 42 50 71 68 38 47 64 48 64 52 30 31 lMaKBPqh8GdHdR01
9720: 62 4e 33 47 32 41 63 6d 4a 54 4b 66 70 70 76 72 bN3G2AcmJTKfppvr
9730: 59 34 2d 54 4a 71 7a 77 63 51 6f 64 45 55 37 61 Y4-TJqzwcQodEU7a
9740: 69 56 6d 69 4d 77 62 57 30 47 6a 39 4a 52 63 41 iVmiMwbW0Gj9JRcA
9750: 33 74 4c 4f 5a 36 45 62 7a 73 61 47 78 71 42 5f 3tLOZ6EbzsaGxqB_
9760: 7a 34 67 43 4d 6e 5a 37 61 59 7a 61 47 58 4c 49 z4gCMnZ7aYzaGXLI
9770: 37 52 35 41 43 53 43 38 7a 6e 6e 65 69 4e 5a 48 7R5ACSC8znneiNZH
9780: 35 5f 6b 33 6b 6d 48 42 36 35 5f 38 2d 53 54 61 5_k3kmHB65_8-STa
9790: 6d 35 42 6e 62 52 42 61 4f 30 45 44 53 5a 4c 6c m5BnbRBaO0EDSZLl
97a0: 4d 48 34 45 65 41 35 54 55 51 62 66 78 77 42 59 MH4EeA5TUQbfxwBY
97b0: 58 76 62 4e 58 32 51 57 71 46 35 63 77 48 67 31 XvbNX2QWqF5cwHg1
97c0: 53 37 69 39 52 50 72 5f 56 42 41 6b 43 35 57 5a S7i9RPr_VBAkC5WZ
97d0: 4e 54 59 5a 6c 4e 6d 49 31 78 57 6b 59 79 6c 69 NTYZlNmI1xWkYyli
97e0: 5f 70 73 74 4e 57 42 78 72 6d 6a 34 75 6a 7a 74 _pstNWBxrmj4ujzt
97f0: 63 61 30 46 67 38 52 53 63 6f 63 41 50 33 59 41 ca0Fg8RScocAP3YA
9800: 44 71 4d 58 74 37 33 45 45 4d 58 79 71 50 5f 79 DqMXt73EEMXyqP_y
9810: 35 34 55 77 41 22 3e 62 6c 61 6e 6b 3c 2f 61 3e 54UwA">blank</a>
9820: 3c 2f 68 35 3e 0a 0a 20 20 20 20 20 20 20 20 20 </h5>..
9830: 20 20 20 20 20 20 20 3c 68 35 20 63 6c 61 73 73 <h5 class
9840: 3d 22 6d 6c 2d 34 22 3e 3c 61 20 20 68 72 65 66 ="ml-4"><a href
9850: 3d 22 2f 73 6f 6e 67 2f 58 51 41 41 41 41 4c 36 ="/song/XQAAAAL6
9860: 44 77 41 41 41 41 41 41 41 41 42 44 4b 55 71 47 DwAAAAAAAABDKUqG
9870: 55 35 76 49 38 4e 75 76 32 70 78 71 65 49 79 62 U5vI8Nuv2pxqeIyb
9880: 47 71 74 4a 30 78 49 72 53 69 6f 62 72 39 38 73 GqtJ0xIrSiobr98s
9890: 64 45 37 61 66 6a 34 41 72 34 6a 4a 71 2d 38 71 dE7afj4Ar4jJq-8q
98a0: 6c 5f 57 31 5f 37 38 61 31 5f 47 58 59 55 33 33 l_W1_78a1_GXYU33
98b0: 51 78 69 54 74 41 56 37 53 48 52 59 64 48 36 7a QxiTtAV7SHRYdH6z
98c0: 70 30 43 55 4c 5a 6a 43 41 6e 38 30 55 72 4c 5f p0CULZjCAn80UrL_
98d0: 63 62 6b 36 43 38 53 73 4f 7a 67 71 4d 7a 56 36 cbk6C8SsOzgqMzV6
98e0: 7a 59 6b 4f 4c 76 47 2d 66 6a 5a 4c 69 38 4c 57 zYkOLvG-fjZLi8LW
98f0: 43 39 6d 46 32 47 31 50 66 4a 61 5a 32 32 4d 6d C9mF2G1PfJaZ22Mm
9900: 4d 47 43 37 58 5a 69 52 4d 76 75 47 67 67 39 49 MGC7XZiRMvuGgg9I
9910: 58 64 36 54 59 4b 38 79 6d 79 4a 53 45 4e 38 58 Xd6TYK8ymyJSEN8X
9920: 6f 67 30 67 53 36 65 73 75 5a 2d 73 56 36 57 65 og0gS6esuZ-sV6We
9930: 57 50 79 4d 6b 5f 38 30 66 6f 78 69 67 62 6e 68 WPyMk_80foxigbnh
9940: 48 4f 65 57 4e 6a 71 54 44 33 4d 48 53 4b 56 68 HOeWNjqTD3MHSKVh
9950: 6f 6f 44 70 4f 64 6c 68 48 44 45 39 59 6d 31 6c ooDpOdlhHDE9Ym1l
9960: 66 31 6f 58 4b 4a 79 64 31 6e 7a 49 72 6f 70 69 f1oXKJyd1nzIropi
9970: 43 70 6e 7a 51 68 52 78 34 56 4c 4f 76 70 74 70 CpnzQhRx4VLOvptp
9980: 55 58 39 53 50 49 38 4a 66 6e 4f 74 74 5a 6f 4b UX9SPI8JfnOttZoK
9990: 37 2d 61 2d 6c 62 76 56 7a 67 42 52 4d 72 71 7a 7-a-lbvVzgBRMrqz
99a0: 78 4d 4e 4f 5f 54 64 2d 48 4e 53 2d 74 6d 67 33 xMNO_Td-HNS-tmg3
99b0: 45 68 74 4a 66 70 4d 48 4b 76 78 46 4d 61 50 6b EhtJfpMHKvxFMaPk
99c0: 67 30 45 75 73 4c 52 79 50 2d 46 41 50 6b 6c 30 g0EusLRyP-FAPkl0
99d0: 4e 33 41 62 75 30 2d 6e 79 55 31 34 41 79 6e 69 N3Abu0-nyU14Ayni
99e0: 77 31 75 45 44 69 34 74 43 77 59 76 47 51 6a 45 w1uEDi4tCwYvGQjE
99f0: 35 46 44 78 63 4f 45 41 71 30 67 6d 33 4e 68 69 5FDxcOEAq0gm3Nhi
9a00: 6b 63 47 6b 49 6e 6a 6b 4b 44 37 58 68 69 39 53 kcGkInjkKD7Xhi9S
9a10: 4b 42 73 68 58 61 70 51 30 37 5a 63 79 6b 42 57 KBshXapQ07ZcykBW
9a20: 4f 55 4e 57 69 54 51 41 57 54 79 4d 77 46 34 69 OUNWiTQAWTyMwF4i
9a30: 51 32 51 51 50 6c 67 56 31 70 77 4f 53 53 56 70 Q2QQPlgV1pwOSSVp
9a40: 2d 73 58 4a 49 77 62 73 51 46 78 6e 6c 56 5f 77 -sXJIwbsQFxnlV_w
9a50: 45 64 4d 5a 55 46 36 61 38 4a 61 66 6a 4f 58 7a EdMZUF6a8JafjOXz
9a60: 6b 68 59 77 44 56 6f 44 56 41 6f 61 37 54 41 5a khYwDVoDVAoa7TAZ
9a70: 64 6a 78 74 49 51 66 37 5a 49 63 72 30 65 69 6e djxtIQf7ZIcr0ein
9a80: 6b 6b 72 37 39 58 6b 66 6b 59 72 32 42 65 33 38 kkr79XkfkYr2Be38
9a90: 62 41 79 47 2d 4b 46 50 52 4c 31 4c 39 4f 63 34 bAyG-KFPRL1L9Oc4
9aa0: 31 67 45 33 36 57 64 36 4c 33 6f 45 4b 75 45 49 1gE36Wd6L3oEKuEI
9ab0: 2d 6f 4d 59 58 70 35 49 57 6c 43 43 5f 73 41 79 -oMYXp5IWlCC_sAy
9ac0: 75 4f 42 4e 51 73 48 59 6f 5a 6b 38 76 78 42 79 uOBNQsHYoZk8vxBy
9ad0: 51 38 55 4e 62 4c 4c 4f 4a 37 34 47 73 59 44 45 Q8UNbLLOJ74GsYDE
9ae0: 66 47 63 63 4d 35 54 48 74 68 6e 46 4f 4a 6d 47 fGccM5THthnFOJmG
9af0: 7a 33 68 30 65 4f 41 76 78 52 6b 54 58 4b 31 4b z3h0eOAvxRkTXK1K
9b00: 37 76 72 37 5a 41 53 61 31 69 6a 4e 61 74 6b 66 7vr7ZASa1ijNatkf
9b10: 49 32 46 47 72 41 45 4a 38 55 4e 31 61 43 62 59 I2FGrAEJ8UN1aCbY
9b20: 7a 39 59 51 62 49 51 4d 66 62 4c 77 35 67 7a 51 z9YQbIQMfbLw5gzQ
9b30: 43 75 37 67 55 74 7a 63 61 49 78 30 59 75 54 54 Cu7gUtzcaIx0YuTT
9b40: 4a 33 41 6a 44 77 36 68 6b 6c 6d 4e 6d 4f 50 38 J3AjDw6hklmNmOP8
9b50: 4f 65 66 6a 2d 65 4a 6f 34 6e 34 61 4f 6b 36 56 Oefj-eJo4n4aOk6V
9b60: 33 70 42 37 6e 32 58 63 32 53 30 35 2d 46 78 4f 3pB7n2Xc2S05-FxO
9b70: 41 33 69 50 75 6a 73 61 37 72 39 51 52 4a 37 52 A3iPujsa7r9QRJ7R
9b80: 6d 31 6b 66 7a 67 49 68 77 31 56 6f 43 4a 6a 46 m1kfzgIhw1VoCJjF
9b90: 61 37 47 53 47 66 77 63 63 46 39 46 69 51 74 61 a7GSGfwccF9FiQta
9ba0: 4e 4f 75 55 57 79 6b 6d 66 37 4e 63 65 32 7a 46 NOuUWykmf7Nce2zF
9bb0: 6f 6b 6b 51 47 78 53 55 61 33 58 6d 39 71 33 36 okkQGxSUa3Xm9q36
9bc0: 4c 35 7a 73 4f 4d 2d 51 58 46 44 75 51 46 57 57 L5zsOM-QXFDuQFWW
9bd0: 31 59 42 50 6b 2d 65 77 38 75 6f 73 4d 6f 72 41 1YBPk-ew8uosMorA
9be0: 6b 49 53 45 33 56 47 34 36 56 71 64 6b 75 4d 47 kISE3VG46VqdkuMG
9bf0: 68 6b 47 6a 71 57 4b 71 76 34 58 42 37 64 6a 4f hkGjqWKqv4XB7djO
9c00: 4a 58 61 51 5a 52 59 49 45 67 49 70 67 35 64 36 JXaQZRYIEgIpg5d6
9c10: 4c 58 59 70 46 77 36 4f 7a 6a 4a 5a 65 73 33 73 LXYpFw6OzjJZes3s
9c20: 53 34 43 44 34 68 4d 64 7a 4e 55 35 4f 6d 79 55 S4CD4hMdzNU5OmyU
9c30: 6d 70 67 69 39 4b 4d 64 39 6a 34 61 47 57 48 38 mpgi9KMd9j4aGWH8
9c40: 44 6b 75 38 62 62 77 34 39 55 7a 38 55 54 6c 68 Dku8bbw49Uz8UTlh
9c50: 47 69 42 70 75 48 6c 78 7a 48 56 5f 67 36 73 47 GiBpuHlxzHV_g6sG
9c60: 6e 77 2d 49 64 4a 33 52 41 31 79 6c 56 4f 63 55 nw-IdJ3RA1ylVOcU
9c70: 35 75 77 58 49 4a 35 31 34 34 69 58 6d 4b 61 32 5uwXIJ5144iXmKa2
9c80: 4c 42 35 55 68 50 65 70 47 31 76 63 6c 63 6d 37 LB5UhPepG1vclcm7
9c90: 6c 49 57 66 45 42 33 68 4f 78 70 62 62 71 53 2d lIWfEB3hOxpbbqS-
9ca0: 39 65 70 47 4c 57 73 59 48 4a 38 78 37 30 67 52 9epGLWsYHJ8x70gR
9cb0: 4e 5a 49 64 77 6d 32 48 68 64 4b 70 66 6c 2d 38 NZIdwm2HhdKpfl-8
9cc0: 68 2d 75 58 72 73 53 66 62 79 79 51 67 63 61 57 h-uXrsSfbyyQgcaW
9cd0: 52 4a 6f 56 59 70 6a 71 59 77 6b 6c 64 38 34 35 RJoVYpjqYwkld845
9ce0: 35 31 44 77 69 59 45 57 4e 67 50 4d 6c 71 42 48 51DwiYEWNgPMlqBH
9cf0: 6a 6f 37 55 67 37 52 30 4e 79 51 65 32 44 63 51 jo7Ug7R0NyQe2DcQ
9d00: 38 55 69 57 54 44 76 41 73 65 56 54 4b 71 56 66 8UiWTDvAseVTKqVf
9d10: 51 77 76 31 64 42 48 6b 4a 56 47 75 63 44 72 64 Qwv1dBHkJVGucDrd
9d20: 76 42 66 6f 48 6d 36 5f 4a 79 76 43 65 42 4c 64 vBfoHm6_JyvCeBLd
9d30: 4e 78 52 50 32 46 4a 45 42 51 5f 6b 6f 77 35 5f NxRP2FJEBQ_kow5_
9d40: 72 37 45 53 46 7a 51 5a 38 42 6b 37 76 72 37 34 r7ESFzQZ8Bk7vr74
9d50: 64 6b 78 44 42 58 64 6b 53 6a 72 39 72 56 36 45 dkxDBXdkSjr9rV6E
9d60: 6c 53 30 73 5f 74 53 31 4e 77 72 6e 69 48 75 49 lS0s_tS1NwrniHuI
9d70: 39 53 6c 51 69 72 55 45 37 37 35 62 33 56 38 57 9SlQirUE775b3V8W
9d80: 6a 6e 74 2d 53 4d 64 77 52 52 70 4d 5a 48 49 42 jnt-SMdwRRpMZHIB
9d90: 48 6e 74 62 5f 58 44 75 4a 66 52 59 59 6b 61 5f Hntb_XDuJfRYYka_
9da0: 63 43 41 31 50 4e 6e 50 39 39 52 31 56 79 4b 50 cCA1PNnP99R1VyKP
9db0: 79 70 67 55 72 61 5a 68 71 54 5f 4c 77 46 37 56 ypgUraZhqT_LwF7V
9dc0: 51 47 6e 45 57 6c 69 69 43 52 42 68 4a 6b 68 34 QGnEWliiCRBhJkh4
9dd0: 4e 70 7a 75 33 6c 54 48 46 51 37 68 31 74 64 75 Npzu3lTHFQ7h1tdu
9de0: 48 33 78 31 32 45 55 65 48 41 76 69 59 67 33 47 H3x12EUeHAviYg3G
9df0: 53 75 53 47 37 74 32 67 58 64 5f 58 6b 54 54 4a SuSG7t2gXd_XkTTJ
9e00: 36 45 75 67 4f 74 32 70 30 59 31 5f 43 47 38 76 6EugOt2p0Y1_CG8v
9e10: 47 39 34 73 37 6b 33 44 56 4a 46 57 65 4d 48 51 G94s7k3DVJFWeMHQ
9e20: 4d 57 5f 6e 61 53 62 46 4a 73 34 7a 79 46 44 72 MW_naSbFJs4zyFDr
9e30: 37 58 38 72 66 55 35 6e 4a 31 4b 41 42 4e 48 5f 7X8rfU5nJ1KABNH_
9e40: 77 6b 72 52 32 63 4c 52 78 43 43 71 39 35 6b 7a wkrR2cLRxCCq95kz
9e50: 45 34 67 61 68 5a 79 66 4f 54 4b 74 66 70 2d 75 E4gahZyfOTKtfp-u
9e60: 6e 31 54 4d 46 54 6d 4a 30 50 57 64 62 53 36 37 n1TMFTmJ0PWdbS67
9e70: 68 78 46 54 4f 68 52 72 43 59 4b 6f 4b 73 67 36 hxFTOhRrCYKoKsg6
9e80: 32 52 31 34 4f 4a 36 52 5f 4e 62 6d 68 46 69 6e 2R14OJ6R_NbmhFin
9e90: 38 6d 6a 77 68 46 42 4c 51 4b 2d 6e 38 5f 42 75 8mjwhFBLQK-n8_Bu
9ea0: 46 77 59 54 72 55 53 59 42 68 33 6b 5f 67 46 31 FwYTrUSYBh3k_gF1
9eb0: 5a 50 36 38 5f 30 4b 79 66 32 64 37 6f 31 39 30 ZP68_0Kyf2d7o190
9ec0: 64 4b 31 4e 36 6d 35 51 6b 2d 4b 63 4e 75 6a 71 dK1N6m5Qk-KcNujq
9ed0: 69 49 67 66 7a 79 30 4e 65 52 63 41 4c 4c 31 6f iIgfzy0NeRcALL1o
9ee0: 57 39 37 54 37 50 32 39 66 4f 70 45 45 4c 58 77 W97T7P29fOpEELXw
9ef0: 56 78 75 42 59 38 39 79 47 69 35 54 4f 5f 52 37 VxuBY89yGi5TO_R7
9f00: 44 55 58 45 69 43 6d 45 42 46 41 6d 4f 42 34 45 DUXEiCmEBFAmOB4E
9f10: 4a 4d 69 67 56 57 36 55 4a 77 53 4d 52 30 35 67 JMigVW6UJwSMR05g
9f20: 4f 42 61 61 6f 76 31 48 42 45 6d 41 44 66 34 4d OBaaov1HBEmADf4M
9f30: 56 4d 35 34 62 38 48 31 45 56 58 41 4d 7a 7a 77 VM54b8H1EVXAMzzw
9f40: 73 7a 56 4b 42 50 70 6c 62 36 5a 62 45 6b 61 64 szVKBPplb6ZbEkad
9f50: 31 4a 59 75 7a 46 39 57 63 32 6c 30 37 76 73 4d 1JYuzF9Wc2l07vsM
9f60: 4c 41 7a 79 6d 6d 33 59 32 67 6b 6a 76 39 47 5a LAzymm3Y2gkjv9GZ
9f70: 6f 39 62 69 43 44 53 4c 62 46 70 61 63 42 4a 66 o9biCDSLbFpacBJf
9f80: 71 4a 46 33 78 76 72 5f 2d 39 38 42 73 35 2d 66 qJF3xvr_-98Bs5-f
9f90: 6e 76 65 71 58 66 33 49 62 41 45 56 58 5a 33 58 nveqXf3IbAEVXZ3X
9fa0: 5f 32 53 6a 6f 58 50 6d 6c 67 30 6d 5f 39 75 73 _2SjoXPmlg0m_9us
9fb0: 69 57 39 35 68 62 4f 4d 64 37 70 78 4e 4b 6c 61 iW95hbOMd7pxNKla
9fc0: 38 75 38 6e 4f 75 38 72 39 76 6b 4c 71 71 4b 67 8u8nOu8r9vkLqqKg
9fd0: 5f 79 42 48 64 6e 54 62 48 54 68 71 45 67 47 52 _yBHdnTbHThqEgGR
9fe0: 50 6d 70 63 56 42 38 78 33 50 35 44 5a 35 73 48 PmpcVB8x3P5DZ5sH
9ff0: 41 57 67 32 6b 31 6d 75 62 55 75 75 49 39 61 79 AWg2k1mubUuuI9ay
a000: 63 43 2d 62 31 71 4d 4f 50 75 35 79 38 5f 62 50 cC-b1qMOPu5y8_bP
a010: 76 58 4b 35 75 47 70 45 70 6d 6f 58 71 62 52 53 vXK5uGpEpmoXqbRS
a020: 6c 71 4d 4c 78 55 72 70 52 50 49 6a 4f 6f 54 50 lqMLxUrpRPIjOoTP
a030: 6a 42 63 38 42 63 69 41 52 41 6b 6a 31 79 58 59 jBc8BciARAkj1yXY
a040: 57 66 4a 35 75 6d 4f 33 32 4c 4d 72 43 61 4a 53 WfJ5umO32LMrCaJS
a050: 69 33 41 4f 35 76 5f 4b 39 35 46 56 4b 54 33 77 i3AO5v_K95FVKT3w
a060: 6e 45 34 78 33 52 61 31 79 55 33 43 63 75 58 4b nE4x3Ra1yU3CcuXK
a070: 6c 46 72 57 72 55 6c 57 57 58 47 48 59 53 37 74 lFrWrUlWWXGHYS7t
a080: 58 63 37 59 4c 37 49 6b 35 6a 76 49 38 67 33 6f Xc7YL7Ik5jvI8g3o
a090: 4a 65 53 34 4c 61 46 4d 63 35 57 78 79 7a 7a 67 JeS4LaFMc5Wxyzzg
a0a0: 75 45 55 61 4f 2d 46 78 52 7a 56 55 36 6b 67 4e uEUaO-FxRzVU6kgN
a0b0: 5f 39 59 64 64 72 67 22 3e 73 74 6f 63 68 61 73 _9Yddrg">stochas
a0c0: 74 69 63 3c 2f 61 3e 3c 2f 68 35 3e 0a 0a 20 20 tic</a></h5>..
a0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 68 <h
a0e0: 35 20 63 6c 61 73 73 3d 22 6d 6c 2d 34 22 20 3e 5 class="ml-4" >
a0f0: 3c 61 20 68 72 65 66 3d 22 68 74 74 70 73 3a 2f <a href="https:/
a100: 2f 78 79 7a 7a 79 61 70 70 73 2e 6c 69 6e 6b 2f /xyzzyapps.link/
a110: 73 61 6d 70 6c 65 73 2f 22 20 74 61 72 67 65 74 samples/" target
a120: 3d 22 5f 62 6c 61 6e 6b 22 3e 73 61 6d 70 6c 65 ="_blank">sample
a130: 20 62 72 6f 77 73 65 72 3c 2f 61 3e 3c 2f 68 35 browser</a></h5
a140: 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 3c 2f >. </
a150: 68 73 74 61 63 6b 3e 0a 0a 20 20 20 20 20 20 20 hstack>..
a160: 20 20 20 20 20 3c 62 69 74 72 68 79 74 68 6d 20 <bitrhythm
a170: 73 6f 6e 67 3d 22 7b 7b 64 61 74 61 7d 7d 22 3e song="{{data}}">
a180: 3c 2f 62 69 74 72 68 79 74 68 6d 3e 0a 20 20 20 </bitrhythm>.
a190: 20 20 20 20 20 3c 2f 64 69 76 3e 0a 0a 20 20 20 </div>..
a1a0: 20 3c 73 63 72 69 70 74 3e 0a 20 20 20 20 20 20 <script>.
a1b0: 20 20 72 69 6f 74 2e 63 6f 6d 70 69 6c 65 28 66 riot.compile(f
a1c0: 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 unction() {.
a1d0: 20 20 20 20 20 20 20 20 76 61 72 20 62 69 74 72 var bitr
a1e0: 68 79 74 68 6d 20 3d 20 72 69 6f 74 2e 6d 6f 75 hythm = riot.mou
a1f0: 6e 74 28 27 62 69 74 72 68 79 74 68 6d 27 29 3b nt('bitrhythm');
a200: 0a 20 20 20 20 20 20 20 20 20 20 20 20 77 69 6e . win
a210: 64 6f 77 2e 62 69 74 72 68 79 74 68 6d 20 3d 20 dow.bitrhythm =
a220: 62 69 74 72 68 79 74 68 6d 5b 30 5d 3b 0a 20 20 bitrhythm[0];.
a230: 20 20 20 20 20 20 20 20 20 20 76 61 72 20 64 69 var di
a240: 61 6c 20 3d 20 72 69 6f 74 2e 6d 6f 75 6e 74 28 al = riot.mount(
a250: 27 64 69 61 6c 27 29 3b 0a 20 20 20 20 20 20 20 'dial');.
a260: 20 20 20 20 20 76 61 72 20 6e 75 6d 62 65 72 20 var number
a270: 3d 20 72 69 6f 74 2e 6d 6f 75 6e 74 28 27 6e 75 = riot.mount('nu
a280: 6d 62 65 72 27 29 3b 0a 20 20 20 20 20 20 20 20 mber');.
a290: 20 20 20 20 76 61 72 20 73 61 6d 70 6c 65 20 3d var sample =
a2a0: 20 72 69 6f 74 2e 6d 6f 75 6e 74 28 27 73 61 6d riot.mount('sam
a2b0: 70 6c 65 27 29 3b 0a 20 20 20 20 20 20 20 20 7d ple');. }
a2c0: 29 0a 20 20 20 20 3c 2f 73 63 72 69 70 74 3e 0a ). </script>.
a2d0: 0a 0a 20 20 20 20 3c 2f 62 6f 64 79 3e 0a 0a 3c .. </body>..<
a2e0: 2f 68 74 6d 6c 3e 0a 0a 22 22 22 0a 0a 66 72 6f /html>.."""..fro
a2f0: 6d 20 6d 61 6b 6f 2e 74 65 6d 70 6c 61 74 65 20 m mako.template
a300: 69 6d 70 6f 72 74 20 54 65 6d 70 6c 61 74 65 0a import Template.
a310: 69 6d 70 6f 72 74 20 63 6f 6d 6d 6f 6e 0a 63 6f import common.co
a320: 64 65 20 3d 20 54 65 6d 70 6c 61 74 65 28 69 6e de = Template(in
a330: 64 65 78 29 2e 72 65 6e 64 65 72 28 63 6f 6d 6d dex).render(comm
a340: 6f 6e 5f 73 63 72 69 70 74 73 3d 63 6f 6d 6d 6f on_scripts=commo
a350: 6e 2e 65 78 74 65 72 6e 61 6c 5f 6c 69 62 72 61 n.external_libra
a360: 72 69 65 73 29 0a 0a 69 66 20 44 45 56 20 3d 3d ries)..if DEV ==
a370: 20 22 31 22 3a 0a 20 20 20 20 66 6f 72 5f 64 6f "1":. for_do
a380: 63 73 20 3d 20 22 22 22 0a 23 23 20 49 6e 64 65 cs = """.## Inde
a390: 78 0a 0a 60 60 60 7b 63 6f 64 65 2d 62 6c 6f 63 x..```{code-bloc
a3a0: 6b 7d 20 68 74 6d 6c 0a 2d 2d 2d 0a 66 6f 72 63 k} html.---.forc
a3b0: 65 3a 20 74 72 75 65 0a 2d 2d 2d 0a 25 73 0a 60 e: true.---.%s.`
a3c0: 60 60 0a 20 20 20 20 22 22 22 0a 20 20 20 20 63 ``. """. c
a3d0: 6f 67 2e 6f 75 74 28 66 6f 72 5f 64 6f 63 73 20 og.out(for_docs
a3e0: 25 20 28 69 6e 64 65 78 2c 29 29 0a 0a 6f 73 2e % (index,))..os.
a3f0: 73 79 73 74 65 6d 28 22 72 6d 20 74 65 6d 70 6c system("rm templ
a400: 61 74 65 73 2f 69 6e 64 65 78 2e 68 74 6d 6c 22 ates/index.html"
a410: 29 0a 66 20 3d 20 6f 70 65 6e 28 22 74 65 6d 70 ).f = open("temp
a420: 6c 61 74 65 73 2f 69 6e 64 65 78 2e 68 74 6d 6c lates/index.html
a430: 22 2c 20 22 77 22 29 0a 66 2e 77 72 69 74 65 28 ", "w").f.write(
a440: 63 6f 64 65 29 0a 66 2e 63 6c 6f 73 65 28 29 0a code).f.close().
a450: 40 3e 0a 40 40 0a 0a 0a 40 3c 0a 69 6d 70 6f 72 @>.@@...@<.impor
a460: 74 20 63 6f 67 0a 69 6d 70 6f 72 74 20 6f 73 0a t cog.import os.
a470: 0a 70 61 67 65 20 3d 20 22 22 22 0a 3c 21 44 4f .page = """.<!DO
a480: 43 54 59 50 45 20 68 74 6d 6c 3e 0a 3c 68 74 6d CTYPE html>.<htm
a490: 6c 20 6c 61 6e 67 3d 22 65 6e 22 3e 0a 20 20 20 l lang="en">.
a4a0: 20 3c 68 65 61 64 3e 0a 20 20 20 20 20 20 20 20 <head>.
a4b0: 3c 6d 65 74 61 20 63 68 61 72 73 65 74 3d 22 75 <meta charset="u
a4c0: 74 66 2d 38 22 3e 0a 20 20 20 20 20 20 20 20 3c tf-8">. <
a4d0: 6d 65 74 61 20 6e 61 6d 65 3d 22 76 69 65 77 70 meta name="viewp
a4e0: 6f 72 74 22 20 63 6f 6e 74 65 6e 74 3d 22 77 69 ort" content="wi
a4f0: 64 74 68 3d 64 65 76 69 63 65 2d 77 69 64 74 68 dth=device-width
a500: 2c 20 69 6e 69 74 69 61 6c 2d 73 63 61 6c 65 3d , initial-scale=
a510: 31 22 3e 0a 20 20 20 20 20 20 20 20 3c 6d 65 74 1">. <met
a520: 61 20 68 74 74 70 2d 65 71 75 69 76 3d 22 43 61 a http-equiv="Ca
a530: 63 68 65 2d 43 6f 6e 74 72 6f 6c 22 20 63 6f 6e che-Control" con
a540: 74 65 6e 74 3d 22 6e 6f 2d 63 61 63 68 65 2c 20 tent="no-cache,
a550: 6e 6f 2d 73 74 6f 72 65 2c 20 6d 75 73 74 2d 72 no-store, must-r
a560: 65 76 61 6c 69 64 61 74 65 22 20 2f 3e 0a 20 20 evalidate" />.
a570: 20 20 20 20 20 20 3c 6d 65 74 61 20 68 74 74 70 <meta http
a580: 2d 65 71 75 69 76 3d 22 50 72 61 67 6d 61 22 20 -equiv="Pragma"
a590: 63 6f 6e 74 65 6e 74 3d 22 6e 6f 2d 63 61 63 68 content="no-cach
a5a0: 65 22 20 2f 3e 0a 20 20 20 20 20 20 20 20 3c 6d e" />. <m
a5b0: 65 74 61 20 68 74 74 70 2d 65 71 75 69 76 3d 22 eta http-equiv="
a5c0: 45 78 70 69 72 65 73 22 20 63 6f 6e 74 65 6e 74 Expires" content
a5d0: 3d 22 30 22 20 2f 3e 0a 20 20 20 20 20 20 20 20 ="0" />.
a5e0: 3c 74 69 74 6c 65 3e 41 62 6f 75 74 20 62 69 72 <title>About bir
a5f0: 74 68 79 74 68 6d 3c 2f 74 69 74 6c 65 3e 0a 20 thythm</title>.
a600: 20 20 20 20 20 20 20 3c 6c 69 6e 6b 20 72 65 6c <link rel
a610: 3d 22 69 63 6f 6e 22 20 68 72 65 66 3d 22 66 61 ="icon" href="fa
a620: 76 69 63 6f 6e 2e 69 63 6f 22 3e 0a 20 20 20 20 vicon.ico">.
a630: 20 20 20 20 3c 73 74 79 6c 65 3e 0a 20 20 20 20 <style>.
a640: 20 20 20 20 68 74 6d 6c 2c 20 62 6f 64 79 20 7b html, body {
a650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 . mar
a660: 67 69 6e 3a 20 30 3b 0a 20 20 20 20 20 20 20 20 gin: 0;.
a670: 20 20 20 20 77 69 64 74 68 3a 20 31 30 30 25 3b width: 100%;
a680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 65 69 . hei
a690: 67 68 74 3a 20 31 30 30 25 3b 0a 20 20 20 20 20 ght: 100%;.
a6a0: 20 20 20 20 20 20 20 70 61 64 64 69 6e 67 3a 20 padding:
a6b0: 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 0;. }.
a6c0: 20 20 20 20 20 69 66 72 61 6d 65 20 7b 0a 20 20 iframe {.
a6d0: 20 20 20 20 20 20 20 20 20 20 70 6f 73 69 74 69 positi
a6e0: 6f 6e 3a 66 69 78 65 64 3b 0a 20 20 20 20 20 20 on:fixed;.
a6f0: 20 20 20 20 20 20 74 6f 70 3a 30 3b 0a 20 20 20 top:0;.
a700: 20 20 20 20 20 20 20 20 20 6c 65 66 74 3a 30 3b left:0;
a710: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 74 . bot
a720: 74 6f 6d 3a 30 3b 0a 20 20 20 20 20 20 20 20 20 tom:0;.
a730: 20 20 20 72 69 67 68 74 3a 30 3b 0a 20 20 20 20 right:0;.
a740: 20 20 20 20 20 20 20 20 77 69 64 74 68 3a 31 30 width:10
a750: 30 25 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 0%;.
a760: 68 65 69 67 68 74 3a 31 30 30 25 3b 0a 20 20 20 height:100%;.
a770: 20 20 20 20 20 20 20 20 20 62 6f 72 64 65 72 3a border:
a780: 6e 6f 6e 65 3b 0a 20 20 20 20 20 20 20 20 20 20 none;.
a790: 20 20 6d 61 72 67 69 6e 3a 30 3b 0a 20 20 20 20 margin:0;.
a7a0: 20 20 20 20 20 20 20 20 70 61 64 64 69 6e 67 3a padding:
a7b0: 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 0;. o
a7c0: 76 65 72 66 6c 6f 77 3a 68 69 64 64 65 6e 3b 0a verflow:hidden;.
a7d0: 20 20 20 20 20 20 20 20 20 20 20 20 7a 2d 69 6e z-in
a7e0: 64 65 78 3a 39 39 39 39 39 39 3b 0a 20 20 20 20 dex:999999;.
a7f0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 3c 2f }. </
a800: 73 74 79 6c 65 3e 0a 20 20 20 20 20 20 20 20 3c style>. <
a810: 6c 69 6e 6b 20 68 72 65 66 3d 22 68 74 74 70 73 link href="https
a820: 3a 2f 2f 75 6e 70 6b 67 2e 63 6f 6d 2f 74 61 69 ://unpkg.com/tai
a830: 6c 77 69 6e 64 63 73 73 40 5e 32 2f 64 69 73 74 lwindcss@^2/dist
a840: 2f 74 61 69 6c 77 69 6e 64 2e 6d 69 6e 2e 63 73 /tailwind.min.cs
a850: 73 22 20 72 65 6c 3d 22 73 74 79 6c 65 73 68 65 s" rel="styleshe
a860: 65 74 22 3e 0a 20 20 20 20 20 20 20 20 3c 73 63 et">. <sc
a870: 72 69 70 74 3e 0a 20 20 20 20 20 20 20 20 20 20 ript>.
a880: 20 20 77 69 6e 64 6f 77 2e 67 6f 61 74 63 6f 75 window.goatcou
a890: 6e 74 65 72 20 3d 20 7b 0a 20 20 20 20 20 20 20 nter = {.
a8a0: 20 20 20 20 20 20 20 20 20 70 61 74 68 3a 20 66 path: f
a8b0: 75 6e 63 74 69 6f 6e 28 70 29 20 7b 20 72 65 74 unction(p) { ret
a8c0: 75 72 6e 20 6c 6f 63 61 74 69 6f 6e 2e 68 6f 73 urn location.hos
a8d0: 74 20 2b 20 70 20 7d 0a 20 20 20 20 20 20 20 20 t + p }.
a8e0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 3c 2f }. </
a8f0: 73 63 72 69 70 74 3e 0a 20 20 20 20 20 20 20 20 script>.
a900: 3c 73 63 72 69 70 74 20 64 61 74 61 2d 67 6f 61 <script data-goa
a910: 74 63 6f 75 6e 74 65 72 3d 22 68 74 74 70 73 3a tcounter="https:
a920: 2f 2f 61 6e 61 6c 79 74 69 63 73 2e 78 79 7a 7a //analytics.xyzz
a930: 79 61 70 70 73 2e 6c 69 6e 6b 2f 63 6f 75 6e 74 yapps.link/count
a940: 22 20 61 73 79 6e 63 20 73 72 63 3d 22 2f 2f 61 " async src="//a
a950: 6e 61 6c 79 74 69 63 73 2e 78 79 7a 7a 79 61 70 nalytics.xyzzyap
a960: 70 73 2e 6c 69 6e 6b 2f 63 6f 75 6e 74 2e 6a 73 ps.link/count.js
a970: 22 3e 3c 2f 73 63 72 69 70 74 3e 0a 20 20 20 20 "></script>.
a980: 3c 2f 68 65 61 64 3e 0a 20 20 20 20 3c 62 6f 64 </head>. <bod
a990: 79 3e 0a 20 20 20 20 20 20 20 20 3c 69 66 72 61 y>. <ifra
a9a0: 6d 65 20 73 72 63 3d 22 68 74 74 70 73 3a 2f 2f me src="https://
a9b0: 62 6c 6f 67 2e 78 79 7a 7a 79 61 70 70 73 2e 6c blog.xyzzyapps.l
a9c0: 69 6e 6b 2f 62 69 74 72 68 79 74 68 6d 2d 73 75 ink/bitrhythm-su
a9d0: 62 6d 69 74 2d 69 73 73 75 65 2d 66 65 65 64 62 bmit-issue-feedb
a9e0: 61 63 6b 22 20 66 72 61 6d 65 62 6f 72 64 65 72 ack" frameborder
a9f0: 3d 22 30 22 3e 3c 2f 69 66 72 61 6d 65 3e 0a 20 ="0"></iframe>.
aa00: 20 20 20 3c 2f 62 6f 64 79 3e 0a 3c 2f 68 74 6d </body>.</htm
aa10: 6c 3e 0a 22 22 22 0a 0a 69 66 20 44 45 56 20 3d l>."""..if DEV =
aa20: 3d 20 22 31 22 3a 0a 20 20 20 20 66 6f 72 5f 64 = "1":. for_d
aa30: 6f 63 73 20 3d 20 22 22 22 0a 23 23 20 50 61 67 ocs = """.## Pag
aa40: 65 0a 0a 60 60 60 7b 63 6f 64 65 2d 62 6c 6f 63 e..```{code-bloc
aa50: 6b 7d 20 68 74 6d 6c 0a 2d 2d 2d 0a 66 6f 72 63 k} html.---.forc
aa60: 65 3a 20 74 72 75 65 0a 2d 2d 2d 0a 25 73 0a 60 e: true.---.%s.`
aa70: 60 60 0a 20 20 20 20 22 22 22 0a 20 20 20 20 63 ``. """. c
aa80: 6f 67 2e 6f 75 74 28 66 6f 72 5f 64 6f 63 73 20 og.out(for_docs
aa90: 25 20 28 70 61 67 65 2c 29 29 0a 0a 6f 73 2e 73 % (page,))..os.s
aaa0: 79 73 74 65 6d 28 22 72 6d 20 74 65 6d 70 6c 61 ystem("rm templa
aab0: 74 65 73 2f 70 61 67 65 2e 68 74 6d 6c 22 29 0a tes/page.html").
aac0: 66 20 3d 20 6f 70 65 6e 28 22 74 65 6d 70 6c 61 f = open("templa
aad0: 74 65 73 2f 70 61 67 65 2e 68 74 6d 6c 22 2c 20 tes/page.html",
aae0: 22 77 22 29 0a 66 2e 77 72 69 74 65 28 70 61 67 "w").f.write(pag
aaf0: 65 29 0a 66 2e 63 6c 6f 73 65 28 29 0a 40 3e 0a e).f.close().@>.
ab00: 40 40 0a 0a 23 23 20 4a 61 76 61 73 63 72 69 70 @@..## Javascrip
ab10: 74 0a 0a 54 68 69 73 20 69 6e 63 6c 75 64 65 73 t..This includes
ab20: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 75 the functions u
ab30: 73 65 64 20 66 6f 72 20 70 61 72 73 69 6e 67 20 sed for parsing
ab40: 74 68 65 20 70 61 74 74 65 72 6e 20 61 6e 64 20 the pattern and
ab50: 69 6e 69 74 69 61 6c 69 73 69 6e 67 20 74 68 65 initialising the
ab60: 20 73 61 6d 70 6c 65 73 2e 20 0a 41 20 70 72 65 samples. .A pre
ab70: 6c 69 6d 6e 61 72 79 20 73 61 6d 70 6c 65 72 20 limnary sampler
ab80: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 68 implementation h
ab90: 61 73 20 62 65 65 6e 20 64 6f 6e 65 20 77 69 74 as been done wit
aba0: 68 20 41 75 64 69 6f 57 6f 72 6b 6c 65 74 20 73 h AudioWorklet s
abb0: 75 70 70 6f 72 74 2c 20 61 6c 74 68 6f 75 67 68 upport, although
abc0: 20 74 68 65 72 65 20 64 6f 65 73 6e 27 74 20 73 there doesn't s
abd0: 65 65 6d 20 74 6f 20 6d 75 63 68 20 69 6d 70 72 eem to much impr
abe0: 6f 76 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 70 ovement in the p
abf0: 65 72 66 6f 72 6d 61 6e 63 65 2e 0a 0a 60 60 60 erformance...```
ac00: 7b 63 6f 64 65 2d 62 6c 6f 63 6b 7d 20 6a 73 0a {code-block} js.
ac10: 2d 2d 2d 0a 66 6f 72 63 65 3a 20 74 72 75 65 0a ---.force: true.
ac20: 2d 2d 2d 0a 0a 40 3c 0a 69 6d 70 6f 72 74 20 63 ---..@<.import c
ac30: 6f 67 0a 69 6d 70 6f 72 74 20 6f 73 0a 0a 6d 69 og.import os..mi
ac40: 73 63 5f 6a 73 20 3d 20 22 22 22 0a 66 75 6e 63 sc_js = """.func
ac50: 74 69 6f 6e 20 67 65 74 52 61 6e 64 6f 6d 49 6e tion getRandomIn
ac60: 74 28 6d 61 78 29 20 7b 0a 20 20 72 65 74 75 72 t(max) {. retur
ac70: 6e 20 4d 61 74 68 2e 66 6c 6f 6f 72 28 4d 61 74 n Math.floor(Mat
ac80: 68 2e 72 61 6e 64 6f 6d 28 29 20 2a 20 6d 61 78 h.random() * max
ac90: 29 3b 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e 20 69 );.}..function i
aca0: 6e 69 74 57 69 6e 61 6d 70 28 70 72 65 73 65 74 nitWinamp(preset
acb0: 29 20 7b 0a 20 20 20 20 76 61 72 20 63 61 6e 20 ) {. var can
acc0: 3d 20 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c = document.getEl
acd0: 65 6d 65 6e 74 42 79 49 64 28 22 76 69 73 75 61 ementById("visua
ace0: 6c 22 29 3b 0a 20 20 20 20 63 61 6e 2e 68 65 69 l");. can.hei
acf0: 67 68 74 20 3d 20 77 69 6e 64 6f 77 2e 69 6e 6e ght = window.inn
ad00: 65 72 48 65 69 67 68 74 20 2d 20 28 64 6f 63 75 erHeight - (docu
ad10: 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 ment.getElementB
ad20: 79 49 64 28 22 68 65 61 64 65 72 2d 70 6c 61 79 yId("header-play
ad30: 62 61 63 6b 22 29 2e 63 6c 69 65 6e 74 48 65 69 back").clientHei
ad40: 67 68 74 20 2f 20 32 29 3b 0a 20 20 20 20 63 61 ght / 2);. ca
ad50: 6e 2e 77 69 64 74 68 20 3d 20 77 69 6e 64 6f 77 n.width = window
ad60: 2e 69 6e 6e 65 72 57 69 64 74 68 3b 0a 20 20 20 .innerWidth;.
ad70: 20 76 61 72 20 63 61 6e 5f 63 6f 6e 74 61 69 6e var can_contain
ad80: 65 72 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 67 65 er = document.ge
ad90: 74 45 6c 65 6d 65 6e 74 42 79 49 64 28 22 63 61 tElementById("ca
ada0: 6e 76 61 73 2d 63 6f 6e 74 61 69 6e 65 72 22 29 nvas-container")
adb0: 3b 0a 20 20 20 20 63 61 6e 5f 63 6f 6e 74 61 69 ;. can_contai
adc0: 6e 65 72 2e 77 69 64 74 68 20 3d 20 77 69 6e 64 ner.width = wind
add0: 6f 77 2e 69 6e 6e 65 72 57 69 64 74 68 3b 0a 20 ow.innerWidth;.
ade0: 20 20 20 76 61 72 20 76 69 73 75 61 6c 69 7a 65 var visualize
adf0: 72 20 3d 20 77 69 6e 64 6f 77 2e 62 75 74 74 65 r = window.butte
ae00: 72 63 68 75 72 6e 2e 64 65 66 61 75 6c 74 2e 63 rchurn.default.c
ae10: 72 65 61 74 65 56 69 73 75 61 6c 69 7a 65 72 28 reateVisualizer(
ae20: 54 6f 6e 65 2e 67 65 74 43 6f 6e 74 65 78 74 28 Tone.getContext(
ae30: 29 2e 72 61 77 43 6f 6e 74 65 78 74 2c 20 63 61 ).rawContext, ca
ae40: 6e 2c 20 7b 0a 20 20 20 20 20 20 20 20 68 65 69 n, {. hei
ae50: 67 68 74 3a 20 77 69 6e 64 6f 77 2e 69 6e 6e 65 ght: window.inne
ae60: 72 48 65 69 67 68 74 20 2d 20 28 64 6f 63 75 6d rHeight - (docum
ae70: 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 ent.getElementBy
ae80: 49 64 28 22 68 65 61 64 65 72 2d 70 6c 61 79 62 Id("header-playb
ae90: 61 63 6b 22 29 2e 63 6c 69 65 6e 74 48 65 69 67 ack").clientHeig
aea0: 68 74 20 2f 20 32 29 2c 0a 20 20 20 20 20 20 20 ht / 2),.
aeb0: 20 77 69 64 74 68 3a 20 77 69 6e 64 6f 77 2e 69 width: window.i
aec0: 6e 6e 65 72 57 69 64 74 68 2c 0a 20 20 20 20 20 nnerWidth,.
aed0: 20 20 20 6d 65 73 68 57 69 64 74 68 3a 20 32 34 meshWidth: 24
aee0: 2c 0a 20 20 20 20 20 20 20 20 6d 65 73 68 48 65 ,. meshHe
aef0: 69 67 68 74 3a 20 31 38 2c 0a 20 20 20 20 7d 29 ight: 18,. })
af00: 3b 0a 20 20 20 20 76 69 73 75 61 6c 69 7a 65 72 ;. visualizer
af10: 2e 63 6f 6e 6e 65 63 74 41 75 64 69 6f 28 54 6f .connectAudio(To
af20: 6e 65 2e 67 65 74 43 6f 6e 74 65 78 74 28 29 2e ne.getContext().
af30: 64 65 73 74 69 6e 61 74 69 6f 6e 29 3b 0a 20 20 destination);.
af40: 20 20 63 6f 6e 73 74 20 70 72 65 73 65 74 73 20 const presets
af50: 3d 20 77 69 6e 64 6f 77 2e 62 75 74 74 65 72 63 = window.butterc
af60: 68 75 72 6e 50 72 65 73 65 74 73 2e 67 65 74 50 hurnPresets.getP
af70: 72 65 73 65 74 73 28 29 3b 0a 20 20 20 20 63 6f resets();. co
af80: 6e 73 74 20 70 72 65 73 65 74 50 61 72 61 6d 20 nst presetParam
af90: 3d 20 70 72 65 73 65 74 73 5b 70 72 65 73 65 74 = presets[preset
afa0: 5d 3b 0a 20 20 20 20 76 69 73 75 61 6c 69 7a 65 ];. visualize
afb0: 72 2e 6c 6f 61 64 50 72 65 73 65 74 28 70 72 65 r.loadPreset(pre
afc0: 73 65 74 50 61 72 61 6d 2c 20 30 2e 30 29 3b 20 setParam, 0.0);
afd0: 2f 2f 20 32 6e 64 20 61 72 67 75 6d 65 6e 74 20 // 2nd argument
afe0: 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 is the number of
aff0: 20 73 65 63 6f 6e 64 73 20 74 6f 20 62 6c 65 6e seconds to blen
b000: 64 20 70 72 65 73 65 74 73 0a 20 20 20 20 72 65 d presets. re
b010: 74 75 72 6e 20 76 69 73 75 61 6c 69 7a 65 72 3b turn visualizer;
b020: 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e 20 67 75 61 .}..function gua
b030: 72 64 28 72 61 6e 67 65 29 20 7b 0a 20 20 20 20 rd(range) {.
b040: 76 61 72 20 73 74 61 74 65 20 3d 20 6e 75 6c 6c var state = null
b050: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 66 75 6e ;. return fun
b060: 63 74 69 6f 6e 20 28 76 61 6c 29 20 7b 0a 20 20 ction (val) {.
b070: 20 20 20 20 20 20 69 66 20 28 28 76 61 6c 20 3e if ((val >
b080: 3d 20 72 61 6e 67 65 5b 30 5d 29 20 26 26 20 28 = range[0]) && (
b090: 76 61 6c 20 3c 3d 20 72 61 6e 67 65 5b 31 5d 29 val <= range[1])
b0a0: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 ) {.
b0b0: 73 74 61 74 65 20 3d 20 76 61 6c 3b 0a 20 20 20 state = val;.
b0c0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
b0d0: 76 61 6c 3b 0a 20 20 20 20 20 20 20 20 7d 20 65 val;. } e
b0e0: 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 lse {.
b0f0: 20 20 72 65 74 75 72 6e 20 73 74 61 74 65 3b 0a return state;.
b100: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a }. }.
b110: 7d 0a 0a 66 75 6e 63 74 69 6f 6e 20 72 6f 6d 61 }..function roma
b120: 6e 74 6f 67 79 70 73 79 28 68 65 78 29 20 7b 0a ntogypsy(hex) {.
b130: 20 20 20 20 76 61 72 20 6c 65 74 74 65 72 73 20 var letters
b140: 3d 20 68 65 78 2e 72 65 70 6c 61 63 65 28 27 60 = hex.replace('`
b150: 30 27 2c 27 61 27 29 3b 0a 20 20 20 20 6c 65 74 0','a');. let
b160: 74 65 72 73 20 3d 20 6c 65 74 74 65 72 73 2e 72 ters = letters.r
b170: 65 70 6c 61 63 65 28 27 60 31 27 2c 27 62 27 29 eplace('`1','b')
b180: 3b 0a 20 20 20 20 6c 65 74 74 65 72 73 20 3d 20 ;. letters =
b190: 6c 65 74 74 65 72 73 2e 72 65 70 6c 61 63 65 28 letters.replace(
b1a0: 27 60 32 27 2c 27 63 27 29 3b 0a 20 20 20 20 6c '`2','c');. l
b1b0: 65 74 74 65 72 73 20 3d 20 6c 65 74 74 65 72 73 etters = letters
b1c0: 2e 72 65 70 6c 61 63 65 28 27 60 33 27 2c 27 64 .replace('`3','d
b1d0: 27 29 3b 0a 20 20 20 20 6c 65 74 74 65 72 73 20 ');. letters
b1e0: 3d 20 6c 65 74 74 65 72 73 2e 72 65 70 6c 61 63 = letters.replac
b1f0: 65 28 27 60 34 27 2c 27 65 27 29 3b 0a 20 20 20 e('`4','e');.
b200: 20 6c 65 74 74 65 72 73 20 3d 20 6c 65 74 74 65 letters = lette
b210: 72 73 2e 72 65 70 6c 61 63 65 28 27 60 35 27 2c rs.replace('`5',
b220: 27 66 27 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 'f');. return
b230: 20 6c 65 74 74 65 72 73 3b 0a 7d 0a 0a 66 75 6e letters;.}..fun
b240: 63 74 69 6f 6e 20 6c 65 74 74 65 72 74 6f 64 65 ction lettertode
b250: 63 28 6c 65 74 74 65 72 29 20 7b 0a 20 20 20 20 c(letter) {.
b260: 76 61 72 20 62 69 6e 20 3d 20 22 22 3b 0a 20 20 var bin = "";.
b270: 20 20 69 66 20 28 6c 65 74 74 65 72 2e 6d 61 74 if (letter.mat
b280: 63 68 28 2f 5c 64 2f 29 29 20 7b 0a 20 20 20 20 ch(/\d/)) {.
b290: 20 20 20 20 6e 6f 20 3d 20 70 61 72 73 65 49 6e no = parseIn
b2a0: 74 28 6c 65 74 74 65 72 29 3b 0a 20 20 20 20 7d t(letter);. }
b2b0: 0a 20 20 20 20 65 6c 73 65 20 69 66 20 28 6c 65 . else if (le
b2c0: 74 74 65 72 20 3d 3d 20 22 61 22 29 20 7b 0a 20 tter == "a") {.
b2d0: 20 20 20 20 20 20 20 6e 6f 20 3d 20 31 30 3b 0a no = 10;.
b2e0: 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 69 }. else i
b2f0: 66 20 28 6c 65 74 74 65 72 20 3d 3d 20 22 62 22 f (letter == "b"
b300: 29 20 7b 0a 20 20 20 20 20 20 20 20 6e 6f 20 3d ) {. no =
b310: 20 31 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 11;. }. e
b320: 6c 73 65 20 69 66 20 28 6c 65 74 74 65 72 20 3d lse if (letter =
b330: 3d 20 22 63 22 29 20 7b 0a 20 20 20 20 20 20 20 = "c") {.
b340: 20 6e 6f 20 3d 20 31 32 3b 0a 20 20 20 20 7d 0a no = 12;. }.
b350: 20 20 20 20 65 6c 73 65 20 69 66 20 28 6c 65 74 else if (let
b360: 74 65 72 20 3d 3d 20 22 64 22 29 20 7b 0a 20 20 ter == "d") {.
b370: 20 20 20 20 20 20 6e 6f 20 3d 20 31 33 3b 0a 20 no = 13;.
b380: 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 69 66 }. else if
b390: 20 28 6c 65 74 74 65 72 20 3d 3d 20 22 65 22 29 (letter == "e")
b3a0: 20 7b 0a 20 20 20 20 20 20 20 20 6e 6f 20 3d 20 {. no =
b3b0: 31 34 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 14;. }. el
b3c0: 73 65 20 69 66 20 28 6c 65 74 74 65 72 20 3d 3d se if (letter ==
b3d0: 20 22 66 22 29 20 7b 0a 20 20 20 20 20 20 20 20 "f") {.
b3e0: 6e 6f 20 3d 20 31 35 3b 0a 20 20 20 20 7d 0a 20 no = 15;. }.
b3f0: 20 20 20 66 6f 72 20 28 69 20 3d 20 31 3b 20 69 for (i = 1; i
b400: 20 3c 3d 20 6e 6f 3b 20 69 2b 2b 29 20 7b 0a 20 <= no; i++) {.
b410: 20 20 20 20 20 20 20 62 69 6e 20 2b 3d 20 22 30 bin += "0
b420: 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 ";. }. ret
b430: 75 72 6e 20 62 69 6e 3b 0a 7d 0a 0a 66 75 6e 63 urn bin;.}..func
b440: 74 69 6f 6e 20 6c 65 74 74 65 72 74 6f 62 69 6e tion lettertobin
b450: 28 6c 65 74 74 65 72 29 20 7b 0a 20 20 20 20 76 (letter) {. v
b460: 61 72 20 62 69 6e 20 3d 20 22 22 3b 0a 20 20 20 ar bin = "";.
b470: 20 69 66 20 28 6c 65 74 74 65 72 20 3d 3d 20 22 if (letter == "
b480: 30 22 29 20 7b 0a 20 20 20 20 20 20 20 20 62 69 0") {. bi
b490: 6e 20 2b 3d 20 22 30 30 30 30 22 3b 0a 20 20 20 n += "0000";.
b4a0: 20 7d 0a 20 20 20 20 69 66 20 28 6c 65 74 74 65 }. if (lette
b4b0: 72 20 3d 3d 20 22 31 22 29 20 7b 0a 20 20 20 20 r == "1") {.
b4c0: 20 20 20 20 62 69 6e 20 2b 3d 20 22 30 30 30 31 bin += "0001
b4d0: 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 ";. }. els
b4e0: 65 20 69 66 20 28 6c 65 74 74 65 72 20 3d 3d 20 e if (letter ==
b4f0: 22 32 22 29 20 7b 0a 20 20 20 20 20 20 20 20 62 "2") {. b
b500: 69 6e 20 2b 3d 20 22 30 30 31 30 22 3b 0a 20 20 in += "0010";.
b510: 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 69 66 20 }. else if
b520: 28 6c 65 74 74 65 72 20 3d 3d 20 22 33 22 29 20 (letter == "3")
b530: 7b 0a 20 20 20 20 20 20 20 20 62 69 6e 20 2b 3d {. bin +=
b540: 20 22 30 30 31 31 22 3b 0a 20 20 20 20 7d 0a 20 "0011";. }.
b550: 20 20 20 65 6c 73 65 20 69 66 20 28 6c 65 74 74 else if (lett
b560: 65 72 20 3d 3d 20 22 34 22 29 20 7b 0a 20 20 20 er == "4") {.
b570: 20 20 20 20 20 62 69 6e 20 2b 3d 20 22 30 31 30 bin += "010
b580: 30 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 0";. }. el
b590: 73 65 20 69 66 20 28 6c 65 74 74 65 72 20 3d 3d se if (letter ==
b5a0: 20 22 35 22 29 20 7b 0a 20 20 20 20 20 20 20 20 "5") {.
b5b0: 62 69 6e 20 2b 3d 20 22 30 31 30 31 22 3b 0a 20 bin += "0101";.
b5c0: 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 69 66 }. else if
b5d0: 20 28 6c 65 74 74 65 72 20 3d 3d 20 22 36 22 29 (letter == "6")
b5e0: 20 7b 0a 20 20 20 20 20 20 20 20 62 69 6e 20 2b {. bin +
b5f0: 3d 20 22 30 31 31 30 22 3b 0a 20 20 20 20 7d 0a = "0110";. }.
b600: 20 20 20 20 65 6c 73 65 20 69 66 20 28 6c 65 74 else if (let
b610: 74 65 72 20 3d 3d 20 22 37 22 29 20 7b 0a 20 20 ter == "7") {.
b620: 20 20 20 20 20 20 62 69 6e 20 2b 3d 20 22 30 31 bin += "01
b630: 31 31 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 11";. }. e
b640: 6c 73 65 20 69 66 20 28 6c 65 74 74 65 72 20 3d lse if (letter =
b650: 3d 20 22 38 22 29 20 7b 0a 20 20 20 20 20 20 20 = "8") {.
b660: 20 62 69 6e 20 2b 3d 20 22 31 30 30 30 22 3b 0a bin += "1000";.
b670: 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 69 }. else i
b680: 66 20 28 6c 65 74 74 65 72 20 3d 3d 20 22 39 22 f (letter == "9"
b690: 29 20 7b 0a 20 20 20 20 20 20 20 20 62 69 6e 20 ) {. bin
b6a0: 2b 3d 20 22 31 30 30 31 22 3b 0a 20 20 20 20 7d += "1001";. }
b6b0: 0a 20 20 20 20 65 6c 73 65 20 69 66 20 28 6c 65 . else if (le
b6c0: 74 74 65 72 20 3d 3d 20 22 61 22 29 20 7b 0a 20 tter == "a") {.
b6d0: 20 20 20 20 20 20 20 62 69 6e 20 2b 3d 20 22 31 bin += "1
b6e0: 30 31 30 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20 010";. }.
b6f0: 65 6c 73 65 20 69 66 20 28 6c 65 74 74 65 72 20 else if (letter
b700: 3d 3d 20 22 62 22 29 20 7b 0a 20 20 20 20 20 20 == "b") {.
b710: 20 20 62 69 6e 20 2b 3d 20 22 31 30 31 31 22 3b bin += "1011";
b720: 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 . }. else
b730: 69 66 20 28 6c 65 74 74 65 72 20 3d 3d 20 22 63 if (letter == "c
b740: 22 29 20 7b 0a 20 20 20 20 20 20 20 20 62 69 6e ") {. bin
b750: 20 2b 3d 20 22 31 31 30 30 22 3b 0a 20 20 20 20 += "1100";.
b760: 7d 0a 20 20 20 20 65 6c 73 65 20 69 66 20 28 6c }. else if (l
b770: 65 74 74 65 72 20 3d 3d 20 22 64 22 29 20 7b 0a etter == "d") {.
b780: 20 20 20 20 20 20 20 20 62 69 6e 20 2b 3d 20 22 bin += "
b790: 31 31 30 31 22 3b 0a 20 20 20 20 7d 0a 20 20 20 1101";. }.
b7a0: 20 65 6c 73 65 20 69 66 20 28 6c 65 74 74 65 72 else if (letter
b7b0: 20 3d 3d 20 22 65 22 29 20 7b 0a 20 20 20 20 20 == "e") {.
b7c0: 20 20 20 62 69 6e 20 2b 3d 20 22 31 31 31 30 22 bin += "1110"
b7d0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 ;. }. else
b7e0: 20 69 66 20 28 6c 65 74 74 65 72 20 3d 3d 20 22 if (letter == "
b7f0: 66 22 29 20 7b 0a 20 20 20 20 20 20 20 20 62 69 f") {. bi
b800: 6e 20 2b 3d 20 22 31 31 31 31 22 3b 0a 20 20 20 n += "1111";.
b810: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 62 69 }. return bi
b820: 6e 3b 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e 20 68 n;.}..function h
b830: 65 78 32 62 69 6e 28 68 65 78 29 20 7b 0a 20 20 ex2bin(hex) {.
b840: 20 20 76 61 72 20 6c 65 74 74 65 72 73 20 3d 20 var letters =
b850: 72 6f 6d 61 6e 74 6f 67 79 70 73 79 28 68 65 78 romantogypsy(hex
b860: 29 0a 20 20 20 20 6c 65 74 74 65 72 73 20 3d 20 ). letters =
b870: 6c 65 74 74 65 72 73 2e 73 70 6c 69 74 28 27 27 letters.split(''
b880: 29 3b 0a 20 20 20 20 76 61 72 20 62 69 6e 20 3d );. var bin =
b890: 20 22 22 3b 0a 20 20 20 20 6c 65 74 74 65 72 73 "";. letters
b8a0: 2e 6d 61 70 28 66 75 6e 63 74 69 6f 6e 28 6c 65 .map(function(le
b8b0: 74 74 65 72 29 20 7b 0a 20 20 20 20 20 20 20 20 tter) {.
b8c0: 62 69 6e 20 2b 3d 20 6c 65 74 74 65 72 74 6f 62 bin += lettertob
b8d0: 69 6e 28 6c 65 74 74 65 72 29 0a 20 20 20 20 7d in(letter). }
b8e0: 29 0a 20 20 20 20 72 65 74 75 72 6e 20 62 69 6e ). return bin
b8f0: 3b 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e 20 67 65 ;.}..function ge
b900: 74 5f 63 68 61 72 28 73 74 72 2c 20 69 6e 64 65 t_char(str, inde
b910: 78 29 20 7b 0a 20 20 20 20 69 66 20 28 28 69 6e x) {. if ((in
b920: 64 65 78 20 3e 20 30 29 20 26 26 20 28 69 6e 64 dex > 0) && (ind
b930: 65 78 20 3c 20 73 74 72 2e 6c 65 6e 67 74 68 29 ex < str.length)
b940: 29 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 ) {. retu
b950: 72 6e 20 73 74 72 5b 69 6e 64 65 78 5d 3b 0a 20 rn str[index];.
b960: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 } else {.
b970: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 0a return null.
b980: 20 20 20 20 7d 0a 7d 0a 0a 66 75 6e 63 74 69 6f }.}..functio
b990: 6e 20 70 61 74 74 65 72 6e 5f 6d 65 74 61 28 70 n pattern_meta(p
b9a0: 29 20 7b 0a 20 20 20 20 69 66 20 28 21 70 29 20 ) {. if (!p)
b9b0: 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e {. return
b9c0: 20 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 null;. }.
b9d0: 20 70 20 3d 20 70 2e 72 65 70 6c 61 63 65 28 2f p = p.replace(/
b9e0: 20 2f 67 2c 20 22 22 29 3b 0a 20 20 20 20 76 61 /g, "");. va
b9f0: 72 20 66 63 20 3d 20 70 2e 73 70 6c 69 74 28 27 r fc = p.split('
ba00: 27 29 5b 30 5d 3b 0a 20 20 20 20 69 66 20 28 66 ')[0];. if (f
ba10: 63 3d 3d 20 22 70 22 29 20 7b 0a 20 20 20 20 20 c== "p") {.
ba20: 20 20 20 76 61 72 20 70 74 79 70 65 20 3d 20 22 var ptype = "
ba30: 78 6f 22 3b 0a 20 20 20 20 20 20 20 20 76 61 72 xo";. var
ba40: 20 6c 20 3d 20 28 70 2e 6c 65 6e 67 74 68 20 2d l = (p.length -
ba50: 20 31 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 1);. }..
ba60: 69 66 20 28 70 74 79 70 65 20 3d 3d 20 22 78 6f if (ptype == "xo
ba70: 22 29 20 7b 0a 20 20 20 20 20 20 20 20 76 61 72 ") {. var
ba80: 20 66 70 20 3d 20 70 2e 73 75 62 73 74 72 28 31 fp = p.substr(1
ba90: 29 3b 0a 20 20 20 20 20 20 20 20 66 70 20 3d 20 );. fp =
baa0: 66 70 2e 72 65 70 6c 61 63 65 28 2f 78 2f 67 2c fp.replace(/x/g,
bab0: 20 22 31 22 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 "1");. }..
bac0: 20 20 69 66 20 28 21 66 70 29 20 7b 0a 20 20 20 if (!fp) {.
bad0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c return null
bae0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 76 61 72 ;. }.. var
baf0: 20 64 6f 6e 65 20 3d 20 66 61 6c 73 65 3b 0a 20 done = false;.
bb00: 20 20 20 76 61 72 20 69 6e 64 65 78 20 3d 20 30 var index = 0
bb10: 3b 0a 20 20 20 20 76 61 72 20 6d 65 74 61 20 3d ;. var meta =
bb20: 20 7b 7d 0a 20 20 20 20 76 61 72 20 6f 6e 65 5f {}. var one_
bb30: 69 6e 64 65 78 20 3d 20 31 3b 0a 0a 20 20 20 20 index = 1;..
bb40: 77 68 69 6c 65 28 31 29 20 7b 0a 20 20 20 20 20 while(1) {.
bb50: 20 20 20 69 66 20 28 69 6e 64 65 78 20 3e 20 66 if (index > f
bb60: 70 2e 6c 65 6e 67 74 68 29 20 7b 0a 20 20 20 20 p.length) {.
bb70: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 break;.
bb80: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 }.
bb90: 20 76 61 72 20 63 75 72 72 65 6e 74 5f 6d 65 74 var current_met
bba0: 61 20 3d 20 7b 7d 0a 20 20 20 20 20 20 20 20 76 a = {}. v
bbb0: 61 72 20 63 75 72 72 65 6e 74 5f 6c 65 74 74 65 ar current_lette
bbc0: 72 20 3d 20 66 70 5b 69 6e 64 65 78 5d 0a 20 20 r = fp[index].
bbd0: 20 20 20 20 20 20 69 66 20 28 63 75 72 72 65 6e if (curren
bbe0: 74 5f 6c 65 74 74 65 72 20 3d 3d 20 22 5f 22 29 t_letter == "_")
bbf0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d {. m
bc00: 65 74 61 5b 6f 6e 65 5f 69 6e 64 65 78 20 2d 31 eta[one_index -1
bc10: 5d 20 3d 20 7b 22 76 6f 6c 75 6d 65 22 3a 20 22 ] = {"volume": "
bc20: 6f 66 66 22 20 7d 3b 0a 20 20 20 20 20 20 20 20 off" };.
bc30: 20 20 20 20 69 6e 64 65 78 20 2b 3d 20 32 3b 0a index += 2;.
bc40: 20 20 20 20 20 20 20 20 20 20 20 20 6f 6e 65 5f one_
bc50: 69 6e 64 65 78 20 2b 3d 20 32 3b 0a 20 20 20 20 index += 2;.
bc60: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 continue
bc70: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 ;. }.
bc80: 20 20 20 20 65 6c 73 65 20 69 66 20 28 63 75 72 else if (cur
bc90: 72 65 6e 74 5f 6c 65 74 74 65 72 20 3d 3d 20 22 rent_letter == "
bca0: 31 22 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 1") {.
bcb0: 20 20 76 61 72 20 6e 65 78 74 5f 6c 65 74 74 65 var next_lette
bcc0: 72 20 3d 20 67 65 74 5f 63 68 61 72 28 66 70 2c r = get_char(fp,
bcd0: 69 6e 64 65 78 20 2b 20 31 29 3b 0a 20 20 20 20 index + 1);.
bce0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 65 78 74 if (next
bcf0: 5f 6c 65 74 74 65 72 20 3d 3d 20 22 5b 22 29 20 _letter == "[")
bd00: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
bd10: 20 20 76 61 72 20 6a 75 6d 70 5f 69 6e 64 65 78 var jump_index
bd20: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 = 1;.
bd30: 20 20 20 20 20 20 76 61 72 20 62 75 66 66 65 72 var buffer
bd40: 20 3d 20 22 22 3b 0a 20 20 20 20 20 20 20 20 20 = "";.
bd50: 20 20 20 20 20 20 20 77 68 69 6c 65 28 31 29 20 while(1)
bd60: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
bd70: 20 20 20 20 20 20 69 66 20 28 28 28 69 6e 64 65 if (((inde
bd80: 78 20 2b 20 31 29 20 2b 20 6a 75 6d 70 5f 69 6e x + 1) + jump_in
bd90: 64 65 78 29 20 3e 20 66 70 2e 6c 65 6e 67 74 68 dex) > fp.length
bda0: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 ) {.
bdb0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 brea
bdc0: 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 k;.
bdd0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 }.
bde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 74 let
bdf0: 20 62 5f 6e 65 78 74 5f 6c 65 74 74 65 72 20 3d b_next_letter =
be00: 20 67 65 74 5f 63 68 61 72 28 66 70 2c 20 28 28 get_char(fp, ((
be10: 69 6e 64 65 78 20 2b 20 31 29 20 2b 20 6a 75 6d index + 1) + jum
be20: 70 5f 69 6e 64 65 78 29 29 3b 0a 0a 20 20 20 20 p_index));..
be30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
be40: 69 66 20 28 62 5f 6e 65 78 74 5f 6c 65 74 74 65 if (b_next_lette
be50: 72 20 3d 3d 20 22 5d 22 29 20 7b 0a 20 20 20 20 r == "]") {.
be60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
be70: 20 20 20 20 6a 75 6d 70 5f 69 6e 64 65 78 20 2b jump_index +
be80: 3d 20 32 3b 0a 20 20 20 20 20 20 20 20 20 20 20 = 2;.
be90: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 bre
bea0: 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 ak;.
beb0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else {
bec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
bed0: 20 20 20 20 20 20 20 20 20 62 75 66 66 65 72 20 buffer
bee0: 2b 3d 20 62 5f 6e 65 78 74 5f 6c 65 74 74 65 72 += b_next_letter
bef0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ;.
bf00: 20 20 20 20 20 20 20 20 20 20 6a 75 6d 70 5f 69 jump_i
bf10: 6e 64 65 78 20 2b 3d 20 31 3b 0a 20 20 20 20 20 ndex += 1;.
bf20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
bf30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
bf40: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }.
bf50: 20 20 20 76 61 72 20 69 6e 64 69 76 69 64 75 61 var individua
bf60: 6c 5f 6d 65 74 61 20 3d 20 62 75 66 66 65 72 2e l_meta = buffer.
bf70: 73 70 6c 69 74 28 22 3b 22 29 0a 20 20 20 20 20 split(";").
bf80: 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 69 76 indiv
bf90: 69 64 75 61 6c 5f 6d 65 74 61 2e 6d 61 70 28 66 idual_meta.map(f
bfa0: 75 6e 63 74 69 6f 6e 20 28 65 29 20 7b 0a 20 20 unction (e) {.
bfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bfc0: 20 20 69 66 20 28 65 2e 73 74 61 72 74 73 57 69 if (e.startsWi
bfd0: 74 68 28 22 5f 22 29 29 20 7b 0a 20 20 20 20 20 th("_")) {.
bfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bff0: 20 20 20 63 75 72 72 65 6e 74 5f 6d 65 74 61 5b current_meta[
c000: 22 70 61 6e 22 5d 20 3d 20 65 2e 73 75 62 73 74 "pan"] = e.subst
c010: 72 69 6e 67 28 31 29 0a 20 20 20 20 20 20 20 20 ring(1).
c020: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 }.
c030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c040: 20 20 69 66 20 28 65 2e 73 74 61 72 74 73 57 69 if (e.startsWi
c050: 74 68 28 22 5e 22 29 29 20 7b 0a 20 20 20 20 20 th("^")) {.
c060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c070: 20 20 20 63 75 72 72 65 6e 74 5f 6d 65 74 61 5b current_meta[
c080: 22 70 69 74 63 68 22 5d 20 3d 20 65 2e 73 75 62 "pitch"] = e.sub
c090: 73 74 72 69 6e 67 28 31 29 0a 20 20 20 20 20 20 string(1).
c0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 }
c0b0: 65 6c 73 65 20 69 66 20 28 65 2e 73 74 61 72 74 else if (e.start
c0c0: 73 57 69 74 68 28 22 2b 22 29 29 20 7b 0a 20 20 sWith("+")) {.
c0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c0e0: 20 20 20 20 20 20 63 75 72 72 65 6e 74 5f 6d 65 current_me
c0f0: 74 61 5b 22 64 65 6c 61 79 22 5d 20 3d 20 65 0a ta["delay"] = e.
c100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c110: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 } else {.
c120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c130: 20 20 20 20 20 63 75 72 72 65 6e 74 5f 6d 65 74 current_met
c140: 61 5b 22 76 6f 6c 75 6d 65 22 5d 20 3d 20 65 0a a["volume"] = e.
c150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c160: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 }.
c170: 20 20 20 20 20 20 7d 29 0a 20 20 20 20 20 20 20 }).
c180: 20 20 20 20 20 20 20 20 20 6d 65 74 61 5b 6f 6e meta[on
c190: 65 5f 69 6e 64 65 78 20 2d 31 5d 20 3d 20 63 75 e_index -1] = cu
c1a0: 72 72 65 6e 74 5f 6d 65 74 61 0a 20 20 20 20 20 rrent_meta.
c1b0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 index
c1c0: 20 2b 3d 20 6a 75 6d 70 5f 69 6e 64 65 78 3b 0a += jump_index;.
c1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c1e0: 6f 6e 65 5f 69 6e 64 65 78 20 2b 3d 20 31 3b 0a one_index += 1;.
c1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c200: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 continue;.
c210: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 } else {.
c220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d m
c230: 65 74 61 5b 6f 6e 65 5f 69 6e 64 65 78 20 2d 31 eta[one_index -1
c240: 5d 20 3d 20 63 75 72 72 65 6e 74 5f 6d 65 74 61 ] = current_meta
c250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
c260: 20 6f 6e 65 5f 69 6e 64 65 78 20 2b 3d 20 31 3b one_index += 1;
c270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
c280: 20 69 6e 64 65 78 20 2b 3d 20 31 3b 0a 20 20 20 index += 1;.
c290: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e con
c2a0: 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 tinue;.
c2b0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 20 65 }. } e
c2c0: 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 lse {.
c2d0: 20 20 69 66 20 28 63 75 72 72 65 6e 74 5f 6c 65 if (current_le
c2e0: 74 74 65 72 20 3d 3d 20 22 2a 22 29 20 7b 0a 20 tter == "*") {.
c2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 v
c300: 61 72 20 6e 65 78 74 5f 6c 65 74 74 65 72 20 3d ar next_letter =
c310: 20 67 65 74 5f 63 68 61 72 28 66 70 2c 69 6e 64 get_char(fp,ind
c320: 65 78 20 2b 20 31 29 3b 0a 20 20 20 20 20 20 20 ex + 1);.
c330: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 65 78 if (nex
c340: 74 5f 6c 65 74 74 65 72 20 3d 3d 20 22 60 22 29 t_letter == "`")
c350: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
c360: 20 20 20 20 20 20 20 69 6e 64 65 78 20 2b 3d 20 index +=
c370: 33 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3;.
c380: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 } else {.
c390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c3a0: 69 6e 64 65 78 20 2b 3d 20 32 3b 0a 20 20 20 20 index += 2;.
c3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c3c0: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 continue;.
c3d0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 }.
c3e0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else {
c3f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
c400: 20 69 6e 64 65 78 20 2b 3d 20 31 3b 0a 20 20 20 index += 1;.
c410: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 6e 65 one
c420: 5f 69 6e 64 65 78 20 2b 3d 20 31 3b 0a 20 20 20 _index += 1;.
c430: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e con
c440: 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 tinue;.
c450: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 }. }.
c460: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 }. return
c470: 6d 65 74 61 3b 0a 7d 0a 0a 77 69 6e 64 6f 77 2e meta;.}..window.
c480: 70 61 74 74 65 72 6e 5f 6d 65 74 61 20 3d 20 70 pattern_meta = p
c490: 61 74 74 65 72 6e 5f 6d 65 74 61 3b 0a 0a 0a 66 attern_meta;...f
c4a0: 75 6e 63 74 69 6f 6e 20 63 75 65 28 68 74 6d 6c unction cue(html
c4b0: 2c 20 73 65 63 6f 6e 64 73 20 3d 20 35 29 20 7b , seconds = 5) {
c4c0: 0a 20 20 20 20 20 20 20 20 24 28 22 23 63 75 65 . $("#cue
c4d0: 64 22 29 2e 68 74 6d 6c 28 68 74 6d 6c 29 3b 0a d").html(html);.
c4e0: 20 20 20 20 20 20 20 20 73 65 74 54 69 6d 65 6f setTimeo
c4f0: 75 74 28 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b ut(function () {
c500: 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 28 22 . $("
c510: 23 63 75 65 64 22 29 2e 68 74 6d 6c 28 22 22 29 #cued").html("")
c520: 3b 0a 20 20 20 20 20 20 20 20 7d 2c 20 73 65 63 ;. }, sec
c530: 6f 6e 64 73 20 2a 20 31 30 30 30 29 0a 7d 0a 0a onds * 1000).}..
c540: 77 69 6e 64 6f 77 2e 63 75 65 20 3d 20 63 75 65 window.cue = cue
c550: 3b 0a 0a 61 73 79 6e 63 20 66 75 6e 63 74 69 6f ;..async functio
c560: 6e 20 6c 6f 61 64 53 61 6d 70 6c 65 73 54 6f 57 n loadSamplesToW
c570: 6f 72 6b 6c 65 74 28 75 72 6c 73 29 20 7b 0a 20 orklet(urls) {.
c580: 20 20 20 76 61 72 20 63 6f 6e 74 65 78 74 20 3d var context =
c590: 20 54 6f 6e 65 2e 67 65 74 43 6f 6e 74 65 78 74 Tone.getContext
c5a0: 28 29 3b 0a 20 20 20 20 77 69 6e 64 6f 77 2e 63 ();. window.c
c5b0: 6f 6e 74 65 78 74 20 3d 20 63 6f 6e 74 65 78 74 ontext = context
c5c0: 3b 0a 20 20 20 20 61 77 61 69 74 20 63 6f 6e 74 ;. await cont
c5d0: 65 78 74 2e 61 64 64 41 75 64 69 6f 57 6f 72 6b ext.addAudioWork
c5e0: 6c 65 74 4d 6f 64 75 6c 65 28 27 2f 73 61 6d 70 letModule('/samp
c5f0: 6c 65 72 2e 6a 73 27 2c 20 27 73 61 6d 70 6c 65 ler.js', 'sample
c600: 72 27 29 3b 0a 20 20 20 20 76 61 72 20 73 61 6d r');. var sam
c610: 70 6c 65 72 20 3d 20 61 77 61 69 74 20 63 6f 6e pler = await con
c620: 74 65 78 74 2e 63 72 65 61 74 65 41 75 64 69 6f text.createAudio
c630: 57 6f 72 6b 6c 65 74 4e 6f 64 65 28 27 73 61 6d WorkletNode('sam
c640: 70 6c 65 72 27 2c 20 7b 0a 20 20 20 20 20 20 20 pler', {.
c650: 20 6f 75 74 70 75 74 43 68 61 6e 6e 65 6c 43 6f outputChannelCo
c660: 75 6e 74 3a 20 5b 32 5d 2c 20 20 2f 2f 20 73 74 unt: [2], // st
c670: 65 72 65 6f 0a 20 20 20 20 7d 29 3b 0a 20 20 20 ereo. });.
c680: 20 77 69 6e 64 6f 77 2e 73 61 6d 70 6c 65 72 20 window.sampler
c690: 3d 20 73 61 6d 70 6c 65 72 3b 0a 20 20 20 20 76 = sampler;. v
c6a0: 61 72 20 66 69 6c 65 73 20 3d 20 5b 5d 0a 20 20 ar files = [].
c6b0: 20 20 66 6f 72 20 28 76 61 72 20 69 20 3d 20 30 for (var i = 0
c6c0: 3b 20 69 20 3c 20 75 72 6c 73 2e 6c 65 6e 67 74 ; i < urls.lengt
c6d0: 68 3b 20 69 2b 2b 29 20 7b 0a 20 20 20 20 20 20 h; i++) {.
c6e0: 20 20 76 61 72 20 75 72 6c 20 3d 20 75 72 6c 73 var url = urls
c6f0: 5b 69 5d 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 [i]. cons
c700: 74 20 73 6f 75 72 63 65 20 3d 20 63 6f 6e 74 65 t source = conte
c710: 78 74 2e 63 72 65 61 74 65 42 75 66 66 65 72 53 xt.createBufferS
c720: 6f 75 72 63 65 28 29 3b 0a 20 20 20 20 20 20 20 ource();.
c730: 20 63 6f 6e 73 74 20 61 75 64 69 6f 42 75 66 66 const audioBuff
c740: 65 72 20 3d 20 61 77 61 69 74 20 66 65 74 63 68 er = await fetch
c750: 28 75 72 6c 29 0a 20 20 20 20 20 20 20 20 20 20 (url).
c760: 20 20 2e 74 68 65 6e 28 72 65 73 20 3d 3e 20 72 .then(res => r
c770: 65 73 2e 61 72 72 61 79 42 75 66 66 65 72 28 29 es.arrayBuffer()
c780: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 2e 74 ). .t
c790: 68 65 6e 28 41 72 72 61 79 42 75 66 66 65 72 20 hen(ArrayBuffer
c7a0: 3d 3e 20 63 6f 6e 74 65 78 74 2e 64 65 63 6f 64 => context.decod
c7b0: 65 41 75 64 69 6f 44 61 74 61 28 41 72 72 61 79 eAudioData(Array
c7c0: 42 75 66 66 65 72 29 29 3b 0a 0a 20 20 20 20 20 Buffer));..
c7d0: 20 20 20 63 6f 6e 73 74 20 70 63 6d 4c 65 66 74 const pcmLeft
c7e0: 20 3d 20 20 61 75 64 69 6f 42 75 66 66 65 72 2e = audioBuffer.
c7f0: 67 65 74 43 68 61 6e 6e 65 6c 44 61 74 61 28 30 getChannelData(0
c800: 29 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 ). const
c810: 70 63 6d 52 69 67 68 74 20 3d 20 61 75 64 69 6f pcmRight = audio
c820: 42 75 66 66 65 72 2e 67 65 74 43 68 61 6e 6e 65 Buffer.getChanne
c830: 6c 44 61 74 61 28 31 29 0a 20 20 20 20 20 20 20 lData(1).
c840: 20 66 69 6c 65 73 2e 70 75 73 68 28 7b 20 70 63 files.push({ pc
c850: 6d 4c 65 66 74 2c 20 70 63 6d 52 69 67 68 74 20 mLeft, pcmRight
c860: 7d 29 0a 20 20 20 20 7d 0a 20 20 20 20 73 61 6d }). }. sam
c870: 70 6c 65 72 2e 70 6f 72 74 2e 70 6f 73 74 4d 65 pler.port.postMe
c880: 73 73 61 67 65 28 7b 20 69 6e 69 74 3a 20 20 66 ssage({ init: f
c890: 69 6c 65 73 20 7d 29 0a 20 20 20 20 63 6f 6e 74 iles }). cont
c8a0: 65 78 74 2e 72 61 77 43 6f 6e 74 65 78 74 2e 72 ext.rawContext.r
c8b0: 65 73 75 6d 65 28 29 3b 0a 20 20 20 20 73 61 6d esume();. sam
c8c0: 70 6c 65 72 2e 63 6f 6e 6e 65 63 74 28 54 6f 6e pler.connect(Ton
c8d0: 65 2e 67 65 74 43 6f 6e 74 65 78 74 28 29 2e 72 e.getContext().r
c8e0: 61 77 43 6f 6e 74 65 78 74 2e 64 65 73 74 69 6e awContext.destin
c8f0: 61 74 69 6f 6e 29 3b 0a 7d 0a 0a 66 75 6e 63 74 ation);.}..funct
c900: 69 6f 6e 20 53 61 6d 70 6c 65 28 6e 61 6d 65 2c ion Sample(name,
c910: 20 6e 6f 2c 20 66 69 6c 74 65 72 2c 20 76 6f 6c no, filter, vol
c920: 75 6d 65 29 20 7b 0a 20 20 20 20 6e 61 6d 65 20 ume) {. name
c930: 3d 20 6e 61 6d 65 0a 20 20 20 20 66 69 6c 74 65 = name. filte
c940: 72 20 3d 20 66 69 6c 74 65 72 20 7c 7c 20 31 30 r = filter || 10
c950: 30 30 30 0a 20 20 20 20 76 6f 6c 75 6d 65 20 3d 000. volume =
c960: 20 76 6f 6c 75 6d 65 20 7c 7c 20 30 0a 20 20 20 volume || 0.
c970: 20 6d 65 6d 5b 6e 61 6d 65 20 2b 20 22 5f 66 69 mem[name + "_fi
c980: 6c 74 65 72 22 5d 20 3d 20 6e 65 77 20 54 6f 6e lter"] = new Ton
c990: 65 2e 46 69 6c 74 65 72 28 66 69 6c 74 65 72 2c e.Filter(filter,
c9a0: 20 27 6c 6f 77 70 61 73 73 27 2c 20 2d 39 36 29 'lowpass', -96)
c9b0: 3b 0a 20 20 20 20 6d 65 6d 5b 6e 61 6d 65 20 2b ;. mem[name +
c9c0: 20 22 5f 63 68 61 6e 6e 65 6c 22 5d 20 3d 20 6e "_channel"] = n
c9d0: 65 77 20 54 6f 6e 65 2e 43 68 61 6e 6e 65 6c 28 ew Tone.Channel(
c9e0: 7b 63 68 61 6e 6e 65 6c 43 6f 75 6e 74 3a 20 32 {channelCount: 2
c9f0: 2c 20 76 6f 6c 75 6d 65 3a 20 76 6f 6c 75 6d 65 , volume: volume
ca00: 7d 29 2e 63 68 61 69 6e 28 6d 65 6d 5b 6e 61 6d }).chain(mem[nam
ca10: 65 20 2b 20 22 5f 66 69 6c 74 65 72 22 5d 2c 20 e + "_filter"],
ca20: 6d 65 6d 2e 6d 61 73 74 65 72 29 0a 20 20 20 20 mem.master).
ca30: 73 61 6d 70 6c 65 73 5b 6e 6f 5d 2e 63 6f 6e 6e samples[no].conn
ca40: 65 63 74 28 6d 65 6d 5b 6e 61 6d 65 20 2b 20 22 ect(mem[name + "
ca50: 5f 63 68 61 6e 6e 65 6c 22 5d 29 3b 0a 20 20 20 _channel"]);.
ca60: 20 68 69 74 5f 6d 61 70 5b 6e 61 6d 65 5d 20 3d hit_map[name] =
ca70: 20 6e 6f 3b 0a 7d 0a 0a 77 69 6e 64 6f 77 2e 53 no;.}..window.S
ca80: 61 6d 70 6c 65 20 3d 20 53 61 6d 70 6c 65 3b 0a ample = Sample;.
ca90: 0a 66 75 6e 63 74 69 6f 6e 20 70 77 28 73 2c 20 .function pw(s,
caa0: 76 6f 6c 2c 20 6e 6f 74 65 2c 20 6c 65 6e 2c 20 vol, note, len,
cab0: 64 65 6c 61 79 2c 20 70 61 6e 3d 30 29 20 7b 0a delay, pan=0) {.
cac0: 20 20 20 20 77 69 6e 64 6f 77 2e 73 61 6d 70 6c window.sampl
cad0: 65 72 2e 70 6f 72 74 2e 70 6f 73 74 4d 65 73 73 er.port.postMess
cae0: 61 67 65 28 7b 20 6e 6f 74 65 4f 6e 3a 20 74 72 age({ noteOn: tr
caf0: 75 65 2c 20 73 61 6d 70 6c 65 3a 20 73 2c 20 76 ue, sample: s, v
cb00: 6f 6c 75 6d 65 3a 20 76 6f 6c 7d 29 3b 0a 7d 0a olume: vol});.}.
cb10: 0a 77 69 6e 64 6f 77 2e 70 77 20 3d 20 70 77 3b .window.pw = pw;
cb20: 0a 0a 66 75 6e 63 74 69 6f 6e 20 70 28 73 2c 20 ..function p(s,
cb30: 76 6f 6c 2c 20 6e 6f 74 65 2c 20 6c 65 6e 2c 20 vol, note, len,
cb40: 64 65 6c 61 79 2c 20 70 61 6e 3d 30 29 20 7b 0a delay, pan=0) {.
cb50: 20 20 20 20 6e 6f 74 65 20 3d 20 6e 6f 74 65 20 note = note
cb60: 7c 7c 20 22 43 33 22 0a 20 20 20 20 6c 65 6e 20 || "C3". len
cb70: 3d 20 6c 65 6e 20 7c 7c 20 22 31 36 6e 22 0a 20 = len || "16n".
cb80: 20 20 20 76 6f 6c 20 3d 20 76 6f 6c 20 7c 7c 20 vol = vol ||
cb90: 31 0a 20 20 20 20 64 65 6c 61 79 20 3d 20 64 65 1. delay = de
cba0: 6c 61 79 20 7c 7c 20 22 2b 30 22 3b 0a 20 20 20 lay || "+0";.
cbb0: 20 66 6f 72 20 28 63 6f 6e 73 74 20 5b 6b 65 79 for (const [key
cbc0: 2c 20 76 61 6c 75 65 5d 20 6f 66 20 4f 62 6a 65 , value] of Obje
cbd0: 63 74 2e 65 6e 74 72 69 65 73 28 68 69 74 5f 6d ct.entries(hit_m
cbe0: 61 70 29 29 20 7b 0a 20 20 20 20 20 20 20 20 69 ap)) {. i
cbf0: 66 20 28 76 61 6c 75 65 20 3d 3d 20 73 29 20 7b f (value == s) {
cc00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 65 6d . mem
cc10: 5b 6b 65 79 20 2b 20 22 5f 6c 61 73 74 22 5d 20 [key + "_last"]
cc20: 3d 20 63 6f 75 6e 74 0a 20 20 20 20 20 20 20 20 = count.
cc30: 20 20 20 20 6d 65 6d 5b 6b 65 79 20 2b 20 22 5f mem[key + "_
cc40: 63 68 61 6e 6e 65 6c 22 5d 2e 70 61 6e 2e 76 61 channel"].pan.va
cc50: 6c 75 65 20 3d 20 70 61 6e 0a 20 20 20 20 20 20 lue = pan.
cc60: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 61 }. }. sa
cc70: 6d 70 6c 65 73 5b 73 5d 2e 74 72 69 67 67 65 72 mples[s].trigger
cc80: 41 74 74 61 63 6b 52 65 6c 65 61 73 65 28 6e 6f AttackRelease(no
cc90: 74 65 2c 20 6c 65 6e 2c 20 64 65 6c 61 79 2c 20 te, len, delay,
cca0: 76 6f 6c 29 3b 0a 7d 0a 0a 77 69 6e 64 6f 77 2e vol);.}..window.
ccb0: 70 20 3d 20 70 3b 0a 0a 66 75 6e 63 74 69 6f 6e p = p;..function
ccc0: 20 70 31 28 73 2c 20 76 6f 6c 2c 20 6e 6f 74 65 p1(s, vol, note
ccd0: 2c 20 6c 65 6e 2c 20 64 65 6c 61 79 2c 20 70 61 , len, delay, pa
cce0: 6e 3d 30 29 20 7b 0a 20 20 20 20 6e 6f 74 65 20 n=0) {. note
ccf0: 3d 20 6e 6f 74 65 20 7c 7c 20 22 43 33 22 0a 20 = note || "C3".
cd00: 20 20 20 6c 65 6e 20 3d 20 6c 65 6e 20 7c 7c 20 len = len ||
cd10: 22 31 36 6e 22 0a 20 20 20 20 76 6f 6c 20 3d 20 "16n". vol =
cd20: 76 6f 6c 20 7c 7c 20 31 0a 20 20 20 20 64 65 6c vol || 1. del
cd30: 61 79 20 3d 20 64 65 6c 61 79 20 7c 7c 20 22 2b ay = delay || "+
cd40: 30 22 3b 0a 0a 20 20 20 66 6f 72 20 28 63 6f 6e 0";.. for (con
cd50: 73 74 20 5b 6b 65 79 2c 20 76 61 6c 75 65 5d 20 st [key, value]
cd60: 6f 66 20 4f 62 6a 65 63 74 2e 65 6e 74 72 69 65 of Object.entrie
cd70: 73 28 68 69 74 5f 6d 61 70 29 29 20 7b 0a 20 20 s(hit_map)) {.
cd80: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 if (value
cd90: 3d 3d 20 28 73 20 2d 20 31 29 29 20 7b 0a 20 20 == (s - 1)) {.
cda0: 20 20 20 20 20 20 20 20 20 20 6d 65 6d 5b 6b 65 mem[ke
cdb0: 79 20 2b 20 22 5f 6c 61 73 74 22 5d 20 3d 20 63 y + "_last"] = c
cdc0: 6f 75 6e 74 0a 20 20 20 20 20 20 20 20 20 20 20 ount.
cdd0: 20 6d 65 6d 5b 6b 65 79 20 2b 20 22 5f 63 68 61 mem[key + "_cha
cde0: 6e 6e 65 6c 22 5d 2e 70 61 6e 2e 76 61 6c 75 65 nnel"].pan.value
cdf0: 20 3d 20 70 61 6e 0a 0a 20 20 20 20 20 20 20 20 = pan..
ce00: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 61 6d 70 }. }. samp
ce10: 6c 65 73 5b 73 20 2d 20 31 5d 2e 74 72 69 67 67 les[s - 1].trigg
ce20: 65 72 41 74 74 61 63 6b 52 65 6c 65 61 73 65 28 erAttackRelease(
ce30: 6e 6f 74 65 2c 20 6c 65 6e 2c 20 64 65 6c 61 79 note, len, delay
ce40: 2c 20 76 6f 6c 29 3b 0a 20 0a 7d 0a 0a 77 69 6e , vol);. .}..win
ce50: 64 6f 77 2e 70 31 20 3d 20 70 31 3b 0a 0a 66 75 dow.p1 = p1;..fu
ce60: 6e 63 74 69 6f 6e 20 70 6e 28 73 2c 20 76 6f 6c nction pn(s, vol
ce70: 2c 20 6e 6f 74 65 2c 20 6c 65 6e 2c 20 64 65 6c , note, len, del
ce80: 61 79 2c 20 70 61 6e 3d 30 29 20 7b 0a 20 20 20 ay, pan=0) {.
ce90: 20 73 61 6d 70 6c 65 5f 6e 6f 20 3d 20 68 69 74 sample_no = hit
cea0: 5f 6d 61 70 5b 73 5d 0a 20 20 20 20 6e 6f 74 65 _map[s]. note
ceb0: 20 3d 20 6e 6f 74 65 20 7c 7c 20 22 43 33 22 0a = note || "C3".
cec0: 20 20 20 20 6c 65 6e 20 3d 20 6c 65 6e 20 7c 7c len = len ||
ced0: 20 22 31 36 6e 22 0a 20 20 20 20 76 6f 6c 20 3d "16n". vol =
cee0: 20 76 6f 6c 20 7c 7c 20 31 0a 20 20 20 20 64 65 vol || 1. de
cef0: 6c 61 79 20 3d 20 64 65 6c 61 79 20 7c 7c 20 22 lay = delay || "
cf00: 2b 30 22 3b 0a 0a 20 20 20 20 0a 20 20 20 20 66 +0";.. . f
cf10: 6f 72 20 28 63 6f 6e 73 74 20 5b 6b 65 79 2c 20 or (const [key,
cf20: 76 61 6c 75 65 5d 20 6f 66 20 4f 62 6a 65 63 74 value] of Object
cf30: 2e 65 6e 74 72 69 65 73 28 68 69 74 5f 6d 61 70 .entries(hit_map
cf40: 29 29 20 7b 0a 20 20 20 20 09 69 66 20 28 76 61 )) {. .if (va
cf50: 6c 75 65 20 3d 3d 20 73 61 6d 70 6c 65 5f 6e 6f lue == sample_no
cf60: 29 20 7b 0a 09 20 20 20 20 09 6d 65 6d 5b 6b 65 ) {.. .mem[ke
cf70: 79 20 2b 20 22 5f 6c 61 73 74 22 5d 20 3d 20 63 y + "_last"] = c
cf80: 6f 75 6e 74 0a 20 20 20 20 20 20 20 20 20 20 20 ount.
cf90: 20 6d 65 6d 5b 6b 65 79 20 2b 20 22 5f 63 68 61 mem[key + "_cha
cfa0: 6e 6e 65 6c 22 5d 2e 70 61 6e 2e 76 61 6c 75 65 nnel"].pan.value
cfb0: 20 3d 20 70 61 6e 0a 0a 09 20 20 20 20 7d 0a 20 = pan... }.
cfc0: 20 09 7d 0a 20 20 20 20 0a 20 20 20 20 73 61 6d .}. . sam
cfd0: 70 6c 65 73 5b 73 61 6d 70 6c 65 5f 6e 6f 5d 2e ples[sample_no].
cfe0: 74 72 69 67 67 65 72 41 74 74 61 63 6b 52 65 6c triggerAttackRel
cff0: 65 61 73 65 28 6e 6f 74 65 2c 20 6c 65 6e 2c 20 ease(note, len,
d000: 64 65 6c 61 79 2c 20 76 6f 6c 29 3b 0a 0a 7d 0a delay, vol);..}.
d010: 0a 77 69 6e 64 6f 77 2e 70 6e 20 3d 20 70 6e 3b .window.pn = pn;
d020: 0a 0a 0a 0a 66 75 6e 63 74 69 6f 6e 20 70 61 74 ....function pat
d030: 74 65 72 6e 5f 70 61 72 73 65 28 70 29 20 7b 0a tern_parse(p) {.
d040: 20 20 20 20 69 66 20 28 21 70 29 20 7b 0a 20 20 if (!p) {.
d050: 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 3b return "";
d060: 0a 20 20 20 20 7d 0a 20 20 20 20 70 20 3d 20 70 . }. p = p
d070: 2e 72 65 70 6c 61 63 65 28 2f 20 2f 67 2c 20 22 .replace(/ /g, "
d080: 22 29 3b 0a 20 20 20 20 70 20 3d 20 70 2e 72 65 ");. p = p.re
d090: 70 6c 61 63 65 28 2f 5c 5b 2e 2b 3f 5c 5d 2f 67 place(/\[.+?\]/g
d0a0: 2c 20 22 22 29 3b 0a 20 20 20 20 76 61 72 20 66 , "");. var f
d0b0: 63 20 3d 20 70 2e 73 70 6c 69 74 28 27 27 29 5b c = p.split('')[
d0c0: 30 5d 3b 0a 20 20 20 20 69 66 20 28 66 63 3d 3d 0];. if (fc==
d0d0: 20 22 70 22 29 20 7b 0a 20 20 20 20 20 20 20 20 "p") {.
d0e0: 76 61 72 20 70 74 79 70 65 20 3d 20 22 78 6f 22 var ptype = "xo"
d0f0: 3b 0a 20 20 20 20 20 20 20 20 76 61 72 20 6c 20 ;. var l
d100: 3d 20 28 70 2e 6c 65 6e 67 74 68 20 2d 20 31 29 = (p.length - 1)
d110: 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 ;. } else {.
d120: 20 20 20 20 20 20 20 76 61 72 20 70 74 79 70 65 var ptype
d130: 20 3d 20 22 68 65 78 22 3b 0a 20 20 20 20 20 20 = "hex";.
d140: 20 20 76 61 72 20 6c 20 3d 20 28 70 2e 6c 65 6e var l = (p.len
d150: 67 74 68 29 20 2a 20 34 3b 0a 20 20 20 20 7d 0a gth) * 4;. }.
d160: 0a 20 20 20 20 69 66 20 28 70 74 79 70 65 20 3d . if (ptype =
d170: 3d 20 22 78 6f 22 29 20 7b 0a 20 20 20 20 20 20 = "xo") {.
d180: 20 20 76 61 72 20 66 70 20 3d 20 70 2e 73 75 62 var fp = p.sub
d190: 73 74 72 28 31 29 3b 0a 20 20 20 20 20 20 20 20 str(1);.
d1a0: 66 70 20 3d 20 66 70 2e 72 65 70 6c 61 63 65 28 fp = fp.replace(
d1b0: 2f 78 2f 67 2c 20 22 31 22 29 3b 0a 20 20 20 20 /x/g, "1");.
d1c0: 7d 0a 0a 20 20 20 20 69 66 20 28 70 74 79 70 65 }.. if (ptype
d1d0: 20 3d 3d 20 22 78 6f 22 29 20 7b 0a 20 20 20 20 == "xo") {.
d1e0: 20 20 20 20 76 61 72 20 66 69 6e 20 3d 20 22 22 var fin = ""
d1f0: 3b 0a 20 20 20 20 20 20 20 20 76 61 72 20 64 6f ;. var do
d200: 6e 65 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20 ne = false;.
d210: 20 20 20 20 76 61 72 20 69 6e 64 65 78 20 3d 20 var index =
d220: 31 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 1;. while
d230: 28 31 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 (1) {.
d240: 20 20 69 66 20 28 64 6f 6e 65 29 20 7b 0a 20 20 if (done) {.
d250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 br
d260: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 eak;.
d270: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 }. i
d280: 66 20 28 69 6e 64 65 78 20 3e 3d 20 66 70 2e 6c f (index >= fp.l
d290: 65 6e 67 74 68 29 20 7b 0a 20 20 20 20 20 20 20 ength) {.
d2a0: 20 20 20 20 20 20 20 20 20 64 6f 6e 65 20 3d 20 done =
d2b0: 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 true;.
d2c0: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a continue;.
d2d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 }.
d2e0: 20 20 20 20 20 20 20 20 20 20 76 61 72 20 63 75 var cu
d2f0: 72 72 65 6e 74 5f 6c 65 74 74 65 72 20 3d 20 66 rrent_letter = f
d300: 70 5b 69 6e 64 65 78 20 2d 20 31 5d 0a 20 20 20 p[index - 1].
d310: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 75 72 if (cur
d320: 72 65 6e 74 5f 6c 65 74 74 65 72 29 20 7b 0a 20 rent_letter) {.
d330: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 if (c
d340: 75 72 72 65 6e 74 5f 6c 65 74 74 65 72 20 3d 3d urrent_letter ==
d350: 20 22 2a 22 29 20 7b 0a 20 20 20 20 20 20 20 20 "*") {.
d360: 20 20 20 20 20 20 20 20 76 61 72 20 6e 65 78 74 var next
d370: 5f 6c 65 74 74 65 72 20 3d 20 67 65 74 5f 63 68 _letter = get_ch
d380: 61 72 28 66 70 2c 69 6e 64 65 78 29 3b 0a 20 20 ar(fp,index);.
d390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
d3a0: 20 28 6e 65 78 74 5f 6c 65 74 74 65 72 20 3d 3d (next_letter ==
d3b0: 20 22 60 22 29 20 7b 0a 20 20 20 20 20 20 20 20 "`") {.
d3c0: 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20 var
d3d0: 6e 65 78 74 5f 6e 65 78 74 5f 6c 65 74 74 65 72 next_next_letter
d3e0: 20 3d 20 67 65 74 5f 63 68 61 72 28 66 70 2c 69 = get_char(fp,i
d3f0: 6e 64 65 78 20 2b 20 31 29 3b 0a 20 20 20 20 20 ndex + 1);.
d400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 f
d410: 69 6e 20 2b 3d 20 20 6c 65 74 74 65 72 74 6f 64 in += lettertod
d420: 65 63 28 72 6f 6d 61 6e 74 6f 67 79 70 73 79 28 ec(romantogypsy(
d430: 6e 65 78 74 5f 6c 65 74 74 65 72 20 2b 20 6e 65 next_letter + ne
d440: 78 74 5f 6e 65 78 74 5f 6c 65 74 74 65 72 29 29 xt_next_letter))
d450: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ;.
d460: 20 20 20 20 20 20 69 6e 64 65 78 20 2b 3d 20 33 index += 3
d470: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ;.
d480: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 } else {.
d490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 f
d4a0: 69 6e 20 2b 3d 20 6c 65 74 74 65 72 74 6f 64 65 in += lettertode
d4b0: 63 28 6e 65 78 74 5f 6c 65 74 74 65 72 29 3b 0a c(next_letter);.
d4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d4d0: 20 20 20 20 69 6e 64 65 78 20 2b 3d 20 32 3b 0a index += 2;.
d4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d4f0: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 }. }
d500: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 else {.
d510: 20 20 20 20 20 20 20 66 69 6e 20 2b 3d 20 63 75 fin += cu
d520: 72 72 65 6e 74 5f 6c 65 74 74 65 72 3b 0a 20 20 rrent_letter;.
d530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e in
d540: 64 65 78 20 2b 3d 20 31 3b 0a 20 20 20 20 20 20 dex += 1;.
d550: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 }.
d560: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a }. }.
d570: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 return f
d580: 69 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c in;. }. el
d590: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 76 61 72 se {. var
d5a0: 20 66 70 20 3d 20 68 65 78 32 62 69 6e 28 70 29 fp = hex2bin(p)
d5b0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 72 65 74 ;. }.. ret
d5c0: 75 72 6e 20 66 70 3b 0a 7d 0a 0a 77 69 6e 64 6f urn fp;.}..windo
d5d0: 77 2e 70 61 74 74 65 72 6e 5f 70 61 72 73 65 20 w.pattern_parse
d5e0: 3d 20 70 61 74 74 65 72 6e 5f 70 61 72 73 65 3b = pattern_parse;
d5f0: 0a 0a 66 75 6e 63 74 69 6f 6e 20 64 6f 77 6e 6c ..function downl
d600: 6f 61 64 28 64 61 74 61 2c 20 66 69 6c 65 6e 61 oad(data, filena
d610: 6d 65 2c 20 74 79 70 65 29 20 7b 0a 20 20 20 20 me, type) {.
d620: 76 61 72 20 66 69 6c 65 20 3d 20 6e 65 77 20 42 var file = new B
d630: 6c 6f 62 28 5b 64 61 74 61 5d 2c 20 7b 20 74 79 lob([data], { ty
d640: 70 65 3a 20 74 79 70 65 20 7d 29 3b 0a 20 20 20 pe: type });.
d650: 20 69 66 20 28 77 69 6e 64 6f 77 2e 6e 61 76 69 if (window.navi
d660: 67 61 74 6f 72 2e 6d 73 53 61 76 65 4f 72 4f 70 gator.msSaveOrOp
d670: 65 6e 42 6c 6f 62 29 20 2f 2f 20 49 45 31 30 2b enBlob) // IE10+
d680: 0a 20 20 20 20 20 20 20 20 77 69 6e 64 6f 77 2e . window.
d690: 6e 61 76 69 67 61 74 6f 72 2e 6d 73 53 61 76 65 navigator.msSave
d6a0: 4f 72 4f 70 65 6e 42 6c 6f 62 28 66 69 6c 65 2c OrOpenBlob(file,
d6b0: 20 66 69 6c 65 6e 61 6d 65 29 3b 0a 20 20 20 20 filename);.
d6c0: 65 6c 73 65 20 7b 20 2f 2f 20 4f 74 68 65 72 73 else { // Others
d6d0: 0a 20 20 20 20 20 20 20 20 76 61 72 20 61 20 3d . var a =
d6e0: 20 64 6f 63 75 6d 65 6e 74 2e 63 72 65 61 74 65 document.create
d6f0: 45 6c 65 6d 65 6e 74 28 22 61 22 29 2c 0a 20 20 Element("a"),.
d700: 20 20 20 20 20 20 20 20 20 20 75 72 6c 20 3d 20 url =
d710: 55 52 4c 2e 63 72 65 61 74 65 4f 62 6a 65 63 74 URL.createObject
d720: 55 52 4c 28 66 69 6c 65 29 3b 0a 20 20 20 20 20 URL(file);.
d730: 20 20 20 61 2e 68 72 65 66 20 3d 20 75 72 6c 3b a.href = url;
d740: 0a 20 20 20 20 20 20 20 20 61 2e 64 6f 77 6e 6c . a.downl
d750: 6f 61 64 20 3d 20 66 69 6c 65 6e 61 6d 65 3b 0a oad = filename;.
d760: 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 document
d770: 2e 62 6f 64 79 2e 61 70 70 65 6e 64 43 68 69 6c .body.appendChil
d780: 64 28 61 29 3b 0a 20 20 20 20 20 20 20 20 61 2e d(a);. a.
d790: 63 6c 69 63 6b 28 29 3b 0a 20 20 20 20 20 20 20 click();.
d7a0: 20 73 65 74 54 69 6d 65 6f 75 74 28 66 75 6e 63 setTimeout(func
d7b0: 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20 20 tion () {.
d7c0: 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 62 document.b
d7d0: 6f 64 79 2e 72 65 6d 6f 76 65 43 68 69 6c 64 28 ody.removeChild(
d7e0: 61 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 a);.
d7f0: 77 69 6e 64 6f 77 2e 55 52 4c 2e 72 65 76 6f 6b window.URL.revok
d800: 65 4f 62 6a 65 63 74 55 52 4c 28 75 72 6c 29 3b eObjectURL(url);
d810: 0a 20 20 20 20 20 20 20 20 7d 2c 20 30 29 3b 0a . }, 0);.
d820: 20 20 20 20 7d 0a 7d 0a 0a 2f 2f 20 68 74 74 70 }.}..// http
d830: 73 3a 2f 2f 73 74 61 63 6b 6f 76 65 72 66 6c 6f s://stackoverflo
d840: 77 2e 63 6f 6d 2f 71 75 65 73 74 69 6f 6e 73 2f w.com/questions/
d850: 31 35 37 36 32 37 36 38 2f 6a 61 76 61 73 63 72 15762768/javascr
d860: 69 70 74 2d 6d 61 74 68 2d 72 6f 75 6e 64 2d 74 ipt-math-round-t
d870: 6f 2d 74 77 6f 2d 64 65 63 69 6d 61 6c 2d 70 6c o-two-decimal-pl
d880: 61 63 65 73 0a 66 75 6e 63 74 69 6f 6e 20 72 6f aces.function ro
d890: 75 6e 64 54 6f 28 6e 2c 20 64 69 67 69 74 73 29 undTo(n, digits)
d8a0: 20 7b 0a 20 20 20 20 76 61 72 20 6e 65 67 61 74 {. var negat
d8b0: 69 76 65 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20 ive = false;.
d8c0: 20 69 66 20 28 64 69 67 69 74 73 20 3d 3d 3d 20 if (digits ===
d8d0: 75 6e 64 65 66 69 6e 65 64 29 20 7b 0a 20 20 20 undefined) {.
d8e0: 20 20 20 20 20 64 69 67 69 74 73 20 3d 20 30 3b digits = 0;
d8f0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20 28 6e . }. if (n
d900: 20 3c 20 30 29 20 7b 0a 20 20 20 20 20 20 20 20 < 0) {.
d910: 6e 65 67 61 74 69 76 65 20 3d 20 74 72 75 65 3b negative = true;
d920: 0a 20 20 20 20 20 20 20 20 6e 20 3d 20 6e 20 2a . n = n *
d930: 20 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 76 -1;. }. v
d940: 61 72 20 6d 75 6c 74 69 70 6c 69 63 61 74 6f 72 ar multiplicator
d950: 20 3d 20 4d 61 74 68 2e 70 6f 77 28 31 30 2c 20 = Math.pow(10,
d960: 64 69 67 69 74 73 29 3b 0a 20 20 20 20 6e 20 3d digits);. n =
d970: 20 70 61 72 73 65 46 6c 6f 61 74 28 28 6e 20 2a parseFloat((n *
d980: 20 6d 75 6c 74 69 70 6c 69 63 61 74 6f 72 29 2e multiplicator).
d990: 74 6f 46 69 78 65 64 28 31 31 29 29 3b 0a 20 20 toFixed(11));.
d9a0: 20 20 6e 20 3d 20 28 4d 61 74 68 2e 72 6f 75 6e n = (Math.roun
d9b0: 64 28 6e 29 20 2f 20 6d 75 6c 74 69 70 6c 69 63 d(n) / multiplic
d9c0: 61 74 6f 72 29 2e 74 6f 46 69 78 65 64 28 64 69 ator).toFixed(di
d9d0: 67 69 74 73 29 3b 0a 20 20 20 20 69 66 20 28 6e gits);. if (n
d9e0: 65 67 61 74 69 76 65 29 20 7b 0a 20 20 20 20 20 egative) {.
d9f0: 20 20 20 6e 20 3d 20 28 6e 20 2a 20 2d 31 29 2e n = (n * -1).
da00: 74 6f 46 69 78 65 64 28 64 69 67 69 74 73 29 3b toFixed(digits);
da10: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 . }. retur
da20: 6e 20 6e 3b 0a 7d 0a 0a 24 7b 6b 6e 6f 62 5f 63 n n;.}..${knob_c
da30: 6f 64 65 7d 0a 22 22 22 0a 66 72 6f 6d 20 6d 61 ode}.""".from ma
da40: 6b 6f 2e 74 65 6d 70 6c 61 74 65 20 69 6d 70 6f ko.template impo
da50: 72 74 20 54 65 6d 70 6c 61 74 65 0a 0a 63 6f 64 rt Template..cod
da60: 65 20 3d 20 54 65 6d 70 6c 61 74 65 28 6d 69 73 e = Template(mis
da70: 63 5f 6a 73 29 2e 72 65 6e 64 65 72 28 6b 6e 6f c_js).render(kno
da80: 62 5f 63 6f 64 65 3d 6b 6e 6f 62 5f 63 6f 64 65 b_code=knob_code
da90: 29 0a 63 6f 67 2e 6f 75 74 28 6d 69 73 63 5f 6a ).cog.out(misc_j
daa0: 73 29 0a 0a 6f 73 2e 73 79 73 74 65 6d 28 22 72 s)..os.system("r
dab0: 6d 20 70 75 62 6c 69 63 2f 6d 69 73 63 2e 6a 73 m public/misc.js
dac0: 22 29 0a 66 20 3d 20 6f 70 65 6e 28 22 70 75 62 ").f = open("pub
dad0: 6c 69 63 2f 6d 69 73 63 2e 6a 73 22 2c 20 22 77 lic/misc.js", "w
dae0: 22 29 0a 66 2e 77 72 69 74 65 28 63 6f 64 65 29 ").f.write(code)
daf0: 0a 66 2e 63 6c 6f 73 65 28 29 0a 40 3e 0a 40 40 .f.close().@>.@@
db00: 0a 60 60 60 0a 0a 23 23 20 33 30 33 0a 0a 54 61 .```..## 303..Ta
db10: 6b 65 6e 20 66 72 6f 6d 20 5b 65 6e 64 6c 65 73 ken from [endles
db20: 73 20 61 63 69 64 20 62 61 6e 67 65 72 5d 28 68 s acid banger](h
db30: 74 74 70 73 3a 2f 2f 77 77 77 2e 76 69 74 6c 69 ttps://www.vitli
db40: 6e 67 2e 78 79 7a 2f 74 6f 79 73 2f 61 63 69 64 ng.xyz/toys/acid
db50: 2d 62 61 6e 67 65 72 2f 29 2e 0a 0a 60 60 60 6a -banger/)...```j
db60: 73 0a 40 3c 0a 69 6d 70 6f 72 74 20 63 6f 6d 6d s.@<.import comm
db70: 6f 6e 0a 63 6f 67 2e 6f 75 74 28 63 6f 6d 6d 6f on.cog.out(commo
db80: 6e 2e 74 68 72 65 65 4f 68 29 0a 40 3e 0a 40 40 n.threeOh).@>.@@
db90: 0a 60 60 60 0a 0a 23 23 20 41 75 74 6f 63 6f 6d .```..## Autocom
dba0: 6d 69 74 0a 0a 3c 68 74 74 70 73 3a 2f 2f 78 69 mit..<https://xi
dbb0: 61 6f 6f 75 77 61 6e 67 2e 6d 65 64 69 75 6d 2e aoouwang.medium.
dbc0: 63 6f 6d 2f 74 75 74 6f 72 69 61 6c 2d 61 64 76 com/tutorial-adv
dbd0: 61 6e 63 65 64 2d 75 73 65 2d 6f 66 2d 77 61 74 anced-use-of-wat
dbe0: 63 68 64 6f 67 2d 69 6e 2d 70 79 74 68 6f 6e 2d chdog-in-python-
dbf0: 65 78 63 6c 75 64 69 6e 67 2d 66 69 6c 65 73 2d excluding-files-
dc00: 61 2d 67 69 74 2d 61 75 74 6f 2d 63 6f 6d 6d 69 a-git-auto-commi
dc10: 74 2d 65 78 61 6d 70 6c 65 2d 70 61 72 74 2d 37 t-example-part-7
dc20: 30 32 34 39 31 33 61 64 35 61 38 3e 20 20 0a 3c 024913ad5a8> .<
dc30: 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 https://github.c
dc40: 6f 6d 2f 67 69 74 77 61 74 63 68 2f 67 69 74 77 om/gitwatch/gitw
dc50: 61 74 63 68 3e 20 20 0a 0a 60 60 60 70 79 74 68 atch> ..```pyth
dc60: 6f 6e 0a 40 3c 0a 69 6d 70 6f 72 74 20 63 6f 6d on.@<.import com
dc70: 6d 6f 6e 0a 63 6f 67 2e 6f 75 74 28 63 6f 6d 6d mon.cog.out(comm
dc80: 6f 6e 2e 61 75 74 6f 5f 63 6f 6d 6d 69 74 29 0a on.auto_commit).
dc90: 40 3e 0a 40 40 0a 60 60 60 0a 0a @>.@@.```..