@emprespresso/codemirror-lang-tabloid 0.1.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/dist/index.cjs +130 -41
  2. package/dist/index.js +130 -42
  3. package/package.json +2 -1
package/dist/index.cjs CHANGED
@@ -3,73 +3,162 @@
3
3
  var lr = require('@lezer/lr');
4
4
  var language = require('@codemirror/language');
5
5
  var highlight = require('@lezer/highlight');
6
+ var autocomplete = require('@codemirror/autocomplete');
6
7
 
7
8
  // This file was generated by lezer-generator. You probably shouldn't edit it.
8
9
  const parser = lr.LRParser.deserialize({
9
10
  version: 14,
10
- states: "+WOYQPOOO!TQPO'#C^O#|QPO'#DPO${QPO'#CjO%SQPO'#CkO%SQPO'#ClO&]QPO'#CqOOQO'#DP'#DPO'cQPO'#CbO%SQPO'#CnO%SQPO'#CoO'hQPO'#CpOOQO'#Cz'#CzOOQO'#Cs'#CsOYQPOOOOQO'#Cr'#CrQOQPOOO'oQPO,58xO'vQPO,59QOOQO,59U,59UO(_QPO,59UO(fQPO,59VO)lQPO,59WO%SQPO,59XO%SQPO,59XO%SQPO,59XO%SQPO,59XO%SQPO,59XO*rQPO,58|O*wQPO,59YO+kQPO,59ZOOQO,59[,59[O,qQPO,59[OOQO-E6q-E6qOOQO1G.d1G.dO,xQPO1G.dO-oQPO'#CgO.xQPO1G.lOOQO1G.p1G.pOOQO1G.s1G.sO2]QPO1G.sO2gQPO1G.sO4bQPO1G.sO4iQPO1G.sO%SQPO1G.hO4pQPO1G.tOOQO1G.v1G.vO5tQPO'#C`O$TQPO7+$OO'vQPO'#CuO6oQPO7+$WO8fQPO7+$SO$TQPO7+$`O9lQPO'#CtO9qQPO,58zOOQO<<Gj<<GjOOQO1G.l1G.lOOQO,59a,59aOOQO-E6s-E6sOOQO<<Gz<<GzOOQO,59`,59`OOQO-E6r-E6rPOQO7+$W7+$WO'vQPO,59QO:lQPO'#DPO'vQPO'#CkO'vQPO'#ClO'vQPO,59XO'vQPO,59XO'vQPO,59XO'vQPO,59XO'vQPO,59XO<gQPO1G.sO<qQPO1G.sO>oQPO1G.sO>vQPO1G.sO>}QPO,59VO@WQPO,59W",
11
- stateData: "BO~OlOSmOS~ORQOVVOWVOXVO]ROoPOqWOuSOvTO!RXO!TYO!UZO!W_O~ORaO~ORsXVsXWsXXsX]sXosXqsXusXvsXwsXxsXysXzsX{sX|sX}sX!OsX!PsX!QsX!RsX!TsX!UsX!WsX[sX!VsX!SsX~OtbO~P!YORQOVVOWVOXVO]ROoPOqWOuSOvTO!RXO!TYO!UZO~O[cO~P$TORQOVVOWVOXVO]ROuSOvTO~OwgOxgOygOzhO{hO|iO}iO!OiO!PjO!QkO~OReXVeXWeXXeX]eXoeXqeXueXveX!ReX!TeX!UeX!WeX[eX!VeX!SeX~P%kORlO~O!VoO~P$TOpsO~P$TOR!bOVVOWVOXVO]ROu!cOv!dO~O[vO~P$TOR_aV_aW_aX_a]_ao_aq_au_av_a!R_a!T_a!U_a!W_a[_a!V_a!S_a~P%kOR`aV`aW`aX`a]`ao`aq`au`av`a!R`a!T`a!U`a!W`a[`a!V`a!S`a~P%kOr|O~OwgOxgOygOzhO{hO|iO}iO!OiO!PjO!QkO~P$TORcaVcaWcaXca]caocaqcaucavca!Rca!Tca!Uca!Wca[ca!Vca!Sca~P%kO!V!OO~P$TOR!PO~Ow!eOx!eOy!eOz!fO{!fO|!gO}!gO!O!gO!P!hO!Q!iO~ORZXTZXVZXWZXXZX]ZXoZXqZXuZXvZX!RZX!TZX!UZX!WZX[ZX!VZX!SZX~P,}OT!RORYiVYiWYiXYi]YioYiqYiuYivYiwYixYiyYizYi{Yi|Yi}Yi!OYi!PYi!QYi!RYi!TYi!UYi!WYi[Yi!VYi!SYi~OwgOxgOygORaiVaiWaiXai]aioaiqaiuaivai|ai}ai!Oai!Pai!Qai!Rai!Tai!Uai!Wai[ai!Vai!Sai~Ozai{ai~P0oOzhO{hO~P0oOwgOxgOygOzhO{hO|iO}iO!OiORaiVaiWaiXai]aioaiqaiuaivai!Qai!Rai!Tai!Uai!Wai[ai!Vai!Sai~O!Pai~P2qO!PjO~P2qO!S!UORbiVbiWbiXbi]biobiqbiubivbi!Rbi!Tbi!Ubi!Wbi[bi!Vbi~OT!VORSXVSXWSXXSX]SXoSXqSXuSXvSX!RSX!TSX!USX~OT!RORYqVYqWYqXYq]YqoYqqYquYqvYqwYqxYqyYqzYq{Yq|Yq}Yq!OYq!PYq!QYq!RYq!TYq!UYq!WYq[Yq!VYq!SYq~ORUqVUqWUqXUq]UqoUqqUquUqvUq!RUq!TUq!UUq!WUq[Uq!VUq!SUq~P%kOR!^O~OT!VORSaVSaWSaXSa]SaoSaqSauSavSa!RSa!TSa!USa~Ot!aOTsX~P!YOw!eOx!eOy!eORaiTaiVaiWaiXai]aioaiqaiuaivai|ai}ai!Oai!Pai!Qai!Rai!Tai!Uai!Wai[ai!Vai!Sai~Ozai{ai~P:vOz!fO{!fO~P:vOw!eOx!eOy!eOz!fO{!fO|!gO}!gO!O!gORaiTaiVaiWaiXai]aioaiqaiuaivai!Qai!Rai!Tai!Uai!Wai[ai!Vai!Sai~O!Pai~P<{O!P!hO~P<{OR_aT_aV_aW_aX_a]_ao_aq_au_av_a!R_a!T_a!U_a!W_a[_a!V_a!S_a~P,}OR`aT`aV`aW`aX`a]`ao`aq`au`av`a!R`a!T`a!U`a!W`a[`a!V`a!S`a~P,}OWVXoqv!W!U!T!Rurpt!V!S|x!O!P!Qz{wy}Rt~",
12
- goto: "%itPPuP!RPuPPP!U!vPP!U!U!U!Uuuuu#P#T#c#iPPPP#oPPPP$Te[ORZ^admp!Q!UR!Qs!_VORSTXYZ^abdghijkmp|!Q!R!U!a!c!d!e!f!g!h!iQubQ!Y!aR!Z!RT`O^Q^OQdRQpZVq^dpQ!W!PR!_!WQ!SuR![!S[]ORZ^dpQraQ}mQ!X!QR!]!UdUORZ^admp!Q!UQeSQfTQmXQnYUtb!R!aSwg!eQxhQyiQzjQ{kQ!T|Q!j!fQ!k!gQ!l!hQ!m!iQ!n!cR!o!d",
13
- nodeNames: "⚠ Program FunctionDecl Identifier ArgumentList , Assignment NumberLiteral StringLiteral BooleanLiteral FunctionCall ArgumentExpression ) ( ParenBlock PrintStatement InputStatement BinaryExpression IfStatement ReturnStatement Block ExprStatement ProgramEnd",
14
- maxTerm: 54,
11
+ states: "+WO]QPOOO!WQPO'#C_O$PQPO'#DeO%OQPO'#CpO%VQPO'#CqO%VQPO'#CsO&`QPO'#DYOOQO'#De'#DeO'fQPO'#CeO%VQPO'#DQO%VQPO'#DTO'kQPO'#DVOOQO'#Dd'#DdOOQO'#D]'#D]O]QPOOOOQO'#DZ'#DZQOQPOOO'rQPO,58yO'yQPO,59VOOQO,59[,59[O(bQPO,59[O(iQPO,59]O)oQPO,59_O%VQPO,59aO%VQPO,59aO%VQPO,59aO%VQPO,59aO%VQPO,59aO*uQPO,59PO*zQPO,59lO+nQPO,59oOOQO,59q,59qO,tQPO,59qOOQO-E7Z-E7ZOOQO1G.e1G.eO,{QPO1G.eO-rQPO'#CmO.{QPO1G.qOOQO1G.v1G.vOOQO1G.{1G.{O2`QPO1G.{O2jQPO1G.{O4eQPO1G.{O4lQPO1G.{O%VQPO1G.kO4sQPO1G/WOOQO1G/]1G/]O5wQPO'#CcO$WQPO7+$PO'yQPO'#D_O6rQPO7+$]O8iQPO7+$VO$WQPO7+$rO9oQPO'#D^O9tQPO,58}OOQO<<Gk<<GkOOQO1G.q1G.qOOQO,59y,59yOOQO-E7]-E7]OOQO<<H^<<H^OOQO,59x,59xOOQO-E7[-E7[POQO7+$]7+$]O'yQPO,59VO:oQPO'#DeO'yQPO'#CqO'yQPO'#CsO'yQPO,59aO'yQPO,59aO'yQPO,59aO'yQPO,59aO'yQPO,59aO<jQPO1G.{O<tQPO1G.{O>rQPO1G.{O>yQPO1G.{O?QQPO,59]O@ZQPO,59_",
12
+ stateData: "BS~O!UOS!VOSPOS~OSPOTQOYWO[VO]VO^VOcROfSOhTOuXOxYOzZO!O_O~OTaO~OS!XXT!XXY!XX[!XX]!XX^!XXc!XXf!XXh!XXj!XXk!XXl!XXm!XXn!XXo!XXp!XXq!XXr!XXs!XXu!XXx!XXz!XX!O!XXb!XX{!XXv!XX~O`bO~P!]OSPOTQOYWO[VO]VO^VOcROfSOhTOuXOxYOzZO~ObcO~P$WOTQO[VO]VO^VOcROfSOhTO~OjgOkgOlgOmhOnhOoiOpiOqiOrjOskO~OS|XT|XY|X[|X]|X^|Xc|Xf|Xh|Xu|Xx|Xz|X!O|Xb|X{|Xv|X~P%nOTlO~O{oO~P$WOUsO~P$WOT!bO[VO]VO^VOcROf!cOh!dO~ObvO~P$WOSeaTeaYea[ea]ea^eaceafeaheaueaxeazea!Oeabea{eavea~P%nOSgaTgaYga[ga]ga^gacgafgahgaugaxgazga!Ogabga{gavga~P%nOZ|O~OjgOkgOlgOmhOnhOoiOpiOqiOrjOskO~P$WOSwaTwaYwa[wa]wa^wacwafwahwauwaxwazwa!Owabwa{wavwa~P%nO{!OO~P$WOT!PO~Oj!eOk!eOl!eOm!fOn!fOo!gOp!gOq!gOr!hOs!iO~OSaXTaXWaXYaX[aX]aX^aXcaXfaXhaXuaXxaXzaX!OaXbaX{aXvaX~P-QOW!ROS_iT_iY_i[_i]_i^_ic_if_ih_ij_ik_il_im_in_io_ip_iq_ir_is_iu_ix_iz_i!O_ib_i{_iv_i~OjgOkgOlgOSiiTiiYii[ii]ii^iiciifiihiioiipiiqiiriisiiuiixiizii!Oiibii{iivii~Omiinii~P0rOmhOnhO~P0rOjgOkgOlgOmhOnhOoiOpiOqiOSiiTiiYii[ii]ii^iiciifiihiisiiuiixiizii!Oiibii{iivii~Orii~P2tOrjO~P2tOv!UOStiTtiYti[ti]ti^tictiftihtiutixtizti!Otibti{ti~OW!VOSVXTVXYVX[VX]VX^VXcVXfVXhVXuVXxVXzVX~OW!ROS_qT_qY_q[_q]_q^_qc_qf_qh_qj_qk_ql_qm_qn_qo_qp_qq_qr_qs_qu_qx_qz_q!O_qb_q{_qv_q~OSXqTXqYXq[Xq]Xq^XqcXqfXqhXquXqxXqzXq!OXqbXq{XqvXq~P%nOT!^O~OW!VOSVaTVaYVa[Va]Va^VacVafVahVauVaxVazVa~O`!aOW!XX~P!]Oj!eOk!eOl!eOSiiTiiWiiYii[ii]ii^iiciifiihiioiipiiqiiriisiiuiixiizii!Oiibii{iivii~Omiinii~P:yOm!fOn!fO~P:yOj!eOk!eOl!eOm!fOn!fOo!gOp!gOq!gOSiiTiiWiiYii[ii]ii^iiciifiihiisiiuiixiizii!Oiibii{iivii~Orii~P=OOr!hO~P=OOSeaTeaWeaYea[ea]ea^eaceafeaheaueaxeazea!Oeabea{eavea~P-QOSgaTgaWgaYga[ga]ga^gacgafgahgaugaxgazga!Ogabga{gavga~P-QOP][^SYh!OzxufZU`{vokqrsmnjlpT`~",
13
+ goto: "%}!YPPP!ZPPP!gP!ZPPPPP!jP#[PP!j!jP!jP!jPPPPPPPPPP!ZPP!ZP!ZPP!Z#eP#i#w#}PPPP$T$ie[ORZ^admp!Q!UR!Qs!_VORSTXYZ^abdghijkmp|!Q!R!U!a!c!d!e!f!g!h!iQubQ!Y!aR!Z!RT`O^Q^OQdRQpZVq^dpQ!W!PR!_!WQ!SuR![!S[]ORZ^dpQraQ}mQ!X!QR!]!UdUORZ^admp!Q!UQeSQfTQmXQnYUtb!R!aSwg!eQxhQyiQzjQ{kQ!T|Q!j!fQ!k!gQ!l!hQ!m!iQ!n!cR!o!d",
14
+ nodeNames: "⚠ Comment Program FunctionDecl discoverHowTo Identifier with ArgumentList , Assignment expertsClaim toBe NumberLiteral StringLiteral BooleanLiteral FunctionCall of ArgumentExpression ) ( ParenBlock PrintStatement youWontWantToMiss InputStatement latestNewsOn BinaryExpression times dividedBy modulo plus minus isActually beats smallerThan and or IfStatement whatIf liesBang ReturnStatement shockingDevelopment Block rumorHasIt endOfStory ExprStatement ProgramEnd pleaseLikeAndSubscribe",
15
+ maxTerm: 55,
15
16
  nodeProps: [
16
- ["openedBy", 12,"("],
17
- ["closedBy", 13,")"]
17
+ ["openedBy", 18,"("],
18
+ ["closedBy", 19,")"]
18
19
  ],
19
- skippedNodes: [0],
20
+ skippedNodes: [0,1],
20
21
  repeatNodeCount: 3,
21
- tokenData: "!NY~RrXY#]YZ#h]^#hpq#]rs#mwx%Zxy(ryz(w|}(|}!O(^!Q![)R!c!d)l!d!e+Y!e!f-y!f!g4d!g!h=m!h!k(^!k!lEY!l!n(^!n!oGm!o!pNW!p!q(^!q!r!%t!r!s!'d!s!t(^!t!u!.z!u!v!2|!v!w!=a!w!y(^!y!z!D}!z!{(^!{!|!I`!|!}(^#R#S(^~#bQl~XY#]pq#]~#mOm~~#pVOr#mrs$Vs#O#m#O#P$[#P;'S#m;'S;=`%T<%lO#m~$[OW~~$_RO;'S#m;'S;=`$h;=`O#m~$kWOr#mrs$Vs#O#m#O#P$[#P;'S#m;'S;=`%T;=`<%l#m<%lO#m~%WP;=`<%l#m~%`_R~Ow&_wx'vx}&_}!O%Z!O!Q&_!Q![%Z![!c&_!c!}%Z!}#O&_#O#P&w#P#R&_#R#S%Z#S;'S&_;'S;=`'p<%lO&_~&bVOw&_wx$Vx#O&_#O#P&w#P;'S&_;'S;=`'p<%lO&_~&zRO;'S&_;'S;=`'T;=`O&_~'WWOw&_wx$Vx#O&_#O#P&w#P;'S&_;'S;=`'p;=`<%l&_<%lO&_~'sP;=`<%l&_~'}TW~R~wx(^}!O(^!Q![(^!c!}(^#R#S(^~(cTR~wx(^}!O(^!Q![(^!c!}(^#R#S(^~(wO]~~(|O[~~)ROT~~)WQV~!O!P)^!Q![)R~)aP!Q![)d~)iPV~!Q![)d~)qVR~wx(^}!O(^!Q![(^!c!p(^!p!q*W!q!}(^#R#S(^~*]VR~wx(^}!O(^!Q![(^!c!f(^!f!g*r!g!}(^#R#S(^~*yT!P~R~wx(^}!O(^!Q![(^!c!}(^#R#S(^~+_VR~wx(^}!O(^!Q![(^!c!g(^!g!h+t!h!}(^#R#S(^~+yUR~wx(^}!O(^!Q![(^!c!d,]!d!}(^#R#S(^~,bVR~wx(^}!O(^!Q![(^!c!v(^!v!w,w!w!}(^#R#S(^~,|VR~wx(^}!O(^!Q![(^!c!u(^!u!v-c!v!}(^#R#S(^~-jT}~R~wx(^}!O(^!Q![(^!c!}(^#R#S(^~.OVR~wx(^}!O(^!Q![(^!c!q(^!q!r.e!r!}(^#R#S(^~.jVR~wx(^}!O(^!Q![(^!c!o(^!o!p/P!p!}(^#R#S(^~/UVR~wx(^}!O(^!Q![(^!c!r(^!r!s/k!s!}(^#R#S(^~/pVR~wx(^}!O(^!Q![(^!c!n(^!n!o0V!o!}(^#R#S(^~0[VR~wx(^}!O(^!Q![(^!c!g(^!g!h0q!h!}(^#R#S(^~0vVR~wx(^}!O(^!Q![(^!c!v(^!v!w1]!w!}(^#R#S(^~1bVR~wx(^}!O(^!Q![(^!c!g(^!g!h1w!h!}(^#R#S(^~1|VR~wx(^}!O(^!Q![(^!c!n(^!n!o2c!o!}(^#R#S(^~2hVR~wx(^}!O(^!Q![(^!c!{(^!{!|2}!|!}(^#R#S(^~3SVR~XY3ipq3iwx(^}!O(^!Q![(^!c!}(^#R#S(^~3lRXY3ipq3i!y!z3u~3xP!t!u3{~4OP!q!r4R~4UP!p!q4X~4[P!i!j4_~4dOX~~4iVR~wx(^}!O(^!Q![(^!c!k(^!k!l5O!l!}(^#R#S(^~5TXR~wx(^}!O(^!Q![(^!c!u(^!u!v5p!v!x(^!x!y:^!y!}(^#R#S(^~5uVR~wx(^}!O(^!Q![(^!c!e(^!e!f6[!f!}(^#R#S(^~6aVR~wx(^}!O(^!Q![(^!c!q(^!q!r6v!r!}(^#R#S(^~6{VR~wx(^}!O(^!Q![(^!c!x(^!x!y7b!y!}(^#R#S(^~7gVR~wx(^}!O(^!Q![(^!c!g(^!g!h7|!h!}(^#R#S(^~8RVR~wx(^}!O(^!Q![(^!c!t(^!t!u8h!u!}(^#R#S(^~8mVR~XY9Spq9Swx(^}!O(^!Q![(^!c!}(^#R#S(^~9VRXY9Spq9S!j!k9`~9cP!q!r9f~9iP!y!z9l~9oQXY9upq9u~9xRXY9upq9u!v!w:R~:UP!q!r:X~:^Oo~~:cVR~wx(^}!O(^!Q![(^!c!k(^!k!l:x!l!}(^#R#S(^~:}VR~wx(^}!O(^!Q![(^!c!f(^!f!g;d!g!}(^#R#S(^~;iVR~wx(^}!O(^!Q![(^!c!g(^!g!h<O!h!}(^#R#S(^~<TVR~wx(^}!O(^!Q![(^!c!f(^!f!g<j!g!}(^#R#S(^~<oVR~XY=Upq=Uwx(^}!O(^!Q![(^!c!}(^#R#S(^~=XRXY=Upq=U!d!e=b~=eP!{!|=h~=mOx~~=rXR~wx(^}!O(^!Q![(^!c!p(^!p!q>_!q!z(^!z!{@{!{!}(^#R#S(^~>dVR~wx(^}!O(^!Q![(^!c!f(^!f!g>y!g!}(^#R#S(^~?OVR~XY?epq?ewx(^}!O(^!Q![(^!c!}(^#R#S(^~?hRXY?epq?e!q!r?q~?tP!h!i?w~?zQXY@Qpq@Q~@TRXY@Qpq@Q!u!v@^~@aP!v!w@d~@gP!q!r@j~@mP!t!u@p~@sP!{!|@v~@{O!V~~AQVR~wx(^}!O(^!Q![(^!c!r(^!r!sAg!s!}(^#R#S(^~AlVR~wx(^}!O(^!Q![(^!c!g(^!g!hBR!h!}(^#R#S(^~BWVR~wx(^}!O(^!Q![(^!c!t(^!t!uBm!u!}(^#R#S(^~BrVR~wx(^}!O(^!Q![(^!c!v(^!v!wCX!w!}(^#R#S(^~C^VR~wx(^}!O(^!Q![(^!c!u(^!u!vCs!v!}(^#R#S(^~CxVR~XYD_pqD_wx(^}!O(^!Q![(^!c!}(^#R#S(^~DbRXYD_pqD_!e!fDk~DnP!n!oDq~DtP!c!dDw~DzP!k!lD}~EQP!o!pET~EYOq~~E_VR~wx(^}!O(^!Q![(^!c!u(^!u!vEt!v!}(^#R#S(^~EyVR~XYF`pqF`wx(^}!O(^!Q![(^!c!}(^#R#S(^~FcRXYF`pqF`!c!dFl~FoP!e!fFr~FuP!v!wFx~F{P!w!xGO~GRP!c!dGU~GXP!n!oG[~G_P!n!oGb~GeP!{!|Gh~GmO|~~GrWR~wx(^}!O(^!Q![(^!c!dH[!d!k(^!k!lLd!l!}(^#R#S(^~HaVR~wx(^}!O(^!Q![(^!c!v(^!v!wHv!w!}(^#R#S(^~H{VR~wx(^}!O(^!Q![(^!c!g(^!g!hIb!h!}(^#R#S(^~IgVR~wx(^}!O(^!Q![(^!c!u(^!u!vI|!v!}(^#R#S(^~JRVR~wx(^}!O(^!Q![(^!c!v(^!v!wJh!w!}(^#R#S(^~JmVR~XYKSpqKSwx(^}!O(^!Q![(^!c!}(^#R#S(^~KVRXYKSpqKS!p!qK`~KcP!g!hKf~KiP!y!zKl~KoP!u!vKr~KuQXYK{pqK{~LORXYK{pqK{!q!rLX~L[P!p!qL_~LdOv~~LiVR~wx(^}!O(^!Q![(^!c!g(^!g!hMO!h!}(^#R#S(^~MTVR~wx(^}!O(^!Q![(^!c!u(^!u!vMj!v!}(^#R#S(^~MoUR~qrNRwx(^}!O(^!Q![(^!c!}(^#R#S(^~NWO!S~~N]XR~wx(^}!O(^!Q![(^!c!k(^!k!lNx!l!q(^!q!r!#Q!r!}(^#R#S(^~N}VR~wx(^}!O(^!Q![(^!c!p(^!p!q! d!q!}(^#R#S(^~! iVR~wx(^}!O(^!Q![(^!c!w(^!w!x!!O!x!}(^#R#S(^~!!TVR~wx(^}!O(^!Q![(^!c!u(^!u!v!!j!v!}(^#R#S(^~!!qT{~R~wx(^}!O(^!Q![(^!c!}(^#R#S(^~!#VVR~wx(^}!O(^!Q![(^!c!f(^!f!g!#l!g!}(^#R#S(^~!#qVR~wx(^}!O(^!Q![(^!c!w(^!w!x!$W!x!}(^#R#S(^~!$]VR~wx(^}!O(^!Q![(^!c!n(^!n!o!$r!o!}(^#R#S(^~!$wVR~wx(^}!O(^!Q![(^!c!q(^!q!r!%^!r!}(^#R#S(^~!%eTy~R~wx(^}!O(^!Q![(^!c!}(^#R#S(^~!%yXR~wx(^}!O(^!Q![(^!c!h(^!h!i!&f!i!t(^!t!u!&|!u!}(^#R#S(^~!&mTt~R~wx(^}!O(^!Q![(^!c!}(^#R#S(^~!'TT!Q~R~wx(^}!O(^!Q![(^!c!}(^#R#S(^~!'iVR~wx(^}!O(^!Q![(^!c!n(^!n!o!(O!o!}(^#R#S(^~!(TXR~wx(^}!O(^!Q![(^!c!g(^!g!h!(p!h!w(^!w!x!-x!x!}(^#R#S(^~!(uUR~wx(^}!O(^!Q![(^!c!d!)X!d!}(^#R#S(^~!)^VR~wx(^}!O(^!Q![(^!c!u(^!u!v!)s!v!}(^#R#S(^~!)xVR~wx(^}!O(^!Q![(^!c!g(^!g!h!*_!h!}(^#R#S(^~!*dVR~XY!*ypq!*ywx(^}!O(^!Q![(^!c!}(^#R#S(^~!*|RXY!*ypq!*y!n!o!+V~!+YP!k!l!+]~!+`P!m!n!+c~!+fP!g!h!+i~!+lQXY!+rpq!+r~!+uRXY!+rpq!+r!c!d!,O~!,RP!p!q!,U~!,XP!f!g!,[~!,_QXY!,epq!,e~!,hRXY!,epq!,e!u!v!,q~!,tP!w!x!,w~!,zP!d!e!,}~!-QP!u!v!-T~!-WP!e!f!-Z~!-^P!t!u!-a~!-dP!k!l!-g~!-jP!d!e!-m~!-pP!g!h!-s~!-xO!W~~!-}VR~wx(^}!O(^!Q![(^!c!u(^!u!v!.d!v!}(^#R#S(^~!.kTz~R~wx(^}!O(^!Q![(^!c!}(^#R#S(^~!/PVR~wx(^}!O(^!Q![(^!c!w(^!w!x!/f!x!}(^#R#S(^~!/kVR~wx(^}!O(^!Q![(^!c!o(^!o!p!0Q!p!}(^#R#S(^~!0VVR~wx(^}!O(^!Q![(^!c!q(^!q!r!0l!r!}(^#R#S(^~!0qVR~wx(^}!O(^!Q![(^!c!t(^!t!u!1W!u!}(^#R#S(^~!1]VR~XY!1rpq!1rwx(^}!O(^!Q![(^!c!}(^#R#S(^~!1uRXY!1rpq!1r!j!k!2O~!2RP!c!d!2U~!2XP!u!v!2[~!2_QXY!2epq!2e~!2hRXY!2epq!2e!k!l!2q~!2tP!v!w!2w~!2|O!U~~!3RXR~wx(^}!O(^!Q![(^!c!j(^!j!k!3n!k!o(^!o!p!9]!p!}(^#R#S(^~!3sVR~wx(^}!O(^!Q![(^!c!q(^!q!r!4Y!r!}(^#R#S(^~!4_VR~wx(^}!O(^!Q![(^!c!e(^!e!f!4t!f!}(^#R#S(^~!4yVR~wx(^}!O(^!Q![(^!c!m(^!m!n!5`!n!}(^#R#S(^~!5eVR~wx(^}!O(^!Q![(^!c!k(^!k!l!5z!l!}(^#R#S(^~!6PVR~wx(^}!O(^!Q![(^!c!p(^!p!q!6f!q!}(^#R#S(^~!6kVR~wx(^}!O(^!Q![(^!c!i(^!i!j!7Q!j!}(^#R#S(^~!7VVR~XY!7lpq!7lwx(^}!O(^!Q![(^!c!}(^#R#S(^~!7oRXY!7lpq!7l!f!g!7x~!7{P!g!h!8O~!8RP!x!y!8U~!8XP!g!h!8[~!8_P!n!o!8b~!8eP!q!r!8h~!8kP!r!s!8n~!8qP!o!p!8t~!8wP!g!h!8z~!8}P!p!q!9Q~!9TP!v!w!9W~!9]O!T~~!9bUR~wx(^}!O(^!Q![(^!c!d!9t!d!}(^#R#S(^~!9yVR~wx(^}!O(^!Q![(^!c!n(^!n!o!:`!o!}(^#R#S(^~!:eVR~wx(^}!O(^!Q![(^!c!n(^!n!o!:z!o!}(^#R#S(^~!;PVR~wx(^}!O(^!Q![(^!c!g(^!g!h!;f!h!}(^#R#S(^~!;kVR~wx(^}!O(^!Q![(^!c!t(^!t!u!<Q!u!}(^#R#S(^~!<VVR~XY!<lpq!<lwx(^}!O(^!Q![(^!c!}(^#R#S(^~!<oRXY!<lpq!<l!v!w!<x~!<{P!j!k!=O~!=RP!c!d!=U~!=XP!p!q!=[~!=aO!O~~!=fXR~wx(^}!O(^!Q![(^!c!k(^!k!l!>R!l!q(^!q!r!@Z!r!}(^#R#S(^~!>WVR~wx(^}!O(^!Q![(^!c!o(^!o!p!>m!p!}(^#R#S(^~!>rVR~wx(^}!O(^!Q![(^!c!g(^!g!h!?X!h!}(^#R#S(^~!?^VR~wx(^}!O(^!Q![(^!c!u(^!u!v!?s!v!}(^#R#S(^~!?zTw~R~wx(^}!O(^!Q![(^!c!}(^#R#S(^~!@`XR~XY!@{pq!@{wx(^}!O(^!Q![(^!c!v(^!v!w!Ad!w!}(^#R#S(^~!AORXY!@{pq!@{!d!e!AX~!A[P!g!h!A_~!AdOr~~!AiUR~wx(^}!O(^!Q![(^!c!d!A{!d!}(^#R#S(^~!BQVR~wx(^}!O(^!Q![(^!c!n(^!n!o!Bg!o!}(^#R#S(^~!BlVR~wx(^}!O(^!Q![(^!c!n(^!n!o!CR!o!}(^#R#S(^~!CWVR~wx(^}!O(^!Q![(^!c!{(^!{!|!Cm!|!}(^#R#S(^~!CrVR~XY!DXpq!DXwx(^}!O(^!Q![(^!c!}(^#R#S(^~!D[RXY!DXpq!DX!t!u!De~!DhP!k!l!Dk~!DnP!i!j!Dq~!DtP!j!k!Dw~!DzP!v!w4_~!ESWR~wx(^}!O(^!Q![(^!c!j(^!j!k!El!k!l!Gr!l!}(^#R#S(^~!EqUR~wx(^}!O(^!Q![(^!c!d!FT!d!}(^#R#S(^~!FYVR~wx(^}!O(^!Q![(^!c!v(^!v!w!Fo!w!}(^#R#S(^~!FtVR~XY!GZpq!GZwx(^}!O(^!Q![(^!c!}(^#R#S(^~!G^RXY!GZpq!GZ!k!l!Gg~!GjP!h!i!Gm~!GrO!R~~!GwVR~wx(^}!O(^!Q![(^!c!v(^!v!w!H^!w!}(^#R#S(^~!HcVR~wx(^}!O(^!Q![(^!c!j(^!j!k!Hx!k!}(^#R#S(^~!IPTp~R~wx(^}!O(^!Q![(^!c!}(^#R#S(^~!IeVR~wx(^}!O(^!Q![(^!c!q(^!q!r!Iz!r!}(^#R#S(^~!JPVR~wx(^}!O(^!Q![(^!c!w(^!w!x!Jf!x!}(^#R#S(^~!JkVR~XY!KQpq!KQwx(^}!O(^!Q![(^!c!}(^#R#S(^~!KTRXY!KQpq!KQ!y!z!K^~!KaP!q!r!Kd~!KgP!p!q!Kj~!KmPwx!Kp~!KsP!v!w!Kv~!KyQXY!LPpq!LP~!LSRXY!LPpq!LP!y!z!L]~!L`P!c!d!Lc~!LfP!p!q!Li~!LlP!v!w!Lo~!LrQXY!Lxpq!Lx~!L{RXY!Lxpq!Lx!v!w!MU~!MXP!q!r!M[~!M_QXY!Mepq!Me~!MhRXY!Mepq!Me!o!p!Mq~!MtP!k!l!Mw~!MzP!u!v!M}~!NQP!u!v!NT~!NYOu~",
22
+ tokenData: "!Nw~RsXY#`YZ#k]^#kpq#`rs#pst%^wx%xxy)ayz)f|})k}!O({!Q![)p!c!d*Z!d!e+w!e!f.h!f!g5R!g!h>[!h!k({!k!lEw!l!n({!n!oH[!o!pNu!p!q({!q!r!&c!r!s!(R!s!t({!t!u!/i!u!v!3k!v!w!>O!w!y({!y!z!El!z!{({!{!|!I}!|!}({#R#S({~#eQ!U~XY#`pq#`~#pO!V~~#sVOr#prs$Ys#O#p#O#P$_#P;'S#p;'S;=`%W<%lO#p~$_O]~~$bRO;'S#p;'S;=`$k;=`O#p~$nWOr#prs$Ys#O#p#O#P$_#P;'S#p;'S;=`%W;=`<%l#p<%lO#p~%ZP;=`<%l#p~%cTP~OY%^Z]%^^;'S%^;'S;=`%r<%lO%^~%uP;=`<%l%^~%}_T~Ow&|wx(ex}&|}!O%x!O!Q&|!Q![%x![!c&|!c!}%x!}#O&|#O#P'f#P#R&|#R#S%x#S;'S&|;'S;=`(_<%lO&|~'PVOw&|wx$Yx#O&|#O#P'f#P;'S&|;'S;=`(_<%lO&|~'iRO;'S&|;'S;=`'r;=`O&|~'uWOw&|wx$Yx#O&|#O#P'f#P;'S&|;'S;=`(_;=`<%l&|<%lO&|~(bP;=`<%l&|~(lT]~T~wx({}!O({!Q![({!c!}({#R#S({~)QTT~wx({}!O({!Q![({!c!}({#R#S({~)fOc~~)kOb~~)pOW~~)uQ[~!O!P){!Q![)p~*OP!Q![*R~*WP[~!Q![*R~*`VT~wx({}!O({!Q![({!c!p({!p!q*u!q!}({#R#S({~*zVT~wx({}!O({!Q![({!c!f({!f!g+a!g!}({#R#S({~+hTr~T~wx({}!O({!Q![({!c!}({#R#S({~+|VT~wx({}!O({!Q![({!c!g({!g!h,c!h!}({#R#S({~,hUT~wx({}!O({!Q![({!c!d,z!d!}({#R#S({~-PVT~wx({}!O({!Q![({!c!v({!v!w-f!w!}({#R#S({~-kVT~wx({}!O({!Q![({!c!u({!u!v.Q!v!}({#R#S({~.XTp~T~wx({}!O({!Q![({!c!}({#R#S({~.mVT~wx({}!O({!Q![({!c!q({!q!r/S!r!}({#R#S({~/XVT~wx({}!O({!Q![({!c!o({!o!p/n!p!}({#R#S({~/sVT~wx({}!O({!Q![({!c!r({!r!s0Y!s!}({#R#S({~0_VT~wx({}!O({!Q![({!c!n({!n!o0t!o!}({#R#S({~0yVT~wx({}!O({!Q![({!c!g({!g!h1`!h!}({#R#S({~1eVT~wx({}!O({!Q![({!c!v({!v!w1z!w!}({#R#S({~2PVT~wx({}!O({!Q![({!c!g({!g!h2f!h!}({#R#S({~2kVT~wx({}!O({!Q![({!c!n({!n!o3Q!o!}({#R#S({~3VVT~wx({}!O({!Q![({!c!{({!{!|3l!|!}({#R#S({~3qVT~XY4Wpq4Wwx({}!O({!Q![({!c!}({#R#S({~4ZRXY4Wpq4W!y!z4d~4gP!t!u4j~4mP!q!r4p~4sP!p!q4v~4yP!i!j4|~5RO^~~5WVT~wx({}!O({!Q![({!c!k({!k!l5m!l!}({#R#S({~5rXT~wx({}!O({!Q![({!c!u({!u!v6_!v!x({!x!y:{!y!}({#R#S({~6dVT~wx({}!O({!Q![({!c!e({!e!f6y!f!}({#R#S({~7OVT~wx({}!O({!Q![({!c!q({!q!r7e!r!}({#R#S({~7jVT~wx({}!O({!Q![({!c!x({!x!y8P!y!}({#R#S({~8UVT~wx({}!O({!Q![({!c!g({!g!h8k!h!}({#R#S({~8pVT~wx({}!O({!Q![({!c!t({!t!u9V!u!}({#R#S({~9[VT~XY9qpq9qwx({}!O({!Q![({!c!}({#R#S({~9tRXY9qpq9q!j!k9}~:QP!q!r:T~:WP!y!z:Z~:^QXY:dpq:d~:gRXY:dpq:d!v!w:p~:sP!q!r:v~:{OS~~;QVT~wx({}!O({!Q![({!c!k({!k!l;g!l!}({#R#S({~;lVT~wx({}!O({!Q![({!c!f({!f!g<R!g!}({#R#S({~<WVT~wx({}!O({!Q![({!c!g({!g!h<m!h!}({#R#S({~<rVT~wx({}!O({!Q![({!c!f({!f!g=X!g!}({#R#S({~=^VT~XY=spq=swx({}!O({!Q![({!c!}({#R#S({~=vRXY=spq=s!d!e>P~>SP!{!|>V~>[Ok~~>aXT~wx({}!O({!Q![({!c!p({!p!q>|!q!z({!z!{Aj!{!}({#R#S({~?RVT~wx({}!O({!Q![({!c!f({!f!g?h!g!}({#R#S({~?mVT~XY@Spq@Swx({}!O({!Q![({!c!}({#R#S({~@VRXY@Spq@S!q!r@`~@cP!h!i@f~@iQXY@opq@o~@rRXY@opq@o!u!v@{~AOP!v!wAR~AUP!q!rAX~A[P!t!uA_~AbP!{!|Ae~AjO{~~AoVT~wx({}!O({!Q![({!c!r({!r!sBU!s!}({#R#S({~BZVT~wx({}!O({!Q![({!c!g({!g!hBp!h!}({#R#S({~BuVT~wx({}!O({!Q![({!c!t({!t!uC[!u!}({#R#S({~CaVT~wx({}!O({!Q![({!c!v({!v!wCv!w!}({#R#S({~C{VT~wx({}!O({!Q![({!c!u({!u!vDb!v!}({#R#S({~DgVT~XYD|pqD|wx({}!O({!Q![({!c!}({#R#S({~EPRXYD|pqD|!e!fEY~E]P!n!oE`~EcP!c!dEf~EiP!k!lEl~EoP!o!pEr~EwOY~~E|VT~wx({}!O({!Q![({!c!u({!u!vFc!v!}({#R#S({~FhVT~XYF}pqF}wx({}!O({!Q![({!c!}({#R#S({~GQRXYF}pqF}!c!dGZ~G^P!e!fGa~GdP!v!wGg~GjP!w!xGm~GpP!c!dGs~GvP!n!oGy~G|P!n!oHP~HSP!{!|HV~H[Oo~~HaWT~wx({}!O({!Q![({!c!dHy!d!k({!k!lMR!l!}({#R#S({~IOVT~wx({}!O({!Q![({!c!v({!v!wIe!w!}({#R#S({~IjVT~wx({}!O({!Q![({!c!g({!g!hJP!h!}({#R#S({~JUVT~wx({}!O({!Q![({!c!u({!u!vJk!v!}({#R#S({~JpVT~wx({}!O({!Q![({!c!v({!v!wKV!w!}({#R#S({~K[VT~XYKqpqKqwx({}!O({!Q![({!c!}({#R#S({~KtRXYKqpqKq!p!qK}~LQP!g!hLT~LWP!y!zLZ~L^P!u!vLa~LdQXYLjpqLj~LmRXYLjpqLj!q!rLv~LyP!p!qL|~MROh~~MWVT~wx({}!O({!Q![({!c!g({!g!hMm!h!}({#R#S({~MrVT~wx({}!O({!Q![({!c!u({!u!vNX!v!}({#R#S({~N^UT~qrNpwx({}!O({!Q![({!c!}({#R#S({~NuOv~~NzXT~wx({}!O({!Q![({!c!k({!k!l! g!l!q({!q!r!#o!r!}({#R#S({~! lVT~wx({}!O({!Q![({!c!p({!p!q!!R!q!}({#R#S({~!!WVT~wx({}!O({!Q![({!c!w({!w!x!!m!x!}({#R#S({~!!rVT~wx({}!O({!Q![({!c!u({!u!v!#X!v!}({#R#S({~!#`Tn~T~wx({}!O({!Q![({!c!}({#R#S({~!#tVT~wx({}!O({!Q![({!c!f({!f!g!$Z!g!}({#R#S({~!$`VT~wx({}!O({!Q![({!c!w({!w!x!$u!x!}({#R#S({~!$zVT~wx({}!O({!Q![({!c!n({!n!o!%a!o!}({#R#S({~!%fVT~wx({}!O({!Q![({!c!q({!q!r!%{!r!}({#R#S({~!&STl~T~wx({}!O({!Q![({!c!}({#R#S({~!&hXT~wx({}!O({!Q![({!c!h({!h!i!'T!i!t({!t!u!'k!u!}({#R#S({~!'[T`~T~wx({}!O({!Q![({!c!}({#R#S({~!'rTs~T~wx({}!O({!Q![({!c!}({#R#S({~!(WVT~wx({}!O({!Q![({!c!n({!n!o!(m!o!}({#R#S({~!(rXT~wx({}!O({!Q![({!c!g({!g!h!)_!h!w({!w!x!.g!x!}({#R#S({~!)dUT~wx({}!O({!Q![({!c!d!)v!d!}({#R#S({~!){VT~wx({}!O({!Q![({!c!u({!u!v!*b!v!}({#R#S({~!*gVT~wx({}!O({!Q![({!c!g({!g!h!*|!h!}({#R#S({~!+RVT~XY!+hpq!+hwx({}!O({!Q![({!c!}({#R#S({~!+kRXY!+hpq!+h!n!o!+t~!+wP!k!l!+z~!+}P!m!n!,Q~!,TP!g!h!,W~!,ZQXY!,apq!,a~!,dRXY!,apq!,a!c!d!,m~!,pP!p!q!,s~!,vP!f!g!,y~!,|QXY!-Spq!-S~!-VRXY!-Spq!-S!u!v!-`~!-cP!w!x!-f~!-iP!d!e!-l~!-oP!u!v!-r~!-uP!e!f!-x~!-{P!t!u!.O~!.RP!k!l!.U~!.XP!d!e!.[~!._P!g!h!.b~!.gO!O~~!.lVT~wx({}!O({!Q![({!c!u({!u!v!/R!v!}({#R#S({~!/YTm~T~wx({}!O({!Q![({!c!}({#R#S({~!/nVT~wx({}!O({!Q![({!c!w({!w!x!0T!x!}({#R#S({~!0YVT~wx({}!O({!Q![({!c!o({!o!p!0o!p!}({#R#S({~!0tVT~wx({}!O({!Q![({!c!q({!q!r!1Z!r!}({#R#S({~!1`VT~wx({}!O({!Q![({!c!t({!t!u!1u!u!}({#R#S({~!1zVT~XY!2apq!2awx({}!O({!Q![({!c!}({#R#S({~!2dRXY!2apq!2a!j!k!2m~!2pP!c!d!2s~!2vP!u!v!2y~!2|QXY!3Spq!3S~!3VRXY!3Spq!3S!k!l!3`~!3cP!v!w!3f~!3kOz~~!3pXT~wx({}!O({!Q![({!c!j({!j!k!4]!k!o({!o!p!9z!p!}({#R#S({~!4bVT~wx({}!O({!Q![({!c!q({!q!r!4w!r!}({#R#S({~!4|VT~wx({}!O({!Q![({!c!e({!e!f!5c!f!}({#R#S({~!5hVT~wx({}!O({!Q![({!c!m({!m!n!5}!n!}({#R#S({~!6SVT~wx({}!O({!Q![({!c!k({!k!l!6i!l!}({#R#S({~!6nVT~wx({}!O({!Q![({!c!p({!p!q!7T!q!}({#R#S({~!7YVT~wx({}!O({!Q![({!c!i({!i!j!7o!j!}({#R#S({~!7tVT~XY!8Zpq!8Zwx({}!O({!Q![({!c!}({#R#S({~!8^RXY!8Zpq!8Z!f!g!8g~!8jP!g!h!8m~!8pP!x!y!8s~!8vP!g!h!8y~!8|P!n!o!9P~!9SP!q!r!9V~!9YP!r!s!9]~!9`P!o!p!9c~!9fP!g!h!9i~!9lP!p!q!9o~!9rP!v!w!9u~!9zOx~~!:PUT~wx({}!O({!Q![({!c!d!:c!d!}({#R#S({~!:hVT~wx({}!O({!Q![({!c!n({!n!o!:}!o!}({#R#S({~!;SVT~wx({}!O({!Q![({!c!n({!n!o!;i!o!}({#R#S({~!;nVT~wx({}!O({!Q![({!c!g({!g!h!<T!h!}({#R#S({~!<YVT~wx({}!O({!Q![({!c!t({!t!u!<o!u!}({#R#S({~!<tVT~XY!=Zpq!=Zwx({}!O({!Q![({!c!}({#R#S({~!=^RXY!=Zpq!=Z!v!w!=g~!=jP!j!k!=m~!=pP!c!d!=s~!=vP!p!q!=y~!>OOq~~!>TXT~wx({}!O({!Q![({!c!k({!k!l!>p!l!q({!q!r!@x!r!}({#R#S({~!>uVT~wx({}!O({!Q![({!c!o({!o!p!?[!p!}({#R#S({~!?aVT~wx({}!O({!Q![({!c!g({!g!h!?v!h!}({#R#S({~!?{VT~wx({}!O({!Q![({!c!u({!u!v!@b!v!}({#R#S({~!@iTj~T~wx({}!O({!Q![({!c!}({#R#S({~!@}XT~XY!Ajpq!Ajwx({}!O({!Q![({!c!v({!v!w!BR!w!}({#R#S({~!AmRXY!Ajpq!Aj!d!e!Av~!AyP!g!h!A|~!BROZ~~!BWUT~wx({}!O({!Q![({!c!d!Bj!d!}({#R#S({~!BoVT~wx({}!O({!Q![({!c!n({!n!o!CU!o!}({#R#S({~!CZVT~wx({}!O({!Q![({!c!n({!n!o!Cp!o!}({#R#S({~!CuVT~wx({}!O({!Q![({!c!{({!{!|!D[!|!}({#R#S({~!DaVT~XY!Dvpq!Dvwx({}!O({!Q![({!c!}({#R#S({~!DyRXY!Dvpq!Dv!t!u!ES~!EVP!k!l!EY~!E]P!i!j!E`~!EcP!j!k!Ef~!EiP!v!w4|~!EqWT~wx({}!O({!Q![({!c!j({!j!k!FZ!k!l!Ha!l!}({#R#S({~!F`UT~wx({}!O({!Q![({!c!d!Fr!d!}({#R#S({~!FwVT~wx({}!O({!Q![({!c!v({!v!w!G^!w!}({#R#S({~!GcVT~XY!Gxpq!Gxwx({}!O({!Q![({!c!}({#R#S({~!G{RXY!Gxpq!Gx!k!l!HU~!HXP!h!i!H[~!HaOu~~!HfVT~wx({}!O({!Q![({!c!v({!v!w!H{!w!}({#R#S({~!IQVT~wx({}!O({!Q![({!c!j({!j!k!Ig!k!}({#R#S({~!InTU~T~wx({}!O({!Q![({!c!}({#R#S({~!JSVT~wx({}!O({!Q![({!c!q({!q!r!Ji!r!}({#R#S({~!JnVT~wx({}!O({!Q![({!c!w({!w!x!KT!x!}({#R#S({~!KYVT~XY!Kopq!Kowx({}!O({!Q![({!c!}({#R#S({~!KrRXY!Kopq!Ko!y!z!K{~!LOP!q!r!LR~!LUP!p!q!LX~!L[Pwx!L_~!LbP!v!w!Le~!LhQXY!Lnpq!Ln~!LqRXY!Lnpq!Ln!y!z!Lz~!L}P!c!d!MQ~!MTP!p!q!MW~!MZP!v!w!M^~!MaQXY!Mgpq!Mg~!MjRXY!Mgpq!Mg!v!w!Ms~!MvP!q!r!My~!M|QXY!NSpq!NS~!NVRXY!NSpq!NS!o!p!N`~!NcP!k!l!Nf~!NiP!u!v!Nl~!NoP!u!v!Nr~!NwOf~",
22
23
  tokenizers: [0],
23
- topRules: {"Program":[0,1]},
24
- tokenPrec: 1489
24
+ topRules: {"Program":[0,2]},
25
+ tokenPrec: 1492
25
26
  });
