From 22c3d510091b356f827e2120e52ecd5bcc71f8db Mon Sep 17 00:00:00 2001 From: akasaka Date: Sun, 1 Dec 2024 12:54:07 +0900 Subject: [PATCH 01/13] Voyage voyage --- README.md | 1 + data/music/042_voyage.pomf | Bin 0 -> 4180 bytes helper/chimes/voyage.mid | Bin 0 -> 10937 bytes src/music/042_voyage.cpp | 6091 ++++++++++++++++++++++++++++++++++++ 4 files changed, 6092 insertions(+) create mode 100644 data/music/042_voyage.pomf create mode 100644 helper/chimes/voyage.mid create mode 100644 src/music/042_voyage.cpp diff --git a/README.md b/README.md index e1dd47b..9c2c1de 100644 --- a/README.md +++ b/README.md @@ -125,6 +125,7 @@ More photos in [the gallery](https://pis-os.genjit.su/index.html#photos) * [daniwellP - Nyan Cat](https://www.youtube.com/watch?v=LfKCLdPTqtM): [MIDI](helper/chimes/nyancat.mid), [MP3](docs/rec/squarecat.mp3) * [Neru - Tokyo Teddy Bear](https://www.youtube.com/watch?v=eSI7RsjZy1E): [MIDI](helper/chimes/tokyoteddybear.mid) based on [MIDI by FDG/Danny G](https://www.youtube.com/watch?v=Y30ZyZbRCrE) * [LamazeP - Triple Baka](https://open.spotify.com/track/2dE6zWGJXZuqvfengytVGo): [MIDI](helper/chimes/3baka.mid) based on [MIDI by FDG/Danny G](https://www.youtube.com/watch?v=HNPrwdLJC8g), [MP3](docs/rec/baka.mp3) +* [Desireless — Voyage Voyage](https://youtu.be/sM2ZhByFcDk): [MIDI](helper/chimes/voyage.mid) ## Creating your own melodies diff --git a/data/music/042_voyage.pomf b/data/music/042_voyage.pomf new file mode 100644 index 0000000000000000000000000000000000000000..f8753ed70f860405be8133beb8b24d2e8efd1a18 GIT binary patch literal 4180 zcmZ`*S5Om-x@OVjq>o~d%>6!Ira6l_b zm>Sphur9Pp9;_uTlJ!Ral^L6=J&SWQCpod3922~U#2HAkXg;5h_Pc+&K<~EXM*ddY z)LHeRW&>N4o9WQ=B33h?wXzdo^VrUAsA?sgkn_1H*+~Z9z5ns5R^!o!BjzVi-={y0 z2!nDAjeEm`#Acle(VKY2@jykMadPs^TJcT!1IA#e>-A-t*EZCr85DQoy)%S0>~o1E zMcqQZmS>dO0Fw%bcVn^BaK%y=Fwc7d8}ZA6U8dM`H8OX6{jjpkVUoA}u!VJ2aT@HU zViu{8EDdEz&i%^EfiRk%so6jybQzkH*_|Up`cFBQGF_L|kGR9`VuKC)+M{oCOD&J^ z*^v+-8*IhTZI?T>OD~iRWYAVTtKwV<2JKx2d<&%pRc6=bc*Elfe{Yq@a&~rgwB3z+ zeF+^Kf0rIJC~>22mBFqgLI-^2dt3CnPK&+_v0AJe&e;V(m`>Pl_fzY27BN~&zLMj3 zaXa|0R|MU-_!n;VmwoMD)kltJ3t=I;eZD(Rzv)JfiySXA=6~i40Sig9k`1z|o6*nh z{=JX=Y+E@#0v;g*FDcxLgh!~YnE37R*mrrUT+>w6IdC!H)sMH=&wwVbB>dQqdOrTl zb?OCSiJ5^zR7hd!i#_#atR)kHTWuW}{Ve4hovPO`FfrBwslTN2D*O8NG8x1`>I1e0 zBT!*Lik`>qXJ&9-Bp*4C4p3pkssFW(;3{v<6uDt3y*AE^^~>YX!&{RBvR7iZi<*PK z(KgGx{;lLQ5x0@{y*5E5&)hc+Ptv3&jX`Xt0J~sAR}5EDq)1TSX!J7rXL}X#y)(r> z$razbYRs%hMM?zanTy~(it(d2DU-a?fgJd=%e^pC6>n}aT zMa(KIZa&zArA;LA9itg?uF!e%Q}3 zg?Mg7A8?Bm+Zmn$dDWLcec%n`T`!?seYGd}`Y+nBsBXv@CZ@vTF59r*m!&;|Z8x%< zqLBa@e8wH)BK320^g_3OHR4~pf3ikC#H3}>!rzyACE``TK^9J$>x{MzqX`n#(39x< z-p+eNKeb8M8C1GmEgf2ujMd6sgO~YX4Lpi@=5lMw4;oe?f@ym;UG;CoN$`>DrRrYapS58wai+Sf$-<5IVSIw|nP3{-H_sEv3Y#P_j^Bw-X;RO=Lbx($hlT+l3x1*>(rVye9le0XxR2CZO-gNQ z(8naU$b-dsFC`qJ-YOFE*;Zg_)I61M`1Egw{uf6Pr7TKmB1V| z$y^h(dlzw`ip7IFZf6i`!5Zq_`1b+{A2iirN!bi^wKwO6VkW^ICL1>(^-9oOi`}0@ z2{d#&CR=^ma4btu{#2c=R{X82d?${jNKzcDGqD97OJb!D8$5NaN#*-vC#B66FHTqA z5T`#}{z<`nr07<{eM4ztxMy+cR!cgHLA^S#*n&-4R9MT$nT)BbU8+R4{!7XMg5L>HC6^!6HyTvXtV_7(Dz zGtR~eE~K$4kWZpVY5D&!u{;c+vZeJ8N>lQ@+STMyl>Kpk_eH^^aiK`#1CtP468oID z$t$8Smgm;YvtM7iS#P$luB51QJ2e!($Qq}^)M1~_>z$*1{W?8mwNH&C66w^^@(~Rz zw;qhGDkTV0wxA+pe(zvV+>0T zwZ_90c*hyWlwBfT-|<2;C{4PW9!BC3?9eN#B2qi~z~9t_c|@`zONc|Pk>6cd|1veg z>17{W2(7tUp<}gia(1k(b8jG1K?N6ZsXEu$1K-5VF3l(rP!;FQ5UqjnfL9;6AY-3t zKdsJB8k4m|9aFBCg(Js}ql@No*}t4EOt+(s68Z5ULAmF@4iLxu*hd8yN$E7%hGBV& z&61NA8d@{^T%^(>SjWI;i?r}BpHbI~tI;EI54Bc`pfqGkQ~+&d(mA_MM9w(7+9T+y z&R1U60DcRWqe}!K{a*6ER26iKk@3l|zZo^2k#cY;Hyh8=nAL$3bT4V!Co(%-FQ&OO z9U{}>Zznp~5i>3q7flHXFpli-G=ft!7mHh~NMnJDR&DyB?M|T73rD%7@_N0;efE1lqabvr z$1HDF!xpspPfSysR&W!Mot?~H)oTpDTumz|XE%JjI}_IOBx_3mH`H|MY{?;PhA?&zyhe_LQ%QabVt z&Lwc)Q59?fjzjvzH9T1t*MkMhuZH-1SPl;M*RyTsyg%ZfaLX|4s+O>Kc@V7sIhy6t z5N}cI4?@ybO*r2wR&m+hK_<=Hj^G{H@Nz(#SV!Zo1E}-W`a)Sb!?KF-(pC;f({M|4 z5>uplVpT^zu=~+=xKdWH8iDm;rCrAP^p7<7N0H9r>n7cLn4Ootsy=ns1^LVp-iuJ{ zP6;f;R|gUIpMARPd`cyO1{#oY3dF*EyIUPK4F*_lA(q*!`OBEVZ2sAtGB8+Z^Uhfh zp|_4n>aR1+a5y57=g$-}55MBZ(AdT6F%HsY)BC{ZQE;yGXZ~S@nV0b}Yw28|z;nb_ zLnbw#INATTmm}a}f5Mvf{8q@Zx%Im~wNn|W&hfpAo}PtXvr%?YZSCc7nyfHJamEtx zrAX@DYAlecqrY^`4=8@Th@9@`)wU+6nMk>54g}u*`D6bl`)ttQKMVDJ9#0e+m}pV) z36Dz9`&BQW4}J4Fsr0I`wESL)lWX&T6qNV}xMAfrG_upvQ$Qgzq?5^T{~|4^zF!Sq zFeN+3_etyl)@_i=gY^?fXoe86%5{aobiz>zxi16%tze#|eytHV=&RtS0d#6~_&yqKIL}<%m@WHa+k_G| zT#j`_UoDK5Y5T41J>{VQ6u4NrCwUz5k&i405E^21_kmp_$(>w8cM@;@ey|KGP&*i% zZ#SqIfbo8snIK)Q!bNf#{(8k6>4nHu^gu4~!e0l+x65Eb4nN*i{iv%S__I^)Kd|(M zA~%;9&Ol4t*vZQlag?3E_)HJ{lc=m`E@!(2Zf+=3Bz}?5H1jDA0Ie+SQwtTRHd$$K zE^}}xi021qpD$0#xg1L2mUao!h6d*jb302zF~51fKWA;+jii+JcWzkOLdIq7(L2~^ z@tA>%l*~rVKPuUsHo;YEy>6GwK3Hg_K08EA-RbjHC=-u&?jZp#hqqHW#cc~PmeY4= zj^eZl*~3p;Pr8%-^1>^mTRrVNY9Xm*DlF8LG!m^cO-8Pz?k%m6H!dsJwU^jIC;>^1 z3>(Fns@hVhiA`acoA?PSWwOFcuB$dmq%<@y@^Ed0xH|IG* zyFBpFr?aYy@_(jOP1jn}4iV=`dt3QIR9y3`RQv?%ZiLld$+9l*`?uGzOTCkJqN(F+ z?xhY|msApntm6DB`S10T13>i{@~1`*Hpx`-A2um~;si5NjT22|a5q#?-iWDAQbKlch|o(WV^R`_jyMcZXxKGc^KGQhl}9&#GLxHavxw ztz2S>P#Ok8K_uJ&7q=u7mn{Jp{1JQW5rH0xHg$JsFVom!Q=gn$$)k{>((`VN^0&9f YkEcXx9{j$7`8^gk^aBYST7ZQA166ALM*si- literal 0 HcmV?d00001 diff --git a/helper/chimes/voyage.mid b/helper/chimes/voyage.mid new file mode 100644 index 0000000000000000000000000000000000000000..847e43c2d8ba4610c444f269e4207126c987ef70 GIT binary patch literal 10937 zcmeHM>sA}r72fR8k?{C}uYh1Y8GE>eV9AyuF`kK-i5N>37ctz##UMZuLLg%YZ0w{f zt6qZT|F+ZqYx4|Fy7~ZJeS*GESKV{AVwW_IW0Sa!8~%K3?b&;u?|kPnTViyoQUU-! zG{7nNd~|BN%0GqRnFR1`Tng0MzixQu_l=B=dH=Z1jq77$!(YQQe?S=5vhH8|pM{~G z<%5Q&*!brMkIeO66V6zr9t+Od%RM%nH5N1j&YLC8gb%FQ4hzQPbG1kub}MGVFo9X~ zmn>*X&P9?SoAW&Tv{e=!XFB4*5py|W!cl9q%YqiWT-&ta3wzPD!Lip$HXL(iO$U65 z!tUt=)Y_btlmnNYD)%+m^I;o~CMJvo1nlyzWW&Sz=9*~&TApcv&tCl42H99M4Dgu? zS51(t#c>O|6{JSc7-$g&@Rl{aKT>N;Ho&w1Bo(oVD~}-cGsSwp!GoILh3=>5f7tZMt%P0hr7A~L(3mM- z%Rn_fXQn|)m4hkJQ%m6#9CvfAE_AwuRToYqXKH;(sNHcZjp;SXg-9A2-PzhX7k1fG zlp7!QZhX==bEFq)*ZQFODF)c1WJPw@8j^6qg*JCF?t(wFwv~Y|(}iFfSh}F50a7=$ z6r4{jUrB-NE}VBkbJxEZEHjrc$ROmCg@9Y}Cn4&Blq?uYp0=KFm;Gs|9dqGf#Lc(6 zaD)&ut8*E+k)FSr228DWq@XpGkEOuxW;@R3`%KRC}T)vQ6Nt$4SC9_ZPk zmIcMTanXae;i57OTDGibA?U4~^`IxSq-H?PE;eVO%PXJrpnI~qGYPxl*GkS)a{ge+ zD}6x!vPr+3@sT=hF2LH4C4%A3_oTVWf)<2h2dox!wfGm>|^*5!(JIbWY{fZ zXA|l&USxQo2|tigWq6*UB4c|Kw#gV|*c!wZhRqDmHsKi=PdDMI9z4bHH227Oj$sQA z)2uy)lT2um zYr+{Wlq}@px^WE)q$gK(wMi(QZyRW81an@x|00gM#;29KP2Y(SSW&@9j< zGz9+qt2~}+jzd>`fY2s12-Ae0w8o($ZWAV2;?Nl%I2(t(>pi1;`5wSd{-+bLcVsW$ z3)nsKWj8={%8UYr=RWTqmBSDbp0TS@kixl7!T>yR{w0Zf`EJ0sQPl6=4!WQxi&_#C z_r^uu!PrH`1}$0Elf0Q&IqO1CVo6Panp|v7LYG_SoltkWx|8NF^4ChvQ*!=b$txn+ zEj7E)l`QY@j;8wJMSk>8@I;$x_!f_~J<;GoxY8Sj(^{ro*z07^3Olsk8+z^!mB`Lf zOg(;t?AsJSL-8{rCcG&;p&Z3e?u#EHyI!B_d{=*%a_jY}&UbvqD862Qfnt`a{%2Hw zR@iE;UFAG0WP4;2=eoady|<6Y3=4l>iR}4(@e^dY4)ytZ zWWSpK#J>0}*>(O@C-ejU->ZM9|Dpbe`~SVVf4;@r@Fer#=(l(aaZ|#Zh*cEt*>%K< zgk>MDB9_ZGmVw5Q2$B6wB z8i*EWC82}(DdIIrkk25F(4_e6CJ?73oI#x93P?hVMXn6*UPvXb6<4ej5bBjBtZ+#Y zZ%TM8@Pz-4q0S?Ja|NHMuvc^@PB?JVSs)xIoFW_|%o0v=9C7OYMY5;KKg=ioH2H@)hLYD$B;jOooUm?>kUhB1Gs^9eq(`1PvM0$N z;ux~8pRoB4KI4RSdxY%4eV$QnkJui0=E$BTdx&G`PzU=^hr|8w-{+#uxE(Y=j~BH# zD8`M82DC+sN))tsS&u`|SUGDz&y^+h3aIf#@wLP#pEID_s_t04M}Mv4JSFE3mb@a8 zjgt7n6)*4bU#3@H^yt2S!dKdzhQDCrrLQy?(u%qUL2ao+gH~N*7Vr4Aih^$kmhgkCmuaP;k%4ug70(?QV-gqsol;0OMvmhy9z z|LgF@9eAW*{vj6&+&k0{-rOAFh(OYtIRD@ViAFj0ECMHHXc`~gLZj1ixA zLD8#l>OpUnV@qz3Payi*bYtJe*Ci9W#&TCl0@D6hEbiOj8O>$TyUTKbV(W;laA)R5 zUCwl{DW`+JjbGxoNPOk~iG+z;M zP~VGL2%h_{kArdE@~X!?xJh`~tNJ}?eI-u(>{DM~@%lv;dkbg3pH5Kp2iNPt^oj0! z8`MwJ|Av2Tz8IK?miZ~dEy6{@Rl)^^;zX@Bs zY5qnV|IM6>z4P@>gnF6!zquDi-Z0sPlvH WW}E(ft@kkX;uZjZ?eFl;Km8l!a0|u& literal 0 HcmV?d00001 diff --git a/src/music/042_voyage.cpp b/src/music/042_voyage.cpp new file mode 100644 index 0000000..4ae61a2 --- /dev/null +++ b/src/music/042_voyage.cpp @@ -0,0 +1,6091 @@ +#include +extern "C" const POMFHeader POMF_HEAD = { + POMF_MAGIC_FILE, + POMF_CURVER, + "Voyage", + "Desireless - Voyage Voyage", +}; + +extern "C" const melody_item_t POMF_TUNE[] = { + {DUTY_SET, 0, 8}, + {DUTY_SET, 1, 12}, + {DUTY_SET, 2, 12}, + {DUTY_SET, 3, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 40}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 131}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 40}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 106}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 114}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 40}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 40}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 69}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 127}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 4}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 106}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 106}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 40}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 69}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 87}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 40}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 87}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {FREQ_SET, 2, 87}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 131}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 1, 392}, + {FREQ_SET, 2, 196}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 392}, + {FREQ_SET, 2, 87}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 1, 392}, + {FREQ_SET, 2, 196}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 87}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 40}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 106}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 87}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 114}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 40}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 2, 87}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 40}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 69}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 1, 392}, + {FREQ_SET, 2, 196}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 392}, + {FREQ_SET, 2, 196}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 127}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 4}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 106}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 106}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 40}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 69}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 69}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + /* LOOP */ + {LOOP_POINT_SET, 0, LOOP_POINT_TYPE_LOOP}, + {FREQ_SET, 0, 440}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 61}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 466}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 114}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 587}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 392}, + {DELAY, 0, 12}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 86}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 440}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 98}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 466}, + {DELAY, 0, 4}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 0, 0}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 349}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 106}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 114}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 40}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 69}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 440}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 45}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 466}, + {DELAY, 0, 12}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 53}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 698}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 69}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 440}, + {DELAY, 0, 12}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 466}, + {DELAY, 0, 12}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 81}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 45}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 4}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 622}, + {DELAY, 0, 12}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 440}, + {DELAY, 0, 24}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 98}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 466}, + {DELAY, 0, 12}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 110}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 587}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 106}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 106}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 0, 0}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 40}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 69}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 587}, + {DELAY, 0, 24}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 87}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 587}, + {DELAY, 0, 28}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 0, 622}, + {DELAY, 0, 20}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 87}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 0, 523}, + {DELAY, 0, 4}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {FREQ_SET, 2, 87}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 131}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 1, 392}, + {FREQ_SET, 2, 196}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 392}, + {FREQ_SET, 2, 87}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 1, 392}, + {FREQ_SET, 2, 196}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 45}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 87}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 40}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 106}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 87}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 0, 622}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 114}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 69}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 2, 87}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 622}, + {DELAY, 0, 28}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 69}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 1, 392}, + {FREQ_SET, 2, 196}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 587}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 45}, + {FREQ_SET, 0, 523}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 1, 392}, + {FREQ_SET, 2, 196}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 587}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 127}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 4}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 106}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 106}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 40}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 69}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {FREQ_SET, 4, 2349}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 69}, + {FREQ_SET, 4, 2349}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 440}, + {DELAY, 0, 24}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 466}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 69}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 587}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 81}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 0, 392}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 0, 440}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 131}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 466}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 53}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 20}, + {FREQ_SET, 0, 349}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 40}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 106}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 40}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 69}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 440}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 466}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 53}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 698}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 440}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 466}, + {DELAY, 0, 12}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 4}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 622}, + {DELAY, 0, 12}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 440}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 106}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 466}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 587}, + {DELAY, 0, 12}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 106}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 40}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 69}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 0, 587}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 98}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 87}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 587}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 0, 0}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 0, 622}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 87}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 69}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 523}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {FREQ_SET, 2, 87}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 131}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 1, 392}, + {FREQ_SET, 2, 196}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 392}, + {FREQ_SET, 2, 87}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 114}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 1, 392}, + {FREQ_SET, 2, 196}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 87}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 106}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 0, 523}, + {DELAY, 0, 40}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 87}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 622}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 114}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 2, 87}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 622}, + {DELAY, 0, 32}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 69}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 0, 587}, + {FREQ_SET, 1, 392}, + {FREQ_SET, 2, 196}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 523}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 69}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 1, 392}, + {FREQ_SET, 2, 196}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 587}, + {DELAY, 0, 24}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 127}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 4}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 106}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 0, 466}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 698}, + {DELAY, 0, 24}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 45}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 61}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 466}, + {DELAY, 0, 12}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 622}, + {DELAY, 0, 32}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 69}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 0, 0}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {FREQ_SET, 4, 2349}, + {DELAY, 0, 20}, + {FREQ_SET, 0, 466}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 61}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 2349}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 4, 2093}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 587}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 1174}, + {DUTY_SET, 1, 110}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 108}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {DUTY_SET, 1, 105}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 40}, + {DUTY_SET, 1, 103}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 102}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 12}, + {DUTY_SET, 1, 101}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 100}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 99}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 97}, + {DELAY, 0, 4}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 16}, + {DUTY_SET, 1, 96}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 94}, + {DELAY, 0, 12}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {DUTY_SET, 1, 93}, + {FREQ_SET, 2, 233}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 91}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 90}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 89}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 88}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 87}, + {DELAY, 0, 40}, + {DUTY_SET, 1, 86}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 85}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 32}, + {DUTY_SET, 1, 84}, + {DELAY, 0, 40}, + {DUTY_SET, 1, 82}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {DUTY_SET, 1, 81}, + {DELAY, 0, 40}, + {DUTY_SET, 1, 80}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 32}, + {DUTY_SET, 1, 79}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 40}, + {DUTY_SET, 1, 78}, + {DELAY, 0, 40}, + {DUTY_SET, 1, 77}, + {DELAY, 0, 12}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {DUTY_SET, 1, 76}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 75}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 74}, + {DELAY, 0, 36}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 4}, + {DUTY_SET, 1, 73}, + {DELAY, 0, 45}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 16}, + {DUTY_SET, 1, 71}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 32}, + {DUTY_SET, 1, 70}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 69}, + {DELAY, 0, 12}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {DUTY_SET, 1, 68}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 67}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 66}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 65}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 64}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 63}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 12}, + {DUTY_SET, 1, 62}, + {DELAY, 0, 40}, + {DUTY_SET, 1, 61}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 59}, + {DELAY, 0, 40}, + {DUTY_SET, 1, 58}, + {DELAY, 0, 16}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {DUTY_SET, 1, 57}, + {FREQ_SET, 2, 220}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 56}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {DUTY_SET, 1, 54}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 53}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 52}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 51}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 50}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 49}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 48}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 32}, + {DUTY_SET, 1, 47}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 45}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 44}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 43}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {DUTY_SET, 1, 42}, + {DELAY, 0, 40}, + {DUTY_SET, 1, 41}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 39}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 32}, + {DUTY_SET, 1, 37}, + {DELAY, 0, 61}, + {DUTY_SET, 1, 35}, + {DELAY, 0, 24}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 16}, + {DUTY_SET, 1, 34}, + {FREQ_SET, 2, 220}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 33}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 53}, + {DUTY_SET, 1, 31}, + {DELAY, 0, 40}, + {DUTY_SET, 1, 30}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 29}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 28}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 32}, + {DUTY_SET, 1, 27}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 26}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 25}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 24}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {DUTY_SET, 1, 23}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 22}, + {DELAY, 0, 12}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 8}, + {DUTY_SET, 1, 20}, + {DELAY, 0, 12}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 233}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 19}, + {DELAY, 0, 40}, + {DUTY_SET, 1, 18}, + {DELAY, 0, 61}, + {DUTY_SET, 1, 17}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {DUTY_SET, 1, 17}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 18}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 20}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 12}, + {DUTY_SET, 1, 21}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 23}, + {DELAY, 0, 40}, + {DUTY_SET, 1, 25}, + {DELAY, 0, 40}, + {DUTY_SET, 1, 27}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 466}, + {DELAY, 0, 16}, + {DUTY_SET, 1, 28}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {DUTY_SET, 1, 30}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 32}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 33}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 34}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 37}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 32}, + {DUTY_SET, 1, 40}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 0}, + {DUTY_SET, 1, 41}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 43}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 45}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 47}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 587}, + {DELAY, 0, 16}, + {DUTY_SET, 1, 49}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 51}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 54}, + {DELAY, 0, 40}, + {DUTY_SET, 1, 56}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 12}, + {DUTY_SET, 1, 57}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 58}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 16}, + {DUTY_SET, 1, 61}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 62}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 64}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 66}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 68}, + {FREQ_SET, 2, 220}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 587}, + {DELAY, 0, 16}, + {DUTY_SET, 1, 71}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {DUTY_SET, 1, 72}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 76}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 80}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 83}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 84}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 28}, + {DUTY_SET, 1, 86}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 53}, + {DUTY_SET, 1, 87}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 88}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 587}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {DUTY_SET, 1, 89}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 91}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 96}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 98}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 99}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 100}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 101}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 53}, + {FREQ_SET, 0, 0}, + {DUTY_SET, 1, 102}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 103}, + {FREQ_SET, 2, 220}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 20}, + {FREQ_SET, 0, 466}, + {DUTY_SET, 1, 104}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 53}, + {DUTY_SET, 1, 105}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 106}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 107}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 108}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 12}, + {DUTY_SET, 1, 109}, + {DELAY, 0, 53}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 78}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {DUTY_SET, 1, 9}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {FREQ_SET, 2, 233}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 69}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 81}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 0, 0}, + {FREQ_SET, 1, 392}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 78}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 61}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 3, 78}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 78}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 127}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 4}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 78}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 78}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 106}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 78}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 587}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 3, 78}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 587}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 45}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 78}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 587}, + {DELAY, 0, 28}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 69}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 86}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 466}, + {FREQ_SET, 2, 233}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 587}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {FREQ_SET, 2, 220}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 69}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 73}, + {FREQ_SET, 1, 349}, + {DUTY_SET, 2, 111}, + {FREQ_SET, 2, 1046}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 587}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 4}, + {DUTY_SET, 2, 110}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 109}, + {DELAY, 0, 12}, + {DUTY_SET, 2, 108}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 107}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 106}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 12}, + {DUTY_SET, 2, 105}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 104}, + {DELAY, 0, 12}, + {DUTY_SET, 2, 102}, + {DELAY, 0, 16}, + {DUTY_SET, 2, 101}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 100}, + {DELAY, 0, 12}, + {DUTY_SET, 2, 99}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 98}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 97}, + {DELAY, 0, 12}, + {DUTY_SET, 2, 96}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 95}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 94}, + {DELAY, 0, 12}, + {DUTY_SET, 2, 93}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DUTY_SET, 2, 92}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 91}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 90}, + {DELAY, 0, 4}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 16}, + {DUTY_SET, 2, 88}, + {DELAY, 0, 16}, + {DUTY_SET, 2, 87}, + {DELAY, 0, 12}, + {DUTY_SET, 2, 86}, + {DELAY, 0, 16}, + {DUTY_SET, 2, 84}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 12}, + {DUTY_SET, 2, 83}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 82}, + {DELAY, 0, 16}, + {DUTY_SET, 2, 80}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 79}, + {DELAY, 0, 12}, + {DUTY_SET, 2, 78}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 77}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 75}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 73}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 16}, + {DUTY_SET, 2, 72}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 71}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 70}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 622}, + {FREQ_SET, 1, 349}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 69}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 68}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 67}, + {DELAY, 0, 4}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 65}, + {DELAY, 0, 16}, + {DUTY_SET, 2, 64}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 63}, + {DELAY, 0, 16}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 4}, + {DUTY_SET, 2, 62}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 61}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 59}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 58}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 57}, + {DELAY, 0, 4}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {DUTY_SET, 2, 56}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 54}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 53}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 52}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 51}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 49}, + {DELAY, 0, 12}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DUTY_SET, 2, 48}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 523}, + {DUTY_SET, 2, 47}, + {DELAY, 0, 12}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 4}, + {DUTY_SET, 2, 45}, + {DELAY, 0, 16}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 4}, + {DUTY_SET, 2, 44}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 43}, + {DELAY, 0, 16}, + {DUTY_SET, 2, 42}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 32}, + {DUTY_SET, 2, 41}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 40}, + {DELAY, 0, 16}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 39}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 38}, + {DELAY, 0, 16}, + {DUTY_SET, 2, 37}, + {DELAY, 0, 28}, + {DUTY_SET, 2, 36}, + {DELAY, 0, 4}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 35}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 34}, + {DELAY, 0, 4}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 16}, + {DUTY_SET, 2, 33}, + {DELAY, 0, 4}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 4}, + {DUTY_SET, 2, 32}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 31}, + {DELAY, 0, 12}, + {DUTY_SET, 2, 30}, + {DELAY, 0, 16}, + {DUTY_SET, 2, 29}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 12}, + {DUTY_SET, 2, 28}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 27}, + {DELAY, 0, 28}, + {DUTY_SET, 2, 26}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 25}, + {DELAY, 0, 94}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 1, 349}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 69}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 147}, + {FREQ_SET, 1, 349}, + {DUTY_SET, 2, 22}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 24}, + {DUTY_SET, 2, 24}, + {DELAY, 0, 4}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 26}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 28}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 30}, + {DELAY, 0, 12}, + {DUTY_SET, 2, 32}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 34}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 36}, + {DELAY, 0, 12}, + {DUTY_SET, 2, 39}, + {DELAY, 0, 4}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 4}, + {DUTY_SET, 2, 44}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 46}, + {DELAY, 0, 12}, + {DUTY_SET, 2, 48}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 51}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 52}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 55}, + {DELAY, 0, 12}, + {DUTY_SET, 2, 56}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 59}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 61}, + {DELAY, 0, 12}, + {DUTY_SET, 2, 64}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 65}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 69}, + {DELAY, 0, 12}, + {DUTY_SET, 2, 71}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 73}, + {DELAY, 0, 4}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {DUTY_SET, 2, 76}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 349}, + {DUTY_SET, 2, 78}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 80}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 82}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 85}, + {DELAY, 0, 4}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 87}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 89}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 90}, + {DELAY, 0, 12}, + {DUTY_SET, 2, 92}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 93}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 95}, + {DELAY, 0, 12}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 96}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 97}, + {DELAY, 0, 12}, + {DUTY_SET, 2, 98}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 99}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 100}, + {DELAY, 0, 28}, + {DUTY_SET, 2, 101}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 102}, + {DELAY, 0, 12}, + {DUTY_SET, 2, 104}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 106}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 108}, + {DELAY, 0, 12}, + {DUTY_SET, 2, 110}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 1, 349}, + {FREQ_SET, 2, 87}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 8}, + {DUTY_SET, 2, 12}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 106}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 274}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 49}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 442}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 49}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 196}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 24}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 24}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 77}, + {DUTY_SET, 0, 3}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 4}, + /* HOOK */ + {LOOP_POINT_SET, 0, LOOP_POINT_TYPE_HOOK_START}, + {FREQ_SET, 0, 1046}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 0, 523}, + {DELAY, 0, 73}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 24}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 86}, + {FREQ_SET, 0, 932}, + {DELAY, 0, 12}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 466}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 86}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 24}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 81}, + {FREQ_SET, 1, 155}, + {DELAY, 0, 16}, + {FREQ_SET, 0, 1397}, + {FREQ_SET, 3, 78}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 698}, + {DELAY, 0, 16}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 81}, + {FREQ_SET, 2, 622}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 45}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 1568}, + {FREQ_SET, 2, 622}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 784}, + {DELAY, 0, 32}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 622}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 622}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 622}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 622}, + {FREQ_SET, 3, 78}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 2, 622}, + {DELAY, 0, 24}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {DUTY_SET, 0, 6}, + {FREQ_SET, 3, 78}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 200}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 2, 622}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 622}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 217}, + {FREQ_SET, 2, 622}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 622}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 131}, + {DELAY, 0, 16}, + {FREQ_SET, 3, 65}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 81}, + {FREQ_SET, 2, 523}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 523}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 523}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 523}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 3, 65}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 523}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 3, 65}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 163}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 523}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 196}, + {FREQ_SET, 0, 784}, + {DELAY, 0, 20}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 523}, + {DELAY, 0, 49}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 880}, + {DELAY, 0, 32}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 174}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 0, 1046}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 81}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 0, 0}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 698}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 698}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 932}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 24}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 880}, + {DELAY, 0, 12}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 69}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 127}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 4}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 880}, + {DELAY, 0, 12}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 45}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 784}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 131}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 784}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 147}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 73}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 81}, + {FREQ_SET, 2, 587}, + {DELAY, 0, 57}, + {FREQ_SET, 0, 0}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 0, 698}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 587}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 1, 293}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 587}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 1, 0}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 233}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 3, 73}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 587}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 3, 73}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 163}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 147}, + {FREQ_SET, 2, 587}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 587}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 1, 293}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 204}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 233}, + {FREQ_SET, 2, 587}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 587}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 0, 784}, + {DELAY, 0, 28}, + {FREQ_SET, 1, 155}, + {FREQ_SET, 3, 78}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 932}, + {DELAY, 0, 24}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 81}, + {FREQ_SET, 2, 622}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 622}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 784}, + {DELAY, 0, 12}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 622}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 622}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 622}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 622}, + {FREQ_SET, 3, 78}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 622}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 78}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 200}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 2, 622}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 622}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 217}, + {FREQ_SET, 2, 622}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 622}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 32}, + {DUTY_SET, 0, 10}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 131}, + {DELAY, 0, 16}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 65}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 81}, + {FREQ_SET, 2, 523}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 2, 523}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 523}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 523}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 3, 65}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 523}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 3, 65}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 90}, + {DUTY_SET, 0, 7}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 698}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 784}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 523}, + {DELAY, 0, 28}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 784}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 204}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 1046}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 523}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 174}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 81}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 698}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 932}, + {FREQ_SET, 2, 698}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 45}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 0, 932}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 24}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 880}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 90}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 106}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 4}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 880}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 0, 784}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 90}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 118}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 784}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 147}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 73}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 81}, + {FREQ_SET, 2, 587}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 740}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 587}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 587}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 3, 73}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 587}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 3, 73}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 127}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 4, 2794}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 4, 2794}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 0, 698}, + {DELAY, 0, 28}, + {FREQ_SET, 0, 784}, + {FREQ_SET, 4, 2794}, + {DELAY, 0, 4}, + /* HOOKEND */ + {LOOP_POINT_SET, 0, LOOP_POINT_TYPE_HOOK_END}, + {DELAY, 0, 24}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 4, 2794}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 81}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 698}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 4, 2794}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 4, 2794}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 0}, + {FREQ_SET, 1, 155}, + {DELAY, 0, 16}, + {FREQ_SET, 3, 78}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 932}, + {DELAY, 0, 24}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 81}, + {FREQ_SET, 2, 622}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 622}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 784}, + {DELAY, 0, 12}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 622}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 622}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 622}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 622}, + {FREQ_SET, 3, 78}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 622}, + {DELAY, 0, 24}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 78}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 200}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 2, 622}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 622}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 217}, + {FREQ_SET, 2, 622}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 622}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 131}, + {DELAY, 0, 16}, + {FREQ_SET, 3, 65}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 81}, + {FREQ_SET, 2, 523}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 523}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 523}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 523}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 3, 65}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 523}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 3, 65}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 163}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 523}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 209}, + {FREQ_SET, 0, 784}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 45}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 2, 523}, + {DELAY, 0, 16}, + {FREQ_SET, 0, 784}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 174}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 1046}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 81}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 698}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 698}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 932}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 24}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 0}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 880}, + {DELAY, 0, 12}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 114}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 81}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 4}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 880}, + {DELAY, 0, 12}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 45}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 784}, + {DELAY, 0, 24}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 127}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 81}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 784}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 147}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 73}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 81}, + {FREQ_SET, 2, 587}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 0, 698}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 587}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 1, 293}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 587}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 1, 0}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 233}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 3, 73}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 53}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 2, 587}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 3, 73}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 163}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 147}, + {FREQ_SET, 2, 587}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 587}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 1, 293}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 204}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 233}, + {FREQ_SET, 2, 587}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 587}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 0, 784}, + {DELAY, 0, 49}, + {FREQ_SET, 1, 155}, + {FREQ_SET, 3, 78}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 932}, + {DELAY, 0, 24}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 81}, + {FREQ_SET, 2, 622}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 45}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 622}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 784}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 622}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 622}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 622}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 622}, + {FREQ_SET, 3, 78}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 622}, + {DELAY, 0, 24}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 78}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 200}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 2, 622}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 622}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 217}, + {FREQ_SET, 2, 622}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 622}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 32}, + {DUTY_SET, 0, 10}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 131}, + {DELAY, 0, 16}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 65}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 81}, + {FREQ_SET, 2, 523}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 2, 523}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 523}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 523}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 3, 65}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 523}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 3, 65}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 90}, + {DUTY_SET, 0, 7}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 523}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 217}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 523}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 174}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 81}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 698}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 698}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 1046}, + {DELAY, 0, 12}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 0, 0}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 16}, + {FREQ_SET, 0, 1046}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 0, 0}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 932}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 196}, + {FREQ_SET, 0, 0}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 4}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 880}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 45}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 784}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 159}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 784}, + {DELAY, 0, 12}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 698}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 147}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 73}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 81}, + {FREQ_SET, 2, 587}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 740}, + {DELAY, 0, 24}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 587}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 587}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 3, 73}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 587}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 3, 73}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 163}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 587}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 587}, + {DELAY, 0, 57}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 217}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 0, 1568}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 784}, + {FREQ_SET, 3, 116}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 392}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 45}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 0, 1397}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 698}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 2, 349}, + {DELAY, 0, 65}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 0, 1568}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 784}, + {FREQ_SET, 3, 116}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 2, 392}, + {DELAY, 0, 73}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 0, 1174}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 587}, + {FREQ_SET, 3, 116}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 2, 293}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 0, 1397}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 698}, + {FREQ_SET, 3, 116}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 2, 349}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 0, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 1, 784}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 2, 392}, + {DELAY, 0, 16}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 98}, + {FREQ_SET, 0, 1046}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 523}, + {FREQ_SET, 3, 116}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 2, 261}, + {DELAY, 0, 57}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 0, 1397}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 1, 698}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 2, 349}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 90}, + {FREQ_SET, 0, 1568}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 784}, + {FREQ_SET, 3, 116}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 2, 392}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 90}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 1864}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 932}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 2, 466}, + {DELAY, 0, 204}, + {FREQ_SET, 3, 116}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 102}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 3, 116}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 90}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 114}, + {FREQ_SET, 3, 116}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 163}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 217}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 217}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 192}, + {FREQ_SET, 0, 1568}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 784}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 2, 392}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 45}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 0, 1397}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 698}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 2, 349}, + {DELAY, 0, 65}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 0, 1568}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 784}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 2, 392}, + {DELAY, 0, 73}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 0, 1174}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 587}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 2, 293}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 0, 1397}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 698}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 2, 349}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 0, 1568}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 4}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 1, 784}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 2, 392}, + {DELAY, 0, 16}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 98}, + {FREQ_SET, 0, 1046}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 523}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 2, 261}, + {DELAY, 0, 57}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 0, 1397}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 698}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 2, 349}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 90}, + {FREQ_SET, 0, 1568}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 784}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 2, 392}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 90}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 0, 1864}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 932}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 2, 466}, + {DELAY, 0, 204}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 102}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 90}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 114}, + {FREQ_SET, 3, 98}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 163}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 225}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 209}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 200}, + {FREQ_SET, 0, 1568}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 784}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 4, 2217}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 2, 392}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 45}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 0, 1397}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 698}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 2, 349}, + {DELAY, 0, 65}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 0, 1568}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 784}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 2, 392}, + {DELAY, 0, 73}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 0, 1174}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 587}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 2, 293}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 49}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 32}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 65}, + {FREQ_SET, 0, 1397}, + {DELAY, 0, 16}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 698}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 5, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {FREQ_SET, 2, 349}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 77}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 36}, + {FREQ_SET, 0, 1568}, + {DELAY, 0, 20}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 4}, + {FREQ_SET, 1, 784}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 2, 392}, + {DELAY, 0, 16}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 98}, + {FREQ_SET, 0, 1046}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 523}, + {FREQ_SET, 3, 87}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 2, 261}, + {DELAY, 0, 57}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 57}, + {FREQ_SET, 0, 1568}, + {DELAY, 0, 8}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 1, 784}, + {FREQ_SET, 4, 2217}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 2, 392}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 90}, + {FREQ_SET, 0, 1397}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 698}, + {FREQ_SET, 3, 87}, + {DELAY, 0, 40}, + {FREQ_SET, 2, 349}, + {DELAY, 0, 413}, + {FREQ_SET, 0, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 28}, + {FREQ_SET, 2, 0}, + {DELAY, 0, 954}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 217}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 94}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 94}, +}; + From 9e8c9c064f9b426d3d3e29dfb94840891712d719 Mon Sep 17 00:00:00 2001 From: akasaka Date: Mon, 2 Dec 2024 00:36:23 +0900 Subject: [PATCH 02/13] Make IR Remote actually work --- README.md | 2 +- include/devices/big_noritake.h | 23 ++++++++++++----- include/input/infrared.h | 7 +++-- src/graphics/screenshooter.cpp | 2 +- src/input/infrared.cpp | 47 ++++++++++++++++++++++------------ 5 files changed, 54 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 9c2c1de..e05bf78 100644 --- a/README.md +++ b/README.md @@ -239,7 +239,7 @@ An ESP32-WROVER is required, because the firmware takes up 99.8% of an OTA parti * Keypad/D-Pad. Set feature flag `HAS_KEYPAD` and define `const keypad_definition_t HWCONF_KEYPAD` in the device definition. [Driver](src/input/keypad.cpp) * Touch plane. E.g. a faceplate with touch sensitive arrow keys to work in place of a D-pad. Set feature flag `HAS_TOUCH_PLANE` and define `const touch_plane_definition_t HWCONF_TOUCH_PLANE` in the device definition. [Driver](src/input/touch_plane.cpp) -* *Experimental/Untested* IR Remote. Set feature flag `HAS_IR_RECEIVER` and define `const infrared_definition_t HWCONF_IR_BUTTONS` in the device definition. [Driver](src/input/infrared.cpp) +* IR Remote. Set feature flag `HAS_IR_RECEIVER` and define `const infrared_definition_t HWCONF_IR_BUTTONS` in the device definition. [Driver](src/input/infrared.cpp) ### Others diff --git a/include/devices/big_noritake.h b/include/devices/big_noritake.h index 0243ba5..7c2285a 100644 --- a/include/devices/big_noritake.h +++ b/include/devices/big_noritake.h @@ -51,11 +51,20 @@ const keypad_definition_t HWCONF_KEYPAD = { }; const infrared_definition_t HWCONF_IR_BUTTONS = { - { - { - .protocol = IRPROTO_RC5, - .value = 0 // dummy for test - }, - KEY_UP - } + /** + Optosupply OE13KIR (https://akizukidenshi.com/goodsaffix/OE13KIR.pdf) + */ + { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0xA0, .value = 0x8F705FA, .key = KEY_UP}, // UP + { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x00, .value = 0x8F700FF, .key = KEY_DOWN}, // DOWN + { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x10, .value = 0x8F708F7, .key = KEY_LEFT}, // LEFT + { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x80, .value = 0x8F701FE, .key = KEY_RIGHT}, // RIGHT + { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x20, .value = 0x8F704FB, .key = KEY_HEADPAT}, // CENTER + // Top-left: TYPE=3, VALUE=0x8f78d72, ADDRESS=0x10, COMMAND=0xb1 + // Top-right: TYPE=3, VALUE=0x8f7847b, ADDRESS=0x10, COMMAND=0x21 + // Bottom-left: TYPE=3, VALUE=0x8f78877, ADDRESS=0x10, COMMAND=0x11 + // Bottom-right: TYPE=3, VALUE=0x8f7817e, ADDRESS=0x10, COMMAND=0x81 + // Power: TYPE=3, VALUE=0x8f71be4, ADDRESS=0x10, COMMAND=0xd8 + // A: TYPE=3, VALUE=0x8f71fe0, ADDRESS=0x10, COMMAND=0xf8 + // B: TYPE=3, VALUE=0x8f71ee1, ADDRESS=0x10, COMMAND=0x78 + // C: TYPE=3, VALUE=0x8f71ae5, ADDRESS=0x10, COMMAND=0x58 }; \ No newline at end of file diff --git a/include/input/infrared.h b/include/input/infrared.h index 2df0fce..df399ee 100644 --- a/include/input/infrared.h +++ b/include/input/infrared.h @@ -12,10 +12,13 @@ typedef enum infrared_protocol { typedef struct infrared_identifier { infrared_protocol_t protocol; - uint64_t value; uint32_t address; uint32_t command; + uint32_t value; + key_id_t key; } infrared_identifier_t; -typedef std::vector> infrared_definition_t; +const key_id_t IRKEY_REPETITION = KEY_MAX_INVALID; + +typedef infrared_identifier_t const infrared_definition_t[]; void infrared_start(); diff --git a/src/graphics/screenshooter.cpp b/src/graphics/screenshooter.cpp index c471f5a..4d29725 100644 --- a/src/graphics/screenshooter.cpp +++ b/src/graphics/screenshooter.cpp @@ -74,7 +74,7 @@ static void serverTaskFunc(void * pvFramebuffer) { continue; } - ESP_LOGI(LOG_TAG, "Got packet: magic 0x%x, pressed 0x%x, released 0x%x", req.magic, req.pressed, req.released); + ESP_LOGV(LOG_TAG, "Got packet: magic 0x%x, pressed 0x%x, released 0x%x", req.magic, req.pressed, req.released); // Virtual keyboard handling key_id_t mask = (key_id_t) 0; diff --git a/src/input/infrared.cpp b/src/input/infrared.cpp index a1bf866..48d7717 100644 --- a/src/input/infrared.cpp +++ b/src/input/infrared.cpp @@ -14,6 +14,7 @@ static char LOG_TAG[] = "IRRC"; static TaskHandle_t hTask; static key_id_t last_pressed = KEY_MAX_INVALID; +static TickType_t last_pressed_timestamp = 0; #if HAS(IR_RECEIVER) static IRrecv receiver(HWCONF_IR_RECV_GPIO); @@ -22,27 +23,41 @@ static void ir_task(void*) { static decode_results results; while(1) { if(receiver.decode(&results)) { - ESP_LOGI(LOG_TAG, "IR code TYPE=%i, VALUE=%i, ADDRESS=%i, COMMAND=%i", results.decode_type, results.value, results.address, results.command); + if(results.repeat) { + last_pressed_timestamp = xTaskGetTickCount(); + } else { + bool found = false; + for(int i = 0; i < sizeof(HWCONF_IR_BUTTONS) / sizeof(infrared_identifier_t); i++) { + const infrared_identifier_t * id = &HWCONF_IR_BUTTONS[i]; + ESP_LOGV(LOG_TAG, "Check against TYPE=%i, VALUE=0x%x, ADDRESS=0x%x, COMMAND=0x%x", id->protocol, id->value, id->address, id->command); + if(id->protocol == (int) results.decode_type && + id->address == results.address && + id->command == results.command && + id->value == results.value) { + found = true; + last_pressed_timestamp = xTaskGetTickCount(); - for(auto &mapping: HWCONF_IR_BUTTONS) { - const infrared_identifier_t * id = &mapping.first; - if(id->protocol == results.decode_type && - id->address == results.address && - id->command == results.command && - id->value == results.value) { + if(last_pressed != KEY_MAX_INVALID) { + if(last_pressed == id->key) + break; + ESP_LOGI(LOG_TAG, "Unpress key %i (recv)", last_pressed); + hid_set_key_state(last_pressed, false); + } - if(last_pressed != KEY_MAX_INVALID) { - if(last_pressed == mapping.second) - break; - hid_set_key_state(last_pressed, false); + last_pressed = id->key; + ESP_LOGI(LOG_TAG, "Press key %i", last_pressed); + hid_set_key_state(id->key, true); } - - last_pressed = mapping.second; - hid_set_key_state(mapping.second, true); + } + if(!found) { + ESP_LOGI(LOG_TAG, "IR code TYPE=%i, VALUE=0x%x, ADDRESS=0x%x, COMMAND=0x%x", results.decode_type, results.value, results.address, results.command); } } + + receiver.resume(); } else { - if(last_pressed != KEY_MAX_INVALID) { + if(last_pressed != KEY_MAX_INVALID && (xTaskGetTickCount() - last_pressed_timestamp) > pdMS_TO_TICKS(150)) { + ESP_LOGI(LOG_TAG, "Unpress key %i (timeout)", last_pressed); hid_set_key_state(last_pressed, false); last_pressed = KEY_MAX_INVALID; } @@ -60,7 +75,7 @@ void infrared_start() { xTaskCreate( ir_task, "IRRC", - 4096, + 8000, nullptr, pisosTASK_PRIORITY_KEYPAD, &hTask From f400bbc046363da6885708bc148a28a268dc94ef Mon Sep 17 00:00:00 2001 From: akasaka Date: Mon, 2 Dec 2024 17:44:43 +0900 Subject: [PATCH 03/13] Remove unused console --- include/console.h | 35 ------- include/network/otafvu.h | 6 +- src/console.cpp | 191 -------------------------------------- src/input/touch_plane.cpp | 21 ----- src/main.cpp | 40 ++------ src/network/otafvu.cpp | 77 +-------------- 6 files changed, 9 insertions(+), 361 deletions(-) delete mode 100644 include/console.h delete mode 100644 src/console.cpp diff --git a/include/console.h b/include/console.h deleted file mode 100644 index c2d1d47..0000000 --- a/include/console.h +++ /dev/null @@ -1,35 +0,0 @@ -#pragma once -#include -#include -#include -#include - -/// @brief A simple low level console that does not utilize the Renderable tooling -class Console { -public: - Console(const font_definition_t*, DisplayFramebuffer*); - ~Console(); - - void set_active(bool); - void clear(); - void write(char); - void print(const char *, ...); - void set_cursor(bool); - void set_font(const font_definition_t*); - - void flush(); - - void task(); - -private: - DisplayFramebuffer * disp; - const font_definition_t * font; - QueueHandle_t hQueue; - TaskHandle_t hTask; - int cursor_x, cursor_y; - volatile bool cursor_enable; - volatile bool cursor_state; - bool active; - - void cursor_newline(FantaManipulator*); -}; \ No newline at end of file diff --git a/include/network/otafvu.h b/include/network/otafvu.h index 6a35de7..2d67437 100644 --- a/include/network/otafvu.h +++ b/include/network/otafvu.h @@ -1,6 +1,5 @@ #pragma once #include -#include #include #include @@ -8,13 +7,12 @@ /// @brief Manages the ArduinoOTA update service class OTAFVUManager { public: - OTAFVUManager(Console*, NewSequencer*); + OTAFVUManager(NewSequencer*); ~OTAFVUManager(); /// @brief Perform pending work of the service. Normally this is called by the internal task of the service and doesn't need to be called externally. void task(); private: - Console *con; NewSequencer *seq; /// @brief Prepare to install an OTA update @@ -28,7 +26,7 @@ class OTAFVUManager { #else class OTAFVUManager { public: - OTAFVUManager(Console*, NewSequencer*) {} + OTAFVUManager(NewSequencer*) {} ~OTAFVUManager() {} }; #endif \ No newline at end of file diff --git a/src/console.cpp b/src/console.cpp deleted file mode 100644 index e325004..0000000 --- a/src/console.cpp +++ /dev/null @@ -1,191 +0,0 @@ -#include -#include -#include -#include - -static const char CURSOR_OFF = ' '; -static char LOG_TAG[] = "CONS"; - -extern "C" void ConsoleTaskFunction( void * pvParameter ); - -void ConsoleTaskFunction( void * pvParameter ) -{ - ESP_LOGV(LOG_TAG, "Running task"); - Console * that = static_cast ( pvParameter ); - - while(1) { - that->task(); - } -} - - -Console::Console(const font_definition_t * f, DisplayFramebuffer * fb) { - disp = fb; - font = f; - cursor_x = 0; - cursor_y = 0; - cursor_enable = true; - cursor_state = false; - hQueue = xQueueCreate(10, sizeof(char *)); - active = true; - - ESP_LOGV(LOG_TAG, "Creating task"); - if(xTaskCreate( - ConsoleTaskFunction, - "CONS", - 4096, - this, - pisosTASK_PRIORITY_CONSOLE, - &hTask - ) != pdPASS) { - ESP_LOGE(LOG_TAG, "Task creation failed!"); - } -} - -Console::~Console() { - if(hTask != NULL) { - vTaskDelete(hTask); - hTask = NULL; - } -} - -void Console::task() { - char * next_line = nullptr; - - if(xQueueReceive(hQueue, &next_line, pdMS_TO_TICKS( 500 )) == pdTRUE) { - // Output next line - if(active && font != nullptr && font->valid) { - FantaManipulator * m = disp->manipulate(); - - if(m->lock()) { - if(cursor_enable && cursor_state) { - m->put_glyph(font, CURSOR_OFF, cursor_x, cursor_y); - } - for(int i = 0; i < strlen(next_line); i++) { - char ch = next_line[i]; - - switch(ch) { - case '\n': - cursor_newline(m); - case '\r': - cursor_x = 0; - break; - - // TODO: tabs etc - default: - if(cursor_x + font->width > disp->width) { - cursor_newline(m); - cursor_x = 0; - } - m->put_glyph(font, ch, cursor_x, cursor_y); - cursor_x += font->width; - break; - } - } - m->unlock(); - } - } - free(next_line); - - cursor_state = false; - } - - if(cursor_enable && active && font != nullptr && font->valid) { - cursor_state = !cursor_state; - FantaManipulator * m = disp->manipulate(); - if(m->lock()) { - m->put_glyph(font, cursor_state ? font->cursor_character : CURSOR_OFF, cursor_x, cursor_y); - m->unlock(); - } - } -} - -void Console::clear() { - disp->clear(); - cursor_x = 0; - cursor_y = 0; -} - -void Console::set_cursor(bool enable) { - if(font == nullptr || !font->valid) return; - if(enable && !cursor_enable) { - cursor_state = true; - if(active) { - FantaManipulator * m = disp->manipulate(); - if(m->lock()) { - m->put_glyph(font, font->cursor_character, cursor_x, cursor_y); - m->unlock(); - } - } - } else if(!enable && cursor_enable) { - if(active) { - FantaManipulator * m = disp->manipulate(); - if(m->lock()) { - m->put_glyph(font, CURSOR_OFF, cursor_x, cursor_y); - m->unlock(); - } - } - } - cursor_enable = enable; -} - -void Console::cursor_newline(FantaManipulator * m) { - if(font == nullptr || !font->valid) return; - if(cursor_y + font->height * 2 > disp->height) { - // Next line won't fit, so scroll current content above and keep Y same - m->scroll(0, -font->height); - } else { - cursor_y += font->height; - } -} - -void Console::print(const char * text, ...) { - va_list arg1, arg2; - - va_start(arg1, text); - - // Find the total length - va_copy(arg2, arg1); - size_t size = vsnprintf(NULL, 0, text, arg2) + 2; - va_end(arg2); - - char *szBuff = (char*) malloc(size); - vsnprintf(&szBuff[1], size, text, arg1); - szBuff[0] = '\n'; - - va_end(arg1); - - ESP_LOGV(LOG_TAG, "%s", &szBuff[1]); - - xQueueSend(hQueue, (void*) &szBuff, pdMS_TO_TICKS(1000)); -} - -void Console::write(char ch) { - char * msg = (char*) malloc(2); - msg[0] = ch; - msg[1] = 0x0; - xQueueSend(hQueue, (void*) &msg, pdMS_TO_TICKS(1000)); -} - -void Console::set_font(const font_definition_t* f) { - font = f; -} - -void Console::set_active(bool act) { - if(act) { - if(hTask != NULL) vTaskResume(hTask); - disp->wait_next_frame(); - } else { - flush(); - if(hTask != NULL) vTaskSuspend(hTask); - } - active = act; -} - -void Console::flush() { - if(!active) return; - char * next_line = nullptr; - while(xQueuePeek(hQueue, &next_line, 0)) { - vTaskDelay(100); - } -} \ No newline at end of file diff --git a/src/input/touch_plane.cpp b/src/input/touch_plane.cpp index 07606c1..c17a89d 100644 --- a/src/input/touch_plane.cpp +++ b/src/input/touch_plane.cpp @@ -6,7 +6,6 @@ #include #include #include -#include #include // I don't know how this works @@ -90,26 +89,6 @@ static void touch_task(void* pvParams) { vTaskDelay(pdMS_TO_TICKS(10)); } } - -void touchplane_debug(Console * con) { - while(1) { - // con->print("R %i U %i\nD %i L %i", lastDeltas[TOUCH_PAD_NUM9], lastDeltas[TOUCH_PAD_NUM8], lastDeltas[TOUCH_PAD_NUM7], lastDeltas[TOUCH_PAD_NUM6]); - if(hid_test_key_state(KEY_UP)) ESP_LOGI(LOG_TAG, "UP pressed"); - if(hid_test_key_state(KEY_DOWN)) ESP_LOGI(LOG_TAG, "DOWN pressed"); - if(hid_test_key_state(KEY_LEFT)) ESP_LOGI(LOG_TAG, "LEFT pressed"); - if(hid_test_key_state(KEY_RIGHT)) ESP_LOGI(LOG_TAG, "RIGHT pressed"); - if(hid_test_key_state(KEY_HEADPAT)) ESP_LOGI(LOG_TAG, "HEADPAT pressed"); - - con->clear(); - if(hid_test_key_state(KEY_UP)) con->print("UP"); - if(hid_test_key_state(KEY_DOWN)) con->print("DOWN"); - if(hid_test_key_state(KEY_LEFT)) con->print("LEFT"); - if(hid_test_key_state(KEY_RIGHT)) con->print("RIGHT"); - if(hid_test_key_state(KEY_HEADPAT)) con->print("HEADPAT"); - - vTaskDelay(pdMS_TO_TICKS(100)); - } -} #endif esp_err_t touchplane_start() { diff --git a/src/main.cpp b/src/main.cpp index 9b26a34..0cfe1bc 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5,7 +5,6 @@ #include #include #include -#include #include #include #include @@ -53,7 +52,6 @@ static FpsCounter * fpsCounter; static DisplayFramebuffer * fb; static Screenshooter * screenshooter; static FantaManipulator * graph; -static Console * con; static SensorPool * sensors; static OTAFVUManager * ota; static Beeper * beepola; @@ -117,7 +115,6 @@ void bringup_light_sensor() { #if HAS(LIGHT_SENSOR) als = new AmbientLightSensor(HWCONF_LIGHTSENSE_GPIO); sensors->add(SENSOR_ID_AMBIENT_LIGHT, als, pdMS_TO_TICKS(250)); - con->print("L sensor OK"); ESP_LOGI(LOG_TAG, "Light sensor ready"); #endif } @@ -125,7 +122,6 @@ void bringup_light_sensor() { void bringup_motion_sensor() { #if HAS(MOTION_SENSOR) sensors->add(SENSOR_ID_MOTION, new MotionSensor(HWCONF_MOTION_GPIO), pdMS_TO_TICKS(250)); - con->print("M sensor OK"); ESP_LOGI(LOG_TAG, "Motion sensor ready"); #endif } @@ -136,20 +132,15 @@ void bringup_temp_sensor() { AM2322* tempSens = new AM2322(&Wire); if(!sensors->add(SENSOR_ID_AMBIENT_TEMPERATURE, new Am2322TemperatureSensor(tempSens), pdMS_TO_TICKS(5000))) { - con->print("T sens err"); beepola->beep(CHANNEL_SYSTEM, 500, 125); return; - } else { - con->print("T sensor OK"); - } + } ESP_LOGI(LOG_TAG, "Temperature sensor ready"); delay(1000); if(!sensors->add(SENSOR_ID_AMBIENT_HUMIDITY, new Am2322HumiditySensor(tempSens), pdMS_TO_TICKS(5000))) { - con->print("H sens err"); beepola->beep(CHANNEL_SYSTEM, 500, 125); - } else { - con->print("H sensor OK"); + return; } ESP_LOGI(LOG_TAG, "Humidity sensor ready"); #endif @@ -167,18 +158,16 @@ void bringup_switchbot_sensor() { SwitchbotMeterTemperature *remoteTemp = new SwitchbotMeterTemperature(wometer); if(!sensors->add(SENSOR_ID_SWITCHBOT_INDOOR_HUMIDITY, remoteHum, pdMS_TO_TICKS(30000))) { - con->print("WoH err"); + ESP_LOGE(LOG_TAG, "WoH err"); } else { - con->print("WoH ok"); if(prefs_get_bool(PREFS_KEY_SWITCHBOT_EMULATES_LOCAL) && !sensors->exists(SENSOR_ID_AMBIENT_HUMIDITY)) { sensors->short_circuit(SENSOR_ID_AMBIENT_HUMIDITY, SENSOR_ID_SWITCHBOT_INDOOR_HUMIDITY); } } if(!sensors->add(SENSOR_ID_SWITCHBOT_INDOOR_TEMPERATURE, remoteTemp, pdMS_TO_TICKS(30000))) { - con->print("WoT err"); + ESP_LOGE(LOG_TAG, "WoT err"); } else { - con->print("WoT ok"); if(prefs_get_bool(PREFS_KEY_SWITCHBOT_EMULATES_LOCAL) && !sensors->exists(SENSOR_ID_AMBIENT_TEMPERATURE)) { sensors->short_circuit(SENSOR_ID_AMBIENT_TEMPERATURE, SENSOR_ID_SWITCHBOT_INDOOR_TEMPERATURE); } @@ -192,9 +181,8 @@ void bringup_switchbot_sensor() { void bringup_hid() { #if HAS(TOUCH_PLANE) - con->print("Touch init"); if(touchplane_start() != ESP_OK) { - con->print("TP init err"); + ESP_LOGE(LOG_TAG, "TP init err"); beepola->beep(CHANNEL_SYSTEM, 500, 125); } ESP_LOGI(LOG_TAG, "Touchpad ready"); @@ -217,29 +205,20 @@ static TaskHandle_t bootTaskHandle = NULL; void boot_task(void*) { ESP_LOGI(LOG_TAG, PRODUCT_NAME " v" PRODUCT_VERSION " is in da house now!!"); - // con->print("WiFi init"); NetworkManager::startup(); ESP_LOGI(LOG_TAG, "NetMgr started"); while(!NetworkManager::is_up()) { delay(1000); ESP_LOGI(LOG_TAG, "Waiting for NetMgr..."); - // con->write('.'); } screenshooter = new Screenshooter(fb->manipulate()); if(prefs_get_bool(PREFS_KEY_REMOTE_SERVER)) { screenshooter->start_server(3939); ESP_LOGI(LOG_TAG, "RC Server ready"); - // con->print("RC server up!"); - // delay(1000); } - // con->print(NetworkManager::network_name()); - // con->print("%i dBm", NetworkManager::rssi()); - // delay(2000); - // con->print(NetworkManager::current_ip().c_str()); - // delay(2000); - ota = new OTAFVUManager(con, seq); + ota = new OTAFVUManager(seq); ESP_LOGI(LOG_TAG, "OTAFVUMgr ready"); sensors = new SensorPool(); @@ -328,12 +307,6 @@ void setup() { fb = new DisplayFramebuffer(&display_driver); - con = new Console(find_font(FONT_STYLE_CONSOLE), fb); - con->set_cursor(true); - con->print(""); - - con->print(PRODUCT_NAME " v" PRODUCT_VERSION); - desktop = new ViewCompositor(); appHost = new ViewMultiplexor(); desktop->add_layer(appHost); @@ -343,7 +316,6 @@ void setup() { appHost->add_view(new RebootScreen(), STATE_RESTART); graph = fb->manipulate(); - con->set_active(false); fb->clear(); if(xTaskCreate( diff --git a/src/network/otafvu.cpp b/src/network/otafvu.cpp index 5fcd49a..2c6f548 100644 --- a/src/network/otafvu.cpp +++ b/src/network/otafvu.cpp @@ -12,49 +12,6 @@ static char LOG_TAG[] = "OTAFVU"; - -// Utilitary font to draw the FVU progress bar -static const uint8_t one_pixel_bar_data[] = { - // cursor, empty - 0b00000000, - 0b00000000, - 0b00000000, - 0b00000000, - 0b00000000, - 0b00000000, - 0b00000000, - 0b00000000, - // bar, filled - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, -}; - -const font_range_t pixel_bar_font_ranges[] = { - font_range_t { - .start = '|' - 1, - .end = '|' - } -}; - -const font_definition_t one_pixel_bar_font = { - .valid = true, - .encoding = FONT_ENCODING_BESPOKE_ASCII, - .glyph_format = SPRFMT_HORIZONTAL, - .cursor_character = '|' - 1, - .invalid_character = '|' - 1, - .width = 1, - .height = 8, - .range_count = 1, - .data = one_pixel_bar_data, - .ranges = pixel_bar_font_ranges -}; - extern "C" void OtaFvuTaskFunction( void * pvParameter ); void OtaFvuTaskFunction( void * pvParameter ) @@ -67,9 +24,8 @@ void OtaFvuTaskFunction( void * pvParameter ) } } -OTAFVUManager::OTAFVUManager(Console* c, NewSequencer*s) { +OTAFVUManager::OTAFVUManager(NewSequencer*s) { ESP_LOGI(LOG_TAG, "Initializing"); - con = c; seq = s; ArduinoOTA.setHostname((String("plasma-") + getChipId()).c_str()); @@ -112,14 +68,6 @@ void OTAFVUManager::get_ready() { ESP_LOGI(LOG_TAG, "Get ready"); change_state(STATE_OTAFVU); - con->set_active(true); - con->clear(); - con->print("OTA FVU RECV\n"); - con->flush(); - con->set_cursor(false); - con->set_font(&one_pixel_bar_font); - con->write('|'); - // Keep display on when updating power_mgmt_pause(); @@ -128,35 +76,13 @@ void OTAFVUManager::get_ready() { void OTAFVUManager::shut_up_and_explode() { ESP_LOGI(LOG_TAG, "Shut up and explode!"); - con->set_font(find_font(FONT_STYLE_TALL_TEXT)); - con->clear(); - con->print("OTAFVU Done!"); seq->play_sequence(&oelutz_fvu); seq->wait_end_play(); - con->set_active(false); change_state(STATE_RESTART, TRANSITION_NONE); } void OTAFVUManager::on_error(ota_error_t error) { ESP_LOGE(LOG_TAG, "OTA error %i!!", error); - con->clear(); - switch(error) { - case OTA_AUTH_ERROR: - con->print("Auth err!"); - break; - case OTA_BEGIN_ERROR: - con->print("Begin err!"); - break; - case OTA_CONNECT_ERROR: - con->print("Conn err!"); - break; - case OTA_RECEIVE_ERROR: - con->print("Recv err!"); - break; - case OTA_END_ERROR: - con->print("End error!"); - break; - } } void OTAFVUManager::on_progress(unsigned int progress, unsigned int total) { @@ -164,7 +90,6 @@ void OTAFVUManager::on_progress(unsigned int progress, unsigned int total) { unsigned int percent = (progress / (total / 100)); ESP_LOGV(LOG_TAG, "Recv: %u%% [%u / %u]", percent, progress, total); while(lastPercent < percent) { - con->write('|'); lastPercent++; } } From f6ef4124c26ac220d7f83de741c5b3f618dce810 Mon Sep 17 00:00:00 2001 From: akasaka Date: Tue, 3 Dec 2024 21:19:50 +0900 Subject: [PATCH 04/13] Upgrade some devices to 8MB (chip was there from a long time ago but unused); correctly fail when the binary is larger than partition size --- helper/check-size-correctly.py | 35 +++++++++++ helper/pretty-screenshot.py | 33 ---------- include/app/app_host.h | 47 ++++++++++++++ include/devices/big_clock.h | 5 +- include/devices/big_noritake.h | 7 ++- include/devices/led_clock.h | 23 +++++++ include/input/keys.h | 10 ++- include/state.h | 2 + platformio.ini | 74 +++++++++-------------- partitions.csv => pmaps/partitions_4M.csv | 2 +- pmaps/partitions_8M.csv | 7 +++ src/main.cpp | 13 +++- 12 files changed, 168 insertions(+), 90 deletions(-) create mode 100644 helper/check-size-correctly.py delete mode 100644 helper/pretty-screenshot.py create mode 100644 include/app/app_host.h rename partitions.csv => pmaps/partitions_4M.csv (84%) create mode 100644 pmaps/partitions_8M.csv diff --git a/helper/check-size-correctly.py b/helper/check-size-correctly.py new file mode 100644 index 0000000..2189edd --- /dev/null +++ b/helper/check-size-correctly.py @@ -0,0 +1,35 @@ +# PIO/esp32-arduino doesn't correctly calculate the binary size +# See thread for more info: https://esp32.com/viewtopic.php?f=19&t=43303&sid=b02e92b5c4d3e7c16f2c3b14b2d0edc6#p141312 + +Import("env") + +import csv +from os.path import join, getsize + +BINPATH = join("$BUILD_DIR", "${PROGNAME}.bin") + +def post_program_action(source, target, env): + found=False + csvpath = env["PARTITIONS_TABLE_CSV"] + print("Using partition table:", csvpath) + with open(csvpath, 'r') as file: + reader = csv.DictReader(file) + for row in reader: + if row['# Name'] == 'app0': + app0_size = int(row['Size'].strip(), 16) + found=True + break + + if not found: + raise Exception("Could not find app0 size") + + fp = target[0].get_path() + sz = getsize(fp) #<- scons' getsize doesn't work when creating the file for the first time, huh! + if sz >= app0_size: + print("app0 is", app0_size, "bytes, but",fp,"is",sz,": too big!") + raise Exception("resulting binary too big") + else: + print("app0 is", app0_size, "bytes, and",fp,"is",sz,": OK") + + +env.AddPostAction(BINPATH, post_program_action) \ No newline at end of file diff --git a/helper/pretty-screenshot.py b/helper/pretty-screenshot.py deleted file mode 100644 index 048a5b4..0000000 --- a/helper/pretty-screenshot.py +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/env python -# -*- coding: utf-8 -*- - -import sys -from pathlib import Path - -IMG_IN=sys.argv[1] -IMG_OUT=sys.argv[2] if len(sys.argv) > 2 else str(Path(IMG_IN).with_suffix(''))+"_pretty.png" - -PIX_COLOR=(0, 210, 242) -PIX_SIZE=4 -PIX_PITCH_H=1 -PIX_PITCH_W=1 - -from PIL import Image, ImageFilter -im = Image.open(IMG_IN, 'r') -src = im.load() - -width, height = im.size - -out_img = Image.new(mode="RGB", size=(width * (PIX_SIZE + PIX_PITCH_H), height * (PIX_SIZE + PIX_PITCH_H))) - -for y in range(height): - for x in range(width): - v = src[x, y] - for dy in range(PIX_SIZE): - for dx in range(PIX_SIZE): - out_x = x * (PIX_SIZE + PIX_PITCH_W) + dx - out_y = y * (PIX_SIZE + PIX_PITCH_H) + dy - if out_x < out_img.width and out_y < out_img.height: - out_img.putpixel((out_x, out_y), PIX_COLOR if v > 0 else (0, 0, 0)) - -out_img.filter(ImageFilter.GaussianBlur(radius=PIX_SIZE/10)).save(IMG_OUT) \ No newline at end of file diff --git a/include/app/app_host.h b/include/app/app_host.h new file mode 100644 index 0000000..58454d5 --- /dev/null +++ b/include/app/app_host.h @@ -0,0 +1,47 @@ +#include +#include + +class AppHost: public ViewMultiplexor { +public: + AppHost(): ViewMultiplexor() {} + + void step() override { + // Handle hotkeys for entering apps quickly + // For now, assignment is hardcoded: + // F1: Timer + // F2: Home (clock) + // F3: Stopwatch + + if(!is_in_critical_state()) { + if(hid_test_key_state(KEY_SOFT_F1) == KEYSTATE_HIT) { + push_state(STATE_TIMER_EDITOR, TRANSITION_WIPE); + } + else if(hid_test_key_state(KEY_SOFT_F2) == KEYSTATE_HIT) { + change_state(STATE_IDLE, TRANSITION_WIPE); + } + else if(hid_test_key_state(KEY_SOFT_F3) == KEYSTATE_HIT) { + push_state(STATE_STOPWATCH, TRANSITION_WIPE); + } + } + + ViewMultiplexor::step(); + } + +protected: + bool is_in_critical_state() { + // Returns true if in a state that should not be overridable by a hotkey + + device_state_t sts = get_state(); + return + sts == STATE_BOOT || + sts == STATE_RESTART || + sts == STATE_ALARMING || +#if HAS(HTTPFVU) + sts == STATE_HTTPFVU || +#endif +#if HAS(OTAFVU) + sts == STATE_OTAFVU || +#endif + sts == STATE_NEW_YEAR; + } +}; \ No newline at end of file diff --git a/include/devices/big_clock.h b/include/devices/big_clock.h index 77c0708..f60c95b 100644 --- a/include/devices/big_clock.h +++ b/include/devices/big_clock.h @@ -3,7 +3,7 @@ #include #include -// #define HAS_OTAFVU +#define HAS_OTAFVU #define HAS_OUTPUT_MD_PLASMA #define HAS_VARYING_BRIGHTNESS #define HAS_DISPLAY_BLANKING @@ -12,9 +12,6 @@ #define HAS_MOTION_SENSOR #define HAS_KEYPAD -// ↓ Looks like shite on the plasma display -// #define COMPOSABLE_NO_EVENODD // let's see how it looks - // Plasma Information System OS (not DOS, there's no disk in it!) #define PRODUCT_NAME "PIS-OS" #define PRODUCT_VERSION "5.3" diff --git a/include/devices/big_noritake.h b/include/devices/big_noritake.h index 7c2285a..c906957 100644 --- a/include/devices/big_noritake.h +++ b/include/devices/big_noritake.h @@ -59,12 +59,13 @@ const infrared_definition_t HWCONF_IR_BUTTONS = { { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x10, .value = 0x8F708F7, .key = KEY_LEFT}, // LEFT { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x80, .value = 0x8F701FE, .key = KEY_RIGHT}, // RIGHT { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x20, .value = 0x8F704FB, .key = KEY_HEADPAT}, // CENTER + { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0xf8, .value = 0x8f71fe0, .key = KEY_SOFT_F1}, // A + { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x78, .value = 0x8f71ee1, .key = KEY_SOFT_F2}, // B + { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x58, .value = 0x8f71ae5, .key = KEY_SOFT_F3}, // C + // Top-left: TYPE=3, VALUE=0x8f78d72, ADDRESS=0x10, COMMAND=0xb1 // Top-right: TYPE=3, VALUE=0x8f7847b, ADDRESS=0x10, COMMAND=0x21 // Bottom-left: TYPE=3, VALUE=0x8f78877, ADDRESS=0x10, COMMAND=0x11 // Bottom-right: TYPE=3, VALUE=0x8f7817e, ADDRESS=0x10, COMMAND=0x81 // Power: TYPE=3, VALUE=0x8f71be4, ADDRESS=0x10, COMMAND=0xd8 - // A: TYPE=3, VALUE=0x8f71fe0, ADDRESS=0x10, COMMAND=0xf8 - // B: TYPE=3, VALUE=0x8f71ee1, ADDRESS=0x10, COMMAND=0x78 - // C: TYPE=3, VALUE=0x8f71ae5, ADDRESS=0x10, COMMAND=0x58 }; \ No newline at end of file diff --git a/include/devices/led_clock.h b/include/devices/led_clock.h index 316b1a3..5a8c580 100644 --- a/include/devices/led_clock.h +++ b/include/devices/led_clock.h @@ -2,11 +2,13 @@ #include #include +#include #define HAS_OUTPUT_AKIZUKI_K875 #define HAS_KEYPAD #define HAS_VARYING_BRIGHTNESS #define HAS_LIGHT_SENSOR +#define HAS_IR_RECEIVER // Plasma Information System OS (not DOS, there's no disk in it!) #define PRODUCT_NAME "LePIS-OS" @@ -34,6 +36,7 @@ const gpio_num_t HWCONF_K875_SACRIFICIAL_GPIO = GPIO_NUM_5; // ---- Connection to light sensors ---- const gpio_num_t HWCONF_LIGHTSENSE_GPIO = GPIO_NUM_36; +const gpio_num_t HWCONF_IR_RECV_GPIO = GPIO_NUM_13; // ---- Connection of buttons ---- const keypad_definition_t HWCONF_KEYPAD = { @@ -43,3 +46,23 @@ const keypad_definition_t HWCONF_KEYPAD = { {GPIO_NUM_27, KEY_UP}, {GPIO_NUM_35, KEY_HEADPAT}, //<- finally a clock to have hardware headpat! }; + +const infrared_definition_t HWCONF_IR_BUTTONS = { + /** + Optosupply OE13KIR (https://akizukidenshi.com/goodsaffix/OE13KIR.pdf) + */ + { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0xA0, .value = 0x8F705FA, .key = KEY_UP}, // UP + { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x00, .value = 0x8F700FF, .key = KEY_DOWN}, // DOWN + { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x10, .value = 0x8F708F7, .key = KEY_LEFT}, // LEFT + { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x80, .value = 0x8F701FE, .key = KEY_RIGHT}, // RIGHT + { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x20, .value = 0x8F704FB, .key = KEY_HEADPAT}, // CENTER + { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0xf8, .value = 0x8f71fe0, .key = KEY_SOFT_F1}, // A + { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x78, .value = 0x8f71ee1, .key = KEY_SOFT_F2}, // B + { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x58, .value = 0x8f71ae5, .key = KEY_SOFT_F3}, // C + + // Top-left: TYPE=3, VALUE=0x8f78d72, ADDRESS=0x10, COMMAND=0xb1 + // Top-right: TYPE=3, VALUE=0x8f7847b, ADDRESS=0x10, COMMAND=0x21 + // Bottom-left: TYPE=3, VALUE=0x8f78877, ADDRESS=0x10, COMMAND=0x11 + // Bottom-right: TYPE=3, VALUE=0x8f7817e, ADDRESS=0x10, COMMAND=0x81 + // Power: TYPE=3, VALUE=0x8f71be4, ADDRESS=0x10, COMMAND=0xd8 +}; \ No newline at end of file diff --git a/include/input/keys.h b/include/input/keys.h index 6eabacb..25f3996 100644 --- a/include/input/keys.h +++ b/include/input/keys.h @@ -3,13 +3,17 @@ #include #include -typedef enum key_id { +typedef enum key_id: uint16_t { KEY_UP = (1 << 0), KEY_DOWN = (1 << 1), KEY_LEFT = (1 << 2), KEY_RIGHT = (1 << 3), KEY_HEADPAT = (1 << 4), + KEY_SOFT_F1 = (1 << 5), + KEY_SOFT_F2 = (1 << 6), + KEY_SOFT_F3 = (1 << 7), + KEY_MAX_INVALID = 0xFF } key_id_t; @@ -22,9 +26,9 @@ typedef enum key_state { #define KEY_ID_TO_BIT(k) (k) -typedef uint8_t key_bitmask_t; +typedef uint16_t key_bitmask_t; -const key_bitmask_t KEYMASK_ALL = 0xFF; +const key_bitmask_t KEYMASK_ALL = 0xFFFF; void hid_set_key_beeper(Beeper *); void hid_set_key_state(key_id_t key, bool state); diff --git a/include/state.h b/include/state.h index 86252c9..25f2898 100644 --- a/include/state.h +++ b/include/state.h @@ -21,7 +21,9 @@ typedef enum device_state { STATE_HTTPFVU, #endif STATE_NEW_YEAR, +#if HAS(OTAFVU) STATE_OTAFVU, +#endif #if HAS(PLAYGROUND) STATE_PLAYGROUND, #endif diff --git a/platformio.ini b/platformio.ini index 0b7e003..661bf6a 100644 --- a/platformio.ini +++ b/platformio.ini @@ -1,22 +1,19 @@ -; PlatformIO Project Configuration File -; -; Build options: build flags, source filter -; Upload options: custom upload port, speed and extra flags -; Library options: dependencies, extra library storages -; Advanced options: extra scripting -; -; Please visit documentation for the other options and examples -; https://docs.platformio.org/page/projectconf.html - [common] -build_flags = -DCORE_DEBUG_LEVEL=3 -DPDFB_PERF_LOGS -DPDFB_PERF_LOG_INTERVAL=1200 -DGP_NO_OTA -DGP_NO_DNS -DGP_NO_MDNS -D_IR_ENABLE_DEFAULT_=false -DDECODE_NEC=true -DDECODE_RC5=true -DDECODE_RC6=true -DDECODE_SONY=true +build_flags = -Os -DCORE_DEBUG_LEVEL=3 -DPDFB_PERF_LOGS -DPDFB_PERF_LOG_INTERVAL=1200 -DGP_NO_OTA -DGP_NO_DNS -DGP_NO_MDNS -D_IR_ENABLE_DEFAULT_=false -DDECODE_NEC=true -DDECODE_RC5=true -DDECODE_RC6=true -DDECODE_SONY=true [env] +board = esp32dev +build_type = debug platform = espressif32@6.5.0 framework = arduino build_src_filter = +<*> -<.git/> -<.svn/> - -board_build.partitions = partitions.csv +; Baseline hardware spec is 4MB WROVER +; Some devices use a 8MB WROVER +board_build.partitions = pmaps/partitions_4M.csv board_build.filesystem = littlefs +upload_speed = 921600 +monitor_speed = 115200 +monitor_filters = esp32_exception_decoder lib_deps = bblanchon/ArduinoJson@^7.0.4 gyverlibs/GyverPortal@^3.6.6 @@ -26,60 +23,47 @@ lib_deps = extra_scripts = pre:helper/env-extra.py pre:helper/aquestalk-detect.py + post:helper/check-size-correctly.py [env:music-pomf] -board = esp32dev -build_type = debug build_src_filter = + build_flags = -Wl,-allow-multiple-definition -lib_deps = +lib_deps = ; no libraries for music builds extra_scripts = post:helper/build-all-music.py +; The original Orange Ticking Thing. Uses an 8MB WROVER module. [env:PLASMA] -board = esp32dev -build_type = debug +board_build.partitions = pmaps/partitions_8M.csv +board_upload.flash_size = 8MB +board_upload.maximum_size = 8388608 build_flags = -DDEVICE_PLASMA_CLOCK -DFVU_FLAVOR=\"PLASMA\" ${common.build_flags} -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue -upload_speed = 921600 -monitor_speed = 115200 -monitor_filters = esp32_exception_decoder +; Small OLED based alarm clocks. Use a 4MB WROVER module. [env:OLED] -board = esp32dev -build_type = debug build_flags = -DDEVICE_MINIPISOS -DFVU_FLAVOR=\"OLED\" ${common.build_flags} -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue -DCONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY -upload_speed = 921600 -monitor_speed = 115200 -monitor_filters = esp32_exception_decoder +; Same as OLED but using a Noritake GU7000 112x16 VFD. Uses a 4MB WROVER module. [env:NORITAKE_GU112] -board = esp32dev -build_type = debug build_flags = -DDEVICE_MINIPISOS_VFD -DFVU_FLAVOR=\"NORITAKE_GU112\" ${common.build_flags} -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue -DCONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY -upload_speed = 921600 -monitor_speed = 115200 -monitor_filters = esp32_exception_decoder +; Same as above, but with a 140x16. Uses an 8MB WROVER module. [env:NORITAKE_GU140] -board = esp32dev -build_type = debug +board_build.partitions = pmaps/partitions_8M.csv +board_upload.flash_size = 8MB +board_upload.maximum_size = 8388608 build_flags = -DDEVICE_MINIPISOS_VFD_WIDE -DFVU_FLAVOR=\"NORITAKE_GU140\" ${common.build_flags} -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue -DCONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY -upload_speed = 921600 -monitor_speed = 115200 -monitor_filters = esp32_exception_decoder +; Some 192x16 VFD bus display repurposed. Uses an 8MB WROVER module. [env:NORITAKE_321_192] -board = esp32dev -build_type = debug +board_build.partitions = pmaps/partitions_8M.csv +board_upload.flash_size = 8MB +board_upload.maximum_size = 8388608 build_flags = -DDEVICE_LONGPISOS -DFVU_FLAVOR=\"NORITAKE_321_192\" ${common.build_flags} -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue -DCONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY -upload_speed = 921600 -monitor_speed = 115200 -monitor_filters = esp32_exception_decoder +; Akizuki Denshi K875 LED matrix based display. Uses a 4MB module modded into 8MB. [env:AKI_K875] -board = esp32dev -build_type = debug +board_build.partitions = pmaps/partitions_8M.csv +board_upload.flash_size = 8MB +board_upload.maximum_size = 8388608 build_flags = -DDEVICE_LEPISOS -DFVU_FLAVOR=\"AKI_K875\" ${common.build_flags} -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue -DCONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY -upload_speed = 921600 -monitor_speed = 115200 -monitor_filters = esp32_exception_decoder \ No newline at end of file diff --git a/partitions.csv b/pmaps/partitions_4M.csv similarity index 84% rename from partitions.csv rename to pmaps/partitions_4M.csv index 8da8b5e..fcde578 100644 --- a/partitions.csv +++ b/pmaps/partitions_4M.csv @@ -1,4 +1,4 @@ -# Name, Type, SubType, Offset, Size, Flags +# Name,Type,SubType,Offset,Size,Flags nvs, data, nvs, 0x9000, 0x5000, otadata, data, ota, 0xe000, 0x2000, app0, app, ota_0, 0x10000, 0x180000, diff --git a/pmaps/partitions_8M.csv b/pmaps/partitions_8M.csv new file mode 100644 index 0000000..546c24c --- /dev/null +++ b/pmaps/partitions_8M.csv @@ -0,0 +1,7 @@ +# Name,Type,SubType,Offset,Size,Flags +nvs, data, nvs, 0x9000, 0x5000, +otadata, data, ota, 0xe000, 0x2000, +app0, app, ota_0, 0x10000, 0x380000, +app1, app, ota_1, 0x390000, 0x380000, +spiffs, data, spiffs, 0x710000,0xE0000, +coredump, data, coredump,0x7F0000,0x10000, \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 0cfe1bc..1ad31c2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -60,11 +61,13 @@ static Yukkuri * yukkuri = nullptr; static AmbientLightSensor * als = nullptr; void change_state(device_state_t to, transition_type_t transition) { +#if HAS(OTAFVU) if(to == STATE_OTAFVU) { current_state = STATE_OTAFVU; _actual_current_state = STATE_OTAFVU; return; // all other things handled in the FVU process } +#endif if(to == current_state) return; @@ -74,6 +77,10 @@ void change_state(device_state_t to, transition_type_t transition) { // might we need a queue here? _next_transition = transition; current_state = to; + + if(to == STATE_IDLE) { + state_stack.empty(); + } } void push_state(device_state_t next, transition_type_t transition) { @@ -308,7 +315,7 @@ void setup() { fb = new DisplayFramebuffer(&display_driver); desktop = new ViewCompositor(); - appHost = new ViewMultiplexor(); + appHost = new AppHost(); desktop->add_layer(appHost); desktop->add_layer(new FpsCounter(fb)); @@ -355,7 +362,9 @@ void loop() { bumTheDog = true; } +#if HAS(OTAFVU) if(_actual_current_state != STATE_OTAFVU) { // OTAFVU basically locks everything down until reboot +#endif fb->wait_next_frame(); if(graph->lock()) { desktop->render(graph); @@ -369,10 +378,12 @@ void loop() { appHost->switch_to(_actual_current_state, _next_transition); } print_memory(); +#if HAS(OTAFVU) } else { if(_actual_current_state != current_state && current_state == STATE_RESTART) { _actual_current_state = current_state; appHost->switch_to(_actual_current_state, _next_transition); } } +#endif } From ea5ffd2330eec842b345ba145dadf96b937f508e Mon Sep 17 00:00:00 2001 From: akasaka Date: Wed, 4 Dec 2024 23:55:17 +0900 Subject: [PATCH 05/13] =?UTF-8?q?[wip]=20NightRadio=20=E2=80=94=20pixel=20?= =?UTF-8?q?cave?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- helper/chimes/pixelcave.mid | Bin 0 -> 17877 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 helper/chimes/pixelcave.mid diff --git a/helper/chimes/pixelcave.mid b/helper/chimes/pixelcave.mid new file mode 100644 index 0000000000000000000000000000000000000000..56d5fb6078b17172e0084b1e234652411d9a019b GIT binary patch literal 17877 zcmeHP-EJF26dt~2YE6bZs3a9N25;F=fU3BsA#UB@;_9O)#eEpszx&d&MHe0%21*|ELy z?K>+iAw)_%Cyt5s?K@wrk~S;0-aL|C78_zKHFBfTxcPuOY1Mh{jm5|6;;lwwDfmuo z&4~yybz1xaOFVRZk@4NHNj#h+IZ1McWX2aW)V)mI%OtZTvpu>pQRCAjr%5^_2VEQ_ zK1cp@d+-=GKNoNA->kpM|LuBU_P?orrv97fpLzb9^N%_Ine*?k^EdbW%sszz@m&5~ zJeNNg&*jg>bNO@eT>e}QJ<bNO@eT>e}QJ<I-Gx)dnS!3Q0NwSxC-omJaWg#t* zlHno|S|Elh1|^E83Rj}<5a=js^tSFM;D#jE>1-F$E3)hK7O&RnvrI^@jxF_+B z#CsOrm-s-UW#dB&A30dD@rlHz5~~(g_1e=Cv}t>&3=KS1r+IL$m`t8nc(Ys8(tnHJ zaQw08(C%5I9nr~t=B{P^YOJ?A*>{!hc5)3hPLgzG7ukzW=}UKwN>L|AIDK7@yPXo* z>+7)|jg#L*@AF6VYdqmdYMih9B|NH~lC7?joyODk*go;sKVO0~_hZ&4&f7*Tb^e%q zGy6y7gQ;&j*UzM$|5x=oD0HakQ-KdW(>cT-Y(Mxh`IGp5snuQ*-`>#T_j#}7dLrR_L~^+kJS5P00S7Cq{HT<+Vv~?sP4f9P zHIdn*rPUdT*m+MJ@md4z&-q=L|9Dmp4EWeF>SNsl;^@^4@x!v;{AStjmF-xs_DkE1 z^oz0FFK#aJW9I3Pa}tkT;%(w)@=fhalLsabp1M3}(sRYswW!`F&%aoj=V-K_O&Lb{q28R8PtNmQazTD_7Acsg>(P_ literal 0 HcmV?d00001 From ee107e6165a8eba9d8a4b4d3555138b77e36058a Mon Sep 17 00:00:00 2001 From: akasaka Date: Thu, 5 Dec 2024 13:27:31 +0900 Subject: [PATCH 06/13] WIP pixel cave the game --- data/music/043_pixel_cave.pomf | Bin 0 -> 1767 bytes helper/chimes/pixelcave.mid | Bin 17877 -> 17818 bytes include/app/pixel_cave.h | 53 ++++++++++++++++++++++ include/devices/mid_clock_noritake_wide.h | 1 + include/sound/sequence.h | 29 ++++++++++++ include/sound/sequencer.h | 4 +- include/state.h | 3 ++ include/utils.h | 1 + platformio.ini | 2 + src/app/menu.cpp | 3 ++ src/main.cpp | 4 ++ 11 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 data/music/043_pixel_cave.pomf create mode 100644 include/app/pixel_cave.h diff --git a/data/music/043_pixel_cave.pomf b/data/music/043_pixel_cave.pomf new file mode 100644 index 0000000000000000000000000000000000000000..9dc6daf061d120576f4a0ecb51222d1be5e7f9b7 GIT binary patch literal 1767 zcmah|dpOez1D>>@8Z#Bgt@&J<$6SVWj$FDdT=dV58O%gK3@=_CpQ8$u(2 z{uQ3&^AU--kT7yA!W8lU!vE5cm_#6uAt2C{KM1rK_##Hz5oWgCu52XEJPKd7l}B4n z#pa@5iZ^Z6(^%Om2-WgJZ$(L3J6Yw)TtVZ6{v2}7F8wYdkKuf_>TuAjpn!paT3gy7 z*8nLu{OQ(w73Y?f^sVwAm)Dl#FRjh3bPNOIt>LpLfqrA?=S0y@8@*k9AK&J@wYJ{Qc|flZ)>~zKWnnrFZm@znenx-sfHr?C z-trO2Z~P@oDZRpU-;UATKsCav`DdfF`TX4*7bdtjW+tw?Z_}(cP1a4;uNFQd`bGo4 z2JX2AH7MQ<-wiKE)F7ySjD{LWLY&;AkrG4j3#?0+^8gvV7BY9v2_a`J?TMCH=g<8hbr807OkF{&HNS45-vR!?Kk6fqFS}yo z;^ZtoKQc&r?rMM70fMC{A@f4*N@UD3qk{tynrqLF@lg5ca7A=)(zyr0DEXCPNBD#0o+jSHNKCNmH*Jw z5}t@QtNGxEi~u5L!G}$Kflz*g2+^1IU(#$hx=OPKb(AIFQGiZR_MZY(^ChxD4)&I#5$>WO zeJ>baj%_MvnoQ&Cc49QcT>TmvO1rrHxGti#c@?@kFn-DGLWEB)>c&pPW0{`NS*wze zR~{9*=h2eDcgrzi@@acnc4fJ`A^S-F(P^CDV@t3NsHi(#EnA_OTQAtJ0ax)v6jGe- z5V+bhykE>=bsfToiAijB{NsgQ%aJ_GFGS+QN8|5Z?{)oHn?bH#ryHZ(8In*O*b@gp zR17I~`C#4}<~nOvt$S^KI6Fm)XG>3`4%$Basvv5*HmHlMPFBKco^TkOL#mlohl|p8pL=mj|pGzxUO?w%>QEP}vOKt(+bGxz==l_Czw&0VknW z?-Z%6*VS{-zX3N(@ZH_NN1T=f#-=bM`eb zCsiH3G5jNJI+HArNb=VrUQne&NMs(*%YNqf{vO22r-WGUR)%47*mTja8zxIIgu|D% z=qLC*LP~a63*_$9rJ+`hc)9VAW{)M+ToDGUiAxd7T0&$2mCd2DRID*LR~cNjo`>qQ zNRkYiyKl;j&u{~JrzT=i=n&b3C8Y|gTHABKRh6uj zhWFBzmffm~?{>ytEadWD<5j@r`p(7h$Y7wwx{v9GettKs!NypArhO#I!dFfW|f~6}0;b>@giE*=WuY`zy@0 z_H6iy761{iIc}ynpTa!!s^Jpv^+(RcuRLk z{m>Ve8yvJB3f=eGWN_5DH(E$!0cD%Q5}ionh}&Jb-j_(?+YH&2p!3tYbcR3Sfpk6R u7rL7!5muivWAM*6r7o5{ye9%k)9F`OPq@b3mLtW6BOGI$5RP6>h`#~U=r|Vu literal 0 HcmV?d00001 diff --git a/helper/chimes/pixelcave.mid b/helper/chimes/pixelcave.mid index 56d5fb6078b17172e0084b1e234652411d9a019b..16593cee1e876a6f7645945295dbb8dffcf0b4be 100644 GIT binary patch delta 50 zcmccG%{Z%@k;gYABZYy1fsKKYfqf%SjuzwT&6Qd+7#UeM3+eDNO%Ble48*#do%N%{ E09$|!`Tzg` delta 113 zcmbQ$&3Lt&k;gYABZYy1fsKKYfqNrQjuzv&&6Qd+7#W#13+eDNu|{oTVyl>(sCR#| if}Z_m2mL593*V5UY> +#include + +#if HAS(PIXEL_CAVE) +class AppPixelCave: public Renderable { +public: + AppPixelCave(NewSequencer *); + void prepare() override; + void render(FantaManipulator*) override; + void step() override; + void cleanup() override; + +protected: + enum PixelCaveState { + PCGAME_TITLE, + PCGAME_GAME, + PCGAME_OVER + }; + + struct PxcCoord { + int16_t x; + uint16_t y; + }; + + NewSequencer * sequencer; + MelodySequence * melody; + PixelCaveState state; + + const font_definition_t * score_font; + const font_definition_t * gui_font; + uint32_t cur_score; + uint32_t hi_score; + uint8_t framecount; + + static const size_t PLAYER_TRAIL_LEN = 4; + static const int16_t PLAYER_MAX_X = 16; + PxcCoord playerPos; + int16_t player_yVel; + bool unsettled; + int crash_flash; + PxcCoord playerTrail[PLAYER_TRAIL_LEN]; + + fanta_buffer_t playfield_buf; + FantaManipulator * playfield; + bool pf_dirty; + + void leave(); + void new_game(); + void render_game(FantaManipulator*, bool); + void step_game(); + void player_crashed(); +}; +#endif \ No newline at end of file diff --git a/include/devices/mid_clock_noritake_wide.h b/include/devices/mid_clock_noritake_wide.h index a1345eb..274db4c 100644 --- a/include/devices/mid_clock_noritake_wide.h +++ b/include/devices/mid_clock_noritake_wide.h @@ -11,6 +11,7 @@ #define HAS_SERIAL_MIDI #define HAS_VARYING_BRIGHTNESS #define HAS_LIGHT_SENSOR +#define HAS_PIXEL_CAVE // Plasma Information System OS (not DOS, there's no disk in it!) #define PRODUCT_NAME "PIS-dev" diff --git a/include/sound/sequence.h b/include/sound/sequence.h index 88c4cd8..0dada9c 100644 --- a/include/sound/sequence.h +++ b/include/sound/sequence.h @@ -1,5 +1,6 @@ #pragma once #include +#include class MelodySequence { public: @@ -38,3 +39,31 @@ class StaticMelodySequence: public MelodySequence { int num_rows_; }; + +class PomfMelodySequence: public MelodySequence { +public: + PomfMelodySequence(const char * sourcePath); + ~PomfMelodySequence(); + + bool valid() { return exists; } + bool load() override; + void unload() override; + + const char * get_title() override { return title_; } + const char * get_long_title() override { return long_title_; } + const melody_item_t * get_array() override { return array_; } + int get_num_rows() override { return num_rows_; } + +protected: + bool exists = false; + bool loaded = false; + char path[64] = { 0 }; + char * title_ = nullptr; + char * long_title_ = nullptr; + melody_item_t * array_ = nullptr; + std::vector samples = {}; + int num_rows_ = 0; + + void unload_samples(); + void try_preload_metadata(); +}; diff --git a/include/sound/sequencer.h b/include/sound/sequencer.h index 52da5f0..475dfcc 100644 --- a/include/sound/sequencer.h +++ b/include/sound/sequencer.h @@ -4,7 +4,7 @@ #include #include -typedef enum sequence_playback_flags { +typedef enum sequence_playback_flags : uint8_t { SEQUENCER_PLAY_NORMALLY = 0, SEQUENCER_REPEAT_INDEFINITELY = (1 << 0), SEQUENCER_PLAY_HOOK_ONLY = (1 << 1), @@ -15,6 +15,7 @@ class NewSequencer: public WaveGenerator { static const int TONE_CHANNELS = 4; static const int EXTRA_CHANNELS = 2; static const int CHANNELS = TONE_CHANNELS + EXTRA_CHANNELS; + sequence_playback_flags_t flags; ToneGenerator * voices[CHANNELS] = { nullptr }; NewSequencer(); ~NewSequencer(); @@ -35,7 +36,6 @@ class NewSequencer: public WaveGenerator { size_t loop_point; int repetitions; bool is_running; - sequence_playback_flags_t flags; EventGroupHandle_t wait_end_group; int remaining_delay_samples; void process_steps_until_delay(); diff --git a/include/state.h b/include/state.h index 25f2898..46e2371 100644 --- a/include/state.h +++ b/include/state.h @@ -27,6 +27,9 @@ typedef enum device_state { #if HAS(PLAYGROUND) STATE_PLAYGROUND, #endif +#if HAS(PIXEL_CAVE) + STATE_PIXEL_CAVE, +#endif } device_state_t; device_state_t get_state(); diff --git a/include/utils.h b/include/utils.h index 48600d9..c02b54d 100644 --- a/include/utils.h +++ b/include/utils.h @@ -1,4 +1,5 @@ #pragma once +#include String getChipId(); void hexDump(const uint8_t* pData, uint32_t length); diff --git a/platformio.ini b/platformio.ini index 661bf6a..fb59f6c 100644 --- a/platformio.ini +++ b/platformio.ini @@ -31,6 +31,8 @@ build_flags = -Wl,-allow-multiple-definition lib_deps = ; no libraries for music builds extra_scripts = post:helper/build-all-music.py +board_build.partitions = pmaps/partitions_8M.csv +board_upload.flash_size = 8MB ; The original Orange Ticking Thing. Uses an 8MB WROVER module. [env:PLASMA] diff --git a/src/app/menu.cpp b/src/app/menu.cpp index 2fe89a9..6661aab 100644 --- a/src/app/menu.cpp +++ b/src/app/menu.cpp @@ -412,6 +412,9 @@ AppShimMenu::AppShimMenu(Beeper *b, NewSequencer *s, Yukkuri *y, AmbientLightSen main_menu->add_view(new MenuActionItemView(localized_string("Weighing"), [this](){ push_state(STATE_WEIGHING, TRANSITION_SLIDE_HORIZONTAL_LEFT); }, &weight_icns)); #endif main_menu->add_view(new MenuActionItemView(localized_string("Settings"), [this](){ push_submenu(settings_menu); }, &wrench_icns)); +#if HAS(PIXEL_CAVE) + main_menu->add_view(new MenuActionItemView("Pixel Cave", []() { push_state(STATE_PIXEL_CAVE, TRANSITION_SLIDE_HORIZONTAL_LEFT); }, &good_icns)); +#endif #if HAS(PLAYGROUND) main_menu->add_view(new MenuActionItemView("Test", []() { push_state(STATE_PLAYGROUND, TRANSITION_SLIDE_HORIZONTAL_LEFT); }, &good_icns)); #endif diff --git a/src/main.cpp b/src/main.cpp index 1ad31c2..7345db9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -268,6 +269,9 @@ void boot_task(void*) { #if HAS(HTTPFVU) appHost->add_view(new HttpFvuApp(seq), STATE_HTTPFVU); #endif +#if HAS(PIXEL_CAVE) + appHost->add_view(new AppPixelCave(seq), STATE_PIXEL_CAVE); +#endif ESP_LOGI(LOG_TAG, "Finishing up"); change_state(startup_state, TRANSITION_WIPE); From b9114a1b5a84a8c86668bb0adac411425c0cbe07 Mon Sep 17 00:00:00 2001 From: akasaka Date: Thu, 12 Dec 2024 18:58:17 +0900 Subject: [PATCH 07/13] working big_noritake; wip pixel cave --- data/music/043_pixel_cave.pomf | Bin 1767 -> 1805 bytes helper/chimes/pixelcave.mid | Bin 17818 -> 17818 bytes include/devices/big_noritake.h | 40 +- src/app/pixel_cave.cpp | 210 ++ src/input/infrared.cpp | 2 +- src/music/043_pixel_cave.cpp | 4616 ++++++++++++++++++++++++++++++++ src/sound/melodies.cpp | 283 -- src/sound/sequence.cpp | 272 ++ src/sound/sequencer.cpp | 2 +- 9 files changed, 5137 insertions(+), 288 deletions(-) create mode 100644 src/app/pixel_cave.cpp create mode 100644 src/music/043_pixel_cave.cpp create mode 100644 src/sound/sequence.cpp diff --git a/data/music/043_pixel_cave.pomf b/data/music/043_pixel_cave.pomf index 9dc6daf061d120576f4a0ecb51222d1be5e7f9b7..e567ba6b0a70fd37996d84c30b87b518b857f36e 100644 GIT binary patch delta 1696 zcmV;R24DH-4UGnScyPh=UJ%-wXGB51*r){RDY}JVG9Ut!lceyS8Sgdv_dLN=M45X1f0C ztD3Si%Gx%}|LoyqXa4uri}OppiH}C}%lZTlPMDf9HDl`Bcz-5*XH4x~k-m#W%~z#w z=y-?LH*~yN`Vfwz$7^%yAJ%+~&+u-2hb4&bA@j`)zH>vL#V7iXnD5Ns6aW5A^p7GR z(7%`0)BHP1^zT0Fv+Q0lpTv7^@XeS{;+PtI`TmLBZvS3L^zUAxe+7R9e{d!EYpTt~ zU{(cT1F)#HAb+tSk!>ixg2Z(H3KB0HiHARIEe4Z=M5jP8=TtiIU^qAiO8YTs<{-h{ z7@cM!REkq^5aZO;oC8)fz*P|&DD8)Bz}%1BfVlv;02o>VEC4P5E&wh7E&z_z7XW7h zc&yaNC?10$mJQ``8=hO$w}P77HRAxbF)+NxofvNoL4PMUMmveMLSD-{RJ#~757JSFmb1J2h-jzme|yb<@Jn|XGy@R#<9d0YgXfQ z2h-X@X2#DAF%?#-wZyl^fGtE3Ezw7ojn3CeehVdMO*NBMql9L%to1jOlGs>7vb=lB zy9X9~CVzEYui7|0l_~F@)c{xCJp;8+dH2Ae@1AueRgEV2Oe!;B*@?Fi@bOe`o@|CJ zB-_La0x@}i(5)nvjhkXKu$wV;zf<*AtYea#nQS4uSHUcpQjZVp` zZs=?Xi_FtjY^aoEmq%5m+YOx@>MijF2@@~mq<>hm^qs}G*-!~4SBw|spP9*ifapAP z2n|42Ub;b}@*>4k%+uI7Cr2AkZKg6+G)l@;iR_lC(lb>wUXW-+%PRBblvRyb79h%j zVo8`e2Q0CVS5;(nYRw_VA`>Y-*g%Q`tk9vXWG^|Os)uon2ANV7uB(?asw&*-m(9!d zn15F;Ie3>kw5UdwLxPeZLyrySOPgWUeWMs-r4Sya=*k~gOQtfLBDHUd!W^c?d^%hbO@Brhe zw^{RdczYA6U8G*|5~MVUlC->rr{mZ-dR52qm&B$CHE){<~#dRn&9yxFdySGLlH z)Wyq0*-9aA!j-Mm29m~5*-G;!SAX|bs#m6$P~SVOxq@hS6x7k)H1d>Qc5ZnIw<8gS z7y1`Pry2Jlw{Fqt9k!u{C7tqmS--^+Z~JG2Fj^pk3LfIK_nC#3V_XM=f|8aGnYzc+ zM@;Q9^|7biR{9A<{(b5V)t|A%=WHC4Q-1*-0>p=YxGfj!QA=-;?3dtEynn}97(*_= z2h4W^d_*H}O@oG%?z8%@nEINjZH{#=LuFZi+X0ppFVq& zP6ix*r-KtO>o7!=z>IFy{9~312?-|X1-dOF{Fpn;dE>Xo|^F(B3GY+k)zUU1#Hsc#v3Hr|OhtN1i!&ORCeh q!UqxuEU}MQ{VVt@_=A679% zu$r0|Lu}x|aIo#jT8!O*xf{S8?iK(S07Jsv7YD!_>-aDu#RbI$#mu*AD9*`l0dN5@ z^Q|O+$4WgqJ_bW<2`GuGm zBZgXoiMvPVfc#6t=Rup8Wli;w5}QIx{swL#ifDm8vTP(@C;eNfV;uIXQARUa*1DUi zymsaqr+>V5=G&#bcFJo9T7rqYN9UltcFJo9=E4djZs0Xt6cJNRB5vTNd9oF;!DP);pjPeaRjSo-LCI23(K`9(au?NKd%l*$BiKB|0U`x?v7gk%*OA z5Y50w`-qGylXk;wEAa&h6EEbXSW6GL#h?-lt$!FV%0Dxc-2l;f<`5cyR9@1cQF)Q# zDdu~zaZZjlp4&`is%VsysS?>OQ>A07XuKfNh?ZsM%Q34Ou`EE81I3ata}HVJ0I#aZ z>eQM;ibW<;e6WEO1z4d&y^_7)fT|wGH5z0}Rk*mG$*8Ju$zL=tt1+)!a_}y9Xi<$U zhkpbmL55BZ<};gN)lH)wXEDfJ;qh+3X;wYzi>9F$C6_;uK;u$XwK4@c0GP{x6N?9# zsJE~d7!nUoAeC%Jom!|I>R457Iu{*U=-=Q&i*mK>&@$VPGW1_xtgYVUN}|b}Tnr?Q zA;wFPp+^RDnOx6sr3McrY_yRDsrEI6lz$4dOtZIUmwFqiJ9vO`)H|&C2fV$6)E-i= zc?nV)L`hoSz|(PT9KEWqur+j{zUuV_5T%1_e82^85s~rho-f$-@Dh0NK6vT_W=2oz z3VgNbv<4sBM{M#jE0wVJm|2vfnEq=isk+8|Z?jUtq{`J5W`5H%yZq6!*F6sU*|mFa2OO8d=r4ZX6J&ZRD1CdyU{{U%)5 zN^Kx%43(|4-{eYfrFvz01@*nhntv;Zc1J-S?M)+3>1F4#mvB20QFvLu$eM8`(k6L<*WWNTV;(gY_7;*vLVZKf95r2)mH4Pe4 zdcf+xVd`6^zGLcpLn#G~4h5_Dk1WwJb;#5&O#SL9SEyUi;@@v9F=6U=@Cl=F6T`<< z^$&>hLSmR4m%l%e5Adxf0M(+ixTo1r3S$EMg4k5RDU(BPqC<9qSAj5 z8K@Uf3xl*DKWADbQ`QUzDYw z{j!@KYAI-r$x_hHC|}xw>VI8l4GsOB!Dgw|eCy4q4&=ugXa>saQ@R brGOpM2l#V@m;V7}Zwh80MQ=tRMNdW`aR@SW diff --git a/helper/chimes/pixelcave.mid b/helper/chimes/pixelcave.mid index 16593cee1e876a6f7645945295dbb8dffcf0b4be..778c12fb3d54c979243481eed3a9adbf0e2e521c 100644 GIT binary patch delta 69 zcmbQ$%{Z%@ae}PaEr$PWEFS*;-u*xZJBZ=x=Q3}jvAGgcKhx%1jsJ|B-)J;Ih{bO- S7&m8YFflQ*ZO+rukp=)!2^XjU delta 69 zcmbQ$%{Z%@ae}PaT895@EFS*;-u*xZJBZ=x=W=?ZvAGgcU;XA>jsJ|B-)J;Ih{bO- S7&m8YFflQ5ZqC!vkp=)<=@=&f diff --git a/include/devices/big_noritake.h b/include/devices/big_noritake.h index c906957..b9c71a5 100644 --- a/include/devices/big_noritake.h +++ b/include/devices/big_noritake.h @@ -9,10 +9,12 @@ #define HAS_VARYING_BRIGHTNESS #define HAS_MOTION_SENSOR #define HAS_IR_RECEIVER +#define HAS_PIXEL_CAVE +#define HAS_OTAFVU // Plasma Information System OS (not DOS, there's no disk in it!) #define PRODUCT_NAME "LongPIS-OS" -#define PRODUCT_VERSION "5.3" +#define PRODUCT_VERSION "5.5" // ---- Connection to beeper ---- const gpio_num_t HWCONF_BEEPER_GPIO = GPIO_NUM_33; @@ -37,7 +39,8 @@ const gpio_num_t HWCONF_GU312_DATABUS_GPIOS[] = { const gpio_num_t HWCONF_GU312_CD_GPIO = GPIO_NUM_19; const gpio_num_t HWCONF_GU312_WR_GPIO = GPIO_NUM_18; const gpio_num_t HWCONF_GU312_BLANKING_GPIO = GPIO_NUM_12; -const gpio_num_t HWCONF_GU312_FEP_GPIO = GPIO_NUM_13; //<- optional, can be GPIO_NUM_NC +// Disable Vsync for the sake of smoothness, may change later +const gpio_num_t HWCONF_GU312_FEP_GPIO = GPIO_NUM_NC;//GPIO_NUM_13; //<- optional, can be GPIO_NUM_NC #define HWCONF_DISPLAY_WIDTH_PX 192 #define HWCONF_DISPLAY_HEIGHT_PX 16 @@ -62,10 +65,41 @@ const infrared_definition_t HWCONF_IR_BUTTONS = { { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0xf8, .value = 0x8f71fe0, .key = KEY_SOFT_F1}, // A { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x78, .value = 0x8f71ee1, .key = KEY_SOFT_F2}, // B { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x58, .value = 0x8f71ae5, .key = KEY_SOFT_F3}, // C - // Top-left: TYPE=3, VALUE=0x8f78d72, ADDRESS=0x10, COMMAND=0xb1 // Top-right: TYPE=3, VALUE=0x8f7847b, ADDRESS=0x10, COMMAND=0x21 // Bottom-left: TYPE=3, VALUE=0x8f78877, ADDRESS=0x10, COMMAND=0x11 // Bottom-right: TYPE=3, VALUE=0x8f7817e, ADDRESS=0x10, COMMAND=0x81 // Power: TYPE=3, VALUE=0x8f71be4, ADDRESS=0x10, COMMAND=0xd8 + + /** + * ProSpec DVE (Digital Video Editor) + */ + { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa0, .value = 0x0, .key = KEY_UP }, + { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa2, .value = 0x0, .key = KEY_DOWN }, + { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa5, .value = 0x0, .key = KEY_LEFT }, + { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa4, .value = 0x0, .key = KEY_RIGHT }, + { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa1, .value = 0x0, .key = KEY_HEADPAT }, // input sw + { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa7, .value = 0x0, .key = KEY_SOFT_F1 }, // pwr + { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa6, .value = 0x0, .key = KEY_SOFT_F3 }, // frame + { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa3, .value = 0x0, .key = KEY_SOFT_F2 }, // back + + + /** + * UNKNOWN "LCD remote" + */ + { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x1b, .value = 0x0, .key = KEY_UP }, + { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x1a, .value = 0x0, .key = KEY_DOWN }, + { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x4, .value = 0x0, .key = KEY_LEFT }, + { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x6, .value = 0x0, .key = KEY_RIGHT }, + { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x5, .value = 0x0, .key = KEY_HEADPAT }, + { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x6, .value = 0x0, .key = KEY_SOFT_F2 }, // pwr + + /** + * UNKNOWN "Audio Switch" SPDIF/TOSLINK 4X1 REMOTE CONTROL + */ + { .protocol = IRPROTO_NEC, .address = 0x0, .command = 0x15, .value = 0x0, .key = KEY_UP }, + { .protocol = IRPROTO_NEC, .address = 0x0, .command = 0x18, .value = 0x0, .key = KEY_DOWN }, + { .protocol = IRPROTO_NEC, .address = 0x0, .command = 0x16, .value = 0x0, .key = KEY_LEFT }, + { .protocol = IRPROTO_NEC, .address = 0x0, .command = 0xd, .value = 0x0, .key = KEY_RIGHT }, + { .protocol = IRPROTO_NEC, .address = 0x0, .command = 0x45, .value = 0x0, .key = KEY_HEADPAT }, }; \ No newline at end of file diff --git a/src/app/pixel_cave.cpp b/src/app/pixel_cave.cpp new file mode 100644 index 0000000..b6caad0 --- /dev/null +++ b/src/app/pixel_cave.cpp @@ -0,0 +1,210 @@ +#include +#include +#include +#include + +#if HAS(PIXEL_CAVE) + +const char LOG_TAG[] = "CAVE"; +const char MELODY_FNAME[] = (FS_MOUNTPOINT "/music/043_pixel_cave.pomf"); +const prefs_key_t HISCORE_PREFS_KEY = "PCAVE_hiscore"; + +AppPixelCave::AppPixelCave(NewSequencer *s) { + sequencer = s; + state = PCGAME_TITLE; + cur_score = 0; + melody = nullptr; + playfield_buf = nullptr; + playfield = nullptr; + unsettled = false; + player_yVel = 0; + score_font = find_font(FONT_STYLE_HUD_DIGITS); + gui_font = find_font(FONT_STYLE_UI_TEXT); +} + +void AppPixelCave::prepare() { + Renderable::prepare(); + hi_score = prefs_get_int(HISCORE_PREFS_KEY); + state = PCGAME_TITLE; + + if(melody == nullptr) { + melody = new PomfMelodySequence(MELODY_FNAME); + } + + if(melody != nullptr) { + sequencer->play_sequence(melody,SEQUENCER_REPEAT_INDEFINITELY); + // Make it go all the way till the hook and loop the hook until the game is started + sequencer->flags = (sequence_playback_flags_t) ((int)sequencer->flags | (int)SEQUENCER_PLAY_HOOK_ONLY); + } +} + +void AppPixelCave::render(FantaManipulator* fb) { + Renderable::render(fb); + + if(playfield_buf == nullptr) { + size_t pf_size = fb->get_width() * fb->get_height() / 8; + playfield_buf = (fanta_buffer_t) malloc(pf_size); + playfield = new FantaManipulator(playfield_buf, pf_size, fb->get_width(), fb->get_height(), NULL, &pf_dirty); + ESP_LOGI(LOG_TAG, "Playfield W=%i H=%i", playfield->get_width(), playfield->get_height()); + playfield->clear(); + } + + framecount = (framecount + 1) % 101; + + switch(state) { + case PCGAME_TITLE: + { + static const char ttl_txt[] = "Pixel Cave"; + static int ttl_width = measure_string_width(gui_font, ttl_txt, TEXT_OUTLINED | TEXT_NO_BACKGROUND); + int ofs = ((int)(framecount/2)) - 50; + fb->clear(); + fb->put_string(gui_font, ttl_txt, fb->get_width()/2 - ttl_width/2 + ofs, 0, TEXT_OUTLINED | TEXT_NO_BACKGROUND); + + // TODO: show hi score + } + break; + + case PCGAME_OVER: + { + // TODO GUI + if(crash_flash < 2) { + render_game(fb, false); + if(crash_flash == 0) + fb->invert(); + crash_flash ++; + } + + static const char over_txt[] = "GAME OVER"; + static int over_width = measure_string_width(gui_font, over_txt, TEXT_OUTLINED | TEXT_NO_BACKGROUND); + fb->put_string(gui_font, over_txt, fb->get_width()/2 - over_width/2, 0, TEXT_OUTLINED | TEXT_NO_BACKGROUND); + + // TODO: show score and hi score + } + break; + + case PCGAME_GAME: + render_game(fb, true); + break; + } +} + +void AppPixelCave::render_game(FantaManipulator* fb, bool show_score) { + fb->clear(); + fb->put_fanta(playfield->get_fanta(), 0, 0, playfield->get_width(), playfield->get_height()); + + fb->plot_pixel(playerPos.x, playerPos.y, true); + + uint8_t divisor = 2; + for(int i = 0; i < PLAYER_TRAIL_LEN; i++) { + if(framecount % divisor == 0) { + fb->plot_pixel(playerTrail[i].x, playerTrail[i].y, true); + } + divisor++; + } + + static char score_buf[8] = { 0 }; + if(show_score) { + snprintf(score_buf, 8, "%04d", cur_score); + int score_width = measure_string_width(score_font, score_buf, TEXT_OUTLINED | TEXT_NO_BACKGROUND); + fb->put_string(score_font, score_buf, fb->get_width() - score_width, fb->get_height() - score_font->height - 1, TEXT_OUTLINED | TEXT_NO_BACKGROUND); + } +} + +void AppPixelCave::step() { + Renderable::step(); + + switch(state) { + case PCGAME_TITLE: + case PCGAME_OVER: + if (hid_test_key_state(KEY_LEFT) == KEYSTATE_HIT) { + leave(); + return; + } + else if(hid_test_key_any() == KEYSTATE_HIT) { + new_game(); + return; + } + break; + + case PCGAME_GAME: + step_game(); + break; + } +} + +void AppPixelCave::step_game() { + for(int i = PLAYER_TRAIL_LEN - 1; i > 0; i--) { + playerTrail[i] = playerTrail[i - 1]; + playerTrail[i].x--; + } + playerTrail[0].x = playerPos.x - 1; + playerTrail[0].y = playerPos.y; + + if(playerPos.x < PLAYER_MAX_X) { + playerPos.x++; + } + + if(unsettled) { + if(framecount % 5 == 0) + playerPos.y += player_yVel; + if(playerPos.y >= playfield->get_height() || playerPos.y <= 0) { + player_crashed(); + } + } + + // TODO: variable speed + if(framecount % 5 == 0) { + playfield->scroll(1, 0); + playfield->line(0, 0, 0, 3); + playfield->line(0, playfield->get_height(), 0, playfield->get_height() - 3); + // TODO: render walls + if(unsettled) { + cur_score ++; + } + } + + // TODO: collision check with walls + + if(hid_test_key_any()) { + if(framecount % 8 == 0) { + unsettled = true; + player_yVel = std::max(player_yVel - 1, -4); + } + } else if(unsettled) { + if(framecount % 8 == 0) { + player_yVel = std::min(player_yVel + 1, 4); + } + } +} + +void AppPixelCave::player_crashed() { + state = PCGAME_OVER; + if(cur_score > hi_score) { + hi_score = cur_score; + prefs_set_int(HISCORE_PREFS_KEY, hi_score); + } +} + +void AppPixelCave::leave() { + pop_state(STATE_PIXEL_CAVE); +} + +void AppPixelCave::new_game() { + sequencer->flags = (sequence_playback_flags_t) ((int)sequencer->flags & (int)~SEQUENCER_PLAY_HOOK_ONLY); + state = PCGAME_GAME; + playerPos = { 0, 8 }; + for(int i = 0; i < PLAYER_TRAIL_LEN; i++) playerTrail[i] = { 0, 8 }; + playfield->clear(); + framecount = 0; + unsettled = false; + player_yVel = 0; + cur_score = 0; + crash_flash = 0; +} + +void AppPixelCave::cleanup() { + Renderable::cleanup(); + sequencer->stop_sequence(); +} + +#endif \ No newline at end of file diff --git a/src/input/infrared.cpp b/src/input/infrared.cpp index 48d7717..9cec7a7 100644 --- a/src/input/infrared.cpp +++ b/src/input/infrared.cpp @@ -50,7 +50,7 @@ static void ir_task(void*) { } } if(!found) { - ESP_LOGI(LOG_TAG, "IR code TYPE=%i, VALUE=0x%x, ADDRESS=0x%x, COMMAND=0x%x", results.decode_type, results.value, results.address, results.command); + ESP_LOGI(LOG_TAG, "IR code { .protocol = %i, .address = 0x%x, .command = 0x%x, .value = 0x%x, .key = ? }", results.decode_type, results.address, results.command, results.value); } } diff --git a/src/music/043_pixel_cave.cpp b/src/music/043_pixel_cave.cpp new file mode 100644 index 0000000..f148f49 --- /dev/null +++ b/src/music/043_pixel_cave.cpp @@ -0,0 +1,4616 @@ +#include +extern "C" const POMFHeader POMF_HEAD = { + POMF_MAGIC_FILE, + POMF_CURVER, + "Pixel Cave", + "NightRadio - Pixel Cave", +}; + +extern "C" const melody_item_t POMF_TUNE[] = { + {DUTY_SET, 0, 10}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 0, 24}, + {DUTY_SET, 1, 8}, + {DUTY_SET, 2, 6}, + {DUTY_SET, 3, 16}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 196}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 523}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 587}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 261}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 293}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 196}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 523}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 587}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 261}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 293}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 196}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 523}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 587}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 261}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 293}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 4, 1568}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 196}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 523}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 587}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 261}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 293}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 196}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 523}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 587}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 261}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 293}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 196}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 523}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 587}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 261}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 293}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 196}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 523}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 587}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 261}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 293}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 196}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 523}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 587}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 261}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 293}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 174}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 196}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 174}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 523}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 587}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 261}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 293}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 196}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 523}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 587}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 261}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 293}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + /* HOOK */ + {LOOP_POINT_SET, 0, LOOP_POINT_TYPE_HOOK_START}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 174}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 196}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 174}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 523}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 587}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 261}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 293}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 196}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 523}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 587}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 261}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 293}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + /* HOOKEND */ + {LOOP_POINT_SET, 0, LOOP_POINT_TYPE_HOOK_END}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 174}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 174}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 174}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 174}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 104}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 104}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 68}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 52}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 68}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 52}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 68}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 52}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 68}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 52}, + /* LOOP */ + {LOOP_POINT_SET, 0, LOOP_POINT_TYPE_LOOP}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 2, 392}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 174}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 2, 440}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 174}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 2, 440}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 2, 392}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 2, 698}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 2, 392}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 2, 392}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 392}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 2, 392}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 174}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 3, 174}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 2, 622}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 2, 698}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 2, 392}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 2, 784}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 68}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 52}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 5, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 7}, + {DELAY, 0, 100}, + {FREQ_SET, 0, 174}, + {DUTY_SET, 2, 10}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 60}, + {DUTY_SET, 2, 12}, + {DELAY, 0, 40}, + {DUTY_SET, 2, 13}, + {DELAY, 0, 20}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 15}, + {DELAY, 0, 48}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 52}, + {FREQ_SET, 0, 131}, + {DUTY_SET, 2, 19}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 80}, + {DUTY_SET, 2, 22}, + {DELAY, 0, 40}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 80}, + {DUTY_SET, 2, 23}, + {DELAY, 0, 40}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 40}, + {DUTY_SET, 2, 24}, + {DELAY, 0, 80}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 29}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 30}, + {DELAY, 0, 80}, + {FREQ_SET, 0, 147}, + {DUTY_SET, 2, 32}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 33}, + {DELAY, 0, 60}, + {DUTY_SET, 2, 34}, + {DELAY, 0, 40}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 40}, + {DUTY_SET, 2, 33}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 30}, + {DELAY, 0, 60}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 60}, + {DUTY_SET, 2, 23}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 21}, + {DELAY, 0, 40}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 19}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 18}, + {DELAY, 0, 40}, + {DUTY_SET, 2, 15}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 14}, + {DELAY, 0, 20}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 12}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 10}, + {DELAY, 0, 40}, + {DUTY_SET, 2, 7}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 6}, + {DELAY, 0, 20}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 2, 698}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 2, 392}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 174}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 2, 698}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 2, 440}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 174}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 2, 98}, + {DUTY_SET, 2, 4}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 196}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 2, 49}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 2, 392}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 2, 349}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 2, 98}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 2, 196}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 2, 440}, + {DUTY_SET, 2, 6}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 2, 392}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 2, 698}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 2, 392}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 2, 392}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 392}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 2, 392}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 174}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 3, 174}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 2, 622}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 2, 698}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 2, 587}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 523}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 2, 392}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 2, 784}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 40}, + {DUTY_SET, 2, 9}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 32}, + {DUTY_SET, 2, 13}, + {DELAY, 0, 20}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 60}, + {DUTY_SET, 2, 16}, + {DELAY, 0, 60}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 17}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 18}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 20}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {DUTY_SET, 2, 21}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 22}, + {DELAY, 0, 20}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 23}, + {DELAY, 0, 40}, + {DUTY_SET, 2, 26}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 27}, + {DELAY, 0, 40}, + {FREQ_SET, 0, 196}, + {DUTY_SET, 2, 29}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 80}, + {DUTY_SET, 2, 31}, + {DELAY, 0, 40}, + {FREQ_SET, 0, 174}, + {DUTY_SET, 2, 33}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 35}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 37}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 38}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 40}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 41}, + {DELAY, 0, 20}, + {FREQ_SET, 0, 147}, + {DUTY_SET, 2, 43}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 44}, + {DELAY, 0, 40}, + {DUTY_SET, 2, 45}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 46}, + {DELAY, 0, 40}, + {FREQ_SET, 0, 131}, + {DUTY_SET, 2, 47}, + {FREQ_SET, 3, 196}, + {DELAY, 0, 40}, + {DUTY_SET, 2, 48}, + {DELAY, 0, 80}, + {FREQ_SET, 0, 49}, + {DUTY_SET, 2, 49}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 50}, + {DELAY, 0, 60}, + {DUTY_SET, 2, 49}, + {DELAY, 0, 40}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 100}, + {DUTY_SET, 2, 50}, + {DELAY, 0, 4}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 52}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 54}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 55}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 57}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 58}, + {DELAY, 0, 4}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 0, 147}, + {DUTY_SET, 2, 60}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 63}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 64}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 68}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 85}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 88}, + {DELAY, 0, 20}, + {FREQ_SET, 0, 196}, + {DUTY_SET, 2, 89}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 91}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 93}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 96}, + {DELAY, 0, 40}, + {DUTY_SET, 2, 98}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 174}, + {DUTY_SET, 2, 99}, + {FREQ_SET, 3, 196}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 100}, + {DELAY, 0, 60}, + {DUTY_SET, 2, 101}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 147}, + {DUTY_SET, 2, 102}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 80}, + {DUTY_SET, 2, 104}, + {DELAY, 0, 28}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 105}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 106}, + {DELAY, 0, 20}, + {DUTY_SET, 2, 107}, + {DELAY, 0, 40}, + {DUTY_SET, 2, 107}, + {DELAY, 0, 8}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 12}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 2, 0}, + {DUTY_SET, 2, 6}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 196}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 523}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 587}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 261}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 293}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 196}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 523}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 587}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 261}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 293}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 196}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 523}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 587}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 261}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 293}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 440}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 196}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 523}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 587}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 466}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 349}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 392}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 261}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 8}, + {FREQ_SET, 1, 293}, + {DELAY, 0, 112}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 96}, + {FREQ_SET, 1, 0}, + {DELAY, 0, 24}, + {FREQ_SET, 0, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 360}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 120}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 480}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 240}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 360}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 120}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 480}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 240}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 240}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 360}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 120}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 480}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 240}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 360}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 120}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 360}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 120}, + {FREQ_SET, 4, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 240}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 0, 24}, + {FREQ_SET, 4, 0}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 116}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 131}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 49}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 98}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 104}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 104}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 16}, + {FREQ_SET, 0, 147}, + {DELAY, 0, 120}, + {FREQ_SET, 0, 196}, + {FREQ_SET, 2, 466}, + {FREQ_SET, 3, 392}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 68}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 52}, + {FREQ_SET, 0, 174}, + {FREQ_SET, 2, 0}, + {FREQ_SET, 3, 0}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 68}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 52}, + {FREQ_SET, 0, 147}, + {FREQ_SET, 4, 1760}, + {FREQ_SET, 5, 1864}, + {DELAY, 0, 68}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 52}, + {FREQ_SET, 0, 131}, + {FREQ_SET, 4, 1760}, + {DELAY, 0, 68}, + {FREQ_SET, 4, 0}, + {DELAY, 0, 52}, + {FREQ_SET, 0, 0}, + {FREQ_SET, 5, 0}, +}; + diff --git a/src/sound/melodies.cpp b/src/sound/melodies.cpp index 10aee4e..0ccf480 100644 --- a/src/sound/melodies.cpp +++ b/src/sound/melodies.cpp @@ -2,7 +2,6 @@ #include #include #include -#include #include #include #include @@ -74,288 +73,6 @@ MelodySequence * melody_from_no(int melody_no) { return all_chime_list[melody_no]; } - -class PomfMelodySequence: public MelodySequence { -public: - PomfMelodySequence(const char * sourcePath) { - strncpy(path, sourcePath, 63); - try_preload_metadata(); - } - - ~PomfMelodySequence() { - unload(); - if(title_ != nullptr) { - free(title_); title_ = nullptr; - } - if(array_ != nullptr) { - free(array_); array_ = nullptr; - } - } - - bool valid() { return exists; } - bool load() override { - if(array_ != nullptr) { - free(array_); - array_ = nullptr; - } - unload_samples(); - - num_rows_ = 0; - - ESP_LOGI(TAG, "Load %s", path); - FILE * f = nullptr; - POMFHeader head = { 0 }; - POMFChunkHeader chunk = { 0 }; - rle_sample_t * cur_samp = nullptr; - size_t r = 0; - size_t total = 0; - bool reading = true; - - f = fopen(path, "rb"); - if(!f) { - ESP_LOGE(TAG, "File open error: %s (%i, %s)", path, errno, strerror(errno)); - goto bail; - } - - fseek(f, 0, SEEK_SET); - r = fread(&head, 1, sizeof(POMFHeader), f); //<- opposite order of size and count isn't working, esp stdlib buggy? - if(r != sizeof(POMFHeader)) { - ESP_LOGE(TAG, "Header read error, wanted %i bytes, got %i", sizeof(POMFHeader), r); - goto bail; - } - - if(head.magic != POMF_MAGIC_FILE) { - ESP_LOGE(TAG, "MAGIC not match, expected 0x%x, got 0x%x", POMF_MAGIC_FILE, head.magic); - goto bail; - } - - if(head.version != POMF_CURVER) { - ESP_LOGE(TAG, "Version not match, expected 0x%x, got 0x%x", POMF_CURVER, head.version); - goto bail; - } - - exists = true; - - do { - total = 0; - while(total < sizeof(POMFChunkHeader) && r > 0) { - r = fread(((void*)&chunk) + total, 1, sizeof(POMFChunkHeader) - total, f); - total += r; - } - if(total != sizeof(POMFChunkHeader)) { - ESP_LOGE(TAG, "ChunkHead read error, wanted %i bytes, got %i", sizeof(POMFChunkHeader), r); - goto bail; - } - - switch(chunk.magic) { - case POMF_MAGIC_SAMPLE: - case POMF_MAGIC_SAMPLE_COMPRESSED: - cur_samp = (rle_sample_t*) malloc(sizeof(rle_sample_t)); - if(cur_samp == nullptr) { - ESP_LOGE(TAG, "OOM allocating sample header"); - reading = false; - goto bail; - } else { - cur_samp = (rle_sample_t*) malloc(chunk.size); - if(cur_samp == nullptr) { - ESP_LOGE(TAG, "OOM allocating sample (wanted %i bytes)", chunk.size); - reading = false; - goto bail; - } - total = 0; - while(total < chunk.size && r > 0) { - r = fread(((void*)cur_samp) + total, 1, chunk.size - total, f); - total += r; - } - if(total != chunk.size) { - ESP_LOGE(TAG, "saMP expected %i bytes, got %i", chunk.size, total); - reading = false; - goto bail; - } else { - ESP_LOGV(TAG, "saMP read %i bytes", total); - if(chunk.magic == POMF_MAGIC_SAMPLE_COMPRESSED) { - cur_samp = (rle_sample_t*) decompress_emplace(cur_samp, chunk.size, chunk.realsize); - if(cur_samp == nullptr) { - reading = false; - goto bail; - } - ESP_LOGV(TAG, "saZZ decompressed to %i bytes", chunk.realsize); - } - // Fix the data pointer to point after the header - cur_samp->rle_data = (const uint8_t *) &cur_samp[1]; - ESP_LOGI(TAG, "saMP @ 0x%x: SR=%i, root=%i, len=%i, mode=%i, data=0x%x", cur_samp, cur_samp->sample_rate, cur_samp->root_frequency, cur_samp->length, cur_samp->mode, cur_samp->rle_data); - samples.push_back(cur_samp); - cur_samp = nullptr; - } - } - break; - case POMF_MAGIC_TRACK: - case POMF_MAGIC_TRACK_COMPRESSED: - if(array_ != nullptr) { - ESP_LOGE(TAG, "Multiple tuNE chunks, wtf!!"); - reading = false; - goto bail; - } else { - array_ = (melody_item_t*) malloc(chunk.size); - if(array_ == nullptr) { - ESP_LOGE(TAG, "OOM allocating track"); - reading = false; - goto bail; - } - total = 0; - while(total < chunk.size && r > 0) { - r = fread(((void*)array_) + total, 1, chunk.size - total, f); - total += r; - } - if(total != chunk.size) { - ESP_LOGE(TAG, "tuNE expected %i bytes, got %i", chunk.size, total); - reading = false; - goto bail; - } else { - if(chunk.magic == POMF_MAGIC_TRACK_COMPRESSED) { - array_ = (melody_item_t*) decompress_emplace((void*) array_, chunk.size, chunk.realsize); - if(array_ == nullptr) { - reading = false; - goto bail; - } else { - total = chunk.realsize; - ESP_LOGV(TAG, "tuZZ decompressed to %i bytes", chunk.realsize); - } - } - num_rows_ = total / sizeof(melody_item_t); - ESP_LOGV(TAG, "tuNE read %i rows in %i bytes", num_rows_, total); - for(int i = 0; i < num_rows_; i++) { - // Fix up sample pointers - if(array_[i].command == SAMPLE_LOAD) { - int sample_num = array_[i].argument; - if(sample_num >= samples.size()) { - ESP_LOGE(TAG, "Sample number %i out of bounds! (have %i)", sample_num, samples.size()); - reading = false; - goto bail; - } else { - array_[i].argument = (int) samples[sample_num]; - } - } - } - } - } - break; - case POMF_MAGIC_END: - if(array_ != nullptr) { - ESP_LOGV(TAG, "Found EOF, success"); - } else { - ESP_LOGE(TAG, "File without tuNE!!"); - } - reading = false; - break; - default: - ESP_LOGE(TAG, "Unknown chunk type %x abort!!", chunk.magic); - reading = false; - goto bail; - break; - } - } while(reading); - - loaded = true; - fclose(f); - return true; - - bail: - exists = false; - if(f != nullptr) fclose(f); - if(array_ != nullptr) free(array_); - array_ = nullptr; - if(cur_samp != nullptr) free(cur_samp); - unload_samples(); - num_rows_ = 0; - return false; - } - void unload() override { - ESP_LOGI(TAG, "Unload %s", path); - if(array_ != nullptr) { - free(array_); array_ = nullptr; - } - num_rows_ = 0; - loaded = false; - unload_samples(); - } - const char * get_title() override { return title_; } - const char * get_long_title() override { return long_title_; } - const melody_item_t * get_array() override { return array_; } - int get_num_rows() override { return num_rows_; } - -protected: - static constexpr const char * TAG = "POMF"; - bool exists = false; - bool loaded = false; - char path[64] = { 0 }; - char * title_ = nullptr; - char * long_title_ = nullptr; - melody_item_t * array_ = nullptr; - std::vector samples = {}; - int num_rows_ = 0; - - void unload_samples() { - for(auto i: samples) { - free(i); - } - samples.clear(); - } - - void try_preload_metadata() { - if(title_ != nullptr) { - free(title_); - title_ = nullptr; - } - - if(long_title_ != nullptr) { - free(long_title_); - long_title_ = nullptr; - } - ESP_LOGV(TAG, "Prefetch %s", path); - FILE * f = nullptr; - POMFHeader head = { 0 }; - size_t r = 0; - - f = fopen(path, "rb"); - if(!f) { - ESP_LOGE(TAG, "File open error: %s (%i, %s)", path, errno, strerror(errno)); - goto bail; - } - - fseek(f, 0, SEEK_SET); - r = fread(&head, 1, sizeof(POMFHeader), f); //<- opposite order of size and count isn't working, esp stdlib buggy? - if(r != sizeof(POMFHeader)) { - ESP_LOGE(TAG, "Header read error, wanted %i bytes, got %i", sizeof(POMFHeader), r); - goto bail; - } - - if(head.magic != POMF_MAGIC_FILE) { - ESP_LOGE(TAG, "MAGIC not match, expected 0x%x, got 0x%x", POMF_MAGIC_FILE, head.magic); - goto bail; - } - - if(head.version != POMF_CURVER) { - ESP_LOGE(TAG, "Version not match, expected 0x%x, got 0x%x", POMF_CURVER, head.version); - goto bail; - } - - title_ = (char*) malloc(strlen(head.short_title)); - strcpy(title_, head.short_title); - long_title_ = (char*) malloc(strlen(head.long_title)); - strcpy(long_title_, head.long_title); - - exists = true; - - fclose(f); - return; - - bail: - exists = false; - if(f != nullptr) fclose(f); - } -}; - class RandomMelodySequence: public MelodySequence { public: RandomMelodySequence(const std::vector & list, size_t offs): diff --git a/src/sound/sequence.cpp b/src/sound/sequence.cpp new file mode 100644 index 0000000..90d8da3 --- /dev/null +++ b/src/sound/sequence.cpp @@ -0,0 +1,272 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +static constexpr const char TAG[] = "POMF"; + +PomfMelodySequence::PomfMelodySequence(const char * sourcePath) { + strncpy(path, sourcePath, 63); + try_preload_metadata(); +} + +PomfMelodySequence::~PomfMelodySequence() { + unload(); + if(title_ != nullptr) { + free(title_); title_ = nullptr; + } + if(array_ != nullptr) { + free(array_); array_ = nullptr; + } +} + +bool PomfMelodySequence::load() { + if(array_ != nullptr) { + free(array_); + array_ = nullptr; + } + unload_samples(); + + num_rows_ = 0; + + ESP_LOGI(TAG, "Load %s", path); + FILE * f = nullptr; + POMFHeader head = { 0 }; + POMFChunkHeader chunk = { 0 }; + rle_sample_t * cur_samp = nullptr; + size_t r = 0; + size_t total = 0; + bool reading = true; + + f = fopen(path, "rb"); + if(!f) { + ESP_LOGE(TAG, "File open error: %s (%i, %s)", path, errno, strerror(errno)); + goto bail; + } + + fseek(f, 0, SEEK_SET); + r = fread(&head, 1, sizeof(POMFHeader), f); //<- opposite order of size and count isn't working, esp stdlib buggy? + if(r != sizeof(POMFHeader)) { + ESP_LOGE(TAG, "Header read error, wanted %i bytes, got %i", sizeof(POMFHeader), r); + goto bail; + } + + if(head.magic != POMF_MAGIC_FILE) { + ESP_LOGE(TAG, "MAGIC not match, expected 0x%x, got 0x%x", POMF_MAGIC_FILE, head.magic); + goto bail; + } + + if(head.version != POMF_CURVER) { + ESP_LOGE(TAG, "Version not match, expected 0x%x, got 0x%x", POMF_CURVER, head.version); + goto bail; + } + + exists = true; + + do { + total = 0; + while(total < sizeof(POMFChunkHeader) && r > 0) { + r = fread(((void*)&chunk) + total, 1, sizeof(POMFChunkHeader) - total, f); + total += r; + } + if(total != sizeof(POMFChunkHeader)) { + ESP_LOGE(TAG, "ChunkHead read error, wanted %i bytes, got %i", sizeof(POMFChunkHeader), r); + goto bail; + } + + switch(chunk.magic) { + case POMF_MAGIC_SAMPLE: + case POMF_MAGIC_SAMPLE_COMPRESSED: + cur_samp = (rle_sample_t*) malloc(sizeof(rle_sample_t)); + if(cur_samp == nullptr) { + ESP_LOGE(TAG, "OOM allocating sample header"); + reading = false; + goto bail; + } else { + cur_samp = (rle_sample_t*) malloc(chunk.size); + if(cur_samp == nullptr) { + ESP_LOGE(TAG, "OOM allocating sample (wanted %i bytes)", chunk.size); + reading = false; + goto bail; + } + total = 0; + while(total < chunk.size && r > 0) { + r = fread(((void*)cur_samp) + total, 1, chunk.size - total, f); + total += r; + } + if(total != chunk.size) { + ESP_LOGE(TAG, "saMP expected %i bytes, got %i", chunk.size, total); + reading = false; + goto bail; + } else { + ESP_LOGV(TAG, "saMP read %i bytes", total); + if(chunk.magic == POMF_MAGIC_SAMPLE_COMPRESSED) { + cur_samp = (rle_sample_t*) decompress_emplace(cur_samp, chunk.size, chunk.realsize); + if(cur_samp == nullptr) { + reading = false; + goto bail; + } + ESP_LOGV(TAG, "saZZ decompressed to %i bytes", chunk.realsize); + } + // Fix the data pointer to point after the header + cur_samp->rle_data = (const uint8_t *) &cur_samp[1]; + ESP_LOGI(TAG, "saMP @ 0x%x: SR=%i, root=%i, len=%i, mode=%i, data=0x%x", cur_samp, cur_samp->sample_rate, cur_samp->root_frequency, cur_samp->length, cur_samp->mode, cur_samp->rle_data); + samples.push_back(cur_samp); + cur_samp = nullptr; + } + } + break; + case POMF_MAGIC_TRACK: + case POMF_MAGIC_TRACK_COMPRESSED: + if(array_ != nullptr) { + ESP_LOGE(TAG, "Multiple tuNE chunks, wtf!!"); + reading = false; + goto bail; + } else { + array_ = (melody_item_t*) malloc(chunk.size); + if(array_ == nullptr) { + ESP_LOGE(TAG, "OOM allocating track"); + reading = false; + goto bail; + } + total = 0; + while(total < chunk.size && r > 0) { + r = fread(((void*)array_) + total, 1, chunk.size - total, f); + total += r; + } + if(total != chunk.size) { + ESP_LOGE(TAG, "tuNE expected %i bytes, got %i", chunk.size, total); + reading = false; + goto bail; + } else { + if(chunk.magic == POMF_MAGIC_TRACK_COMPRESSED) { + array_ = (melody_item_t*) decompress_emplace((void*) array_, chunk.size, chunk.realsize); + if(array_ == nullptr) { + reading = false; + goto bail; + } else { + total = chunk.realsize; + ESP_LOGV(TAG, "tuZZ decompressed to %i bytes", chunk.realsize); + } + } + num_rows_ = total / sizeof(melody_item_t); + ESP_LOGV(TAG, "tuNE read %i rows in %i bytes", num_rows_, total); + for(int i = 0; i < num_rows_; i++) { + // Fix up sample pointers + if(array_[i].command == SAMPLE_LOAD) { + int sample_num = array_[i].argument; + if(sample_num >= samples.size()) { + ESP_LOGE(TAG, "Sample number %i out of bounds! (have %i)", sample_num, samples.size()); + reading = false; + goto bail; + } else { + array_[i].argument = (int) samples[sample_num]; + } + } + } + } + } + break; + case POMF_MAGIC_END: + if(array_ != nullptr) { + ESP_LOGV(TAG, "Found EOF, success"); + } else { + ESP_LOGE(TAG, "File without tuNE!!"); + } + reading = false; + break; + default: + ESP_LOGE(TAG, "Unknown chunk type %x abort!!", chunk.magic); + reading = false; + goto bail; + break; + } + } while(reading); + + loaded = true; + fclose(f); + return true; + +bail: + exists = false; + if(f != nullptr) fclose(f); + if(array_ != nullptr) free(array_); + array_ = nullptr; + if(cur_samp != nullptr) free(cur_samp); + unload_samples(); + num_rows_ = 0; + return false; +} +void PomfMelodySequence::unload() { + ESP_LOGI(TAG, "Unload %s", path); + if(array_ != nullptr) { + free(array_); array_ = nullptr; + } + num_rows_ = 0; + loaded = false; + unload_samples(); +} + +void PomfMelodySequence::unload_samples() { + for(auto i: samples) { + free(i); + } + samples.clear(); +} + +void PomfMelodySequence::try_preload_metadata() { + if(title_ != nullptr) { + free(title_); + title_ = nullptr; + } + + if(long_title_ != nullptr) { + free(long_title_); + long_title_ = nullptr; + } + ESP_LOGV(TAG, "Prefetch %s", path); + FILE * f = nullptr; + POMFHeader head = { 0 }; + size_t r = 0; + + f = fopen(path, "rb"); + if(!f) { + ESP_LOGE(TAG, "File open error: %s (%i, %s)", path, errno, strerror(errno)); + goto bail; + } + + fseek(f, 0, SEEK_SET); + r = fread(&head, 1, sizeof(POMFHeader), f); //<- opposite order of size and count isn't working, esp stdlib buggy? + if(r != sizeof(POMFHeader)) { + ESP_LOGE(TAG, "Header read error, wanted %i bytes, got %i", sizeof(POMFHeader), r); + goto bail; + } + + if(head.magic != POMF_MAGIC_FILE) { + ESP_LOGE(TAG, "MAGIC not match, expected 0x%x, got 0x%x", POMF_MAGIC_FILE, head.magic); + goto bail; + } + + if(head.version != POMF_CURVER) { + ESP_LOGE(TAG, "Version not match, expected 0x%x, got 0x%x", POMF_CURVER, head.version); + goto bail; + } + + title_ = (char*) malloc(strlen(head.short_title)); + strcpy(title_, head.short_title); + long_title_ = (char*) malloc(strlen(head.long_title)); + strcpy(long_title_, head.long_title); + + exists = true; + + fclose(f); + return; + +bail: + exists = false; + if(f != nullptr) fclose(f); +} diff --git a/src/sound/sequencer.cpp b/src/sound/sequencer.cpp index f7800b3..f39fed5 100644 --- a/src/sound/sequencer.cpp +++ b/src/sound/sequencer.cpp @@ -202,7 +202,7 @@ bool NewSequencer::process_step(const melody_item_t * cur_line) { if(cur_line->argument == LOOP_POINT_TYPE_HOOK_END && (flags & SEQUENCER_PLAY_HOOK_ONLY) != 0) { if(end_of_song()) return true; } - else if(cur_line->argument == LOOP_POINT_TYPE_LOOP) { + else if((cur_line->argument == LOOP_POINT_TYPE_HOOK_START && (flags & SEQUENCER_PLAY_HOOK_ONLY) != 0) || (cur_line->argument == LOOP_POINT_TYPE_LOOP) ){ loop_point = pointer + 1; } break; From 8a6489a8b199136abf4a403bc6a44238fa142af2 Mon Sep 17 00:00:00 2001 From: akasaka Date: Thu, 12 Dec 2024 23:40:45 +0900 Subject: [PATCH 08/13] Split screen mode PoC --- include/app/app_host.h | 53 ++---- include/app/menu.h | 2 + include/app/musicbox.h | 1 + include/device_config.h | 4 + include/devices/big_noritake.h | 1 + include/graphics/framebuffer.h | 2 - include/input/keys.h | 1 + include/os_config.h | 1 + include/service/owm/weather.h | 2 +- include/views/common/view.h | 13 +- include/views/menu/date_setting.h | 8 - include/views/menu/time_setting.h | 8 - include/views/overlays/fireworks.h | 2 +- .../views/transitions/transition_animator.h | 2 + src/app/app_host.cpp | 154 ++++++++++++++++++ src/app/menu.cpp | 7 + src/app/musicbox.cpp | 12 +- src/app/pixel_cave.cpp | 1 + src/app/proto/navigation_stack.cpp | 1 + src/app/stopwatch.cpp | 14 +- src/app/timer_editor.cpp | 22 +-- src/display/gu312.cpp | 2 +- src/graphics/fanta_manipulator.cpp | 5 + src/graphics/framebuffer.cpp | 16 +- src/input/keys.cpp | 7 + src/main.cpp | 2 +- src/network/admin_panel.cpp | 2 - src/views/common/multiplexor.cpp | 1 + src/views/idle_screens/next_alarm.cpp | 12 +- src/views/menu/date_setting.cpp | 8 + src/views/menu/time_setting.cpp | 8 + src/views/transitions/transition_animator.cpp | 11 ++ 32 files changed, 280 insertions(+), 105 deletions(-) create mode 100644 src/app/app_host.cpp diff --git a/include/app/app_host.h b/include/app/app_host.h index 58454d5..565dd05 100644 --- a/include/app/app_host.h +++ b/include/app/app_host.h @@ -1,47 +1,18 @@ #include -#include -class AppHost: public ViewMultiplexor { +class AppHost: public Composite { public: - AppHost(): ViewMultiplexor() {} - - void step() override { - // Handle hotkeys for entering apps quickly - // For now, assignment is hardcoded: - // F1: Timer - // F2: Home (clock) - // F3: Stopwatch - - if(!is_in_critical_state()) { - if(hid_test_key_state(KEY_SOFT_F1) == KEYSTATE_HIT) { - push_state(STATE_TIMER_EDITOR, TRANSITION_WIPE); - } - else if(hid_test_key_state(KEY_SOFT_F2) == KEYSTATE_HIT) { - change_state(STATE_IDLE, TRANSITION_WIPE); - } - else if(hid_test_key_state(KEY_SOFT_F3) == KEYSTATE_HIT) { - push_state(STATE_STOPWATCH, TRANSITION_WIPE); - } - } - - ViewMultiplexor::step(); - } + AppHost(); + void render(FantaManipulator*) override; + void step() override; + void add_view(Renderable*, view_id_t); + void switch_to(view_id_t, transition_type_t); protected: - bool is_in_critical_state() { - // Returns true if in a state that should not be overridable by a hotkey - - device_state_t sts = get_state(); - return - sts == STATE_BOOT || - sts == STATE_RESTART || - sts == STATE_ALARMING || -#if HAS(HTTPFVU) - sts == STATE_HTTPFVU || -#endif -#if HAS(OTAFVU) - sts == STATE_OTAFVU || -#endif - sts == STATE_NEW_YEAR; - } + bool is_in_critical_state(); + bool state_wants_full_screen(view_id_t); + ViewMultiplexor * main_screen = nullptr; + ViewMultiplexor * split_screen = nullptr; + bool split_active = false; + bool main_idle = true; }; \ No newline at end of file diff --git a/include/app/menu.h b/include/app/menu.h index 48bdbfa..b8d01c3 100644 --- a/include/app/menu.h +++ b/include/app/menu.h @@ -13,6 +13,7 @@ class AppShimMenu: public ProtoShimNavMenu { AppShimMenu(Beeper*, NewSequencer*, Yukkuri*, AmbientLightSensor*); void prepare() override; + void render(FantaManipulator*) override; void step() override; void pop_renderable(transition_type_t = TRANSITION_SLIDE_HORIZONTAL_RIGHT); @@ -21,4 +22,5 @@ class AppShimMenu: public ProtoShimNavMenu { Beeper * beeper; Yukkuri * yukkuri; TickType_t last_touch_time; + int last_width; }; \ No newline at end of file diff --git a/include/app/musicbox.h b/include/app/musicbox.h index 6105d77..738fa4c 100644 --- a/include/app/musicbox.h +++ b/include/app/musicbox.h @@ -10,6 +10,7 @@ class AppShimMusicbox : public WeatherChartCommon { public: AppShimMusicbox(NewSequencer * s); void prepare() override; + void render(FantaManipulator*) override; void step() override; void cleanup() override; diff --git a/include/device_config.h b/include/device_config.h index cdad4fa..ee659e2 100644 --- a/include/device_config.h +++ b/include/device_config.h @@ -83,4 +83,8 @@ #endif #endif +#if HWCONF_DISPLAY_WIDTH_PX >= 192 + #define HAS_SPLIT_SCREEN_APPHOST +#endif + #endif \ No newline at end of file diff --git a/include/devices/big_noritake.h b/include/devices/big_noritake.h index b9c71a5..84fb6fc 100644 --- a/include/devices/big_noritake.h +++ b/include/devices/big_noritake.h @@ -8,6 +8,7 @@ #define HAS_KEYPAD #define HAS_VARYING_BRIGHTNESS #define HAS_MOTION_SENSOR +#define HAS_LIGHT_SENSOR #define HAS_IR_RECEIVER #define HAS_PIXEL_CAVE #define HAS_OTAFVU diff --git a/include/graphics/framebuffer.h b/include/graphics/framebuffer.h index 51ff3a1..d06a278 100644 --- a/include/graphics/framebuffer.h +++ b/include/graphics/framebuffer.h @@ -26,10 +26,8 @@ class DisplayFramebuffer { /// @brief Output the backing buffer to the display controller, if it was altered since the last transmission void write_all_if_needed(); -#ifdef PDFB_PERF_LOGS /// @brief Get the average number of frames transmitted to the display controller per second unsigned int get_fps(); -#endif /// @brief Manipulate the graphics in the backing buffer /// @return A pointer to the manipulator, owned by the caller diff --git a/include/input/keys.h b/include/input/keys.h index 25f3996..8e13b6a 100644 --- a/include/input/keys.h +++ b/include/input/keys.h @@ -30,6 +30,7 @@ typedef uint16_t key_bitmask_t; const key_bitmask_t KEYMASK_ALL = 0xFFFF; +void hid_set_lock_state(bool locked); void hid_set_key_beeper(Beeper *); void hid_set_key_state(key_id_t key, bool state); key_state_t hid_test_key_state(key_id_t key); diff --git a/include/os_config.h b/include/os_config.h index 5094408..2389dd7 100644 --- a/include/os_config.h +++ b/include/os_config.h @@ -7,6 +7,7 @@ #define pisosTASK_PRIORITY_REMOTE_DESKTOP 3 #define pisosTASK_PRIORITY_FRAMEBUFFER (configMAX_PRIORITIES - 1) #define pisosTASK_PRIORITY_WAVEOUT (configMAX_PRIORITIES - 1) +#define pisosTASK_PRIORITY_INFRARED (configMAX_PRIORITIES - 1) #define pisosTASK_PRIORITY_KEYPAD (configMAX_PRIORITIES - 3) #define pisosTASK_PRIORITY_WEBADMIN 4 #define pisosTASK_PRIORITY_OTAFVU 10 diff --git a/include/service/owm/weather.h b/include/service/owm/weather.h index 0123810..71d1f41 100644 --- a/include/service/owm/weather.h +++ b/include/service/owm/weather.h @@ -3,7 +3,7 @@ #include #define FORECAST_WEATHER_DAYS 4 -#define FORECAST_WEATHER_HOURS 36 +#define FORECAST_WEATHER_HOURS 48 typedef enum weather_condition_code { UNKNOWN_CONDITIONS = 0, diff --git a/include/views/common/view.h b/include/views/common/view.h index 70d16d2..d4ef20c 100644 --- a/include/views/common/view.h +++ b/include/views/common/view.h @@ -57,6 +57,7 @@ class Composite: public Composable { } for(Composable *r: composables) { if(r->hidden) continue; + if(r->x_offset >= fb->get_width() || r->width == 0) continue; #ifndef COMPOSABLE_NO_EVENODD if(r->gray) { int w = (r->width >= 0 ? r->width : fb->get_width()); @@ -87,12 +88,16 @@ class Composite: public Composable { r->render(fb); } else if(r->width > 0) { FantaManipulator * temp = fb->slice(r->x_offset, r->width); - r->render(temp); - delete temp; + if(temp != nullptr) { + r->render(temp); + delete temp; + } } else if(r->width == -1) { FantaManipulator * temp = fb->slice(r->x_offset, fb->get_width() - r->x_offset); - r->render(temp); - delete temp; + if(temp != nullptr) { + r->render(temp); + delete temp; + } } } #ifndef COMPOSABLE_NO_EVENODD diff --git a/include/views/menu/date_setting.h b/include/views/menu/date_setting.h index baf060e..986c092 100644 --- a/include/views/menu/date_setting.h +++ b/include/views/menu/date_setting.h @@ -23,14 +23,6 @@ class MenuDateSettingView: public Composite { isShowingCursor { false }, onFinish(onFinish), beeper(b) { - int char_count = 10; // YYYY/MM/dd - int text_width = char_count * font->width; - int left_offset = HWCONF_DISPLAY_WIDTH_PX/2 - text_width/2; - - yearView->x_offset = left_offset; - monthView->x_offset = yearView->x_offset + yearView->width + font->width; - dayView->x_offset = monthView->x_offset + monthView->width + font->width; - add_composable(yearView); add_composable(monthView); add_composable(dayView); diff --git a/include/views/menu/time_setting.h b/include/views/menu/time_setting.h index 48e5ef7..d1af087 100644 --- a/include/views/menu/time_setting.h +++ b/include/views/menu/time_setting.h @@ -25,14 +25,6 @@ class MenuTimeSettingView: public Composite { isShowingCursor { false }, onFinish(onFinish), beeper(b) { - int char_count = showSeconds ? 8 : 5; // XX:XX:XX or XX:XX - int text_width = char_count * font->width; - int left_offset = HWCONF_DISPLAY_WIDTH_PX/2 - text_width/2; - - hourView->x_offset = left_offset; - minuteView->x_offset = hourView->x_offset + hourView->width + font->width; - secondView->x_offset = minuteView->x_offset + minuteView->width + font->width; - add_composable(hourView); add_composable(minuteView); if(showSeconds) { diff --git a/include/views/overlays/fireworks.h b/include/views/overlays/fireworks.h index 0e7fa23..636d123 100644 --- a/include/views/overlays/fireworks.h +++ b/include/views/overlays/fireworks.h @@ -30,7 +30,7 @@ class FireworksOverlay: public Renderable { ParticleType type : 3; uint8_t phase : 5; int8_t y; - int8_t x; + int16_t x; int8_t vy; int8_t vx; }; diff --git a/include/views/transitions/transition_animator.h b/include/views/transitions/transition_animator.h index 4ef40e5..0c57ea1 100644 --- a/include/views/transitions/transition_animator.h +++ b/include/views/transitions/transition_animator.h @@ -31,6 +31,8 @@ class TransitionAnimationCoordinator: public Renderable { void step(); void render(FantaManipulator *); + void update_width(int width); + fanta_buffer_t backingBufferA; fanta_buffer_t backingBufferB; FantaManipulator * backingA; diff --git a/src/app/app_host.cpp b/src/app/app_host.cpp new file mode 100644 index 0000000..6318cbc --- /dev/null +++ b/src/app/app_host.cpp @@ -0,0 +1,154 @@ +#include +#include + +static const char LOG_TAG[] = "AppHost"; + +AppHost::AppHost(): Composite() { +#if HAS(SPLIT_SCREEN_APPHOST) + split_screen = new ViewMultiplexor(); + split_screen->width = HWCONF_DISPLAY_WIDTH_PX/2; + split_screen->x_offset = -split_screen->width; + add_composable(split_screen); +#endif + + // Must be added second, so that all HID events first go into the split screen + main_screen = new ViewMultiplexor(); + add_composable(main_screen); +} + +void AppHost::switch_to(view_id_t view, transition_type_t transition) { +#if HAS(SPLIT_SCREEN_APPHOST) + if(state_wants_full_screen(view)) { + ESP_LOGV(LOG_TAG, "New full-screen state %i", view); + if(split_active) split_active = false; +#endif + main_screen->switch_to(view, transition); +#if HAS(SPLIT_SCREEN_APPHOST) + main_idle = (view == STATE_IDLE); + if(!main_idle) { + split_screen->x_offset = -split_screen->width; + main_screen->x_offset = 0; + } + } else { + ESP_LOGV(LOG_TAG, "New SPLIT-screen state %i", view); + if(!main_idle) { + main_screen->switch_to(STATE_IDLE, TRANSITION_SLIDE_VERTICAL_UP); + main_idle = true; + } + if(!split_active) { + split_active = true; + transition = TRANSITION_NONE; + split_screen->switch_to(view, transition); + split_screen->prepare(); + } else { + split_screen->switch_to(view, transition); + } + } +#endif +} + +void AppHost::add_view(Renderable * view, view_id_t id) { +#if HAS(SPLIT_SCREEN_APPHOST) + if(state_wants_full_screen(id)) +#endif + main_screen->add_view(view, id); +#if HAS(SPLIT_SCREEN_APPHOST) + else split_screen->add_view(view, id); +#endif +} + +void AppHost::render(FantaManipulator* fb) { + Composite::render(fb); +#if HAS(SPLIT_SCREEN_APPHOST) + if((split_active && split_screen->x_offset != 0) || (!split_active && split_screen->x_offset > -split_screen->width)) { + int x = split_screen->x_offset + split_screen->width; + #ifdef COMPOSABLE_NO_EVENODD + fb->line(x, 0, x, fb->get_height()); + #else + for(int y = (even_odd ? 1 : 0); y < fb->get_height(); y += 2) { + fb->plot_pixel(x, y, true); + } + #endif + } +#endif //SPLIT_SCREEN_APPHOST +} + +void AppHost::step() { + // Handle hotkeys for entering apps quickly + // For now, assignment is hardcoded: + // F1: Timer + // F2: Home (clock) + // F3: Stopwatch + + if(!is_in_critical_state()) { + if(hid_test_key_state(KEY_SOFT_F1) == KEYSTATE_HIT) { + push_state(STATE_TIMER_EDITOR, TRANSITION_WIPE); + } + else if(hid_test_key_state(KEY_SOFT_F2) == KEYSTATE_HIT) { + change_state(STATE_IDLE, TRANSITION_WIPE); + } + else if(hid_test_key_state(KEY_SOFT_F3) == KEYSTATE_HIT) { + push_state(STATE_STOPWATCH, TRANSITION_WIPE); + } + } + +#if HAS(SPLIT_SCREEN_APPHOST) + if(split_active && split_screen->x_offset < 0) { + split_screen->x_offset = std::min(0, split_screen->x_offset + 2); + main_screen->x_offset = split_screen->width + split_screen->x_offset; + } + else if(!split_active && split_screen->x_offset > -split_screen->width) { + split_screen->x_offset = std::max(-split_screen->width, split_screen->x_offset - 2); + main_screen->x_offset = split_screen->width + split_screen->x_offset; + } + + if(split_active) { + split_screen->step(); + + hid_set_lock_state(true); + main_screen->step(); + hid_set_lock_state(false); + } else { + main_screen->step(); + } +#else + main_screen->step(); +#endif +} + +bool AppHost::is_in_critical_state() { + // Returns true if in a state that should not be overridable by a hotkey + + device_state_t sts = get_state(); + return + sts == STATE_BOOT || + sts == STATE_RESTART || + sts == STATE_ALARMING || +#if HAS(HTTPFVU) + sts == STATE_HTTPFVU || +#endif +#if HAS(OTAFVU) + sts == STATE_OTAFVU || +#endif + sts == STATE_NEW_YEAR; +} + +bool AppHost::state_wants_full_screen(view_id_t sts) { +#if HAS(SPLIT_SCREEN_APPHOST) + return sts == STATE_BOOT || + sts == STATE_IDLE || + sts == STATE_RESTART || + sts == STATE_ALARMING || +#if HAS(HTTPFVU) + sts == STATE_HTTPFVU || +#endif +#if HAS(OTAFVU) + sts == STATE_OTAFVU || +#endif + sts == STATE_NEW_YEAR || + sts == STATE_PIXEL_CAVE; +#else + return true; +#endif +} + diff --git a/src/app/menu.cpp b/src/app/menu.cpp index 6661aab..ec1c5b8 100644 --- a/src/app/menu.cpp +++ b/src/app/menu.cpp @@ -425,6 +425,13 @@ void AppShimMenu::prepare() { last_touch_time = xTaskGetTickCount(); } +void AppShimMenu::render(FantaManipulator *fb) { + ProtoShimNavMenu::render(fb); + if(fb->get_width() != last_width) { + last_width = fb->get_width(); + last_touch_time = xTaskGetTickCount(); + } +} void AppShimMenu::step() { ProtoShimNavMenu::step(); diff --git a/src/app/musicbox.cpp b/src/app/musicbox.cpp index 78175d5..1c4557c 100644 --- a/src/app/musicbox.cpp +++ b/src/app/musicbox.cpp @@ -28,9 +28,6 @@ AppShimMusicbox::AppShimMusicbox(NewSequencer * s): show_minimum = false; show_maximum = false; - for(int i = 0; i < DisplayFramebuffer::width; i++) { - points.push_back( { .annotation = -1, .value = 0 }); - } filled = true; autoscale = false; @@ -49,6 +46,15 @@ AppShimMusicbox::AppShimMusicbox(NewSequencer * s): #endif } +void AppShimMusicbox::render(FantaManipulator* fb) { + if(points.size() < fb->get_width()) { + for(int i = 0; i < fb->get_width(); i++) { + points.push_back( { .annotation = -1, .value = 0 }); + } + } + WeatherChartCommon::render(fb); +} + void AppShimMusicbox::prepare() { WeatherChartCommon::prepare(); load_and_play(); diff --git a/src/app/pixel_cave.cpp b/src/app/pixel_cave.cpp index b6caad0..9d4d45c 100644 --- a/src/app/pixel_cave.cpp +++ b/src/app/pixel_cave.cpp @@ -66,6 +66,7 @@ void AppPixelCave::render(FantaManipulator* fb) { case PCGAME_OVER: { + fb->clear(); // TODO GUI if(crash_flash < 2) { render_game(fb, false); diff --git a/src/app/proto/navigation_stack.cpp b/src/app/proto/navigation_stack.cpp index fbc15e0..59c0232 100644 --- a/src/app/proto/navigation_stack.cpp +++ b/src/app/proto/navigation_stack.cpp @@ -63,6 +63,7 @@ void ProtoShimNavigationStack::set_active_renderable(Renderable *next, transitio void ProtoShimNavigationStack::render(FantaManipulator*fb) { fb->clear(); + transition_coordinator->update_width(fb->get_width()); current_renderable()->render(fb); scroll_guidance->render(fb); } diff --git a/src/app/stopwatch.cpp b/src/app/stopwatch.cpp index f074d8f..63dca1e 100644 --- a/src/app/stopwatch.cpp +++ b/src/app/stopwatch.cpp @@ -18,21 +18,21 @@ class AppShimStopwatch::StopwatchMainScreen: public Composite { big_font = find_font(FONT_STYLE_CLOCK_FACE); small_font = find_font(FONT_STYLE_CLOCK_FACE_SMALL); + add_composable(hourView); + add_composable(minuteView); + add_composable(secondView); + } + + void render(FantaManipulator *fb) { int char_count = 12; // XX:XX:XX.xxx int text_width = 9 * big_font->width + 3 * small_font->width; - int left_offset = HWCONF_DISPLAY_WIDTH_PX/2 - text_width/2; + int left_offset = fb->get_width()/2 - text_width/2; hourView->x_offset = left_offset; left_offset += hourView->width + big_font->width; minuteView->x_offset = left_offset; left_offset += hourView->width + big_font->width; secondView->x_offset = left_offset; - add_composable(hourView); - add_composable(minuteView); - add_composable(secondView); - } - - void render(FantaManipulator *fb) { Composite::render(fb); fb->put_glyph(big_font, ':', hourView->x_offset + hourView->width, 0); diff --git a/src/app/timer_editor.cpp b/src/app/timer_editor.cpp index 1b1ccb0..cfd976c 100644 --- a/src/app/timer_editor.cpp +++ b/src/app/timer_editor.cpp @@ -18,15 +18,6 @@ class AppShimTimerEditor::TimerEditorMainScreen: public Composite { secondView = new DroppingDigitView(2, 0, b); font = find_font(FONT_STYLE_CLOCK_FACE); - int char_count = 10; // XX:XX:XX [] - int text_width = char_count * font->width; - int left_offset = HWCONF_DISPLAY_WIDTH_PX/2 - text_width/2; - hourView->x_offset = left_offset; - left_offset += hourView->width + font->width; - minuteView->x_offset = left_offset; - left_offset += hourView->width + font->width; - secondView->x_offset = left_offset; - add_composable(hourView); add_composable(minuteView); add_composable(secondView); @@ -74,6 +65,15 @@ class AppShimTimerEditor::TimerEditorMainScreen: public Composite { int cursor_offset = 0; + int char_count = 10; // XX:XX:XX [] + int text_width = char_count * font->width; + int left_offset = fb->get_width()/2 - text_width/2; + hourView->x_offset = left_offset; + left_offset += hourView->width + font->width; + minuteView->x_offset = left_offset; + left_offset += hourView->width + font->width; + secondView->x_offset = left_offset; + if(cursorPosition == CursorPosition::HOUR) cursor_offset = hourView->x_offset; if(cursorPosition == CursorPosition::MINUTE) cursor_offset = minuteView->x_offset; if(cursorPosition == CursorPosition::SECOND) cursor_offset = secondView->x_offset; @@ -83,10 +83,10 @@ class AppShimTimerEditor::TimerEditorMainScreen: public Composite { fb->put_glyph(font, ':', hourView->x_offset + hourView->width, 0); fb->put_glyph(font, ':', minuteView->x_offset + minuteView->width, 0); - int left_offset = secondView->x_offset + secondView->width + font->width; + left_offset = secondView->x_offset + secondView->width + font->width; if(isRunning) fb->rect(left_offset-1, 0, left_offset + 17, 15, true); - fb->put_glyph(find_font(FONT_STYLE_TALL_TEXT), 0x10, left_offset, 0, isRunning ? TEXT_INVERTED : TEXT_NORMAL); + fb->put_glyph(find_font(FONT_STYLE_TALL_TEXT), 0x10, left_offset, 0, TEXT_OUTLINED | TEXT_NO_BACKGROUND | (isRunning ? TEXT_INVERTED : TEXT_NORMAL)); if(cursorPosition == CursorPosition::PLAY_PAUSE) cursor_offset = left_offset; if(isShowingCursor) { diff --git a/src/display/gu312.cpp b/src/display/gu312.cpp index ab38202..cd7598e 100644 --- a/src/display/gu312.cpp +++ b/src/display/gu312.cpp @@ -196,7 +196,7 @@ void NoritakeGu312Driver::write_fanta(const uint8_t * strides, size_t count) { void NoritakeGu312Driver::set_bright(bool bright) { taskENTER_CRITICAL(&_spinlock); - send_command(bright ? 0b11001 : 0b11011); + send_command(bright ? 0b11001 : 0b11110); // undocumented: can go from 11000 (100%) to as low as 11111 (undocumented) taskEXIT_CRITICAL(&_spinlock); } diff --git a/src/graphics/fanta_manipulator.cpp b/src/graphics/fanta_manipulator.cpp index a8cff7a..43af8ad 100644 --- a/src/graphics/fanta_manipulator.cpp +++ b/src/graphics/fanta_manipulator.cpp @@ -31,6 +31,11 @@ void FantaManipulator::unlock() { } FantaManipulator* FantaManipulator::slice(int x, int w) { + if(x < 0) { + x = 0; + w += x; + } + if(x > buffer_size/2) { ESP_LOGE(LOG_TAG, "Position (X=%i) is out of bounds of the screen", x); return nullptr; diff --git a/src/graphics/framebuffer.cpp b/src/graphics/framebuffer.cpp index 02924e2..0ecb5cc 100644 --- a/src/graphics/framebuffer.cpp +++ b/src/graphics/framebuffer.cpp @@ -8,13 +8,17 @@ #define HWCONF_DESIRED_FPS 60 #endif +#ifndef PDFB_PERF_LOG_INTERVAL +#define PDFB_PERF_LOG_INTERVAL 600 +#endif + static const int DESIRED_FPS = HWCONF_DESIRED_FPS; #define EVT_BIT_ENDED_DRAWING (1 << 0) static char LOG_TAG[] = "PDFB"; -#define LOCK_BUFFER_OR_DIE if(!xSemaphoreTake(buffer_semaphore, pdMS_TO_TICKS(16))) {ESP_LOGW(LOG_TAG, "Timeout while waiting on FB semaphore");return;} +#define LOCK_BUFFER_OR_DIE if(!xSemaphoreTake(buffer_semaphore, portMAX_DELAY)) {ESP_LOGW(LOG_TAG, "Timeout while waiting on FB semaphore");return;} #define UNLOCK_BUFFER xSemaphoreGive(buffer_semaphore) DisplayFramebuffer::DisplayFramebuffer(DisplayDriver * disp) { @@ -37,7 +41,6 @@ DisplayFramebuffer::~DisplayFramebuffer() { extern "C" void FbTaskFunc( void * pvParameter ); -#ifdef PDFB_PERF_LOGS static TickType_t last_draw_at = 0; static TickType_t avg_frametime = 0; static TickType_t max_frametime = 0; @@ -46,7 +49,6 @@ static uint16_t perf_counter = 0; unsigned int DisplayFramebuffer::get_fps() { return 1000/pdTICKS_TO_MS(avg_frametime); } -#endif void FbTaskFunc( void * pvParameter ) { @@ -56,10 +58,7 @@ void FbTaskFunc( void * pvParameter ) TickType_t interval = pdMS_TO_TICKS(1000 / DESIRED_FPS); while(1) { fb->write_all_if_needed(); -#ifdef PDFB_PERF_LOGS -#ifndef PDFB_PERF_LOG_INTERVAL -#define PDFB_PERF_LOG_INTERVAL 600 -#endif + perf_counter++; if(perf_counter >= PDFB_PERF_LOG_INTERVAL) { perf_counter = 0; @@ -72,9 +71,8 @@ void FbTaskFunc( void * pvParameter ) avg_frametime += frametime; avg_frametime /= 2; last_draw_at = now; -#endif - xTaskDelayUntil(&now, interval); + xTaskDelayUntil(&now, interval); //<- also updates `now` } } diff --git a/src/input/keys.cpp b/src/input/keys.cpp index 0244b96..bbe0e43 100644 --- a/src/input/keys.cpp +++ b/src/input/keys.cpp @@ -15,6 +15,11 @@ static TickType_t keypress_started_at[KEY_MAX_INVALID] = { 0 }; static TickType_t keypress_repeated_at[KEY_MAX_INVALID] = { 0 }; static Beeper * beepola = nullptr; static TimerSensor * hid_state_sensor = nullptr; +static bool hid_locked = false; + +void hid_set_lock_state(bool locked) { + hid_locked = locked; +} void hid_set_key_beeper(Beeper* b) { beepola = b; @@ -30,6 +35,8 @@ inline key_state_t time_to_state(TickType_t time) { } static key_state_t min_state_of_mask(key_bitmask_t keys, bool peek = false) { + if(hid_locked) return KEYSTATE_RELEASED; + TickType_t maxTimeStamp = 0; for(key_id_t i = (key_id_t)0; i < KEY_MAX_INVALID; i = (key_id_t) (i + 1)) { if((keys & KEY_ID_TO_BIT(i)) == 0) continue; diff --git a/src/main.cpp b/src/main.cpp index 7345db9..4d50a28 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -48,7 +48,7 @@ const device_state_t startup_state = STATE_IDLE; static std::stack state_stack = {}; static ViewCompositor * desktop; -static ViewMultiplexor * appHost; +static AppHost * appHost; static FpsCounter * fpsCounter; static DisplayFramebuffer * fb; diff --git a/src/network/admin_panel.cpp b/src/network/admin_panel.cpp index 4ebdee6..20d9bcc 100644 --- a/src/network/admin_panel.cpp +++ b/src/network/admin_panel.cpp @@ -364,9 +364,7 @@ static void build() { #endif GP.SPOILER_BEGIN("Overlays", GP_BLUE); -#if defined(PDFB_PERF_LOGS) render_bool("FPS counter", PREFS_KEY_FPS_COUNTER); -#endif GP.LABEL("WiFi status:"); GP.SELECT(PREFS_KEY_WIFI_ICON, "None,Disconnected only,On display power on,Always", prefs_get_int(PREFS_KEY_WIFI_ICON)); GP.SPOILER_END(); diff --git a/src/views/common/multiplexor.cpp b/src/views/common/multiplexor.cpp index 66e3be8..a62262d 100644 --- a/src/views/common/multiplexor.cpp +++ b/src/views/common/multiplexor.cpp @@ -80,6 +80,7 @@ void ViewMultiplexor::prepare() { void ViewMultiplexor::render(FantaManipulator * fb) { Renderable *r = current_renderable(); + transition_coordinator->update_width(fb->get_width()); if(r != nullptr) r->render(fb); } diff --git a/src/views/idle_screens/next_alarm.cpp b/src/views/idle_screens/next_alarm.cpp index 62a1361..7004446 100644 --- a/src/views/idle_screens/next_alarm.cpp +++ b/src/views/idle_screens/next_alarm.cpp @@ -27,12 +27,6 @@ NextAlarmView::NextAlarmView() { minuteView = new DroppingDigitView(2, 0); font = find_font(FONT_STYLE_CLOCK_FACE); - int char_count = 5; // XX:XX - int text_width = char_count * font->width; - int left_offset = (HWCONF_DISPLAY_WIDTH_PX - alarm_icns.width) / 2 - text_width / 2 + alarm_icns.width; - hourView->x_offset = left_offset; - minuteView->x_offset = hourView->x_offset + hourView->width + font->width; - add_composable(hourView); add_composable(minuteView); } @@ -80,6 +74,12 @@ void NextAlarmView::step() { } void NextAlarmView::render(FantaManipulator *fb) { + int char_count = 5; // XX:XX + int text_width = char_count * font->width; + int left_offset = (fb->get_width() - alarm_icns.width) / 2 - text_width / 2 + alarm_icns.width; + hourView->x_offset = left_offset; + minuteView->x_offset = hourView->x_offset + hourView->width + font->width; + Composite::render(fb); fb->put_sprite(&sleep_icns, 0, 0); fb->put_glyph(font, ':', hourView->x_offset + hourView->width, 0); diff --git a/src/views/menu/date_setting.cpp b/src/views/menu/date_setting.cpp index 9d6c5da..5dfb863 100644 --- a/src/views/menu/date_setting.cpp +++ b/src/views/menu/date_setting.cpp @@ -9,6 +9,14 @@ void MenuDateSettingView::prepare() { } void MenuDateSettingView::render(FantaManipulator *fb) { + int char_count = 10; // YYYY/MM/dd + int text_width = char_count * font->width; + int left_offset = fb->get_width()/2 - text_width/2; + + yearView->x_offset = left_offset; + monthView->x_offset = yearView->x_offset + yearView->width + font->width; + dayView->x_offset = monthView->x_offset + monthView->width + font->width; + cursorTimer++; if(cursorTimer == 30) { cursorTimer = 0; diff --git a/src/views/menu/time_setting.cpp b/src/views/menu/time_setting.cpp index 7fc24ea..2c244ff 100644 --- a/src/views/menu/time_setting.cpp +++ b/src/views/menu/time_setting.cpp @@ -15,6 +15,14 @@ void MenuTimeSettingView::render(FantaManipulator *fb) { isShowingCursor = !isShowingCursor; } + int char_count = showSeconds ? 8 : 5; // XX:XX:XX or XX:XX + int text_width = char_count * font->width; + int left_offset = fb->get_width()/2 - text_width/2; + + hourView->x_offset = left_offset; + minuteView->x_offset = hourView->x_offset + hourView->width + font->width; + secondView->x_offset = minuteView->x_offset + minuteView->width + font->width; + Composite::render(fb); fb->put_glyph(font, ':', hourView->x_offset + hourView->width, 0); diff --git a/src/views/transitions/transition_animator.cpp b/src/views/transitions/transition_animator.cpp index 98935ae..baeee45 100644 --- a/src/views/transitions/transition_animator.cpp +++ b/src/views/transitions/transition_animator.cpp @@ -61,4 +61,15 @@ void TransitionAnimationCoordinator::render(FantaManipulator *fb) { if(transition == nullptr) { return; } render_backing_views(); completed = transition->render(fb, this); +} + +void TransitionAnimationCoordinator::update_width(int width) { + if(width != backingA->get_width()) { + delete backingA; + backingA = new FantaManipulator(backingBufferA, DisplayFramebuffer::BUFFER_SIZE, width, DisplayFramebuffer::height, semaA, &dirtyA); + } + if(width != backingB->get_width()) { + delete backingB; + backingB = new FantaManipulator(backingBufferB, DisplayFramebuffer::BUFFER_SIZE, width, DisplayFramebuffer::height, semaB, &dirtyB); + } } \ No newline at end of file From 411989296c963c4e856d183b1d61afe9a5964e7c Mon Sep 17 00:00:00 2001 From: akasaka Date: Fri, 13 Dec 2024 00:49:24 +0900 Subject: [PATCH 09/13] Fixed IR codes --- include/devices/big_noritake.h | 38 +++++++++++++++++----------------- src/app/idle.cpp | 3 ++- src/app/stopwatch.cpp | 1 + src/input/infrared.cpp | 14 +++++++++---- 4 files changed, 32 insertions(+), 24 deletions(-) diff --git a/include/devices/big_noritake.h b/include/devices/big_noritake.h index 84fb6fc..594d299 100644 --- a/include/devices/big_noritake.h +++ b/include/devices/big_noritake.h @@ -75,32 +75,32 @@ const infrared_definition_t HWCONF_IR_BUTTONS = { /** * ProSpec DVE (Digital Video Editor) */ - { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa0, .value = 0x0, .key = KEY_UP }, - { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa2, .value = 0x0, .key = KEY_DOWN }, - { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa5, .value = 0x0, .key = KEY_LEFT }, - { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa4, .value = 0x0, .key = KEY_RIGHT }, - { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa1, .value = 0x0, .key = KEY_HEADPAT }, // input sw - { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa7, .value = 0x0, .key = KEY_SOFT_F1 }, // pwr - { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa6, .value = 0x0, .key = KEY_SOFT_F3 }, // frame - { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa3, .value = 0x0, .key = KEY_SOFT_F2 }, // back + { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa0, .value = 0x417405FA, .key = KEY_UP }, + { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa2, .value = 0x417445BA, .key = KEY_DOWN }, + { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa5, .value = 0x4174A55A, .key = KEY_LEFT }, + { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa4, .value = 0x417425DA, .key = KEY_RIGHT }, + { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa1, .value = 0x4174857A, .key = KEY_HEADPAT }, // input sw + { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa7, .value = 0x4174E51A, .key = KEY_SOFT_F1 }, // pwr + { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa6, .value = 0x4174659A, .key = KEY_SOFT_F3 }, // frame + { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa3, .value = 0x4174C53A, .key = KEY_SOFT_F2 }, // back /** * UNKNOWN "LCD remote" */ - { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x1b, .value = 0x0, .key = KEY_UP }, - { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x1a, .value = 0x0, .key = KEY_DOWN }, - { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x4, .value = 0x0, .key = KEY_LEFT }, - { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x6, .value = 0x0, .key = KEY_RIGHT }, - { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x5, .value = 0x0, .key = KEY_HEADPAT }, - { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x6, .value = 0x0, .key = KEY_SOFT_F2 }, // pwr + { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x1b, .value = 0x61D6D827, .key = KEY_UP }, + { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x1a, .value = 0x61D658A7, .key = KEY_DOWN }, + { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x4, .value = 0x61D620DF, .key = KEY_LEFT }, + { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x6, .value = 0x61D6609F, .key = KEY_RIGHT }, + { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x5, .value = 0x61D6A05F, .key = KEY_HEADPAT }, + { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x6, .value = 0x61D648B7, .key = KEY_SOFT_F2 }, // pwr /** * UNKNOWN "Audio Switch" SPDIF/TOSLINK 4X1 REMOTE CONTROL */ - { .protocol = IRPROTO_NEC, .address = 0x0, .command = 0x15, .value = 0x0, .key = KEY_UP }, - { .protocol = IRPROTO_NEC, .address = 0x0, .command = 0x18, .value = 0x0, .key = KEY_DOWN }, - { .protocol = IRPROTO_NEC, .address = 0x0, .command = 0x16, .value = 0x0, .key = KEY_LEFT }, - { .protocol = IRPROTO_NEC, .address = 0x0, .command = 0xd, .value = 0x0, .key = KEY_RIGHT }, - { .protocol = IRPROTO_NEC, .address = 0x0, .command = 0x45, .value = 0x0, .key = KEY_HEADPAT }, + { .protocol = IRPROTO_NEC, .address = 0x0, .command = 0x15, .value = 0xFFA857, .key = KEY_UP }, + { .protocol = IRPROTO_NEC, .address = 0x0, .command = 0x18, .value = 0xFF18E7, .key = KEY_DOWN }, + { .protocol = IRPROTO_NEC, .address = 0x0, .command = 0x16, .value = 0xFF6897, .key = KEY_LEFT }, + { .protocol = IRPROTO_NEC, .address = 0x0, .command = 0xd, .value = 0xFFB04F, .key = KEY_RIGHT }, + { .protocol = IRPROTO_NEC, .address = 0x0, .command = 0x45, .value = 0xFFA25D, .key = KEY_HEADPAT }, }; \ No newline at end of file diff --git a/src/app/idle.cpp b/src/app/idle.cpp index ccd970e..df0757f 100644 --- a/src/app/idle.cpp +++ b/src/app/idle.cpp @@ -110,6 +110,7 @@ static int last_chimed_hour = 0; static const int tick_tock_offset_ms = 250; void sound_tick_tock() { + if(get_state() != STATE_IDLE) return; tk_time_of_day_t now = get_current_time_precise(); if(now.millisecond >= tick_tock_offset_ms && !tick_tock) { if(!sequencer->is_sequencing() && (yukkuri == nullptr || !yukkuri->is_speaking())) { @@ -152,7 +153,7 @@ void _play_precise_time_signal_if_enabled(const tk_time_of_day_t &now) { } void hourly_chime() { - if(sequencer->is_sequencing()) return; + if(sequencer->is_sequencing() || get_state() != STATE_IDLE) return; tk_time_of_day now = get_current_time_coarse(); int first_hour = prefs_get_int(PREFS_KEY_HOURLY_CHIME_START_HOUR); int last_hour = prefs_get_int(PREFS_KEY_HOURLY_CHIME_STOP_HOUR); diff --git a/src/app/stopwatch.cpp b/src/app/stopwatch.cpp index 63dca1e..bc3da62 100644 --- a/src/app/stopwatch.cpp +++ b/src/app/stopwatch.cpp @@ -21,6 +21,7 @@ class AppShimStopwatch::StopwatchMainScreen: public Composite { add_composable(hourView); add_composable(minuteView); add_composable(secondView); + wants_clear_surface = true; } void render(FantaManipulator *fb) { diff --git a/src/input/infrared.cpp b/src/input/infrared.cpp index 9cec7a7..eeaece9 100644 --- a/src/input/infrared.cpp +++ b/src/input/infrared.cpp @@ -7,6 +7,7 @@ #if HAS(IR_RECEIVER) // NB: disable all the stuff of no use in the platformio.ini file! #include +#include #endif static char LOG_TAG[] = "IRRC"; @@ -25,6 +26,8 @@ static void ir_task(void*) { if(receiver.decode(&results)) { if(results.repeat) { last_pressed_timestamp = xTaskGetTickCount(); + } else if(results.overflow) { + ESP_LOGW(LOG_TAG, "Overflow when decoding IR code TYPE=%i, VALUE=0x%x, ADDRESS=0x%x, COMMAND=0x%x", results.decode_type, results.value, results.address, results.command); } else { bool found = false; for(int i = 0; i < sizeof(HWCONF_IR_BUTTONS) / sizeof(infrared_identifier_t); i++) { @@ -47,22 +50,25 @@ static void ir_task(void*) { last_pressed = id->key; ESP_LOGI(LOG_TAG, "Press key %i", last_pressed); hid_set_key_state(id->key, true); + break; } } if(!found) { - ESP_LOGI(LOG_TAG, "IR code { .protocol = %i, .address = 0x%x, .command = 0x%x, .value = 0x%x, .key = ? }", results.decode_type, results.address, results.command, results.value); + ESP_LOGI(LOG_TAG, "Unknown IR code { .protocol = %i, .address = 0x%x, .command = 0x%x, .value = 0x%x, .key = ? }", results.decode_type, results.address, results.command, results.value); + ESP_LOGV(LOG_TAG, "%s", resultToHumanReadableBasic(&results).c_str()); + ESP_LOGI(LOG_TAG, "%s", resultToSourceCode(&results).c_str()); } } receiver.resume(); } else { - if(last_pressed != KEY_MAX_INVALID && (xTaskGetTickCount() - last_pressed_timestamp) > pdMS_TO_TICKS(150)) { + if(last_pressed != KEY_MAX_INVALID && (xTaskGetTickCount() - last_pressed_timestamp) > pdMS_TO_TICKS(300)) { ESP_LOGI(LOG_TAG, "Unpress key %i (timeout)", last_pressed); hid_set_key_state(last_pressed, false); last_pressed = KEY_MAX_INVALID; } } - vTaskDelay(pdMS_TO_TICKS(10)); + vTaskDelay(pdMS_TO_TICKS(25)); } } #endif @@ -77,7 +83,7 @@ void infrared_start() { "IRRC", 8000, nullptr, - pisosTASK_PRIORITY_KEYPAD, + pisosTASK_PRIORITY_INFRARED, &hTask ); #endif From 0234b3223e5deb8a533533d4b7437f98085290cd Mon Sep 17 00:00:00 2001 From: akasaka Date: Fri, 13 Dec 2024 18:49:40 +0900 Subject: [PATCH 10/13] Finishing touches for big_noritake and split screen --- include/devices/big_noritake.h | 58 ++----------------- include/devices/ir_remotes/all_remotes.h | 54 +++++++++++++++++ include/devices/led_clock.h | 21 +------ include/views/transitions/transitions.h | 16 ++--- src/app/app_host.cpp | 6 +- src/display/gu312.cpp | 4 +- src/input/infrared.cpp | 4 +- src/views/transitions/transition_animator.cpp | 6 ++ 8 files changed, 82 insertions(+), 87 deletions(-) create mode 100644 include/devices/ir_remotes/all_remotes.h diff --git a/include/devices/big_noritake.h b/include/devices/big_noritake.h index 594d299..6221b9c 100644 --- a/include/devices/big_noritake.h +++ b/include/devices/big_noritake.h @@ -2,13 +2,14 @@ #include #include -#include +#include #define HAS_OUTPUT_GU312 #define HAS_KEYPAD #define HAS_VARYING_BRIGHTNESS #define HAS_MOTION_SENSOR #define HAS_LIGHT_SENSOR +#define HAS_TEMP_SENSOR #define HAS_IR_RECEIVER #define HAS_PIXEL_CAVE #define HAS_OTAFVU @@ -26,6 +27,10 @@ const gpio_num_t HWCONF_MOTION_GPIO = GPIO_NUM_39; const gpio_num_t HWCONF_LIGHTSENSE_GPIO = GPIO_NUM_36; const gpio_num_t HWCONF_IR_RECV_GPIO = GPIO_NUM_14; +// ---- Connection to temperature sensor ---- +const gpio_num_t HWCONF_I2C_SDA_GPIO = GPIO_NUM_26; +const gpio_num_t HWCONF_I2C_SCL_GPIO = GPIO_NUM_25; + // ---- Connection to display ---- const gpio_num_t HWCONF_GU312_DATABUS_GPIOS[] = { GPIO_NUM_5, @@ -53,54 +58,3 @@ const keypad_definition_t HWCONF_KEYPAD = { {GPIO_NUM_34, KEY_UP}, {GPIO_NUM_35, KEY_DOWN}, }; - -const infrared_definition_t HWCONF_IR_BUTTONS = { - /** - Optosupply OE13KIR (https://akizukidenshi.com/goodsaffix/OE13KIR.pdf) - */ - { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0xA0, .value = 0x8F705FA, .key = KEY_UP}, // UP - { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x00, .value = 0x8F700FF, .key = KEY_DOWN}, // DOWN - { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x10, .value = 0x8F708F7, .key = KEY_LEFT}, // LEFT - { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x80, .value = 0x8F701FE, .key = KEY_RIGHT}, // RIGHT - { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x20, .value = 0x8F704FB, .key = KEY_HEADPAT}, // CENTER - { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0xf8, .value = 0x8f71fe0, .key = KEY_SOFT_F1}, // A - { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x78, .value = 0x8f71ee1, .key = KEY_SOFT_F2}, // B - { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x58, .value = 0x8f71ae5, .key = KEY_SOFT_F3}, // C - // Top-left: TYPE=3, VALUE=0x8f78d72, ADDRESS=0x10, COMMAND=0xb1 - // Top-right: TYPE=3, VALUE=0x8f7847b, ADDRESS=0x10, COMMAND=0x21 - // Bottom-left: TYPE=3, VALUE=0x8f78877, ADDRESS=0x10, COMMAND=0x11 - // Bottom-right: TYPE=3, VALUE=0x8f7817e, ADDRESS=0x10, COMMAND=0x81 - // Power: TYPE=3, VALUE=0x8f71be4, ADDRESS=0x10, COMMAND=0xd8 - - /** - * ProSpec DVE (Digital Video Editor) - */ - { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa0, .value = 0x417405FA, .key = KEY_UP }, - { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa2, .value = 0x417445BA, .key = KEY_DOWN }, - { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa5, .value = 0x4174A55A, .key = KEY_LEFT }, - { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa4, .value = 0x417425DA, .key = KEY_RIGHT }, - { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa1, .value = 0x4174857A, .key = KEY_HEADPAT }, // input sw - { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa7, .value = 0x4174E51A, .key = KEY_SOFT_F1 }, // pwr - { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa6, .value = 0x4174659A, .key = KEY_SOFT_F3 }, // frame - { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa3, .value = 0x4174C53A, .key = KEY_SOFT_F2 }, // back - - - /** - * UNKNOWN "LCD remote" - */ - { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x1b, .value = 0x61D6D827, .key = KEY_UP }, - { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x1a, .value = 0x61D658A7, .key = KEY_DOWN }, - { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x4, .value = 0x61D620DF, .key = KEY_LEFT }, - { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x6, .value = 0x61D6609F, .key = KEY_RIGHT }, - { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x5, .value = 0x61D6A05F, .key = KEY_HEADPAT }, - { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x6, .value = 0x61D648B7, .key = KEY_SOFT_F2 }, // pwr - - /** - * UNKNOWN "Audio Switch" SPDIF/TOSLINK 4X1 REMOTE CONTROL - */ - { .protocol = IRPROTO_NEC, .address = 0x0, .command = 0x15, .value = 0xFFA857, .key = KEY_UP }, - { .protocol = IRPROTO_NEC, .address = 0x0, .command = 0x18, .value = 0xFF18E7, .key = KEY_DOWN }, - { .protocol = IRPROTO_NEC, .address = 0x0, .command = 0x16, .value = 0xFF6897, .key = KEY_LEFT }, - { .protocol = IRPROTO_NEC, .address = 0x0, .command = 0xd, .value = 0xFFB04F, .key = KEY_RIGHT }, - { .protocol = IRPROTO_NEC, .address = 0x0, .command = 0x45, .value = 0xFFA25D, .key = KEY_HEADPAT }, -}; \ No newline at end of file diff --git a/include/devices/ir_remotes/all_remotes.h b/include/devices/ir_remotes/all_remotes.h new file mode 100644 index 0000000..0d70148 --- /dev/null +++ b/include/devices/ir_remotes/all_remotes.h @@ -0,0 +1,54 @@ +#include + +// NB: + +const infrared_definition_t HWCONF_IR_BUTTONS = { + /** + Optosupply OE13KIR (https://akizukidenshi.com/goodsaffix/OE13KIR.pdf) + */ + { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0xA0, .value = 0x8F705FA, .key = KEY_UP}, // UP + { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x00, .value = 0x8F700FF, .key = KEY_DOWN}, // DOWN + { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x10, .value = 0x8F708F7, .key = KEY_LEFT}, // LEFT + { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x80, .value = 0x8F701FE, .key = KEY_RIGHT}, // RIGHT + { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x20, .value = 0x8F704FB, .key = KEY_HEADPAT}, // CENTER + { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0xf8, .value = 0x8f71fe0, .key = KEY_SOFT_F1}, // A + { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x78, .value = 0x8f71ee1, .key = KEY_SOFT_F2}, // B + { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x58, .value = 0x8f71ae5, .key = KEY_SOFT_F3}, // C + // Top-left: TYPE=3, VALUE=0x8f78d72, ADDRESS=0x10, COMMAND=0xb1 + // Top-right: TYPE=3, VALUE=0x8f7847b, ADDRESS=0x10, COMMAND=0x21 + // Bottom-left: TYPE=3, VALUE=0x8f78877, ADDRESS=0x10, COMMAND=0x11 + // Bottom-right: TYPE=3, VALUE=0x8f7817e, ADDRESS=0x10, COMMAND=0x81 + // Power: TYPE=3, VALUE=0x8f71be4, ADDRESS=0x10, COMMAND=0xd8 + + /** + * ProSpec DVE (Digital Video Editor) + */ + { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa0, .value = 0x417405FA, .key = KEY_UP }, + { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa2, .value = 0x417445BA, .key = KEY_DOWN }, + { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa5, .value = 0x4174A55A, .key = KEY_LEFT }, + { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa4, .value = 0x417425DA, .key = KEY_RIGHT }, + { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa1, .value = 0x4174857A, .key = KEY_HEADPAT }, // input sw + { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa7, .value = 0x4174E51A, .key = KEY_SOFT_F1 }, // pwr + { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa6, .value = 0x4174659A, .key = KEY_SOFT_F3 }, // frame + { .protocol = IRPROTO_NEC, .address = 0x2e82, .command = 0xa3, .value = 0x4174C53A, .key = KEY_SOFT_F2 }, // back + + + /** + * UNKNOWN "LCD remote" + */ + { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x1b, .value = 0x61D6D827, .key = KEY_UP }, + { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x1a, .value = 0x61D658A7, .key = KEY_DOWN }, + { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x4, .value = 0x61D620DF, .key = KEY_LEFT }, + { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x6, .value = 0x61D6609F, .key = KEY_RIGHT }, + { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x5, .value = 0x61D6A05F, .key = KEY_HEADPAT }, + { .protocol = IRPROTO_NEC, .address = 0x6b86, .command = 0x12, .value = 0x61D648B7, .key = KEY_SOFT_F2 }, // pwr + + /** + * UNKNOWN "Audio Switch" SPDIF/TOSLINK 4X1 REMOTE CONTROL + */ + { .protocol = IRPROTO_NEC, .address = 0x0, .command = 0x15, .value = 0xFFA857, .key = KEY_UP }, + { .protocol = IRPROTO_NEC, .address = 0x0, .command = 0x18, .value = 0xFF18E7, .key = KEY_DOWN }, + { .protocol = IRPROTO_NEC, .address = 0x0, .command = 0x16, .value = 0xFF6897, .key = KEY_LEFT }, + { .protocol = IRPROTO_NEC, .address = 0x0, .command = 0xd, .value = 0xFFB04F, .key = KEY_RIGHT }, + { .protocol = IRPROTO_NEC, .address = 0x0, .command = 0x45, .value = 0xFFA25D, .key = KEY_HEADPAT }, +}; diff --git a/include/devices/led_clock.h b/include/devices/led_clock.h index 5a8c580..f06dc72 100644 --- a/include/devices/led_clock.h +++ b/include/devices/led_clock.h @@ -3,6 +3,7 @@ #include #include #include +#include #define HAS_OUTPUT_AKIZUKI_K875 #define HAS_KEYPAD @@ -46,23 +47,3 @@ const keypad_definition_t HWCONF_KEYPAD = { {GPIO_NUM_27, KEY_UP}, {GPIO_NUM_35, KEY_HEADPAT}, //<- finally a clock to have hardware headpat! }; - -const infrared_definition_t HWCONF_IR_BUTTONS = { - /** - Optosupply OE13KIR (https://akizukidenshi.com/goodsaffix/OE13KIR.pdf) - */ - { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0xA0, .value = 0x8F705FA, .key = KEY_UP}, // UP - { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x00, .value = 0x8F700FF, .key = KEY_DOWN}, // DOWN - { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x10, .value = 0x8F708F7, .key = KEY_LEFT}, // LEFT - { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x80, .value = 0x8F701FE, .key = KEY_RIGHT}, // RIGHT - { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x20, .value = 0x8F704FB, .key = KEY_HEADPAT}, // CENTER - { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0xf8, .value = 0x8f71fe0, .key = KEY_SOFT_F1}, // A - { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x78, .value = 0x8f71ee1, .key = KEY_SOFT_F2}, // B - { .protocol = IRPROTO_NEC, .address = 0x10, .command = 0x58, .value = 0x8f71ae5, .key = KEY_SOFT_F3}, // C - - // Top-left: TYPE=3, VALUE=0x8f78d72, ADDRESS=0x10, COMMAND=0xb1 - // Top-right: TYPE=3, VALUE=0x8f7847b, ADDRESS=0x10, COMMAND=0x21 - // Bottom-left: TYPE=3, VALUE=0x8f78877, ADDRESS=0x10, COMMAND=0x11 - // Bottom-right: TYPE=3, VALUE=0x8f7817e, ADDRESS=0x10, COMMAND=0x81 - // Power: TYPE=3, VALUE=0x8f71be4, ADDRESS=0x10, COMMAND=0xd8 -}; \ No newline at end of file diff --git a/include/views/transitions/transitions.h b/include/views/transitions/transitions.h index a4c38b2..cca6f94 100644 --- a/include/views/transitions/transitions.h +++ b/include/views/transitions/transitions.h @@ -15,18 +15,12 @@ typedef enum transition_type: uint8_t { static Transition* transition_type_to_transition(transition_type_t type) { - static WipeTransition wipe_transition = WipeTransition(); - static SlideTransition h_slide_transition = SlideTransition(false); - static SlideTransition rev_h_slide_transition = SlideTransition(true); - static VerticalSlideTransition v_slide_transition = VerticalSlideTransition(false); - static VerticalSlideTransition rev_v_slide_transition = VerticalSlideTransition(true); - switch(type) { - case TRANSITION_WIPE: return &wipe_transition; - case TRANSITION_SLIDE_HORIZONTAL_LEFT: return &h_slide_transition; - case TRANSITION_SLIDE_HORIZONTAL_RIGHT: return &rev_h_slide_transition; - case TRANSITION_SLIDE_VERTICAL_UP: return &v_slide_transition; - case TRANSITION_SLIDE_VERTICAL_DOWN: return &rev_v_slide_transition; + case TRANSITION_WIPE: return new WipeTransition(); + case TRANSITION_SLIDE_HORIZONTAL_LEFT: return new SlideTransition(false); + case TRANSITION_SLIDE_HORIZONTAL_RIGHT: return new SlideTransition(true); + case TRANSITION_SLIDE_VERTICAL_UP: return new VerticalSlideTransition(false); + case TRANSITION_SLIDE_VERTICAL_DOWN: return new VerticalSlideTransition(true); case TRANSITION_RANDOM: return transition_type_to_transition( (transition_type_t) ((esp_random() % (TRANSITION_RANDOM - 1)) + 1)); case TRANSITION_NONE: diff --git a/src/app/app_host.cpp b/src/app/app_host.cpp index 6318cbc..5740af9 100644 --- a/src/app/app_host.cpp +++ b/src/app/app_host.cpp @@ -85,7 +85,11 @@ void AppHost::step() { push_state(STATE_TIMER_EDITOR, TRANSITION_WIPE); } else if(hid_test_key_state(KEY_SOFT_F2) == KEYSTATE_HIT) { - change_state(STATE_IDLE, TRANSITION_WIPE); + if(get_state() == STATE_IDLE) { + change_state(STATE_MENU, TRANSITION_SLIDE_HORIZONTAL_RIGHT); + } else { + change_state(STATE_IDLE, TRANSITION_WIPE); + } } else if(hid_test_key_state(KEY_SOFT_F3) == KEYSTATE_HIT) { push_state(STATE_STOPWATCH, TRANSITION_WIPE); diff --git a/src/display/gu312.cpp b/src/display/gu312.cpp index cd7598e..68077b2 100644 --- a/src/display/gu312.cpp +++ b/src/display/gu312.cpp @@ -140,9 +140,11 @@ void NoritakeGu312Driver::reset() { set_databus(0xc); pulse_clock(); send_command(0b01000); // WRITE mode - for(int i = 0; i < 192 * 8; i++) { + for(int i = 0; i < 192 * 8 / 2; i++) { set_databus(0xAA); pulse_clock(); + set_databus(0x55); + pulse_clock(); } ESP_LOGI(LOG_TAG, "Reset complete"); diff --git a/src/input/infrared.cpp b/src/input/infrared.cpp index eeaece9..d6c0915 100644 --- a/src/input/infrared.cpp +++ b/src/input/infrared.cpp @@ -27,7 +27,7 @@ static void ir_task(void*) { if(results.repeat) { last_pressed_timestamp = xTaskGetTickCount(); } else if(results.overflow) { - ESP_LOGW(LOG_TAG, "Overflow when decoding IR code TYPE=%i, VALUE=0x%x, ADDRESS=0x%x, COMMAND=0x%x", results.decode_type, results.value, results.address, results.command); + ESP_LOGW(LOG_TAG, "Overflow when decoding IR code TYPE=%i, VALUE=0x%lx, ADDRESS=0x%lx, COMMAND=0x%lx", results.decode_type, results.value, results.address, results.command); } else { bool found = false; for(int i = 0; i < sizeof(HWCONF_IR_BUTTONS) / sizeof(infrared_identifier_t); i++) { @@ -54,7 +54,7 @@ static void ir_task(void*) { } } if(!found) { - ESP_LOGI(LOG_TAG, "Unknown IR code { .protocol = %i, .address = 0x%x, .command = 0x%x, .value = 0x%x, .key = ? }", results.decode_type, results.address, results.command, results.value); + ESP_LOGI(LOG_TAG, "Unknown IR code { .protocol = %i, .address = 0x%lx, .command = 0x%lx, .value = 0x%lx, .key = ? }", results.decode_type, results.address, results.command, results.value); ESP_LOGV(LOG_TAG, "%s", resultToHumanReadableBasic(&results).c_str()); ESP_LOGI(LOG_TAG, "%s", resultToSourceCode(&results).c_str()); } diff --git a/src/views/transitions/transition_animator.cpp b/src/views/transitions/transition_animator.cpp index baeee45..57a4b74 100644 --- a/src/views/transitions/transition_animator.cpp +++ b/src/views/transitions/transition_animator.cpp @@ -37,7 +37,13 @@ bool TransitionAnimationCoordinator::is_completed() { } void TransitionAnimationCoordinator::set_transition(Transition *t) { + if(transition != nullptr) { + delete transition; + transition = nullptr; + } + transition = t; + if(transition != nullptr) { transition->rewind(); completed = false; From 840518a8ac83435136bab1a51cb22cfff0aaf7a6 Mon Sep 17 00:00:00 2001 From: akasaka Date: Fri, 13 Dec 2024 21:06:34 +0900 Subject: [PATCH 11/13] Dynamically size weather forecast screen --- include/views/weather/daily_forecast.h | 12 +++-- src/views/weather/daily_forecast.cpp | 74 ++++++++++++++++++++------ 2 files changed, 66 insertions(+), 20 deletions(-) diff --git a/include/views/weather/daily_forecast.h b/include/views/weather/daily_forecast.h index 3a25dec..b107c25 100644 --- a/include/views/weather/daily_forecast.h +++ b/include/views/weather/daily_forecast.h @@ -1,17 +1,23 @@ #pragma once #include +#include class DailyForecastView: public Screen { public: bool controllable; DailyForecastView(bool controllable = false); - ~DailyForecastView(); void prepare() override; + void render(FantaManipulator*) override; void step() override; private: class Column; - Column * leftView; - Column * rightView; + std::vector columns; int offset; + int total_per_screen; + int one_widget_width; + int screen_width; + bool need_width_update; + void update_width(); + void update_data(); }; \ No newline at end of file diff --git a/src/views/weather/daily_forecast.cpp b/src/views/weather/daily_forecast.cpp index e59ac9c..c1f59a6 100644 --- a/src/views/weather/daily_forecast.cpp +++ b/src/views/weather/daily_forecast.cpp @@ -74,39 +74,79 @@ class DailyForecastView::Column: public Composite { DailyForecastView::DailyForecastView(bool ctl) { controllable = ctl; offset = 0; + columns = {}; - leftView = new Column(); - leftView->width = 48; + one_widget_width = 48; - rightView = new Column(); - rightView->width = 48; - rightView->x_offset = std::max(rightView->width + 4, HWCONF_DISPLAY_WIDTH_PX/2); + screen_width = DisplayFramebuffer::width; + update_width(); +} - add_composable(leftView); - add_composable(rightView); +void DailyForecastView::prepare() { + update_data(); + Screen::prepare(); } -DailyForecastView::~DailyForecastView() { - delete leftView; - delete rightView; +void DailyForecastView::update_data() { + for(int i = 0; i < columns.size(); i++) { + columns[i]->set_forecast(weather_get_forecast(offset + i)); + } } -void DailyForecastView::prepare() { - leftView->set_forecast(weather_get_forecast(0)); - rightView->set_forecast(weather_get_forecast(1)); - Screen::prepare(); +void DailyForecastView::render(FantaManipulator *fb) { + Screen::render(fb); + + // Animation looks like shite, let it just clip for now + // if(fb->get_width() != screen_width) { + // screen_width = fb->get_width(); + // need_width_update = true; + // } +} + +void DailyForecastView::update_width() { + int x_offs = 0; + one_widget_width = 48; + total_per_screen = screen_width / one_widget_width; + one_widget_width = screen_width / total_per_screen; + while(total_per_screen > columns.size()) { + Column * c = new Column(); + add_composable(c); + columns.push_back(c); + } + + for(int i = 0; i < total_per_screen; i++) { + Column * c = columns[i]; + c->width = one_widget_width; + c->x_offset = x_offs; + c->hidden = false; + x_offs += one_widget_width; + } + + if(total_per_screen < columns.size()) { + for(int i = total_per_screen - 1; i < columns.size(); i++) { + columns[i]->hidden = true; + } + } + + need_width_update = false; } void DailyForecastView::step() { Screen::step(); + + if(need_width_update) { + offset = 0; + update_width(); + update_data(); + } + if(controllable) { if(hid_test_key_state_repetition(KEY_RIGHT)) { - offset += 2; + offset += total_per_screen; if((offset + 1) >= FORECAST_WEATHER_DAYS) { offset = 0; } - leftView->set_forecast(weather_get_forecast(offset)); - rightView->set_forecast(weather_get_forecast(offset + 1)); + update_data(); } } } From 5ca0ade4ddca99312ccd38af98c0fd17f3eb73b3 Mon Sep 17 00:00:00 2001 From: akasaka Date: Fri, 13 Dec 2024 21:06:48 +0900 Subject: [PATCH 12/13] Improve remote responsiveness --- src/app/app_host.cpp | 2 +- src/input/keys.cpp | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/app/app_host.cpp b/src/app/app_host.cpp index 5740af9..fc3d605 100644 --- a/src/app/app_host.cpp +++ b/src/app/app_host.cpp @@ -86,7 +86,7 @@ void AppHost::step() { } else if(hid_test_key_state(KEY_SOFT_F2) == KEYSTATE_HIT) { if(get_state() == STATE_IDLE) { - change_state(STATE_MENU, TRANSITION_SLIDE_HORIZONTAL_RIGHT); + push_state(STATE_MENU, TRANSITION_SLIDE_HORIZONTAL_RIGHT); } else { change_state(STATE_IDLE, TRANSITION_WIPE); } diff --git a/src/input/keys.cpp b/src/input/keys.cpp index bbe0e43..1e9bf38 100644 --- a/src/input/keys.cpp +++ b/src/input/keys.cpp @@ -4,6 +4,8 @@ #include #include +static char LOG_TAG[] = "KEYHID"; + const TickType_t KEYPRESS_THRESHOLD_TIME = pdMS_TO_TICKS(16); const TickType_t KEYHOLD_THRESHOLD_TIME = pdMS_TO_TICKS(1000); const TickType_t KEYHOLD_REPETITION_TIME = pdMS_TO_TICKS(500); @@ -56,6 +58,7 @@ static key_state_t min_state_of_mask(key_bitmask_t keys, bool peek = false) { case KEYSTATE_PRESSED: if(pressed_keycombos.count(keys) == 0) { if(!peek) { + ESP_LOGV(LOG_TAG, "Detect combo %x", keys); pressed_keycombos.insert(keys); if(beepola != nullptr) beepola->beep(CHANNEL_NOTICE, 1000, 10); } @@ -76,6 +79,12 @@ void hid_set_key_state(key_id_t key, bool state) { if(hid_state_sensor) hid_state_sensor->trigger(); } else if(!state && (active_keys & KEY_ID_TO_BIT(key)) != 0) { active_keys &= ~KEY_ID_TO_BIT(key); + for(const auto& combo: pressed_keycombos) { + if((combo & KEY_ID_TO_BIT(key)) != 0) { + ESP_LOGV(LOG_TAG, "Unpress combo %x", combo); + pressed_keycombos.erase(combo); + } + } } } From 47b7d03758e95fd1b90ee1876028b720f587836f Mon Sep 17 00:00:00 2001 From: akasaka Date: Fri, 13 Dec 2024 21:20:24 +0900 Subject: [PATCH 13/13] Version bump --- include/devices/big_clock.h | 2 +- include/devices/big_noritake.h | 1 - include/devices/led_clock.h | 2 +- include/devices/mid_clock.h | 2 +- include/devices/mid_clock_noritake.h | 2 +- include/devices/mid_clock_noritake_wide.h | 2 +- src/app/app_host.cpp | 8 +++++--- src/display/gu312.cpp | 4 +--- src/input/infrared.cpp | 8 ++++---- 9 files changed, 15 insertions(+), 16 deletions(-) diff --git a/include/devices/big_clock.h b/include/devices/big_clock.h index f60c95b..329bceb 100644 --- a/include/devices/big_clock.h +++ b/include/devices/big_clock.h @@ -14,7 +14,7 @@ // Plasma Information System OS (not DOS, there's no disk in it!) #define PRODUCT_NAME "PIS-OS" -#define PRODUCT_VERSION "5.3" +#define PRODUCT_VERSION "5.5" // ---- Connection to DISP BOARD ---- const gpio_num_t HWCONF_PLASMA_DATABUS_GPIOS[] = { diff --git a/include/devices/big_noritake.h b/include/devices/big_noritake.h index 6221b9c..3eb1846 100644 --- a/include/devices/big_noritake.h +++ b/include/devices/big_noritake.h @@ -11,7 +11,6 @@ #define HAS_LIGHT_SENSOR #define HAS_TEMP_SENSOR #define HAS_IR_RECEIVER -#define HAS_PIXEL_CAVE #define HAS_OTAFVU // Plasma Information System OS (not DOS, there's no disk in it!) diff --git a/include/devices/led_clock.h b/include/devices/led_clock.h index f06dc72..c7fa608 100644 --- a/include/devices/led_clock.h +++ b/include/devices/led_clock.h @@ -13,7 +13,7 @@ // Plasma Information System OS (not DOS, there's no disk in it!) #define PRODUCT_NAME "LePIS-OS" -#define PRODUCT_VERSION "5.3" +#define PRODUCT_VERSION "5.5" // ---- Connection to beeper ---- const gpio_num_t HWCONF_BEEPER_GPIO = GPIO_NUM_33; diff --git a/include/devices/mid_clock.h b/include/devices/mid_clock.h index fbfefbf..4237acc 100644 --- a/include/devices/mid_clock.h +++ b/include/devices/mid_clock.h @@ -16,7 +16,7 @@ // Plasma Information System OS (not DOS, there's no disk in it!) #define PRODUCT_NAME "uPIS-OS" -#define PRODUCT_VERSION "5.3" +#define PRODUCT_VERSION "5.5" // ---- Connection to beeper ---- const gpio_num_t HWCONF_BEEPER_GPIO = GPIO_NUM_33; diff --git a/include/devices/mid_clock_noritake.h b/include/devices/mid_clock_noritake.h index ff2a0e8..0f63d8a 100644 --- a/include/devices/mid_clock_noritake.h +++ b/include/devices/mid_clock_noritake.h @@ -14,7 +14,7 @@ // Plasma Information System OS (not DOS, there's no disk in it!) #define PRODUCT_NAME "PIS-OS" -#define PRODUCT_VERSION "5.3" +#define PRODUCT_VERSION "5.5" // ---- Connection to beeper ---- const gpio_num_t HWCONF_BEEPER_GPIO = GPIO_NUM_33; diff --git a/include/devices/mid_clock_noritake_wide.h b/include/devices/mid_clock_noritake_wide.h index 274db4c..1432382 100644 --- a/include/devices/mid_clock_noritake_wide.h +++ b/include/devices/mid_clock_noritake_wide.h @@ -15,7 +15,7 @@ // Plasma Information System OS (not DOS, there's no disk in it!) #define PRODUCT_NAME "PIS-dev" -#define PRODUCT_VERSION "5.3" +#define PRODUCT_VERSION "5.5" // ---- Connection to beeper ---- const gpio_num_t HWCONF_BEEPER_GPIO = GPIO_NUM_33; diff --git a/src/app/app_host.cpp b/src/app/app_host.cpp index fc3d605..4123f70 100644 --- a/src/app/app_host.cpp +++ b/src/app/app_host.cpp @@ -27,7 +27,7 @@ void AppHost::switch_to(view_id_t view, transition_type_t transition) { main_idle = (view == STATE_IDLE); if(!main_idle) { split_screen->x_offset = -split_screen->width; - main_screen->x_offset = 0; + main_screen->x_offset = 0; // <- TODO rewrite to instead use a root multiplexor and a split container in one of its views } } else { ESP_LOGV(LOG_TAG, "New SPLIT-screen state %i", view); @@ -149,8 +149,10 @@ bool AppHost::state_wants_full_screen(view_id_t sts) { #if HAS(OTAFVU) sts == STATE_OTAFVU || #endif - sts == STATE_NEW_YEAR || - sts == STATE_PIXEL_CAVE; +#if HAS(PIXEL_CAVE) + sts == STATE_PIXEL_CAVE || +#endif + sts == STATE_NEW_YEAR; #else return true; #endif diff --git a/src/display/gu312.cpp b/src/display/gu312.cpp index 68077b2..cd7598e 100644 --- a/src/display/gu312.cpp +++ b/src/display/gu312.cpp @@ -140,11 +140,9 @@ void NoritakeGu312Driver::reset() { set_databus(0xc); pulse_clock(); send_command(0b01000); // WRITE mode - for(int i = 0; i < 192 * 8 / 2; i++) { + for(int i = 0; i < 192 * 8; i++) { set_databus(0xAA); pulse_clock(); - set_databus(0x55); - pulse_clock(); } ESP_LOGI(LOG_TAG, "Reset complete"); diff --git a/src/input/infrared.cpp b/src/input/infrared.cpp index d6c0915..0fe04ca 100644 --- a/src/input/infrared.cpp +++ b/src/input/infrared.cpp @@ -43,12 +43,12 @@ static void ir_task(void*) { if(last_pressed != KEY_MAX_INVALID) { if(last_pressed == id->key) break; - ESP_LOGI(LOG_TAG, "Unpress key %i (recv)", last_pressed); + ESP_LOGV(LOG_TAG, "Unpress key %i (recv)", last_pressed); hid_set_key_state(last_pressed, false); } last_pressed = id->key; - ESP_LOGI(LOG_TAG, "Press key %i", last_pressed); + ESP_LOGV(LOG_TAG, "Press key %i", last_pressed); hid_set_key_state(id->key, true); break; } @@ -62,8 +62,8 @@ static void ir_task(void*) { receiver.resume(); } else { - if(last_pressed != KEY_MAX_INVALID && (xTaskGetTickCount() - last_pressed_timestamp) > pdMS_TO_TICKS(300)) { - ESP_LOGI(LOG_TAG, "Unpress key %i (timeout)", last_pressed); + if(last_pressed != KEY_MAX_INVALID && (xTaskGetTickCount() - last_pressed_timestamp) > pdMS_TO_TICKS(250)) { + ESP_LOGV(LOG_TAG, "Unpress key %i (timeout)", last_pressed); hid_set_key_state(last_pressed, false); last_pressed = KEY_MAX_INVALID; }