26
27
 
28
+ const highlighting = highlight.styleTags({
29
+ // Comments
30
+ Comment: highlight.tags.lineComment,
31
+ // Literals
32
+ NumberLiteral: highlight.tags.number,
33
+ StringLiteral: highlight.tags.string,
34
+ BooleanLiteral: highlight.tags.bool,
35
+ // Identifiers
36
+ Identifier: highlight.tags.variableName,
37
+ "FunctionDecl/Identifier": highlight.tags.function(highlight.tags.definition(highlight.tags.variableName)),
38
+ "FunctionCall/Identifier": highlight.tags.function(highlight.tags.variableName),
39
+ "ArgumentList/Identifier": highlight.tags.variableName,
40
+ // Keywords - Definitions (use controlKeyword for better color)
41
+ discoverHowTo: highlight.tags.controlKeyword,
42
+ expertsClaim: highlight.tags.keyword,
43
+ toBe: highlight.tags.operator,
44
+ with: highlight.tags.keyword,
45
+ of: highlight.tags.keyword,
46
+ // Keywords - Control flow
47
+ whatIf: highlight.tags.controlKeyword,
48
+ liesBang: highlight.tags.controlKeyword,
49
+ shockingDevelopment: highlight.tags.controlKeyword,
50
+ // Keywords - I/O
51
+ youWontWantToMiss: highlight.tags.keyword,
52
+ latestNewsOn: highlight.tags.keyword,
53
+ // Keywords - Block delimiters
54
+ rumorHasIt: highlight.tags.brace,
55
+ endOfStory: highlight.tags.brace,
56
+ // Keywords - Program structure
57
+ pleaseLikeAndSubscribe: highlight.tags.moduleKeyword,
58
+ // Operators - Comparison
59
+ isActually: highlight.tags.compareOperator,
60
+ beats: highlight.tags.compareOperator,
61
+ smallerThan: highlight.tags.compareOperator,
62
+ // Operators - Logical
63
+ and: highlight.tags.logicOperator,
64
+ or: highlight.tags.logicOperator,
65
+ // Operators - Arithmetic
66
+ plus: highlight.tags.arithmeticOperator,
67
+ minus: highlight.tags.arithmeticOperator,
68
+ times: highlight.tags.arithmeticOperator,
69
+ dividedBy: highlight.tags.arithmeticOperator,
70
+ modulo: highlight.tags.arithmeticOperator,
71
+ // Punctuation
72
+ "(": highlight.tags.paren,
73
+ ")": highlight.tags.paren,
74
+ ",": highlight.tags.separator,
75
+ });
76
+
77
+ const keywords = [
78
+ // Function and variable declarations
79
+ { label: "DISCOVER HOW TO", type: "keyword", info: "Function declaration" },
80
+ { label: "WITH", type: "keyword", info: "Function parameters" },
81
+ { label: "EXPERTS CLAIM", type: "keyword", info: "Variable assignment" },
82
+ { label: "TO BE", type: "keyword", info: "Assignment operator" },
83
+ // Control flow
84
+ { label: "WHAT IF", type: "keyword", info: "If statement" },
85
+ { label: "LIES!", type: "keyword", info: "Else statement" },
86
+ { label: "SHOCKING DEVELOPMENT", type: "keyword", info: "Return statement" },
87
+ // Blocks
88
+ { label: "RUMOR HAS IT", type: "keyword", info: "Block start" },
89
+ { label: "END OF STORY", type: "keyword", info: "Block end" },
90
+ // I/O
91
+ { label: "YOU WON'T WANT TO MISS", type: "keyword", info: "Print statement" },
92
+ { label: "LATEST NEWS ON", type: "keyword", info: "Input statement" },
93
+ // Boolean literals
94
+ { label: "TOTALLY RIGHT", type: "keyword", info: "True" },
95
+ { label: "COMPLETELY WRONG", type: "keyword", info: "False" },
96
+ // Operators
97
+ { label: "IS ACTUALLY", type: "keyword", info: "Equality comparison" },
98
+ { label: "BEATS", type: "keyword", info: "Greater than" },
99
+ { label: "SMALLER THAN", type: "keyword", info: "Less than" },
100
+ { label: "AND", type: "keyword", info: "Logical AND" },
101
+ { label: "OR", type: "keyword", info: "Logical OR" },
102
+ { label: "PLUS", type: "keyword", info: "Addition" },
103
+ { label: "MINUS", type: "keyword", info: "Subtraction" },
104
+ { label: "TIMES", type: "keyword", info: "Multiplication" },
105
+ { label: "DIVIDED BY", type: "keyword", info: "Division" },
106
+ { label: "MODULO", type: "keyword", info: "Modulus" },
107
+ { label: "OF", type: "keyword", info: "Function call" },
108
+ // Program end
109
+ {
110
+ label: "PLEASE LIKE AND SUBSCRIBE",
111
+ type: "keyword",
112
+ info: "End of program",
113
+ },
114
+ ];
115
+ function tabloidCompletion(context) {
116
+ const word = context.matchBefore(/[A-Z'][A-Z\-'\s]*/);
117
+ if (!word || (word.from === word.to && !context.explicit)) {
118
+ return null;
119
+ }
120
+ return {
121
+ from: word.from,
122
+ options: keywords,
123
+ };
124
+ }
125
+
126
+ // Wrap parser to debug
127
+ const originalParse = parser.parse.bind(parser);
128
+ parser.parse = function (input, fragments, ranges) {
129
+ console.log("[PARSER] parse called with input:", typeof input === "string" ? input.substring(0, 100) : input);
130
+ const result = originalParse(input, fragments, ranges);
131
+ console.log("[PARSER] parse result:", result.toString());
132
+ return result;
133
+ };
27
134
  const tabloidLanguage = language.LRLanguage.define({
28
135
  parser: parser.configure({
29
136
  props: [
30
137
  language.indentNodeProp.add({
31
138
  Block: language.delimitedIndent({ closing: "endOfStory", align: false }),
32
139
  ParenBlock: language.delimitedIndent({ closing: ")", align: false }),
33
- FunctionDecl: context => context.baseIndent + context.unit,
34
- IfStatement: context => context.baseIndent + context.unit,
140
+ FunctionDecl: (context) => context.baseIndent + context.unit,
141
+ IfStatement: (context) => context.baseIndent + context.unit,
35
142
  }),
36
143
  language.foldNodeProp.add({
37
144
  Block: language.foldInside,
38
145
  ParenBlock: language.foldInside,
39
146
  }),
40
- highlight.styleTags({
41
- Identifier: highlight.tags.variableName,
42
- NumberLiteral: highlight.tags.number,
43
- StringLiteral: highlight.tags.string,
44
- BooleanLiteral: highlight.tags.bool,
45
- FunctionCall: highlight.tags.function(highlight.tags.variableName),
46
- discoverHowTo: highlight.tags.definitionKeyword,
47
- expertsClaim: highlight.tags.definitionKeyword,
48
- toBe: highlight.tags.operatorKeyword,
49
- rumorHasIt: highlight.tags.keyword,
50
- endOfStory: highlight.tags.keyword,
51
- whatIf: highlight.tags.controlKeyword,
52
- liesBang: highlight.tags.controlKeyword,
53
- shockingDevelopment: highlight.tags.controlKeyword,
54
- youWontWantToMiss: highlight.tags.keyword,
55
- latestNewsOn: highlight.tags.keyword,
56
- pleaseLikeAndSubscribe: highlight.tags.keyword,
57
- "with of": highlight.tags.keyword,
58
- "isActually beats smallerThan": highlight.tags.compareOperator,
59
- "and or": highlight.tags.logicOperator,
60
- "plus minus times dividedBy modulo": highlight.tags.arithmeticOperator,
61
- "( )": highlight.tags.paren,
62
- ",": highlight.tags.separator
63
- })
64
- ]
147
+ highlighting,
148
+ ],
65
149
  }),
66
150
  languageData: {
67
- commentTokens: {}
68
- }
151
+ commentTokens: {},
152
+ closeBrackets: { brackets: ["(", '"', "'"] },
153
+ autocomplete: tabloidCompletion,
154
+ },
69
155
  });
70
156
  function tabloid() {
71
- return new language.LanguageSupport(tabloidLanguage);
157
+ return new language.LanguageSupport(tabloidLanguage, [
158
+ autocomplete.autocompletion({ override: [tabloidCompletion] }),
159
+ ]);
72
160
  }
73
161
 
74
162
  exports.tabloid = tabloid;
163
+ exports.tabloidCompletion = tabloidCompletion;
75
164
  exports.tabloidLanguage = tabloidLanguage;
package/dist/index.js CHANGED
@@ -1,72 +1,160 @@
1
1
  import { LRParser } from '@lezer/lr';
2
2
  import { LRLanguage, indentNodeProp, foldNodeProp, delimitedIndent, foldInside, LanguageSupport } from '@codemirror/language';
3
3
  import { styleTags, tags } from '@lezer/highlight';
4
+ import { autocompletion } from '@codemirror/autocomplete';
4
5
 
5
6
  // This file was generated by lezer-generator. You probably shouldn't edit it.
6
7
  const parser = LRParser.deserialize({
7
8
  version: 14,
8
- states: "+WOYQPOOO!TQPO'#C^O#|QPO'#DPO${QPO'#CjO%SQPO'#CkO%SQPO'#ClO&]QPO'#CqOOQO'#DP'#DPO'cQPO'#CbO%SQPO'#CnO%SQPO'#CoO'hQPO'#CpOOQO'#Cz'#CzOOQO'#Cs'#CsOYQPOOOOQO'#Cr'#CrQOQPOOO'oQPO,58xO'vQPO,59QOOQO,59U,59UO(_QPO,59UO(fQPO,59VO)lQPO,59WO%SQPO,59XO%SQPO,59XO%SQPO,59XO%SQPO,59XO%SQPO,59XO*rQPO,58|O*wQPO,59YO+kQPO,59ZOOQO,59[,59[O,qQPO,59[OOQO-E6q-E6qOOQO1G.d1G.dO,xQPO1G.dO-oQPO'#CgO.xQPO1G.lOOQO1G.p1G.pOOQO1G.s1G.sO2]QPO1G.sO2gQPO1G.sO4bQPO1G.sO4iQPO1G.sO%SQPO1G.hO4pQPO1G.tOOQO1G.v1G.vO5tQPO'#C`O$TQPO7+$OO'vQPO'#CuO6oQPO7+$WO8fQPO7+$SO$TQPO7+$`O9lQPO'#CtO9qQPO,58zOOQO<<Gj<<GjOOQO1G.l1G.lOOQO,59a,59aOOQO-E6s-E6sOOQO<<Gz<<GzOOQO,59`,59`OOQO-E6r-E6rPOQO7+$W7+$WO'vQPO,59QO:lQPO'#DPO'vQPO'#CkO'vQPO'#ClO'vQPO,59XO'vQPO,59XO'vQPO,59XO'vQPO,59XO'vQPO,59XO<gQPO1G.sO<qQPO1G.sO>oQPO1G.sO>vQPO1G.sO>}QPO,59VO@WQPO,59W",
9
- stateData: "BO~OlOSmOS~ORQOVVOWVOXVO]ROoPOqWOuSOvTO!RXO!TYO!UZO!W_O~ORaO~ORsXVsXWsXXsX]sXosXqsXusXvsXwsXxsXysXzsX{sX|sX}sX!OsX!PsX!QsX!RsX!TsX!UsX!WsX[sX!VsX!SsX~OtbO~P!YORQOVVOWVOXVO]ROoPOqWOuSOvTO!RXO!TYO!UZO~O[cO~P$TORQOVVOWVOXVO]ROuSOvTO~OwgOxgOygOzhO{hO|iO}iO!OiO!PjO!QkO~OReXVeXWeXXeX]eXoeXqeXueXveX!ReX!TeX!UeX!WeX[eX!VeX!SeX~P%kORlO~O!VoO~P$TOpsO~P$TOR!bOVVOWVOXVO]ROu!cOv!dO~O[vO~P$TOR_aV_aW_aX_a]_ao_aq_au_av_a!R_a!T_a!U_a!W_a[_a!V_a!S_a~P%kOR`aV`aW`aX`a]`ao`aq`au`av`a!R`a!T`a!U`a!W`a[`a!V`a!S`a~P%kOr|O~OwgOxgOygOzhO{hO|iO}iO!OiO!PjO!QkO~P$TORcaVcaWcaXca]caocaqcaucavca!Rca!Tca!Uca!Wca[ca!Vca!Sca~P%kO!V!OO~P$TOR!PO~Ow!eOx!eOy!eOz!fO{!fO|!gO}!gO!O!gO!P!hO!Q!iO~ORZXTZXVZXWZXXZX]ZXoZXqZXuZXvZX!RZX!TZX!UZX!WZX[ZX!VZX!SZX~P,}OT!RORYiVYiWYiXYi]YioYiqYiuYivYiwYixYiyYizYi{Yi|Yi}Yi!OYi!PYi!QYi!RYi!TYi!UYi!WYi[Yi!VYi!SYi~OwgOxgOygORaiVaiWaiXai]aioaiqaiuaivai|ai}ai!Oai!Pai!Qai!Rai!Tai!Uai!Wai[ai!Vai!Sai~Ozai{ai~P0oOzhO{hO~P0oOwgOxgOygOzhO{hO|iO}iO!OiORaiVaiWaiXai]aioaiqaiuaivai!Qai!Rai!Tai!Uai!Wai[ai!Vai!Sai~O!Pai~P2qO!PjO~P2qO!S!UORbiVbiWbiXbi]biobiqbiubivbi!Rbi!Tbi!Ubi!Wbi[bi!Vbi~OT!VORSXVSXWSXXSX]SXoSXqSXuSXvSX!RSX!TSX!USX~OT!RORYqVYqWYqXYq]YqoYqqYquYqvYqwYqxYqyYqzYq{Yq|Yq}Yq!OYq!PYq!QYq!RYq!TYq!UYq!WYq[Yq!VYq!SYq~ORUqVUqWUqXUq]UqoUqqUquUqvUq!RUq!TUq!UUq!WUq[Uq!VUq!SUq~P%kOR!^O~OT!VORSaVSaWSaXSa]SaoSaqSauSavSa!RSa!TSa!USa~Ot!aOTsX~P!YOw!eOx!eOy!eORaiTaiVaiWaiXai]aioaiqaiuaivai|ai}ai!Oai!Pai!Qai!Rai!Tai!Uai!Wai[ai!Vai!Sai~Ozai{ai~P:vOz!fO{!fO~P:vOw!eOx!eOy!eOz!fO{!fO|!gO}!gO!O!gORaiTaiVaiWaiXai]aioaiqaiuaivai!Qai!Rai!Tai!Uai!Wai[ai!Vai!Sai~O!Pai~P<{O!P!hO~P<{OR_aT_aV_aW_aX_a]_ao_aq_au_av_a!R_a!T_a!U_a!W_a[_a!V_a!S_a~P,}OR`aT`aV`aW`aX`a]`ao`aq`au`av`a!R`a!T`a!U`a!W`a[`a!V`a!S`a~P,}OWVXoqv!W!U!T!Rurpt!V!S|x!O!P!Qz{wy}Rt~",
10
- goto: "%itPPuP!RPuPPP!U!vPP!U!U!U!Uuuuu#P#T#c#iPPPP#oPPPP$Te[ORZ^admp!Q!UR!Qs!_VORSTXYZ^abdghijkmp|!Q!R!U!a!c!d!e!f!g!h!iQubQ!Y!aR!Z!RT`O^Q^OQdRQpZVq^dpQ!W!PR!_!WQ!SuR![!S[]ORZ^dpQraQ}mQ!X!QR!]!UdUORZ^admp!Q!UQeSQfTQmXQnYUtb!R!aSwg!eQxhQyiQzjQ{kQ!T|Q!j!fQ!k!gQ!l!hQ!m!iQ!n!cR!o!d",
11
- nodeNames: "⚠ Program FunctionDecl Identifier ArgumentList , Assignment NumberLiteral StringLiteral BooleanLiteral FunctionCall ArgumentExpression ) ( ParenBlock PrintStatement InputStatement BinaryExpression IfStatement ReturnStatement Block ExprStatement ProgramEnd",
12
- maxTerm: 54,
9
+ states: "+WO]QPOOO!WQPO'#C_O$PQPO'#DeO%OQPO'#CpO%VQPO'#CqO%VQPO'#CsO&`QPO'#DYOOQO'#De'#DeO'fQPO'#CeO%VQPO'#DQO%VQPO'#DTO'kQPO'#DVOOQO'#Dd'#DdOOQO'#D]'#D]O]QPOOOOQO'#DZ'#DZQOQPOOO'rQPO,58yO'yQPO,59VOOQO,59[,59[O(bQPO,59[O(iQPO,59]O)oQPO,59_O%VQPO,59aO%VQPO,59aO%VQPO,59aO%VQPO,59aO%VQPO,59aO*uQPO,59PO*zQPO,59lO+nQPO,59oOOQO,59q,59qO,tQPO,59qOOQO-E7Z-E7ZOOQO1G.e1G.eO,{QPO1G.eO-rQPO'#CmO.{QPO1G.qOOQO1G.v1G.vOOQO1G.{1G.{O2`QPO1G.{O2jQPO1G.{O4eQPO1G.{O4lQPO1G.{O%VQPO1G.kO4sQPO1G/WOOQO1G/]1G/]O5wQPO'#CcO$WQPO7+$PO'yQPO'#D_O6rQPO7+$]O8iQPO7+$VO$WQPO7+$rO9oQPO'#D^O9tQPO,58}OOQO<<Gk<<GkOOQO1G.q1G.qOOQO,59y,59yOOQO-E7]-E7]OOQO<<H^<<H^OOQO,59x,59xOOQO-E7[-E7[POQO7+$]7+$]O'yQPO,59VO:oQPO'#DeO'yQPO'#CqO'yQPO'#CsO'yQPO,59aO'yQPO,59aO'yQPO,59aO'yQPO,59aO'yQPO,59aO<jQPO1G.{O<tQPO1G.{O>rQPO1G.{O>yQPO1G.{O?QQPO,59]O@ZQPO,59_",
10
+ stateData: "BS~O!UOS!VOSPOS~OSPOTQOYWO[VO]VO^VOcROfSOhTOuXOxYOzZO!O_O~OTaO~OS!XXT!XXY!XX[!XX]!XX^!XXc!XXf!XXh!XXj!XXk!XXl!XXm!XXn!XXo!XXp!XXq!XXr!XXs!XXu!XXx!XXz!XX!O!XXb!XX{!XXv!XX~O`bO~P!]OSPOTQOYWO[VO]VO^VOcROfSOhTOuXOxYOzZO~ObcO~P$WOTQO[VO]VO^VOcROfSOhTO~OjgOkgOlgOmhOnhOoiOpiOqiOrjOskO~OS|XT|XY|X[|X]|X^|Xc|Xf|Xh|Xu|Xx|Xz|X!O|Xb|X{|Xv|X~P%nOTlO~O{oO~P$WOUsO~P$WOT!bO[VO]VO^VOcROf!cOh!dO~ObvO~P$WOSeaTeaYea[ea]ea^eaceafeaheaueaxeazea!Oeabea{eavea~P%nOSgaTgaYga[ga]ga^gacgafgahgaugaxgazga!Ogabga{gavga~P%nOZ|O~OjgOkgOlgOmhOnhOoiOpiOqiOrjOskO~P$WOSwaTwaYwa[wa]wa^wacwafwahwauwaxwazwa!Owabwa{wavwa~P%nO{!OO~P$WOT!PO~Oj!eOk!eOl!eOm!fOn!fOo!gOp!gOq!gOr!hOs!iO~OSaXTaXWaXYaX[aX]aX^aXcaXfaXhaXuaXxaXzaX!OaXbaX{aXvaX~P-QOW!ROS_iT_iY_i[_i]_i^_ic_if_ih_ij_ik_il_im_in_io_ip_iq_ir_is_iu_ix_iz_i!O_ib_i{_iv_i~OjgOkgOlgOSiiTiiYii[ii]ii^iiciifiihiioiipiiqiiriisiiuiixiizii!Oiibii{iivii~Omiinii~P0rOmhOnhO~P0rOjgOkgOlgOmhOnhOoiOpiOqiOSiiTiiYii[ii]ii^iiciifiihiisiiuiixiizii!Oiibii{iivii~Orii~P2tOrjO~P2tOv!UOStiTtiYti[ti]ti^tictiftihtiutixtizti!Otibti{ti~OW!VOSVXTVXYVX[VX]VX^VXcVXfVXhVXuVXxVXzVX~OW!ROS_qT_qY_q[_q]_q^_qc_qf_qh_qj_qk_ql_qm_qn_qo_qp_qq_qr_qs_qu_qx_qz_q!O_qb_q{_qv_q~OSXqTXqYXq[Xq]Xq^XqcXqfXqhXquXqxXqzXq!OXqbXq{XqvXq~P%nOT!^O~OW!VOSVaTVaYVa[Va]Va^VacVafVahVauVaxVazVa~O`!aOW!XX~P!]Oj!eOk!eOl!eOSiiTiiWiiYii[ii]ii^iiciifiihiioiipiiqiiriisiiuiixiizii!Oiibii{iivii~Omiinii~P:yOm!fOn!fO~P:yOj!eOk!eOl!eOm!fOn!fOo!gOp!gOq!gOSiiTiiWiiYii[ii]ii^iiciifiihiisiiuiixiizii!Oiibii{iivii~Orii~P=OOr!hO~P=OOSeaTeaWeaYea[ea]ea^eaceafeaheaueaxeazea!Oeabea{eavea~P-QOSgaTgaWgaYga[ga]ga^gacgafgahgaugaxgazga!Ogabga{gavga~P-QOP][^SYh!OzxufZU`{vokqrsmnjlpT`~",
11
+ goto: "%}!YPPP!ZPPP!gP!ZPPPPP!jP#[PP!j!jP!jP!jPPPPPPPPPP!ZPP!ZP!ZPP!Z#eP#i#w#}PPPP$T$ie[ORZ^admp!Q!UR!Qs!_VORSTXYZ^abdghijkmp|!Q!R!U!a!c!d!e!f!g!h!iQubQ!Y!aR!Z!RT`O^Q^OQdRQpZVq^dpQ!W!PR!_!WQ!SuR![!S[]ORZ^dpQraQ}mQ!X!QR!]!UdUORZ^admp!Q!UQeSQfTQmXQnYUtb!R!aSwg!eQxhQyiQzjQ{kQ!T|Q!j!fQ!k!gQ!l!hQ!m!iQ!n!cR!o!d",
12
+ nodeNames: "⚠ Comment Program FunctionDecl discoverHowTo Identifier with ArgumentList , Assignment expertsClaim toBe NumberLiteral StringLiteral BooleanLiteral FunctionCall of ArgumentExpression ) ( ParenBlock PrintStatement youWontWantToMiss InputStatement latestNewsOn BinaryExpression times dividedBy modulo plus minus isActually beats smallerThan and or IfStatement whatIf liesBang ReturnStatement shockingDevelopment Block rumorHasIt endOfStory ExprStatement ProgramEnd pleaseLikeAndSubscribe",
13
+ maxTerm: 55,
13
14
  nodeProps: [
14
- ["openedBy", 12,"("],
15
- ["closedBy", 13,")"]
15
+ ["openedBy", 18,"("],
16
+ ["closedBy", 19,")"]
16
17
  ],
17
- skippedNodes: [0],
18
+ skippedNodes: [0,1],
18
19
  repeatNodeCount: 3,
19
- tokenData: "!NY~RrXY#]YZ#h]^#hpq#]rs#mwx%Zxy(ryz(w|}(|}!O(^!Q![)R!c!d)l!d!e+Y!e!f-y!f!g4d!g!h=m!h!k(^!k!lEY!l!n(^!n!oGm!o!pNW!p!q(^!q!r!%t!r!s!'d!s!t(^!t!u!.z!u!v!2|!v!w!=a!w!y(^!y!z!D}!z!{(^!{!|!I`!|!}(^#R#S(^~#bQl~XY#]pq#]~#mOm~~#pVOr#mrs$Vs#O#m#O#P$[#P;'S#m;'S;=`%T<%lO#m~$[OW~~$_RO;'S#m;'S;=`$h;=`O#m~$kWOr#mrs$Vs#O#m#O#P$[#P;'S#m;'S;=`%T;=`<%l#m<%lO#m~%WP;=`<%l#m~%`_R~Ow&_wx'vx}&_}!O%Z!O!Q&_!Q![%Z![!c&_!c!}%Z!}#O&_#O#P&w#P#R&_#R#S%Z#S;'S&_;'S;=`'p<%lO&_~&bVOw&_wx$Vx#O&_#O#P&w#P;'S&_;'S;=`'p<%lO&_~&zRO;'S&_;'S;=`'T;=`O&_~'WWOw&_wx$Vx#O&_#O#P&w#P;'S&_;'S;=`'p;=`<%l&_<%lO&_~'sP;=`<%l&_~'}TW~R~wx(^}!O(^!Q![(^!c!}(^#R#S(^~(cTR~wx(^}!O(^!Q![(^!c!}(^#R#S(^~(wO]~~(|O[~~)ROT~~)WQV~!O!P)^!Q![)R~)aP!Q![)d~)iPV~!Q![)d~)qVR~wx(^}!O(^!Q![(^!c!p(^!p!q*W!q!}(^#R#S(^~*]VR~wx(^}!O(^!Q![(^!c!f(^!f!g*r!g!}(^#R#S(^~*yT!P~R~wx(^}!O(^!Q![(^!c!}(^#R#S(^~+_VR~wx(^}!O(^!Q![(^!c!g(^!g!h+t!h!}(^#R#S(^~+yUR~wx(^}!O(^!Q![(^!c!d,]!d!}(^#R#S(^~,bVR~wx(^}!O(^!Q![(^!c!v(^!v!w,w!w!}(^#R#S(^~,|VR~wx(^}!O(^!Q![(^!c!u(^!u!v-c!v!}(^#R#S(^~-jT}~R~wx(^}!O(^!Q![(^!c!}(^#R#S(^~.OVR~wx(^}!O(^!Q![(^!c!q(^!q!r.e!r!}(^#R#S(^~.jVR~wx(^}!O(^!Q![(^!c!o(^!o!p/P!p!}(^#R#S(^~/UVR~wx(^}!O(^!Q![(^!c!r(^!r!s/k!s!}(^#R#S(^~/pVR~wx(^}!O(^!Q![(^!c!n(^!n!o0V!o!}(^#R#S(^~0[VR~wx(^}!O(^!Q![(^!c!g(^!g!h0q!h!}(^#R#S(^~0vVR~wx(^}!O(^!Q![(^!c!v(^!v!w1]!w!}(^#R#S(^~1bVR~wx(^}!O(^!Q![(^!c!g(^!g!h1w!h!}(^#R#S(^~1|VR~wx(^}!O(^!Q![(^!c!n(^!n!o2c!o!}(^#R#S(^~2hVR~wx(^}!O(^!Q![(^!c!{(^!{!|2}!|!}(^#R#S(^~3SVR~XY3ipq3iwx(^}!O(^!Q![(^!c!}(^#R#S(^~3lRXY3ipq3i!y!z3u~3xP!t!u3{~4OP!q!r4R~4UP!p!q4X~4[P!i!j4_~4dOX~~4iVR~wx(^}!O(^!Q![(^!c!k(^!k!l5O!l!}(^#R#S(^~5TXR~wx(^}!O(^!Q![(^!c!u(^!u!v5p!v!x(^!x!y:^!y!}(^#R#S(^~5uVR~wx(^}!O(^!Q![(^!c!e(^!e!f6[!f!}(^#R#S(^~6aVR~wx(^}!O(^!Q![(^!c!q(^!q!r6v!r!}(^#R#S(^~6{VR~wx(^}!O(^!Q![(^!c!x(^!x!y7b!y!}(^#R#S(^~7gVR~wx(^}!O(^!Q![(^!c!g(^!g!h7|!h!}(^#R#S(^~8RVR~wx(^}!O(^!Q![(^!c!t(^!t!u8h!u!}(^#R#S(^~8mVR~XY9Spq9Swx(^}!O(^!Q![(^!c!}(^#R#S(^~9VRXY9Spq9S!j!k9`~9cP!q!r9f~9iP!y!z9l~9oQXY9upq9u~9xRXY9upq9u!v!w:R~:UP!q!r:X~:^Oo~~:cVR~wx(^}!O(^!Q![(^!c!k(^!k!l:x!l!}(^#R#S(^~:}VR~wx(^}!O(^!Q![(^!c!f(^!f!g;d!g!}(^#R#S(^~;iVR~wx(^}!O(^!Q![(^!c!g(^!g!h<O!h!}(^#R#S(^~<TVR~wx(^}!O(^!Q![(^!c!f(^!f!g<j!g!}(^#R#S(^~<oVR~XY=Upq=Uwx(^}!O(^!Q![(^!c!}(^#R#S(^~=XRXY=Upq=U!d!e=b~=eP!{!|=h~=mOx~~=rXR~wx(^}!O(^!Q![(^!c!p(^!p!q>_!q!z(^!z!{@{!{!}(^#R#S(^~>dVR~wx(^}!O(^!Q![(^!c!f(^!f!g>y!g!}(^#R#S(^~?OVR~XY?epq?ewx(^}!O(^!Q![(^!c!}(^#R#S(^~?hRXY?epq?e!q!r?q~?tP!h!i?w~?zQXY@Qpq@Q~@TRXY@Qpq@Q!u!v@^~@aP!v!w@d~@gP!q!r@j~@mP!t!u@p~@sP!{!|@v~@{O!V~~AQVR~wx(^}!O(^!Q![(^!c!r(^!r!sAg!s!}(^#R#S(^~AlVR~wx(^}!O(^!Q![(^!c!g(^!g!hBR!h!}(^#R#S(^~BWVR~wx(^}!O(^!Q![(^!c!t(^!t!uBm!u!}(^#R#S(^~BrVR~wx(^}!O(^!Q![(^!c!v(^!v!wCX!w!}(^#R#S(^~C^VR~wx(^}!O(^!Q![(^!c!u(^!u!vCs!v!}(^#R#S(^~CxVR~XYD_pqD_wx(^}!O(^!Q![(^!c!}(^#R#S(^~DbRXYD_pqD_!e!fDk~DnP!n!oDq~DtP!c!dDw~DzP!k!lD}~EQP!o!pET~EYOq~~E_VR~wx(^}!O(^!Q![(^!c!u(^!u!vEt!v!}(^#R#S(^~EyVR~XYF`pqF`wx(^}!O(^!Q![(^!c!}(^#R#S(^~FcRXYF`pqF`!c!dFl~FoP!e!fFr~FuP!v!wFx~F{P!w!xGO~GRP!c!dGU~GXP!n!oG[~G_P!n!oGb~GeP!{!|Gh~GmO|~~GrWR~wx(^}!O(^!Q![(^!c!dH[!d!k(^!k!lLd!l!}(^#R#S(^~HaVR~wx(^}!O(^!Q![(^!c!v(^!v!wHv!w!}(^#R#S(^~H{VR~wx(^}!O(^!Q![(^!c!g(^!g!hIb!h!}(^#R#S(^~IgVR~wx(^}!O(^!Q![(^!c!u(^!u!vI|!v!}(^#R#S(^~JRVR~wx(^}!O(^!Q![(^!c!v(^!v!wJh!w!}(^#R#S(^~JmVR~XYKSpqKSwx(^}!O(^!Q![(^!c!}(^#R#S(^~KVRXYKSpqKS!p!qK`~KcP!g!hKf~KiP!y!zKl~KoP!u!vKr~KuQXYK{pqK{~LORXYK{pqK{!q!rLX~L[P!p!qL_~LdOv~~LiVR~wx(^}!O(^!Q![(^!c!g(^!g!hMO!h!}(^#R#S(^~MTVR~wx(^}!O(^!Q![(^!c!u(^!u!vMj!v!}(^#R#S(^~MoUR~qrNRwx(^}!O(^!Q![(^!c!}(^#R#S(^~NWO!S~~N]XR~wx(^}!O(^!Q![(^!c!k(^!k!lNx!l!q(^!q!r!#Q!r!}(^#R#S(^~N}VR~wx(^}!O(^!Q![(^!c!p(^!p!q! d!q!}(^#R#S(^~! iVR~wx(^}!O(^!Q![(^!c!w(^!w!x!!O!x!}(^#R#S(^~!!TVR~wx(^}!O(^!Q![(^!c!u(^!u!v!!j!v!}(^#R#S(^~!!qT{~R~wx(^}!O(^!Q![(^!c!}(^#R#S(^~!#VVR~wx(^}!O(^!Q![(^!c!f(^!f!g!#l!g!}(^#R#S(^~!#qVR~wx(^}!O(^!Q![(^!c!w(^!w!x!$W!x!}(^#R#S(^~!$]VR~wx(^}!O(^!Q![(^!c!n(^!n!o!$r!o!}(^#R#S(^~!$wVR~wx(^}!O(^!Q![(^!c!q(^!q!r!%^!r!}(^#R#S(^~!%eTy~R~wx(^}!O(^!Q![(^!c!}(^#R#S(^~!%yXR~wx(^}!O(^!Q![(^!c!h(^!h!i!&f!i!t(^!t!u!&|!u!}(^#R#S(^~!&mTt~R~wx(^}!O(^!Q![(^!c!}(^#R#S(^~!'TT!Q~R~wx(^}!O(^!Q![(^!c!}(^#R#S(^~!'iVR~wx(^}!O(^!Q![(^!c!n(^!n!o!(O!o!}(^#R#S(^~!(TXR~wx(^}!O(^!Q![(^!c!g(^!g!h!(p!h!w(^!w!x!-x!x!}(^#R#S(^~!(uUR~wx(^}!O(^!Q![(^!c!d!)X!d!}(^#R#S(^~!)^VR~wx(^}!O(^!Q![(^!c!u(^!u!v!)s!v!}(^#R#S(^~!)xVR~wx(^}!O(^!Q![(^!c!g(^!g!h!*_!h!}(^#R#S(^~!*dVR~XY!*ypq!*ywx(^}!O(^!Q![(^!c!}(^#R#S(^~!*|RXY!*ypq!*y!n!o!+V~!+YP!k!l!+]~!+`P!m!n!+c~!+fP!g!h!+i~!+lQXY!+rpq!+r~!+uRXY!+rpq!+r!c!d!,O~!,RP!p!q!,U~!,XP!f!g!,[~!,_QXY!,epq!,e~!,hRXY!,epq!,e!u!v!,q~!,tP!w!x!,w~!,zP!d!e!,}~!-QP!u!v!-T~!-WP!e!f!-Z~!-^P!t!u!-a~!-dP!k!l!-g~!-jP!d!e!-m~!-pP!g!h!-s~!-xO!W~~!-}VR~wx(^}!O(^!Q![(^!c!u(^!u!v!.d!v!}(^#R#S(^~!.kTz~R~wx(^}!O(^!Q![(^!c!}(^#R#S(^~!/PVR~wx(^}!O(^!Q![(^!c!w(^!w!x!/f!x!}(^#R#S(^~!/kVR~wx(^}!O(^!Q![(^!c!o(^!o!p!0Q!p!}(^#R#S(^~!0VVR~wx(^}!O(^!Q![(^!c!q(^!q!r!0l!r!}(^#R#S(^~!0qVR~wx(^}!O(^!Q![(^!c!t(^!t!u!1W!u!}(^#R#S(^~!1]VR~XY!1rpq!1rwx(^}!O(^!Q![(^!c!}(^#R#S(^~!1uRXY!1rpq!1r!j!k!2O~!2RP!c!d!2U~!2XP!u!v!2[~!2_QXY!2epq!2e~!2hRXY!2epq!2e!k!l!2q~!2tP!v!w!2w~!2|O!U~~!3RXR~wx(^}!O(^!Q![(^!c!j(^!j!k!3n!k!o(^!o!p!9]!p!}(^#R#S(^~!3sVR~wx(^}!O(^!Q![(^!c!q(^!q!r!4Y!r!}(^#R#S(^~!4_VR~wx(^}!O(^!Q![(^!c!e(^!e!f!4t!f!}(^#R#S(^~!4yVR~wx(^}!O(^!Q![(^!c!m(^!m!n!5`!n!}(^#R#S(^~!5eVR~wx(^}!O(^!Q![(^!c!k(^!k!l!5z!l!}(^#R#S(^~!6PVR~wx(^}!O(^!Q![(^!c!p(^!p!q!6f!q!}(^#R#S(^~!6kVR~wx(^}!O(^!Q![(^!c!i(^!i!j!7Q!j!}(^#R#S(^~!7VVR~XY!7lpq!7lwx(^}!O(^!Q![(^!c!}(^#R#S(^~!7oRXY!7lpq!7l!f!g!7x~!7{P!g!h!8O~!8RP!x!y!8U~!8XP!g!h!8[~!8_P!n!o!8b~!8eP!q!r!8h~!8kP!r!s!8n~!8qP!o!p!8t~!8wP!g!h!8z~!8}P!p!q!9Q~!9TP!v!w!9W~!9]O!T~~!9bUR~wx(^}!O(^!Q![(^!c!d!9t!d!}(^#R#S(^~!9yVR~wx(^}!O(^!Q![(^!c!n(^!n!o!:`!o!}(^#R#S(^~!:eVR~wx(^}!O(^!Q![(^!c!n(^!n!o!:z!o!}(^#R#S(^~!;PVR~wx(^}!O(^!Q![(^!c!g(^!g!h!;f!h!}(^#R#S(^~!;kVR~wx(^}!O(^!Q![(^!c!t(^!t!u!<Q!u!}(^#R#S(^~!<VVR~XY!<lpq!<lwx(^}!O(^!Q![(^!c!}(^#R#S(^~!<oRXY!<lpq!<l!v!w!<x~!<{P!j!k!=O~!=RP!c!d!=U~!=XP!p!q!=[~!=aO!O~~!=fXR~wx(^}!O(^!Q![(^!c!k(^!k!l!>R!l!q(^!q!r!@Z!r!}(^#R#S(^~!>WVR~wx(^}!O(^!Q![(^!c!o(^!o!p!>m!p!}(^#R#S(^~!>rVR~wx(^}!O(^!Q![(^!c!g(^!g!h!?X!h!}(^#R#S(^~!?^VR~wx(^}!O(^!Q![(^!c!u(^!u!v!?s!v!}(^#R#S(^~!?zTw~R~wx(^}!O(^!Q![(^!c!}(^#R#S(^~!@`XR~XY!@{pq!@{wx(^}!O(^!Q![(^!c!v(^!v!w!Ad!w!}(^#R#S(^~!AORXY!@{pq!@{!d!e!AX~!A[P!g!h!A_~!AdOr~~!AiUR~wx(^}!O(^!Q![(^!c!d!A{!d!}(^#R#S(^~!BQVR~wx(^}!O(^!Q![(^!c!n(^!n!o!Bg!o!}(^#R#S(^~!BlVR~wx(^}!O(^!Q![(^!c!n(^!n!o!CR!o!}(^#R#S(^~!CWVR~wx(^}!O(^!Q![(^!c!{(^!{!|!Cm!|!}(^#R#S(^~!CrVR~XY!DXpq!DXwx(^}!O(^!Q![(^!c!}(^#R#S(^~!D[RXY!DXpq!DX!t!u!De~!DhP!k!l!Dk~!DnP!i!j!Dq~!DtP!j!k!Dw~!DzP!v!w4_~!ESWR~wx(^}!O(^!Q![(^!c!j(^!j!k!El!k!l!Gr!l!}(^#R#S(^~!EqUR~wx(^}!O(^!Q![(^!c!d!FT!d!}(^#R#S(^~!FYVR~wx(^}!O(^!Q![(^!c!v(^!v!w!Fo!w!}(^#R#S(^~!FtVR~XY!GZpq!GZwx(^}!O(^!Q![(^!c!}(^#R#S(^~!G^RXY!GZpq!GZ!k!l!Gg~!GjP!h!i!Gm~!GrO!R~~!GwVR~wx(^}!O(^!Q![(^!c!v(^!v!w!H^!w!}(^#R#S(^~!HcVR~wx(^}!O(^!Q![(^!c!j(^!j!k!Hx!k!}(^#R#S(^~!IPTp~R~wx(^}!O(^!Q![(^!c!}(^#R#S(^~!IeVR~wx(^}!O(^!Q![(^!c!q(^!q!r!Iz!r!}(^#R#S(^~!JPVR~wx(^}!O(^!Q![(^!c!w(^!w!x!Jf!x!}(^#R#S(^~!JkVR~XY!KQpq!KQwx(^}!O(^!Q![(^!c!}(^#R#S(^~!KTRXY!KQpq!KQ!y!z!K^~!KaP!q!r!Kd~!KgP!p!q!Kj~!KmPwx!Kp~!KsP!v!w!Kv~!KyQXY!LPpq!LP~!LSRXY!LPpq!LP!y!z!L]~!L`P!c!d!Lc~!LfP!p!q!Li~!LlP!v!w!Lo~!LrQXY!Lxpq!Lx~!L{RXY!Lxpq!Lx!v!w!MU~!MXP!q!r!M[~!M_QXY!Mepq!Me~!MhRXY!Mepq!Me!o!p!Mq~!MtP!k!l!Mw~!MzP!u!v!M}~!NQP!u!v!NT~!NYOu~",
20
+ tokenData: "!Nw~RsXY#`YZ#k]^#kpq#`rs#pst%^wx%xxy)ayz)f|})k}!O({!Q![)p!c!d*Z!d!e+w!e!f.h!f!g5R!g!h>[!h!k({!k!lEw!l!n({!n!oH[!o!pNu!p!q({!q!r!&c!r!s!(R!s!t({!t!u!/i!u!v!3k!v!w!>O!w!y({!y!z!El!z!{({!{!|!I}!|!}({#R#S({~#eQ!U~XY#`pq#`~#pO!V~~#sVOr#prs$Ys#O#p#O#P$_#P;'S#p;'S;=`%W<%lO#p~$_O]~~$bRO;'S#p;'S;=`$k;=`O#p~$nWOr#prs$Ys#O#p#O#P$_#P;'S#p;'S;=`%W;=`<%l#p<%lO#p~%ZP;=`<%l#p~%cTP~OY%^Z]%^^;'S%^;'S;=`%r<%lO%^~%uP;=`<%l%^~%}_T~Ow&|wx(ex}&|}!O%x!O!Q&|!Q![%x![!c&|!c!}%x!}#O&|#O#P'f#P#R&|#R#S%x#S;'S&|;'S;=`(_<%lO&|~'PVOw&|wx$Yx#O&|#O#P'f#P;'S&|;'S;=`(_<%lO&|~'iRO;'S&|;'S;=`'r;=`O&|~'uWOw&|wx$Yx#O&|#O#P'f#P;'S&|;'S;=`(_;=`<%l&|<%lO&|~(bP;=`<%l&|~(lT]~T~wx({}!O({!Q![({!c!}({#R#S({~)QTT~wx({}!O({!Q![({!c!}({#R#S({~)fOc~~)kOb~~)pOW~~)uQ[~!O!P){!Q![)p~*OP!Q![*R~*WP[~!Q![*R~*`VT~wx({}!O({!Q![({!c!p({!p!q*u!q!}({#R#S({~*zVT~wx({}!O({!Q![({!c!f({!f!g+a!g!}({#R#S({~+hTr~T~wx({}!O({!Q![({!c!}({#R#S({~+|VT~wx({}!O({!Q![({!c!g({!g!h,c!h!}({#R#S({~,hUT~wx({}!O({!Q![({!c!d,z!d!}({#R#S({~-PVT~wx({}!O({!Q![({!c!v({!v!w-f!w!}({#R#S({~-kVT~wx({}!O({!Q![({!c!u({!u!v.Q!v!}({#R#S({~.XTp~T~wx({}!O({!Q![({!c!}({#R#S({~.mVT~wx({}!O({!Q![({!c!q({!q!r/S!r!}({#R#S({~/XVT~wx({}!O({!Q![({!c!o({!o!p/n!p!}({#R#S({~/sVT~wx({}!O({!Q![({!c!r({!r!s0Y!s!}({#R#S({~0_VT~wx({}!O({!Q![({!c!n({!n!o0t!o!}({#R#S({~0yVT~wx({}!O({!Q![({!c!g({!g!h1`!h!}({#R#S({~1eVT~wx({}!O({!Q![({!c!v({!v!w1z!w!}({#R#S({~2PVT~wx({}!O({!Q![({!c!g({!g!h2f!h!}({#R#S({~2kVT~wx({}!O({!Q![({!c!n({!n!o3Q!o!}({#R#S({~3VVT~wx({}!O({!Q![({!c!{({!{!|3l!|!}({#R#S({~3qVT~XY4Wpq4Wwx({}!O({!Q![({!c!}({#R#S({~4ZRXY4Wpq4W!y!z4d~4gP!t!u4j~4mP!q!r4p~4sP!p!q4v~4yP!i!j4|~5RO^~~5WVT~wx({}!O({!Q![({!c!k({!k!l5m!l!}({#R#S({~5rXT~wx({}!O({!Q![({!c!u({!u!v6_!v!x({!x!y:{!y!}({#R#S({~6dVT~wx({}!O({!Q![({!c!e({!e!f6y!f!}({#R#S({~7OVT~wx({}!O({!Q![({!c!q({!q!r7e!r!}({#R#S({~7jVT~wx({}!O({!Q![({!c!x({!x!y8P!y!}({#R#S({~8UVT~wx({}!O({!Q![({!c!g({!g!h8k!h!}({#R#S({~8pVT~wx({}!O({!Q![({!c!t({!t!u9V!u!}({#R#S({~9[VT~XY9qpq9qwx({}!O({!Q![({!c!}({#R#S({~9tRXY9qpq9q!j!k9}~:QP!q!r:T~:WP!y!z:Z~:^QXY:dpq:d~:gRXY:dpq:d!v!w:p~:sP!q!r:v~:{OS~~;QVT~wx({}!O({!Q![({!c!k({!k!l;g!l!}({#R#S({~;lVT~wx({}!O({!Q![({!c!f({!f!g<R!g!}({#R#S({~<WVT~wx({}!O({!Q![({!c!g({!g!h<m!h!}({#R#S({~<rVT~wx({}!O({!Q![({!c!f({!f!g=X!g!}({#R#S({~=^VT~XY=spq=swx({}!O({!Q![({!c!}({#R#S({~=vRXY=spq=s!d!e>P~>SP!{!|>V~>[Ok~~>aXT~wx({}!O({!Q![({!c!p({!p!q>|!q!z({!z!{Aj!{!}({#R#S({~?RVT~wx({}!O({!Q![({!c!f({!f!g?h!g!}({#R#S({~?mVT~XY@Spq@Swx({}!O({!Q![({!c!}({#R#S({~@VRXY@Spq@S!q!r@`~@cP!h!i@f~@iQXY@opq@o~@rRXY@opq@o!u!v@{~AOP!v!wAR~AUP!q!rAX~A[P!t!uA_~AbP!{!|Ae~AjO{~~AoVT~wx({}!O({!Q![({!c!r({!r!sBU!s!}({#R#S({~BZVT~wx({}!O({!Q![({!c!g({!g!hBp!h!}({#R#S({~BuVT~wx({}!O({!Q![({!c!t({!t!uC[!u!}({#R#S({~CaVT~wx({}!O({!Q![({!c!v({!v!wCv!w!}({#R#S({~C{VT~wx({}!O({!Q![({!c!u({!u!vDb!v!}({#R#S({~DgVT~XYD|pqD|wx({}!O({!Q![({!c!}({#R#S({~EPRXYD|pqD|!e!fEY~E]P!n!oE`~EcP!c!dEf~EiP!k!lEl~EoP!o!pEr~EwOY~~E|VT~wx({}!O({!Q![({!c!u({!u!vFc!v!}({#R#S({~FhVT~XYF}pqF}wx({}!O({!Q![({!c!}({#R#S({~GQRXYF}pqF}!c!dGZ~G^P!e!fGa~GdP!v!wGg~GjP!w!xGm~GpP!c!dGs~GvP!n!oGy~G|P!n!oHP~HSP!{!|HV~H[Oo~~HaWT~wx({}!O({!Q![({!c!dHy!d!k({!k!lMR!l!}({#R#S({~IOVT~wx({}!O({!Q![({!c!v({!v!wIe!w!}({#R#S({~IjVT~wx({}!O({!Q![({!c!g({!g!hJP!h!}({#R#S({~JUVT~wx({}!O({!Q![({!c!u({!u!vJk!v!}({#R#S({~JpVT~wx({}!O({!Q![({!c!v({!v!wKV!w!}({#R#S({~K[VT~XYKqpqKqwx({}!O({!Q![({!c!}({#R#S({~KtRXYKqpqKq!p!qK}~LQP!g!hLT~LWP!y!zLZ~L^P!u!vLa~LdQXYLjpqLj~LmRXYLjpqLj!q!rLv~LyP!p!qL|~MROh~~MWVT~wx({}!O({!Q![({!c!g({!g!hMm!h!}({#R#S({~MrVT~wx({}!O({!Q![({!c!u({!u!vNX!v!}({#R#S({~N^UT~qrNpwx({}!O({!Q![({!c!}({#R#S({~NuOv~~NzXT~wx({}!O({!Q![({!c!k({!k!l! g!l!q({!q!r!#o!r!}({#R#S({~! lVT~wx({}!O({!Q![({!c!p({!p!q!!R!q!}({#R#S({~!!WVT~wx({}!O({!Q![({!c!w({!w!x!!m!x!}({#R#S({~!!rVT~wx({}!O({!Q![({!c!u({!u!v!#X!v!}({#R#S({~!#`Tn~T~wx({}!O({!Q![({!c!}({#R#S({~!#tVT~wx({}!O({!Q![({!c!f({!f!g!$Z!g!}({#R#S({~!$`VT~wx({}!O({!Q![({!c!w({!w!x!$u!x!}({#R#S({~!$zVT~wx({}!O({!Q![({!c!n({!n!o!%a!o!}({#R#S({~!%fVT~wx({}!O({!Q![({!c!q({!q!r!%{!r!}({#R#S({~!&STl~T~wx({}!O({!Q![({!c!}({#R#S({~!&hXT~wx({}!O({!Q![({!c!h({!h!i!'T!i!t({!t!u!'k!u!}({#R#S({~!'[T`~T~wx({}!O({!Q![({!c!}({#R#S({~!'rTs~T~wx({}!O({!Q![({!c!}({#R#S({~!(WVT~wx({}!O({!Q![({!c!n({!n!o!(m!o!}({#R#S({~!(rXT~wx({}!O({!Q![({!c!g({!g!h!)_!h!w({!w!x!.g!x!}({#R#S({~!)dUT~wx({}!O({!Q![({!c!d!)v!d!}({#R#S({~!){VT~wx({}!O({!Q![({!c!u({!u!v!*b!v!}({#R#S({~!*gVT~wx({}!O({!Q![({!c!g({!g!h!*|!h!}({#R#S({~!+RVT~XY!+hpq!+hwx({}!O({!Q![({!c!}({#R#S({~!+kRXY!+hpq!+h!n!o!+t~!+wP!k!l!+z~!+}P!m!n!,Q~!,TP!g!h!,W~!,ZQXY!,apq!,a~!,dRXY!,apq!,a!c!d!,m~!,pP!p!q!,s~!,vP!f!g!,y~!,|QXY!-Spq!-S~!-VRXY!-Spq!-S!u!v!-`~!-cP!w!x!-f~!-iP!d!e!-l~!-oP!u!v!-r~!-uP!e!f!-x~!-{P!t!u!.O~!.RP!k!l!.U~!.XP!d!e!.[~!._P!g!h!.b~!.gO!O~~!.lVT~wx({}!O({!Q![({!c!u({!u!v!/R!v!}({#R#S({~!/YTm~T~wx({}!O({!Q![({!c!}({#R#S({~!/nVT~wx({}!O({!Q![({!c!w({!w!x!0T!x!}({#R#S({~!0YVT~wx({}!O({!Q![({!c!o({!o!p!0o!p!}({#R#S({~!0tVT~wx({}!O({!Q![({!c!q({!q!r!1Z!r!}({#R#S({~!1`VT~wx({}!O({!Q![({!c!t({!t!u!1u!u!}({#R#S({~!1zVT~XY!2apq!2awx({}!O({!Q![({!c!}({#R#S({~!2dRXY!2apq!2a!j!k!2m~!2pP!c!d!2s~!2vP!u!v!2y~!2|QXY!3Spq!3S~!3VRXY!3Spq!3S!k!l!3`~!3cP!v!w!3f~!3kOz~~!3pXT~wx({}!O({!Q![({!c!j({!j!k!4]!k!o({!o!p!9z!p!}({#R#S({~!4bVT~wx({}!O({!Q![({!c!q({!q!r!4w!r!}({#R#S({~!4|VT~wx({}!O({!Q![({!c!e({!e!f!5c!f!}({#R#S({~!5hVT~wx({}!O({!Q![({!c!m({!m!n!5}!n!}({#R#S({~!6SVT~wx({}!O({!Q![({!c!k({!k!l!6i!l!}({#R#S({~!6nVT~wx({}!O({!Q![({!c!p({!p!q!7T!q!}({#R#S({~!7YVT~wx({}!O({!Q![({!c!i({!i!j!7o!j!}({#R#S({~!7tVT~XY!8Zpq!8Zwx({}!O({!Q![({!c!}({#R#S({~!8^RXY!8Zpq!8Z!f!g!8g~!8jP!g!h!8m~!8pP!x!y!8s~!8vP!g!h!8y~!8|P!n!o!9P~!9SP!q!r!9V~!9YP!r!s!9]~!9`P!o!p!9c~!9fP!g!h!9i~!9lP!p!q!9o~!9rP!v!w!9u~!9zOx~~!:PUT~wx({}!O({!Q![({!c!d!:c!d!}({#R#S({~!:hVT~wx({}!O({!Q![({!c!n({!n!o!:}!o!}({#R#S({~!;SVT~wx({}!O({!Q![({!c!n({!n!o!;i!o!}({#R#S({~!;nVT~wx({}!O({!Q![({!c!g({!g!h!<T!h!}({#R#S({~!<YVT~wx({}!O({!Q![({!c!t({!t!u!<o!u!}({#R#S({~!<tVT~XY!=Zpq!=Zwx({}!O({!Q![({!c!}({#R#S({~!=^RXY!=Zpq!=Z!v!w!=g~!=jP!j!k!=m~!=pP!c!d!=s~!=vP!p!q!=y~!>OOq~~!>TXT~wx({}!O({!Q![({!c!k({!k!l!>p!l!q({!q!r!@x!r!}({#R#S({~!>uVT~wx({}!O({!Q![({!c!o({!o!p!?[!p!}({#R#S({~!?aVT~wx({}!O({!Q![({!c!g({!g!h!?v!h!}({#R#S({~!?{VT~wx({}!O({!Q![({!c!u({!u!v!@b!v!}({#R#S({~!@iTj~T~wx({}!O({!Q![({!c!}({#R#S({~!@}XT~XY!Ajpq!Ajwx({}!O({!Q![({!c!v({!v!w!BR!w!}({#R#S({~!AmRXY!Ajpq!Aj!d!e!Av~!AyP!g!h!A|~!BROZ~~!BWUT~wx({}!O({!Q![({!c!d!Bj!d!}({#R#S({~!BoVT~wx({}!O({!Q![({!c!n({!n!o!CU!o!}({#R#S({~!CZVT~wx({}!O({!Q![({!c!n({!n!o!Cp!o!}({#R#S({~!CuVT~wx({}!O({!Q![({!c!{({!{!|!D[!|!}({#R#S({~!DaVT~XY!Dvpq!Dvwx({}!O({!Q![({!c!}({#R#S({~!DyRXY!Dvpq!Dv!t!u!ES~!EVP!k!l!EY~!E]P!i!j!E`~!EcP!j!k!Ef~!EiP!v!w4|~!EqWT~wx({}!O({!Q![({!c!j({!j!k!FZ!k!l!Ha!l!}({#R#S({~!F`UT~wx({}!O({!Q![({!c!d!Fr!d!}({#R#S({~!FwVT~wx({}!O({!Q![({!c!v({!v!w!G^!w!}({#R#S({~!GcVT~XY!Gxpq!Gxwx({}!O({!Q![({!c!}({#R#S({~!G{RXY!Gxpq!Gx!k!l!HU~!HXP!h!i!H[~!HaOu~~!HfVT~wx({}!O({!Q![({!c!v({!v!w!H{!w!}({#R#S({~!IQVT~wx({}!O({!Q![({!c!j({!j!k!Ig!k!}({#R#S({~!InTU~T~wx({}!O({!Q![({!c!}({#R#S({~!JSVT~wx({}!O({!Q![({!c!q({!q!r!Ji!r!}({#R#S({~!JnVT~wx({}!O({!Q![({!c!w({!w!x!KT!x!}({#R#S({~!KYVT~XY!Kopq!Kowx({}!O({!Q![({!c!}({#R#S({~!KrRXY!Kopq!Ko!y!z!K{~!LOP!q!r!LR~!LUP!p!q!LX~!L[Pwx!L_~!LbP!v!w!Le~!LhQXY!Lnpq!Ln~!LqRXY!Lnpq!Ln!y!z!Lz~!L}P!c!d!MQ~!MTP!p!q!MW~!MZP!v!w!M^~!MaQXY!Mgpq!Mg~!MjRXY!Mgpq!Mg!v!w!Ms~!MvP!q!r!My~!M|QXY!NSpq!NS~!NVRXY!NSpq!NS!o!p!N`~!NcP!k!l!Nf~!NiP!u!v!Nl~!NoP!u!v!Nr~!NwOf~",
20
21
  tokenizers: [0],
21
- topRules: {"Program":[0,1]},
22
- tokenPrec: 1489
22
+ topRules: {"Program":[0,2]},
23
+ tokenPrec: 1492
23
24
  });
24
25
 
26
+ const highlighting = styleTags({
27
+ // Comments
28
+ Comment: tags.lineComment,
29
+ // Literals
30
+ NumberLiteral: tags.number,
31
+ StringLiteral: tags.string,
32
+ BooleanLiteral: tags.bool,
33
+ // Identifiers
34
+ Identifier: tags.variableName,
35
+ "FunctionDecl/Identifier": tags.function(tags.definition(tags.variableName)),
36
+ "FunctionCall/Identifier": tags.function(tags.variableName),
37
+ "ArgumentList/Identifier": tags.variableName,
38
+ // Keywords - Definitions (use controlKeyword for better color)
39
+ discoverHowTo: tags.controlKeyword,
40
+ expertsClaim: tags.keyword,
41
+ toBe: tags.operator,
42
+ with: tags.keyword,
43
+ of: tags.keyword,
44
+ // Keywords - Control flow
45
+ whatIf: tags.controlKeyword,
46
+ liesBang: tags.controlKeyword,
47
+ shockingDevelopment: tags.controlKeyword,
48
+ // Keywords - I/O
49
+ youWontWantToMiss: tags.keyword,
50
+ latestNewsOn: tags.keyword,
51
+ // Keywords - Block delimiters
52
+ rumorHasIt: tags.brace,
53
+ endOfStory: tags.brace,
54
+ // Keywords - Program structure
55
+ pleaseLikeAndSubscribe: tags.moduleKeyword,
56
+ // Operators - Comparison
57
+ isActually: tags.compareOperator,
58
+ beats: tags.compareOperator,
59
+ smallerThan: tags.compareOperator,
60
+ // Operators - Logical
61
+ and: tags.logicOperator,
62
+ or: tags.logicOperator,
63
+ // Operators - Arithmetic
64
+ plus: tags.arithmeticOperator,
65
+ minus: tags.arithmeticOperator,
66
+ times: tags.arithmeticOperator,
67
+ dividedBy: tags.arithmeticOperator,
68
+ modulo: tags.arithmeticOperator,
69
+ // Punctuation
70
+ "(": tags.paren,
71
+ ")": tags.paren,
72
+ ",": tags.separator,
73
+ });
74
+
75
+ const keywords = [
76
+ // Function and variable declarations
77
+ { label: "DISCOVER HOW TO", type: "keyword", info: "Function declaration" },
78
+ { label: "WITH", type: "keyword", info: "Function parameters" },
79
+ { label: "EXPERTS CLAIM", type: "keyword", info: "Variable assignment" },
80
+ { label: "TO BE", type: "keyword", info: "Assignment operator" },
81
+ // Control flow
82
+ { label: "WHAT IF", type: "keyword", info: "If statement" },
83
+ { label: "LIES!", type: "keyword", info: "Else statement" },
84
+ { label: "SHOCKING DEVELOPMENT", type: "keyword", info: "Return statement" },
85
+ // Blocks
86
+ { label: "RUMOR HAS IT", type: "keyword", info: "Block start" },
87
+ { label: "END OF STORY", type: "keyword", info: "Block end" },
88
+ // I/O
89
+ { label: "YOU WON'T WANT TO MISS", type: "keyword", info: "Print statement" },
90
+ { label: "LATEST NEWS ON", type: "keyword", info: "Input statement" },
91
+ // Boolean literals
92
+ { label: "TOTALLY RIGHT", type: "keyword", info: "True" },
93
+ { label: "COMPLETELY WRONG", type: "keyword", info: "False" },
94
+ // Operators
95
+ { label: "IS ACTUALLY", type: "keyword", info: "Equality comparison" },
96
+ { label: "BEATS", type: "keyword", info: "Greater than" },
97
+ { label: "SMALLER THAN", type: "keyword", info: "Less than" },
98
+ { label: "AND", type: "keyword", info: "Logical AND" },
99
+ { label: "OR", type: "keyword", info: "Logical OR" },
100
+ { label: "PLUS", type: "keyword", info: "Addition" },
101
+ { label: "MINUS", type: "keyword", info: "Subtraction" },
102
+ { label: "TIMES", type: "keyword", info: "Multiplication" },
103
+ { label: "DIVIDED BY", type: "keyword", info: "Division" },
104
+ { label: "MODULO", type: "keyword", info: "Modulus" },
105
+ { label: "OF", type: "keyword", info: "Function call" },
106
+ // Program end
107
+ {
108
+ label: "PLEASE LIKE AND SUBSCRIBE",
109
+ type: "keyword",
110
+ info: "End of program",
111
+ },
112
+ ];
113
+ function tabloidCompletion(context) {
114
+ const word = context.matchBefore(/[A-Z'][A-Z\-'\s]*/);
115
+ if (!word || (word.from === word.to && !context.explicit)) {
116
+ return null;
117
+ }
118
+ return {
119
+ from: word.from,
120
+ options: keywords,
121
+ };
122
+ }
123
+
124
+ // Wrap parser to debug
125
+ const originalParse = parser.parse.bind(parser);
126
+ parser.parse = function (input, fragments, ranges) {
127
+ console.log("[PARSER] parse called with input:", typeof input === "string" ? input.substring(0, 100) : input);
128
+ const result = originalParse(input, fragments, ranges);
129
+ console.log("[PARSER] parse result:", result.toString());
130
+ return result;
131
+ };
25
132
  const tabloidLanguage = LRLanguage.define({
26
133
  parser: parser.configure({
27
134
  props: [
28
135
  indentNodeProp.add({
29
136
  Block: delimitedIndent({ closing: "endOfStory", align: false }),
30
137
  ParenBlock: delimitedIndent({ closing: ")", align: false }),
31
- FunctionDecl: context => context.baseIndent + context.unit,
32
- IfStatement: context => context.baseIndent + context.unit,
138
+ FunctionDecl: (context) => context.baseIndent + context.unit,
139
+ IfStatement: (context) => context.baseIndent + context.unit,
33
140
  }),
34
141
  foldNodeProp.add({
35
142
  Block: foldInside,
36
143
  ParenBlock: foldInside,
37
144
  }),
38
- styleTags({
39
- Identifier: tags.variableName,
40
- NumberLiteral: tags.number,
41
- StringLiteral: tags.string,
42
- BooleanLiteral: tags.bool,
43
- FunctionCall: tags.function(tags.variableName),
44
- discoverHowTo: tags.definitionKeyword,
45
- expertsClaim: tags.definitionKeyword,
46
- toBe: tags.operatorKeyword,
47
- rumorHasIt: tags.keyword,
48
- endOfStory: tags.keyword,
49
- whatIf: tags.controlKeyword,
50
- liesBang: tags.controlKeyword,
51
- shockingDevelopment: tags.controlKeyword,
52
- youWontWantToMiss: tags.keyword,
53
- latestNewsOn: tags.keyword,
54
- pleaseLikeAndSubscribe: tags.keyword,
55
- "with of": tags.keyword,
56
- "isActually beats smallerThan": tags.compareOperator,
57
- "and or": tags.logicOperator,
58
- "plus minus times dividedBy modulo": tags.arithmeticOperator,
59
- "( )": tags.paren,
60
- ",": tags.separator
61
- })
62
- ]
145
+ highlighting,
146
+ ],
63
147
  }),
64
148
  languageData: {
65
- commentTokens: {}
66
- }
149
+ commentTokens: {},
150
+ closeBrackets: { brackets: ["(", '"', "'"] },
151
+ autocomplete: tabloidCompletion,
152
+ },
67
153
  });
68
154
  function tabloid() {
69
- return new LanguageSupport(tabloidLanguage);
155
+ return new LanguageSupport(tabloidLanguage, [
156
+ autocompletion({ override: [tabloidCompletion] }),
157
+ ]);
70
158
  }
71
159
 
72
- export { tabloid, tabloidLanguage };
160
+ export { tabloid, tabloidCompletion, tabloidLanguage };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@emprespresso/codemirror-lang-tabloid",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "description": "tabloid language support for CodeMirror",
5
5
  "scripts": {
6
6
  "test": "mocha test/test.js",
@@ -17,6 +17,7 @@
17
17
  "types": "dist/index.d.ts",
18
18
  "sideEffects": false,
19
19
  "dependencies": {
20
+ "@codemirror/autocomplete": "^6.20.0",
20
21
  "@codemirror/language": "^6.0.0",
21
22
  "@lezer/highlight": "^1.0.0",
22
23
  "@lezer/lr": "^1.0.0"