diff options
| -rwxr-xr-x | c.bqn | 188 | ||||
| -rw-r--r-- | docs/bqn.js | 6 | ||||
| -rw-r--r-- | src/c.bqn | 9 |
3 files changed, 28 insertions, 175 deletions
@@ -1,67 +1,33 @@ #! ./dzref -nl←@+10 -charSet←∾charGroups←⟨ - chF←"+-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍↑↓↕⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!" # Function - "˙˜˘¨⌜⁼´˝`" # Modifier - "∘○⊸⟜⌾⊘◶⎉⚇⍟" # Composition - nl∾"⋄," # Separator - "←↩→" # Gets - "(){}⟨⟩" # Bracket - "‿" # Ligature - "·" # nOthing - ¯1⊏˘∘‿2⥊"𝕊𝕏𝕎𝔽𝔾𝕤𝕩𝕨𝕗𝕘" # Input (𝕣 pending; ℝ not allowed) - "@" # nUll character - '0'+↕10 # Digit - "¯.π∞" # Numeric - "_"∾˜⥊"aA"+⌜↕na←26 # Alphabetic - 1↑"𝕨" # Prefix for input (hack around UTF-16) - " "∾@+9 # Whitespace -# #'" eliminated during tokenization -⟩ -ErrUnknownChars←{ - "Unclosed quote"!¬∨´⟨''','"'⟩∊𝕩 - ⟨"Unknown character","s"/˜1<≠𝕩,": ",𝕩⟩∾⊸!0 -} -CharCode←charSet{ - Chk ← ⊢⊣ErrUnknownChars∘(≠/⊣)⍟≢⟜(⊏⟜𝕗) - g←⍋𝕗 ⋄ ⊢ Chk g⊏˜1-˜1⌈(g⊏𝕗)⍋⊢ -} +i←"⟨charGroups,Tokenize,ReadNum,Compile⟩" +⟨charGroups,Tokenize,ReadNum,Compile⟩ ← ⟨•path∾"src/c.bqn",i⟩ •EX •path∾"dzref" + +chF←"+-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍↑↓↕⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!" bF‿bM‿bC‿bS‿bG‿bB‿bL‿bO‿bI‿bU‿bD‿bN‿bA‿bP‿bW←≍¨˜⟜(+`≠↑0∾⊢)≠¨charGroups -bA_e←4+⊑bA M←1⊸⊑(0⊸≤∧>)-⟜⊑ vi←+´≠¨9↑charGroups -charRole←((vi-1⊑bI)↑/0∾≠¨3↑charGroups)∾(5/⌽↕2)∾0 -spc←⥊3‿5‿6-⌜3‿0 -Tokenize←{ - r←𝕩='#'⋄s←/(≠↑2⊸↓)⊸∧𝕩='''⋄d←/dm←𝕩='"' - g←⍋q←∾⟨ s⋄¯1↓d⋄/r⟩ ⋄q↩g⊏q - e← g⊏∾⟨2+s⋄ 1↓d⋄(⊢-¯1↓0∾⊢)∘⊏⟜(0∾+`r)⊸//(𝕩=nl)∾1⟩ - Se←{(⊏˜𝕨)Se 1¨⌾((𝕩/𝕨)⊸⊏)𝕩}⍟{0=⊑⌽𝕩} - st←¯1↓Se⟜(1↑˜≠)∾⟜≠q⍋e⋄b←st/q∾˘e - ToI←¯1↓·/⁼(≠𝕩)∾˜⥊ - f←¬≠`bm←ToI b⋄f∧↩¬qe←f∧bm∧(1↓0∾˜⊢)⊸∧dm - cb←(¬(st/q)⊏r)/b - lu←⍷lit←𝕩⊔˜1-˜(+`qe-˜ToI⊑˘cb)×≠`ToI cb - cl←f/ToI⊑∘⌽˘cb - c←cl-˜CharCode(⊑charSet)¨⌾(cl⊸/)f/𝕩 - w←(≠↑0∾⊢)⊸<l←c M (⊑bD)≍+´1⊑¨bD‿bN‿bA - u←c=⊑bU⋄l+↩u⋄w+↩u - us←c=¯1++´bA - id←(1-˜(us<l)×+`w)⊔na(⊢-⊣×+⟜(⊑bA)⊸≤)c - ti←na⌊∘÷˜(⊑bA)-˜w/c - iu←(≠↑¯1∾⌈`)⊸<is←⊐id⋄ni←≠in←0>iu/ti - ti↩(us/˜(1↓0∾˜⊢)⊸<l)(⊢+∧⟜(2⊸=))0⌈ti - - c↩(w∨¬l∨c M (⊑bP)≍+´1⊑¨bP‿bW)/(vi+is⊏⍋⍋in)⌾(w⊸/)(vi+ni+lu⊐lit)⌾(cl⊸/)c - c/˜↩¬(≠↑1∾(c∊2‿4+⊑bB)∨⊢)⊸∧c M bS⋄c/˜↩¬(1↓1∾˜c∊3‿5+⊑bB)∧c M bS - ic←(0⊸≤∧<⟜ni)c-vi⋄t←ti⌾(ic⊸/)(vi⌊c)⊏charRole - c+↩5×c M 5≍˜⊑bI - ⟨c,t,+´¬in,((in//iu)⊏id)∾lu⟩ +# Targetting dzaima/BQN bytecode: +prims←⟨ + +,-,×,÷,⋆,√,⌊,⌈,|,¬,∧,∨,<,>,≠,=,≤,≥,≡,≢,⊣,⊢,⥊,∾,≍,↑,↓,↕,⌽,⍉,/,⍋,⍒,⊏,⊑,⊐,⊒,∊,⍷,⊔,! + ˙,˜,˘,¨,⌜,⁼,´,˝,` + ∘,○,⊸,⟜,⌾,⊘,◶,⎉,⚇,⍟ +⟩ +special←<˘∘‿2⥊"𝕤𝕩𝕨𝕣𝕗𝕘" +DRun←{ + ⟨bc,o,blk⟩ ← prims Compile 𝕩 + blk ↩ { + ⟨t,i,l,n⟩←𝕩 + s←(3×i)↓(t⊑3‿5‿6)↑special + ⟨t⊑"fmd",i,l,s∾⥊¨'a'+↕n-≠s⟩ + }¨blk + •COMP ⟨bc,o,⟨⟩,blk⟩ } + +# Targetting WebAssembly (very incomplete) WParse←{ a←𝕩M(2≍˜⊑bG)⋄at←1⌽a⋄𝕩/˜↩¬a⋄a/˜↩¬at l←≠𝕩⋄sep←𝕩M bS⋄𝕩↩(bF⊑⊸+⊑chF⊐<'⊣')¨⌾(sep⊸/)𝕩⋄sep∨↩𝕩=2+⊑bB @@ -78,17 +44,6 @@ Enc2←{2|⌊∘÷⟜2⍟(↕𝕨)𝕩} Hex←16 Base⟜⌽ (∾"0A"+⟜↕¨10‿6)⊸⊐ -ReadNum←{ - n‿d‿p‿i←4↕⊸+⊑bN # ¯.π∞ - Nat←+⟜(10⊸×)´∘⌽ -⟜(⊑bD) - Int←(n=⊑)◶⟨Nat,-·Nat 1⊸↓⟩ - Dec←⊐⟜(<d)⊸(Nat∘↑ + ·(0<≠)◶⟨0,Nat÷10⋆≠⟩+⟜1⊸↓) - Pos←(⊑p‿i⊐⊏)◶⟨π,∞,Dec⟩ - e←⊑𝕩⊐bA_e - m←(n=⊑)◶⟨Pos,-·Pos 1⊸↓⟩e↑𝕩 - 𝕩×⟜(10⋆·Int(e+1)↓⊣)˜⍟(e<≠𝕩)m -} -LitVal←(⊑⟨⊑bU,''','"'⟩⊐⊏)◶⟨@,1⊸⊑,1⊸↓,ReadNum⟩ GenF64←{ 0:8⥊0; l←2(⌊⋆⁼)𝕩 @@ -148,104 +103,3 @@ WCompile←{ f←⟨rcp,or,body⟩ Gen ⟨(≠¨f)/(1‿2‿0∾¨1)⥊¨¨f64 ⋄ 2 ⋄ ∾f⟩ } - - -# Targetting dzaima/BQN bytecode: - -LEBv ← { - b←128 - l←⌊b⋆⁼1⌈𝕩 - o←⍋⍋((↕¯1⊑⊢)-/⟜(≠↑0∾⊢))⟜(+`)1+l - o⊏l{f←×𝕨⋄(𝕨-1)(b⊸(×⟜f+|)∾𝕊⟜(⌊÷⟜b)○(f⊸/))⍟(∨´f)𝕩}𝕩 -} - -ErrMismatchedBrackets←{ - Lcs ← ¯1 ⊑ 0˘∘⊢ {𝕩⌈⌈`𝕨+0∾˜1↓𝕩}˝ =⌜ - _mis_ ← {"Missing "∾𝕗∾" "∾charSet⊏˜𝕘+⊢/˜≠∘⊣=⊒} - Msg ← >○≠◶⟨"opening"_mis_ 0, "closing"_mis_ 1˜⟩ - 0 !˜ 𝕨 (Lcs<⌊○≠)◶⟨Msg,"Malformed bracket nesting"⟩ 𝕩 -} -ErrUndeclared←{ - 0 !˜ "Undefined identifier"∾(1<≠𝕩)/"s" -} -Parse ← {nv‿r←𝕨 - g←⍋pd←+`p←𝕩(Mׯ1⋆2|-⟜⊑)bB⋄br←p×𝕩M 2≍˜2+⊑bB - p(=⟜1⊸/ErrMismatchedBrackets⍟≢1-˜=⟜¯1⊸/)○(g⊸⊏)𝕩 - "Swapped open and closed brackets" ! 0≤(⊑g)⊑pd - sl←1⊸⌽⊸∨𝕩 M bL⋄sr←¯1⊸⌽⌾(g⊸⊏)sl⋄sa←sl∨sr - g⊏˜↩⍋g⊏sl⋄r×↩¬sa⋄o←p>0 - pt←sa<𝕩=1+⊑bB - rev←⍋+`1+¯1↓g((¯1∾⊣)(⊣⍋⊸⊏⊏˜-⊏˜⟜⍋)⟜⍋1(+`∘∾-∾˜)⊏)o∨sl∨𝕩 M bS - - gf←⍋fd←+`rev⊏br - rev⊏˜↩gf⋄fd⊏˜↩gf - 𝕩⊏˜↩rev⋄bv←rev⊏br⋄b←/bv<0⋄fi←+`c←bv>0 - - FC←-⟜(≠↑0∾⊢)(c∾1)/·+`∾⟜0 - H←0<1↓FC∘= - ft←(0∾1⊸H+2×2⊸H⌈2×3⊸H)(0‿3‿4‿5+5+⊑bI)⍋𝕩 - fsc←ft⊏spc - r↩((1↓ft)⊏(1+2⊸≤)⊸/↕4)⌾((b⊏rev)⊸⊏)r - r+↩pt(⊣∧¬⊸∨=○(⌈`(1+↕∘≠)⊸×)⊢)(¯1⊸⌽⌾(g⊸⊏)3=r)∨1≤r - - id←/idm←(0⊸≤∧<⟜nv)xv←𝕩-vi⋄idx←id⊏𝕩⋄sp←/𝕩 M bI - ad←(⌈`↕∘≠⊸×𝕩 M bG)⊏𝕩=⊑bG - - g↩⍋+`rev⊏p-br⋄gr←g⊏rev⋄sll←1+2÷˜0(<-○/>)gr⊏sr-sl⋄l←/g⊏𝕩=5+⊑bB - g⊏˜↩gs←⍋gr⊏sl⋄gr↩g⊏rev⋄𝕩⊏˜↩g⋄r⊏˜↩gr⋄o⊏˜↩gr⋄si←/gr⊏sr>sl - gi←⍋g⋄l⊏↩⍋gs - s←𝕩 M bS⋄ps←s∨o∨gr⊏sl⋄a←𝕩 M 2≍˜⊑bG - r-↩ps∨a⋄op←r≥2⋄fe←(r≥1)∨1⌽r=3 - tr←(⌈`↕∘≠⊸ׯ1⌽ps)⊏fe - ma←tr<(𝕩=1+⊑bG)∧1⌽fe - ro←op∨a<1⌽r=3⋄os←⌽↕∘≠⊸(⊣-⌈`∘×)⌽¬ro∨ma⋄at←(⊢+1+⊏⟜os)/a - aa←g⊏asn←¯1⌽+`gi⊏-⟜(≠↑0∾⊢)¯1↓/⁼(≠𝕩)∾˜at-1⋄r↩¯1¨⌾(aa⊸/)r - tf←(a≤○(⌈`(1+↕∘≠)⊸×)ps)∧(⊢∧2(|<≤)ps(⊢-⌈`∘×)+`)¬ro - opa←op>1↓0∾˜ps∨a - oa←⌽/opa⋄fa←/(1⌽aa)<(tf∨¬tr)∧(ro∧1⌽opa)<(r=1)∨op<¯1⌽opa - dy←fa⊏1↓0∾˜(𝕩≠⊑bO)∧(tr∧r≥0)∨ro<r=0 - n←𝕩≥vi+nv⋄cn←/n∨𝕩≤¯1++´bC⋄u←∧⍷ob←cn⊏𝕩 - lo←(o/𝕩)=4+⊑bB⋄ll←1+lo/1(↓--⊸↓)(o∾1)/+`(s∾0)-(1∾o)∧ps∾1 - dr←/s>o+`⊸⊏0∾lo⋄rt←/𝕩=2+⊑bB - - d←id⊏dec←idm∧ad∧asn⋄lc←FC dec - ixf←(⊏⟜(¯1∾c/gf)∾d⊸/⊏((≠𝕩)∾b⊏gf)˜)id⊏fi - ig←(⍋⊏⟜(ixx←∾⟜(d⊸/)idx))⊸⊏⍋ixf - "Multiple definitions" ! 1∧´ixx∨○((≠↑0∾⊢)⊸≠((≠id)⊸≤⊸/ig)⊏⊢)ixf - ig↩<⟜(≠id)⊸/(⍋+`∘⊏⟜(d∾-/˜d))⊸⊏ig - d⊏˜↩ig⋄ErrUndeclared∘/˜⍟(0∨´⊢)⟜(d<(≠↑0∾⊢)⊸≠)ig⊏idx - ui←(⌈`↕∘≠⊸×d)⊸⊏⌾(ig⊸⊏)id - ii←(ui⊏(fi⊏fsc)-(⌈`c⊸×)⊸¬+`dec)∾((sp⊏fi)⊏3×2|ft)++⟜(0⊸≤)2+sp⊏xv - idor←∾3⥊<is←id∾sp - idbc←⟨21+is⊏asn,(id-○(⊏⟜fd)ui)∾0¨sp,ii⟩ - - b⊏↩gi - or←⍋idor∾g⊏˜∾⟨cn,cn,b,b,rt,dr,l,l,si,si,at,oa+1⌈oa⊏os,(dy×⊏⟜os)⊸+fa+dy⟩ - bc0←∾idbc∾⟨0¨cn,u⊐ob,15¨b,1+↕≠b⟩ - bc←or⊏bc0∾∾⟨25¨rt,14¨dr,3+l⊏aa,ll,3+si⊏aa,sll,(11-⊑bG)+a/ma+𝕩,5+oa⊏r,(⊢+9×10⊸=)16+dy-7×fa⊏tr⟩ - fs←(ft⊏⥊3≍⌜⟜⌽○↕2)∾¨((+`0∾1+⌊128⋆⁼1⌈bc)⊏˜/1∾or M bc0≍○≠rt)≍○<¨lc+fsc - ⟨LEBv bc∾25,u,fs⟩ -} - -Compile←{ - ⟨t,r,nVar,lits⟩←Tokenize𝕩 - ⟨bc,u,blk⟩←nVar‿r Parse t - o←(u-(vi+nVar-≠𝕨)×u≥vi)⊏𝕨∾LitVal¨lits - ⟨bc,o,blk⟩ -} - -prims←⟨ - +,-,×,÷,⋆,√,⌊,⌈,|,¬,∧,∨,<,>,≠,=,≤,≥,≡,≢,⊣,⊢,⥊,∾,≍,↑,↓,↕,⌽,⍉,/,⍋,⍒,⊏,⊑,⊐,⊒,∊,⍷,⊔,! - ˙,˜,˘,¨,⌜,⁼,´,˝,` - ∘,○,⊸,⟜,⌾,⊘,◶,⎉,⚇,⍟ -⟩ -special←<˘∘‿2⥊"𝕤𝕩𝕨𝕣𝕗𝕘" -DRun←{ - ⟨bc,o,blk⟩ ← prims Compile 𝕩 - blk ↩ { - ⟨t,i,l,n⟩←𝕩 - s←(3×i)↓(t⊑3‿5‿6)↑special - ⟨t⊑"fmd",i,l,s∾⥊¨'a'+↕n-≠s⟩ - }¨blk - •COMP ⟨bc,o,⟨⟩,blk⟩ -} diff --git a/docs/bqn.js b/docs/bqn.js index 43331a0a..5cf2fcb4 100644 --- a/docs/bqn.js +++ b/docs/bqn.js @@ -177,9 +177,9 @@ let runtime = run( // Compiler runtime[40] = assertFn("Compiler"); let compile = run( - new Uint8Array([0,53,0,0,0,52,17,22,0,0,11,14,0,74,22,0,1,11,0,75,0,76,0,77,0,21,21,0,0,17,0,78,0,79,0,80,0,81,0,82,0,83,0,53,0,25,16,0,0,0,84,17,0,85,0,54,22,0,2,11,0,25,16,0,40,0,0,7,0,87,17,0,20,16,0,37,0,21,7,0,86,17,0,55,0,0,0,52,17,0,21,0,88,17,3,14,22,0,3,11,0,21,16,22,0,4,11,14,15,1,22,0,5,11,14,15,2,21,0,4,7,22,0,6,11,14,21,0,3,0,39,0,13,7,16,0,19,0,21,0,57,19,0,23,0,13,19,0,44,0,0,7,9,0,48,0,37,0,39,0,22,7,7,8,16,22,0,7,22,0,8,22,0,9,22,0,10,22,0,11,22,0,12,22,0,13,22,0,14,22,0,15,22,0,16,22,0,17,22,0,18,22,0,19,22,0,20,4,14,11,14,21,0,19,0,30,16,0,0,0,58,17,22,0,21,11,14,0,30,0,48,0,1,8,0,12,0,9,0,15,0,47,0,57,8,19,0,30,0,47,0,56,8,19,22,0,22,11,14,21,0,3,0,23,0,55,17,0,39,0,13,7,16,0,42,0,0,7,16,22,0,23,11,14,0,57,0,21,0,61,0,25,16,0,26,16,0,27,0,60,17,17,0,21,21,0,3,0,23,0,59,17,0,39,0,13,7,16,0,21,0,57,17,0,27,16,0,23,21,0,15,0,30,0,56,17,0,1,21,0,23,17,17,17,22,0,24,11,14,0,59,0,57,3,2,0,40,0,1,7,0,59,0,60,0,62,3,3,17,0,20,16,22,0,25,11,14,15,3,22,0,26,11,14,15,4,22,0,27,11,14,0,52,0,30,0,47,0,56,8,0,24,0,47,0,56,8,21,0,27,3,4,0,50,0,29,0,31,21,0,16,0,30,16,0,90,0,91,3,3,19,0,30,9,8,22,0,28,11,14,15,5,22,0,29,11,14,15,6,22,0,30,11,14,15,7,22,0,31,11,14,15,8,22,0,32,11,14,15,9,22,0,33,11,25,21,0,1,0,33,0,90,0,91,3,2,17,0,42,0,10,7,16,0,8,16,0,36,0,89,17,14,0,57,0,36,0,47,0,21,8,0,92,21,0,1,0,13,16,0,11,0,56,17,0,37,0,27,7,0,93,17,0,94,21,0,1,3,4,17,25,21,0,1,0,48,0,29,8,0,48,0,17,0,51,0,18,0,27,0,13,19,0,45,21,1,5,8,8,8,0,18,0,19,19,22,0,2,11,14,21,0,1,0,28,16,22,0,3,11,14,0,19,0,28,21,0,1,0,29,21,0,3,17,19,0,6,0,56,19,0,37,0,1,7,0,56,19,0,37,0,29,7,21,0,3,19,21,0,2,0,19,19,25,0,95,0,14,21,0,1,17,22,0,3,11,14,0,90,0,14,21,0,1,17,0,9,0,47,0,24,0,47,0,61,8,0,23,0,13,19,8,16,0,27,16,22,0,4,11,14,0,91,0,14,21,0,1,17,22,0,5,11,0,27,16,22,0,6,11,14,21,0,4,21,0,6,0,24,0,63,17,21,0,3,0,27,16,3,3,0,21,16,22,0,7,11,0,28,16,22,0,8,11,14,21,0,7,0,29,21,0,8,17,22,0,7,12,14,21,0,4,0,0,0,61,17,21,0,6,0,24,0,56,17,0,56,0,21,21,1,0,0,14,21,0,1,17,17,0,27,16,0,27,0,47,21,0,3,0,44,0,0,7,16,0,21,0,57,17,0,48,0,29,0,45,0,19,0,21,0,57,19,0,24,0,63,19,0,1,0,19,19,8,8,8,16,3,3,0,21,16,0,29,21,0,8,17,22,0,9,11,14,15,10,0,51,15,11,8,22,0,10,11,14,21,0,9,0,28,21,0,7,17,0,13,0,48,0,21,8,16,0,13,0,37,0,23,7,0,56,19,0,48,21,0,10,8,16,0,24,0,63,17,22,0,11,11,14,21,0,9,0,38,0,21,7,21,0,7,17,0,27,21,0,11,17,22,0,12,11,14,0,20,0,37,0,21,7,21,0,1,0,13,16,19,0,41,0,27,7,9,0,24,0,63,19,22,0,13,11,14,21,0,12,21,0,13,16,22,0,14,11,0,44,0,13,7,16,0,8,16,22,0,15,11,14,21,0,5,0,9,0,47,0,19,0,37,0,21,7,0,57,19,0,24,0,56,19,8,16,0,9,21,0,14,17,0,9,21,0,15,17,22,0,16,11,0,8,16,0,9,22,0,15,13,14,21,0,12,0,27,21,0,3,0,29,21,0,7,0,27,21,0,11,17,17,0,8,16,17,22,0,17,11,14,21,0,17,21,0,13,16,0,44,0,13,7,16,0,2,21,0,17,0,38,0,30,7,16,21,0,13,16,0,37,0,1,7,21,0,16,17,0,44,0,0,7,16,17,0,37,0,1,7,0,56,17,0,37,0,35,7,21,0,1,17,22,0,18,11,0,34,16,22,0,19,11,14,21,0,17,0,38,0,26,0,45,0,30,8,7,16,21,0,13,16,0,27,21,0,15,17,22,0,20,11,14,21,0,1,0,27,21,0,15,17,0,27,0,47,21,0,20,8,0,49,0,39,21,1,4,0,30,16,7,8,16,21,1,6,16,0,37,0,1,7,21,0,20,17,22,0,21,11,14,21,1,17,21,1,18,21,1,19,3,3,0,39,0,30,7,0,56,17,0,42,0,0,7,16,0,22,21,1,17,0,30,16,17,21,1,22,21,0,21,17,22,0,22,11,0,11,0,47,0,19,0,21,0,57,19,0,23,0,13,19,8,16,22,0,23,11,14,21,1,16,0,30,16,0,14,21,0,21,17,22,0,24,11,14,21,0,24,0,0,22,0,22,13,14,21,0,24,0,0,22,0,23,13,14,21,1,19,0,42,0,0,7,16,0,0,0,63,17,0,14,21,0,21,17,22,0,25,11,14,21,0,21,0,15,0,47,21,1,19,0,30,16,0,48,0,0,8,8,0,2,0,18,19,0,1,0,19,19,21,1,2,17,0,35,21,0,23,0,44,0,0,7,16,0,2,21,0,22,0,11,21,0,25,17,17,0,37,0,1,7,0,56,17,17,22,0,26,11,14,21,0,21,0,27,21,0,23,17,0,37,0,1,7,21,1,19,0,30,16,17,0,37,0,3,0,45,0,5,8,7,21,1,2,17,22,0,27,11,14,21,0,26,0,31,16,22,0,28,11,0,11,0,47,0,44,0,6,7,0,21,0,63,19,0,23,0,13,19,8,16,22,0,29,11,14,21,0,27,0,27,21,0,29,17,0,12,0,57,17,22,0,30,11,0,13,16,22,0,31,11,14,21,0,27,0,6,0,57,17,0,14,0,47,0,61,8,0,48,0,9,8,0,0,0,19,19,21,0,22,0,11,0,47,0,19,0,37,0,21,7,0,57,19,0,24,0,56,19,8,16,0,37,0,27,7,21,0,25,17,17,22,0,27,12,14,21,0,21,0,27,0,47,21,0,20,8,0,49,21,0,18,0,31,21,0,19,17,0,0,21,0,31,17,0,0,21,1,23,17,8,16,0,27,0,47,21,0,23,8,0,49,21,0,30,0,28,16,0,28,16,0,29,21,0,28,17,0,0,21,1,23,17,8,16,0,27,21,1,20,21,1,22,21,0,21,17,0,10,21,0,22,17,0,8,16,0,10,21,0,23,17,17,22,0,21,12,14,21,1,10,21,1,22,21,0,21,17,0,9,0,47,0,19,0,10,21,1,12,0,30,16,0,0,0,61,0,58,3,2,17,0,33,21,0,21,17,19,0,21,0,56,19,0,23,0,13,19,8,16,0,8,16,0,37,0,27,7,22,0,21,13,14,21,1,10,21,1,22,21,0,21,17,0,9,21,1,12,0,30,16,0,0,0,59,0,60,3,2,17,0,33,21,0,21,17,0,37,0,21,7,0,56,17,0,24,0,56,17,17,0,8,16,0,37,0,27,7,22,0,21,13,14,21,1,23,0,1,21,0,21,17,21,0,31,0,48,0,11,8,0,9,0,15,0,47,0,57,8,19,16,22,0,32,11,14,21,1,24,0,29,21,0,21,0,5,21,1,23,17,17,0,27,0,47,21,0,32,8,0,49,21,0,27,8,16,22,0,33,11,14,21,1,15,0,30,16,0,37,0,22,7,0,60,17,21,1,22,21,0,21,17,0,2,0,60,17,0,0,22,0,21,13,14,21,0,21,21,0,33,21,0,30,0,8,16,0,42,0,0,7,16,21,0,19,0,21,21,0,26,0,29,21,0,29,0,27,16,0,27,21,0,30,17,17,17,3,4,25,21,1,18,0,30,16,0,0,0,47,0,25,8,0,58,17,22,0,3,22,0,4,22,0,5,22,0,6,4,4,11,14,21,1,17,0,30,16,0,48,0,1,8,0,26,0,45,0,42,0,2,0,47,0,53,8,0,48,0,0,8,7,8,9,22,0,7,11,14,21,0,7,0,24,0,47,0,56,8,21,0,7,9,0,1,9,3,2,0,50,0,30,0,14,21,0,3,19,8,22,0,8,11,14,0,24,0,47,0,56,0,48,0,0,8,8,0,57,0,13,0,4,0,53,19,0,3,21,0,7,19,3,2,0,50,0,13,0,11,0,57,19,8,9,0,0,0,23,0,45,21,0,7,8,19,0,47,21,0,4,0,11,16,0,48,0,31,8,8,22,0,9,11,14,0,64,0,65,21,0,9,3,3,0,50,0,29,0,31,21,0,5,21,0,6,3,2,19,0,30,9,8,22,0,10,11,14,21,1,21,0,31,21,0,1,17,0,30,16,22,0,11,11,14,21,0,1,0,23,21,0,11,17,21,0,10,0,24,0,47,0,56,8,21,0,10,9,0,1,9,3,2,0,50,0,30,0,14,21,0,3,19,8,16,22,0,12,11,14,21,0,12,21,0,1,0,13,16,0,11,21,0,11,17,0,51,0,37,0,18,0,24,0,56,0,0,21,0,11,17,19,21,0,8,9,0,4,0,53,19,0,48,0,2,8,7,8,21,0,1,17,25,0,66,22,0,3,11,14,21,0,1,0,6,0,56,17,0,41,0,4,7,21,0,3,17,0,5,16,22,0,4,11,14,21,0,4,0,0,0,56,17,0,44,0,0,7,0,48,0,19,0,21,0,57,19,0,23,0,13,19,0,48,0,27,8,0,1,0,19,0,30,0,63,19,0,25,9,19,8,16,0,28,16,0,28,16,22,0,5,11,14,21,0,1,15,12,21,0,4,17,0,29,21,0,5,17,25,0,40,0,14,7,0,43,15,13,7,0,19,0,45,0,38,0,57,7,8,19,0,30,0,63,19,22,0,3,11,14,15,14,22,0,4,11,14,0,57,21,0,4,0,97,8,0,37,0,56,21,0,4,0,98,8,7,3,2,0,50,0,13,0,46,0,12,8,8,22,0,5,11,14,21,0,1,21,0,5,0,99,3,2,0,50,0,13,0,46,0,5,8,0,11,21,0,3,19,8,21,0,2,17,0,37,0,36,7,0,57,17,25,0,93,0,27,21,0,1,0,13,16,0,11,0,56,17,17,0,21,0,100,17,0,37,0,36,7,0,57,17,25,21,0,2,22,0,3,22,0,4,4,2,11,14,21,1,12,0,30,0,48,0,1,8,0,7,0,61,19,0,4,0,63,19,0,2,21,1,22,19,21,0,1,17,22,0,5,11,0,44,0,0,7,16,22,0,6,11,0,28,16,22,0,7,11,14,21,1,12,0,30,16,0,0,0,61,17,0,37,0,22,7,0,61,17,21,1,22,21,0,1,17,0,2,21,0,5,17,22,0,8,11,14,21,0,1,0,29,0,47,21,0,7,8,0,46,0,27,0,47,0,63,0,48,0,14,8,8,0,37,0,1,7,0,56,19,0,17,0,51,21,1,30,8,0,27,0,47,0,56,0,48,0,14,8,8,19,8,21,0,5,17,14,21,0,6,0,30,21,0,7,0,30,16,17,0,15,0,57,17,0,36,0,101,17,14,21,1,13,21,1,22,21,0,1,17,0,10,0,47,0,26,0,47,0,56,8,8,16,22,0,9,11,14,21,0,9,0,29,0,47,21,0,7,8,0,49,0,26,0,47,0,63,8,8,16,22,0,10,11,14,21,0,10,0,10,21,0,9,17,22,0,11,11,14,21,0,9,0,29,21,0,7,17,0,28,16,0,37,0,29,7,22,0,7,13,14,21,0,11,0,8,16,0,2,22,0,4,13,14,0,57,0,12,21,0,5,17,22,0,12,11,14,21,1,12,0,30,16,0,0,0,56,17,0,14,21,0,1,17,0,11,21,0,11,17,22,0,13,11,14,21,1,10,21,1,22,21,0,1,17,0,10,21,0,9,17,0,10,21,0,12,17,0,29,0,37,0,21,7,0,1,0,21,0,45,0,44,0,0,7,8,19,0,56,19,0,28,0,48,0,28,0,48,0,37,0,29,7,8,0,1,0,37,0,29,7,19,0,29,0,47,0,28,8,0,18,19,8,0,18,0,21,0,63,19,19,21,0,7,17,0,24,0,63,17,0,0,0,56,17,0,44,0,0,7,16,0,28,16,22,0,14,11,14,21,0,8,0,29,21,0,14,17,0,44,0,0,7,16,22,0,15,11,0,28,16,22,0,16,11,14,21,0,16,0,37,0,29,7,22,0,14,13,14,21,0,16,0,37,0,29,7,22,0,15,13,14,21,0,14,0,37,0,29,7,22,0,1,13,14,21,0,8,0,29,21,0,14,17,22,0,17,11,14,0,57,0,11,21,0,17,17,0,27,16,22,0,18,11,14,0,57,0,12,21,0,17,17,22,0,19,11,0,44,0,0,7,16,22,0,20,11,14,0,57,0,48,0,21,8,0,44,0,0,7,9,0,27,0,56,0,21,21,0,19,17,19,0,19,0,21,0,57,19,0,23,0,13,19,0,48,0,1,8,9,22,0,21,11,14,0,14,0,45,21,0,21,8,0,24,0,56,19,0,11,0,57,19,22,0,22,11,14,21,0,1,0,28,21,1,15,0,30,16,0,0,0,60,17,0,0,0,57,0,59,0,58,0,60,3,4,17,17,21,0,22,0,47,0,59,8,0,2,0,61,19,0,6,21,0,22,0,47,0,61,8,19,0,2,0,61,19,0,0,21,0,22,0,47,0,56,8,19,0,21,0,57,19,16,22,0,23,11,14,21,1,25,0,29,21,0,23,17,22,0,24,11,14,21,0,4,0,29,0,47,21,0,14,0,29,21,0,18,17,8,0,49,0,58,0,25,16,0,27,0,47,0,15,0,47,0,61,8,0,0,0,56,19,8,16,0,29,21,0,23,0,24,0,56,17,17,8,16,22,0,4,12,14,21,0,4,0,15,0,56,17,0,10,21,0,4,0,14,0,59,17,0,29,0,47,21,0,7,8,0,49,0,26,0,47,0,63,8,8,16,17,0,19,0,2,0,47,0,13,0,45,0,25,8,0,0,0,56,19,8,0,44,0,6,7,9,0,46,0,14,8,0,10,0,47,0,8,8,19,0,9,0,18,19,21,0,13,17,0,0,22,0,4,13,14,21,1,23,0,1,21,0,1,17,22,0,25,11,21,0,3,0,48,0,11,8,0,9,0,15,0,47,0,57,8,19,16,22,0,26,11,0,27,16,22,0,27,11,14,21,0,1,0,29,21,0,27,17,22,0,28,11,14,21,1,15,21,1,22,21,0,1,17,0,27,16,22,0,29,11,14,21,1,11,0,30,16,0,14,21,0,1,17,0,29,21,1,11,21,1,22,21,0,1,17,0,2,0,47,0,13,0,45,0,25,8,8,16,0,44,0,6,7,16,17,22,0,30,11,14,21,0,8,0,1,21,0,5,17,0,29,21,0,14,17,0,44,0,0,7,16,0,28,16,22,0,7,12,14,21,0,14,0,29,21,0,7,17,22,0,31,11,14,21,0,9,0,1,21,0,10,17,0,29,21,0,31,17,0,12,0,27,0,46,0,1,8,0,11,19,0,57,17,0,37,0,3,7,0,61,17,0,0,0,56,17,22,0,32,11,14,21,1,12,0,30,16,0,0,0,60,17,0,14,21,0,1,17,0,29,21,0,7,17,0,27,16,22,0,33,11,14,21,0,9,0,29,21,0,31,17,0,28,16,22,0,34,11,0,37,0,29,7,22,0,7,13,14,21,0,14,0,29,21,0,7,17,22,0,31,12,14,21,0,7,0,37,0,29,7,22,0,1,13,14,21,0,31,0,37,0,29,7,22,0,4,13,14,21,0,31,0,37,0,29,7,22,0,12,13,14,21,0,9,0,12,21,0,10,17,0,29,21,0,31,17,0,27,16,22,0,35,11,14,21,0,7,0,28,16,22,0,36,11,14,21,0,34,0,28,16,0,29,22,0,33,13,14,21,1,10,21,1,22,21,0,1,17,22,0,37,11,14,21,0,9,0,29,21,0,31,17,0,10,21,0,12,17,0,10,21,0,37,17,22,0,38,11,14,21,1,11,0,30,16,0,37,0,22,7,0,61,17,21,1,22,21,0,1,17,22,0,39,11,14,21,0,39,0,10,21,0,38,17,0,1,22,0,4,13,14,0,61,0,16,21,0,4,17,22,0,40,11,14,0,59,0,14,21,0,4,17,0,26,0,56,17,0,10,0,56,0,16,21,0,4,17,17,22,0,41,11,14,21,0,41,0,29,21,0,38,0,26,0,63,17,0,2,0,47,0,13,0,45,0,25,8,8,16,0,44,0,6,7,16,17,22,0,42,11,14,21,0,41,0,26,0,56,17,0,9,21,1,11,0,30,16,0,0,0,56,17,0,14,21,0,1,17,17,0,11,21,0,42,17,22,0,43,11,14,0,59,0,14,21,0,4,17,0,26,0,56,17,0,11,21,0,39,17,0,10,21,0,40,17,22,0,44,11,14,21,0,43,0,10,21,0,44,17,0,8,16,0,26,16,0,2,0,45,0,44,0,6,7,8,0,1,0,18,19,0,47,0,13,0,45,0,25,8,8,16,0,26,16,22,0,45,11,14,21,0,39,0,27,16,21,0,45,0,48,0,29,8,0,0,0,56,19,0,0,0,19,19,16,22,0,46,11,14,0,56,0,1,21,0,46,17,0,37,0,21,7,21,0,1,0,13,16,17,0,41,0,27,7,16,0,24,0,63,17,0,19,0,21,0,57,19,0,23,0,13,19,0,48,0,1,8,16,0,29,21,0,36,17,0,44,0,0,7,16,0,26,0,63,17,22,0,47,11,0,29,21,0,7,17,22,0,48,11,14,21,0,4,0,27,0,47,21,0,48,8,0,49,0,39,0,63,7,8,16,22,0,4,12,14,21,0,44,0,8,16,0,44,0,0,7,0,2,0,45,0,44,0,6,7,8,0,1,0,19,19,21,0,38,19,0,15,0,11,0,7,19,0,61,19,0,9,0,19,19,16,0,9,21,0,38,0,2,0,47,0,13,0,45,0,25,8,0,0,0,56,19,8,0,44,0,6,7,9,0,46,0,15,8,21,0,39,17,17,22,0,49,11,14,21,0,39,0,10,21,0,38,17,0,37,0,21,7,0,57,17,0,24,0,56,17,0,12,21,0,40,17,22,0,50,11,14,21,0,50,0,27,16,0,26,16,22,0,51,11,14,21,0,50,0,26,0,63,17,0,11,21,0,40,17,0,10,0,56,0,14,21,0,4,17,17,0,11,21,0,50,0,26,0,56,17,0,9,21,0,44,17,17,0,9,21,0,42,0,8,16,0,10,21,0,49,17,17,0,11,21,0,48,0,26,0,56,17,17,0,27,16,22,0,52,11,14,0,57,0,14,21,0,4,17,0,11,21,0,44,17,0,10,0,57,0,16,21,0,4,17,0,9,21,0,42,17,17,0,9,21,1,14,0,30,16,0,13,21,0,1,17,17,0,37,0,21,7,0,57,17,0,24,0,56,17,0,29,21,0,52,17,22,0,53,11,14,21,0,3,0,0,21,1,23,17,0,16,21,0,1,17,22,0,54,11,14,21,1,9,0,42,0,0,7,16,0,0,0,63,17,0,15,21,0,1,17,0,10,21,0,54,17,0,27,16,22,0,55,11,14,21,0,1,0,29,21,0,55,17,22,0,56,11,0,34,16,0,9,16,22,0,57,11,14,21,1,12,0,30,16,0,0,0,58,17,0,14,21,0,1,0,27,21,0,12,17,17,22,0,58,11,14,0,56,0,21,21,0,38,17,0,9,21,0,12,0,21,0,56,17,17,0,1,0,57,0,21,21,0,37,17,17,0,44,0,0,7,16,0,27,0,56,0,21,21,0,12,17,17,0,24,0,47,0,1,8,0,1,0,24,19,0,56,17,0,27,21,0,58,17,0,0,0,56,17,22,0,59,11,14,21,0,58,0,21,0,57,17,0,29,0,47,0,44,0,0,7,8,21,0,12,17,0,12,21,0,37,17,0,27,16,22,0,60,11,14,21,1,12,0,30,16,0,0,0,61,17,0,14,21,0,1,17,0,27,16,22,0,61,11,14,21,0,47,0,9,21,0,30,17,0,9,21,0,26,17,22,0,62,11,0,29,21,0,27,17,22,0,63,11,14,21,0,62,21,0,21,16,22,0,64,11,14,21,0,20,0,29,21,0,27,17,0,37,21,0,16,0,29,21,0,18,17,0,21,21,0,1,0,13,16,17,7,0,29,0,27,0,47,21,0,63,8,19,0,21,21,0,16,0,27,21,0,19,17,0,21,0,63,17,0,48,0,29,8,19,16,22,0,65,11,14,21,0,65,0,28,16,0,29,0,47,21,0,28,0,27,0,47,21,0,63,8,0,48,0,21,8,16,22,0,66,11,0,48,0,29,8,0,28,9,8,16,22,0,67,11,14,21,0,65,0,19,0,29,21,0,67,0,27,0,47,0,15,0,47,21,0,27,0,13,16,8,8,16,19,0,13,0,47,0,19,0,21,0,57,19,0,23,0,13,19,8,9,0,46,0,10,8,21,0,66,17,0,42,0,9,7,0,56,17,0,36,0,102,17,14,21,0,67,0,29,0,47,21,0,63,0,37,0,27,7,16,0,1,16,0,21,21,0,63,17,0,48,0,29,0,45,0,44,0,0,7,8,8,0,28,9,8,16,0,27,0,47,21,0,27,0,13,16,0,48,0,11,8,8,16,22,0,67,12,14,21,0,67,0,37,0,29,7,22,0,63,13,14,21,0,28,0,29,21,0,67,17,0,13,0,47,0,19,0,21,0,57,19,0,23,0,13,19,8,0,11,21,0,63,19,0,48,0,19,0,42,0,10,7,0,57,19,0,51,0,37,0,27,0,45,21,1,31,8,7,8,8,16,14,21,0,27,0,29,0,47,21,0,67,8,0,49,0,29,0,47,21,0,63,0,2,0,47,0,13,0,45,0,25,8,8,16,0,44,0,6,7,16,8,8,16,22,0,68,11,14,21,0,25,0,29,21,0,29,17,0,0,0,61,17,0,15,0,47,0,57,8,0,48,0,0,8,16,0,0,21,0,23,0,7,0,61,17,0,2,0,59,17,0,29,21,0,20,0,29,21,0,29,17,17,17,0,21,21,0,62,0,44,0,0,7,16,0,8,0,47,0,2,0,47,21,0,19,8,0,44,0,6,7,9,8,16,0,1,21,0,24,0,29,21,0,20,17,17,0,29,21,0,68,17,17,22,0,69,11,14,21,0,29,0,21,21,0,27,17,22,0,70,11,0,11,16,0,20,0,59,17,0,21,16,22,0,71,11,14,21,0,47,0,29,21,0,70,17,0,0,0,67,17,21,0,29,0,39,0,57,7,16,0,21,21,0,68,21,0,15,0,48,0,29,8,0,46,0,1,8,21,0,27,17,17,21,0,69,3,3,22,0,72,11,14,21,0,36,0,29,22,0,18,13,14,21,0,55,21,0,55,21,0,18,21,0,18,21,0,61,21,0,60,21,0,33,21,0,33,21,0,35,21,0,35,21,0,46,21,0,45,0,29,21,0,51,17,0,6,0,56,17,0,0,21,0,51,17,21,0,53,0,0,21,0,52,17,0,0,0,47,21,0,45,0,48,0,29,8,0,2,21,0,53,19,8,16,3,13,0,21,16,0,37,0,29,7,21,0,7,17,0,21,21,0,71,17,0,28,16,22,0,73,11,14,21,0,55,0,39,0,57,7,16,21,0,56,0,31,21,0,57,17,21,0,18,0,39,0,68,7,16,21,0,18,0,13,16,0,25,16,0,0,0,56,17,3,4,0,21,21,0,72,17,0,21,16,22,0,74,11,14,21,0,61,0,39,0,69,7,16,21,0,60,0,39,0,70,7,16,21,0,48,0,29,21,0,33,17,0,0,0,59,17,21,0,59,21,0,48,0,29,21,0,35,17,0,0,0,59,17,21,0,32,21,0,1,0,0,21,0,43,17,0,27,21,0,39,17,0,0,21,1,11,0,30,16,0,1,0,71,17,17,21,0,4,0,29,21,0,51,17,0,0,0,60,17,21,0,42,0,29,21,0,52,17,0,2,0,73,17,0,1,21,0,53,17,0,0,0,72,17,0,14,0,47,0,53,8,0,2,0,55,19,0,0,0,19,19,16,3,9,0,21,16,0,21,21,0,74,17,0,29,21,0,73,17,22,0,75,11,14,21,0,24,0,0,21,0,64,17,0,39,0,11,0,46,0,22,8,7,21,0,61,0,13,0,46,0,22,8,21,0,74,17,21,1,22,21,0,73,17,0,21,0,56,17,0,27,16,0,37,0,29,7,21,0,75,0,6,0,56,17,0,41,0,4,7,0,66,17,0,5,16,0,0,0,56,17,0,21,0,57,17,0,44,0,0,7,16,17,17,0,39,0,21,7,0,61,0,25,0,46,0,26,0,48,0,40,0,22,7,8,8,0,59,17,0,20,16,0,29,21,0,23,17,17,22,0,76,11,14,0,69,0,21,21,0,75,17,21,1,29,16,21,0,57,21,0,76,3,3,25,21,0,1,21,1,26,16,22,0,3,22,0,4,22,0,5,22,0,6,4,4,11,14,21,0,3,21,1,32,21,0,5,21,0,4,3,2,17,22,0,7,22,0,8,22,0,9,4,3,11,14,21,0,6,0,39,21,1,28,7,16,0,21,21,0,2,17,0,29,21,1,23,0,16,21,0,8,17,0,2,21,0,2,0,13,16,0,1,21,0,5,17,0,0,21,1,23,17,17,0,1,21,0,8,17,17,22,0,10,11,14,21,0,7,21,0,10,21,0,9,3,3,25,21,0,1,0,26,16,0,30,16,0,14,0,57,17,25,21,0,1,0,29,0,47,21,0,2,0,27,21,0,1,17,8,0,49,0,39,0,56,7,8,16,21,1,10,21,0,2,0,37,0,29,7,16,17,25,21,0,2,0,2,16,22,0,3,11,14,21,0,1,21,0,3,0,42,0,10,7,16,0,51,0,27,0,47,21,0,3,8,0,46,21,1,3,0,48,0,3,8,0,5,9,0,48,21,0,0,8,8,0,21,0,7,0,0,21,0,3,0,48,0,2,8,19,0,47,21,1,3,8,19,8,0,56,0,1,21,0,2,17,17,25,21,0,1,0,24,0,56,17,0,37,0,21,7,0,57,17,0,0,21,0,2,17,0,44,0,6,7,16,0,6,21,0,1,17,25,0,32,0,14,0,18,0,45,0,13,8,19,0,37,0,27,7,0,19,19,0,0,21,0,2,19,0,37,0,29,7,21,2,4,19,0,21,0,88,19,0,21,21,0,1,19,0,21,0,96,19,25]) - ,[runtime[0],runtime[1],runtime[2],runtime[3],runtime[4],runtime[6],runtime[7],runtime[8],runtime[9],runtime[10],runtime[11],runtime[12],runtime[13],runtime[14],runtime[15],runtime[16],runtime[17],runtime[19],runtime[20],runtime[21],runtime[22],runtime[23],runtime[24],runtime[25],runtime[26],runtime[27],runtime[28],runtime[30],runtime[31],runtime[33],runtime[34],runtime[35],runtime[36],runtime[37],runtime[38],runtime[39],runtime[40],runtime[42],runtime[43],runtime[44],runtime[45],runtime[46],runtime[47],runtime[48],runtime[49],runtime[50],runtime[51],runtime[52],runtime[53],runtime[54],runtime[56],runtime[59],' - ,[[0,1,0,34],[0,0,475,3],[1,1,541,4],[0,0,634,34],[0,0,1945,13],[0,0,2267,6],[0,0,2373,6],[0,0,2486,3],[0,0,2516,77],[0,0,5808,11],[0,0,5931,3],[0,0,5946,3],[0,0,5986,4],[0,0,6072,3],[2,1,6107,3]] + new Uint8Array([0,53,0,0,0,52,17,22,0,0,11,14,0,74,22,0,1,11,0,75,0,76,0,77,0,21,21,0,0,17,0,78,0,79,0,80,0,81,0,82,0,20,0,53,0,45,3,2,17,0,38,0,29,7,0,54,17,0,83,0,53,0,25,16,0,0,0,84,17,0,85,0,55,22,0,2,11,0,25,16,0,40,0,0,7,0,87,17,0,20,16,0,37,0,21,7,0,86,17,0,88,0,24,0,54,17,0,56,0,0,0,52,17,0,21,0,89,17,3,15,22,0,3,11,0,21,16,22,0,4,11,14,15,1,22,0,5,11,14,15,2,21,0,4,7,22,0,6,11,14,21,0,3,0,39,0,13,7,16,0,19,0,21,0,58,19,0,23,0,13,19,0,44,0,0,7,9,0,48,0,37,0,39,0,22,7,7,8,16,22,0,7,22,0,8,22,0,9,22,0,10,22,0,11,22,0,12,22,0,13,22,0,14,22,0,15,22,0,16,22,0,17,22,0,18,22,0,19,22,0,20,22,0,21,4,15,11,14,21,0,19,0,30,16,0,0,0,59,17,22,0,22,11,14,0,30,0,48,0,1,8,0,12,0,9,0,15,0,47,0,58,8,19,0,30,0,47,0,57,8,19,22,0,23,11,14,21,0,3,0,23,0,56,17,0,39,0,13,7,16,0,42,0,0,7,16,22,0,24,11,14,0,58,0,21,0,62,0,25,16,0,26,16,0,27,0,61,17,17,0,21,21,0,3,0,23,0,60,17,0,39,0,13,7,16,0,21,0,58,17,0,27,16,0,23,21,0,15,0,30,0,57,17,0,1,21,0,24,17,17,17,22,0,25,11,14,0,60,0,58,3,2,0,40,0,1,7,0,60,0,61,0,63,3,3,17,0,20,16,22,0,26,11,14,15,3,22,0,27,11,14,15,4,22,0,28,11,14,0,52,0,30,0,47,0,57,8,0,24,0,47,0,57,8,21,0,28,3,4,0,50,0,29,0,31,21,0,16,0,30,16,0,91,0,92,3,3,19,0,30,9,8,22,0,29,11,14,15,5,22,0,30,11,14,15,6,22,0,31,11,14,15,7,22,0,32,11,14,15,8,22,0,33,11,14,15,9,22,0,34,11,25,21,0,1,0,33,0,91,0,92,3,2,17,0,42,0,10,7,16,0,8,16,0,36,0,90,17,14,0,58,0,36,0,47,0,21,8,0,93,21,0,1,0,13,16,0,11,0,57,17,0,37,0,27,7,0,94,17,0,95,21,0,1,3,4,17,25,21,0,1,0,48,0,29,8,0,48,0,17,0,51,0,18,0,27,0,13,19,0,45,21,1,5,8,8,8,0,18,0,19,19,22,0,2,11,14,21,0,1,0,28,16,22,0,3,11,14,0,19,0,28,21,0,1,0,29,21,0,3,17,19,0,6,0,57,19,0,37,0,1,7,0,57,19,0,37,0,29,7,21,0,3,19,21,0,2,0,19,19,25,0,96,0,14,21,0,1,17,22,0,3,11,14,0,91,0,14,21,0,1,17,0,9,0,47,0,24,0,47,0,62,8,0,23,0,13,19,8,16,0,27,16,22,0,4,11,14,0,92,0,14,21,0,1,17,22,0,5,11,0,27,16,22,0,6,11,14,21,0,4,21,0,6,0,24,0,54,17,21,0,3,0,27,16,3,3,0,21,16,22,0,7,11,0,28,16,22,0,8,11,14,21,0,7,0,29,21,0,8,17,22,0,7,12,14,21,0,4,0,0,0,62,17,21,0,6,0,24,0,57,17,0,57,0,21,21,1,0,0,14,21,0,1,17,17,0,27,16,0,27,0,47,21,0,3,0,44,0,0,7,16,0,21,0,58,17,0,48,0,29,0,45,0,19,0,21,0,58,19,0,24,0,54,19,0,1,0,19,19,8,8,8,16,3,3,0,21,16,0,29,21,0,8,17,22,0,9,11,14,15,10,0,51,15,11,8,22,0,10,11,14,21,0,9,0,28,21,0,7,17,0,13,0,48,0,21,8,16,0,13,0,37,0,23,7,0,57,19,0,48,21,0,10,8,16,0,24,0,54,17,22,0,11,11,14,21,0,9,0,38,0,21,7,21,0,7,17,0,27,21,0,11,17,22,0,12,11,14,0,20,0,37,0,21,7,21,0,1,0,13,16,19,0,41,0,27,7,9,0,24,0,54,19,22,0,13,11,14,21,0,12,21,0,13,16,22,0,14,11,0,44,0,13,7,16,0,8,16,22,0,15,11,14,21,0,5,0,9,0,47,0,19,0,37,0,21,7,0,58,19,0,24,0,57,19,8,16,0,9,21,0,14,17,0,9,21,0,15,17,22,0,16,11,0,8,16,0,9,22,0,15,13,14,21,0,12,0,27,21,0,3,0,29,21,0,7,0,27,21,0,11,17,17,0,8,16,17,22,0,17,11,14,21,0,17,21,0,13,16,0,44,0,13,7,16,0,2,21,0,17,0,38,0,30,7,16,21,0,13,16,0,37,0,1,7,21,0,16,17,0,44,0,0,7,16,17,0,37,0,1,7,0,57,17,0,37,0,35,7,21,0,1,17,22,0,18,11,0,34,16,22,0,19,11,14,21,0,17,0,38,0,26,0,45,0,30,8,7,16,21,0,13,16,0,27,21,0,15,17,22,0,20,11,14,21,0,1,0,27,21,0,15,17,0,27,0,47,21,0,20,8,0,49,0,39,21,1,4,0,30,16,7,8,16,21,1,6,16,0,37,0,1,7,21,0,20,17,22,0,21,11,14,21,1,17,21,1,18,21,1,19,3,3,0,39,0,30,7,0,57,17,0,42,0,0,7,16,0,22,21,1,17,0,30,16,17,21,1,23,21,0,21,17,22,0,22,11,0,11,0,47,0,19,0,21,0,58,19,0,23,0,13,19,8,16,22,0,23,11,14,21,1,16,0,30,16,0,14,21,0,21,17,22,0,24,11,14,21,0,24,0,0,22,0,22,13,14,21,0,24,0,0,22,0,23,13,14,21,1,19,0,42,0,0,7,16,0,0,0,54,17,0,14,21,0,21,17,22,0,25,11,14,21,0,21,0,15,0,47,21,1,19,0,30,16,0,48,0,0,8,8,0,2,0,18,19,0,1,0,19,19,21,1,2,17,0,35,21,0,23,0,44,0,0,7,16,0,2,21,0,22,0,11,21,0,25,17,17,0,37,0,1,7,0,57,17,17,22,0,26,11,14,21,0,21,0,27,21,0,23,17,0,37,0,1,7,21,1,19,0,30,16,17,0,37,0,3,0,45,0,5,8,7,21,1,2,17,22,0,27,11,14,21,0,26,0,31,16,22,0,28,11,0,11,0,47,0,44,0,6,7,0,21,0,54,19,0,23,0,13,19,8,16,22,0,29,11,14,21,0,27,0,27,21,0,29,17,0,12,0,58,17,22,0,30,11,0,13,16,22,0,31,11,14,21,0,27,0,6,0,58,17,0,14,0,47,0,62,8,0,48,0,9,8,0,0,0,19,19,21,0,22,0,11,0,47,0,19,0,37,0,21,7,0,58,19,0,24,0,57,19,8,16,0,37,0,27,7,21,0,25,17,17,22,0,27,12,14,21,0,21,0,27,0,47,21,0,20,8,0,49,21,0,18,0,31,21,0,19,17,0,0,21,0,31,17,0,0,21,1,24,17,8,16,0,27,0,47,21,0,23,8,0,49,21,0,30,0,28,16,0,28,16,0,29,21,0,28,17,0,0,21,1,24,17,8,16,0,27,21,1,20,21,1,21,3,2,0,39,0,30,7,0,57,17,0,42,0,0,7,16,0,22,21,1,20,0,30,16,17,21,1,23,21,0,21,17,0,10,21,0,22,17,0,8,16,0,10,21,0,23,17,17,22,0,21,12,14,21,1,10,21,1,23,21,0,21,17,0,9,0,47,0,19,0,10,21,1,12,0,30,16,0,0,0,62,0,59,3,2,17,0,33,21,0,21,17,19,0,21,0,57,19,0,23,0,13,19,8,16,0,8,16,0,37,0,27,7,22,0,21,13,14,21,1,10,21,1,23,21,0,21,17,0,9,21,1,12,0,30,16,0,0,0,60,0,61,3,2,17,0,33,21,0,21,17,0,37,0,21,7,0,57,17,0,24,0,57,17,17,0,8,16,0,37,0,27,7,22,0,21,13,14,21,1,24,0,1,21,0,21,17,21,0,31,0,48,0,11,8,0,9,0,15,0,47,0,58,8,19,16,22,0,32,11,14,21,1,25,0,29,21,0,21,0,5,21,1,24,17,17,0,27,0,47,21,0,32,8,0,49,21,0,27,8,16,22,0,33,11,14,21,1,15,0,30,16,0,37,0,22,7,0,61,17,21,1,23,21,0,21,17,0,2,0,61,17,0,0,22,0,21,13,14,21,0,21,21,0,33,21,0,30,0,8,16,0,42,0,0,7,16,21,0,19,0,21,21,0,26,0,29,21,0,29,0,27,16,0,27,21,0,30,17,17,17,3,4,25,21,1,18,0,30,16,0,0,0,47,0,25,8,0,59,17,22,0,3,22,0,4,22,0,5,22,0,6,4,4,11,14,21,1,17,0,30,16,0,48,0,1,8,0,26,0,45,0,42,0,2,0,47,0,53,8,0,48,0,0,8,7,8,9,22,0,7,11,14,21,0,7,0,24,0,47,0,57,8,21,0,7,9,0,1,9,3,2,0,50,0,30,0,14,21,0,3,19,8,22,0,8,11,14,0,24,0,47,0,57,0,48,0,0,8,8,0,58,0,13,0,4,0,53,19,0,3,21,0,7,19,3,2,0,50,0,13,0,11,0,58,19,8,9,0,0,0,23,0,45,21,0,7,8,19,0,47,21,0,4,0,11,16,0,48,0,31,8,8,22,0,9,11,14,0,64,0,65,21,0,9,3,3,0,50,0,29,0,31,21,0,5,21,0,6,3,2,19,0,30,9,8,22,0,10,11,14,21,1,22,0,31,21,0,1,17,0,30,16,22,0,11,11,14,21,0,1,0,23,21,0,11,17,21,0,10,0,24,0,47,0,57,8,21,0,10,9,0,1,9,3,2,0,50,0,30,0,14,21,0,3,19,8,16,22,0,12,11,14,21,0,12,21,0,1,0,13,16,0,11,21,0,11,17,0,51,0,37,0,18,0,24,0,57,0,0,21,0,11,17,19,21,0,8,9,0,4,0,53,19,0,48,0,2,8,7,8,21,0,1,17,25,0,66,22,0,3,11,14,21,0,1,0,6,0,57,17,0,41,0,4,7,21,0,3,17,0,5,16,22,0,4,11,14,21,0,4,0,0,0,57,17,0,44,0,0,7,0,48,0,19,0,21,0,58,19,0,23,0,13,19,0,48,0,27,8,0,1,0,19,0,30,0,54,19,0,25,9,19,8,16,0,28,16,0,28,16,22,0,5,11,14,21,0,1,15,12,21,0,4,17,0,29,21,0,5,17,25,0,40,0,14,7,0,43,15,13,7,0,19,0,45,0,38,0,58,7,8,19,0,30,0,54,19,22,0,3,11,14,15,14,22,0,4,11,14,0,58,21,0,4,0,98,8,0,37,0,57,21,0,4,0,99,8,7,3,2,0,50,0,13,0,46,0,12,8,8,22,0,5,11,14,21,0,1,21,0,5,0,100,3,2,0,50,0,13,0,46,0,5,8,0,11,21,0,3,19,8,21,0,2,17,0,37,0,36,7,0,58,17,25,0,94,0,27,21,0,1,0,13,16,0,11,0,57,17,17,0,21,0,101,17,0,37,0,36,7,0,58,17,25,21,0,2,22,0,3,22,0,4,4,2,11,14,21,1,12,0,30,0,48,0,1,8,0,7,0,62,19,0,4,0,54,19,0,2,21,1,23,19,21,0,1,17,22,0,5,11,0,44,0,0,7,16,22,0,6,11,0,28,16,22,0,7,11,14,21,1,12,0,30,16,0,0,0,62,17,0,37,0,22,7,0,62,17,21,1,23,21,0,1,17,0,2,21,0,5,17,22,0,8,11,14,21,0,1,0,29,0,47,21,0,7,8,0,46,0,27,0,47,0,54,0,48,0,14,8,8,0,37,0,1,7,0,57,19,0,17,0,51,21,1,31,8,0,27,0,47,0,57,0,48,0,14,8,8,19,8,21,0,5,17,14,21,0,6,0,30,21,0,7,0,30,16,17,0,15,0,58,17,0,36,0,102,17,14,21,1,13,21,1,23,21,0,1,17,0,10,0,47,0,26,0,47,0,57,8,8,16,22,0,9,11,14,21,0,9,0,29,0,47,21,0,7,8,0,49,0,26,0,47,0,54,8,8,16,22,0,10,11,14,21,0,10,0,10,21,0,9,17,22,0,11,11,14,21,0,9,0,29,21,0,7,17,0,28,16,0,37,0,29,7,22,0,7,13,14,21,0,11,0,8,16,0,2,22,0,4,13,14,0,58,0,12,21,0,5,17,22,0,12,11,14,21,1,12,0,30,16,0,0,0,57,17,0,14,21,0,1,17,0,11,21,0,11,17,22,0,13,11,14,21,1,10,21,1,23,21,0,1,17,0,10,21,0,9,17,0,10,21,0,12,17,0,29,0,37,0,21,7,0,1,0,21,0,45,0,44,0,0,7,8,19,0,57,19,0,28,0,48,0,28,0,48,0,37,0,29,7,8,0,1,0,37,0,29,7,19,0,29,0,47,0,28,8,0,18,19,8,0,18,0,21,0,54,19,19,21,0,7,17,0,24,0,54,17,0,0,0,57,17,0,44,0,0,7,16,0,28,16,22,0,14,11,14,21,0,8,0,29,21,0,14,17,0,44,0,0,7,16,22,0,15,11,0,28,16,22,0,16,11,14,21,0,16,0,37,0,29,7,22,0,14,13,14,21,0,16,0,37,0,29,7,22,0,15,13,14,21,0,14,0,37,0,29,7,22,0,1,13,14,21,0,8,0,29,21,0,14,17,22,0,17,11,14,0,58,0,11,21,0,17,17,0,27,16,22,0,18,11,14,0,58,0,12,21,0,17,17,22,0,19,11,0,44,0,0,7,16,22,0,20,11,14,0,58,0,48,0,21,8,0,44,0,0,7,9,0,27,0,57,0,21,21,0,19,17,19,0,19,0,21,0,58,19,0,23,0,13,19,0,48,0,1,8,9,22,0,21,11,14,0,14,0,45,21,0,21,8,0,24,0,57,19,0,11,0,58,19,22,0,22,11,14,21,0,1,0,28,21,1,15,0,30,16,0,0,0,61,17,0,0,0,58,0,60,0,59,0,61,3,4,17,17,21,0,22,0,47,0,60,8,0,2,0,62,19,0,6,21,0,22,0,47,0,62,8,19,0,2,0,62,19,0,0,21,0,22,0,47,0,57,8,19,0,21,0,58,19,16,22,0,23,11,14,21,1,26,0,29,21,0,23,17,22,0,24,11,14,21,0,4,0,29,0,47,21,0,14,0,29,21,0,18,17,8,0,49,0,59,0,25,16,0,27,0,47,0,15,0,47,0,62,8,0,0,0,57,19,8,16,0,29,21,0,23,0,24,0,57,17,17,8,16,22,0,4,12,14,21,0,4,0,15,0,57,17,0,10,21,0,4,0,14,0,60,17,0,29,0,47,21,0,7,8,0,49,0,26,0,47,0,54,8,8,16,17,0,19,0,2,0,47,0,13,0,45,0,25,8,0,0,0,57,19,8,0,44,0,6,7,9,0,46,0,14,8,0,10,0,47,0,8,8,19,0,9,0,18,19,21,0,13,17,0,0,22,0,4,13,14,21,1,24,0,1,21,0,1,17,22,0,25,11,21,0,3,0,48,0,11,8,0,9,0,15,0,47,0,58,8,19,16,22,0,26,11,0,27,16,22,0,27,11,14,21,0,1,0,29,21,0,27,17,22,0,28,11,14,21,1,15,21,1,23,21,0,1,17,0,27,16,22,0,29,11,14,21,1,11,0,30,16,0,14,21,0,1,17,0,29,21,1,11,21,1,23,21,0,1,17,0,2,0,47,0,13,0,45,0,25,8,8,16,0,44,0,6,7,16,17,22,0,30,11,14,21,0,8,0,1,21,0,5,17,0,29,21,0,14,17,0,44,0,0,7,16,0,28,16,22,0,7,12,14,21,0,14,0,29,21,0,7,17,22,0,31,11,14,21,0,9,0,1,21,0,10,17,0,29,21,0,31,17,0,12,0,27,0,46,0,1,8,0,11,19,0,58,17,0,37,0,3,7,0,62,17,0,0,0,57,17,22,0,32,11,14,21,1,12,0,30,16,0,0,0,61,17,0,14,21,0,1,17,0,29,21,0,7,17,0,27,16,22,0,33,11,14,21,0,9,0,29,21,0,31,17,0,28,16,22,0,34,11,0,37,0,29,7,22,0,7,13,14,21,0,14,0,29,21,0,7,17,22,0,31,12,14,21,0,7,0,37,0,29,7,22,0,1,13,14,21,0,31,0,37,0,29,7,22,0,4,13,14,21,0,31,0,37,0,29,7,22,0,12,13,14,21,0,9,0,12,21,0,10,17,0,29,21,0,31,17,0,27,16,22,0,35,11,14,21,0,7,0,28,16,22,0,36,11,14,21,0,34,0,28,16,0,29,22,0,33,13,14,21,1,10,21,1,23,21,0,1,17,22,0,37,11,14,21,0,9,0,29,21,0,31,17,0,10,21,0,12,17,0,10,21,0,37,17,22,0,38,11,14,21,1,11,0,30,16,0,37,0,22,7,0,62,17,21,1,23,21,0,1,17,22,0,39,11,14,21,0,39,0,10,21,0,38,17,0,1,22,0,4,13,14,0,62,0,16,21,0,4,17,22,0,40,11,14,0,60,0,14,21,0,4,17,0,26,0,57,17,0,10,0,57,0,16,21,0,4,17,17,22,0,41,11,14,21,0,41,0,29,21,0,38,0,26,0,54,17,0,2,0,47,0,13,0,45,0,25,8,8,16,0,44,0,6,7,16,17,22,0,42,11,14,21,0,41,0,26,0,57,17,0,9,21,1,11,0,30,16,0,0,0,57,17,0,14,21,0,1,17,17,0,11,21,0,42,17,22,0,43,11,14,0,60,0,14,21,0,4,17,0,26,0,57,17,0,11,21,0,39,17,0,10,21,0,40,17,22,0,44,11,14,21,0,43,0,10,21,0,44,17,0,8,16,0,26,16,0,2,0,45,0,44,0,6,7,8,0,1,0,18,19,0,47,0,13,0,45,0,25,8,8,16,0,26,16,22,0,45,11,14,21,0,39,0,27,16,21,0,45,0,48,0,29,8,0,0,0,57,19,0,0,0,19,19,16,22,0,46,11,14,0,57,0,1,21,0,46,17,0,37,0,21,7,21,0,1,0,13,16,17,0,41,0,27,7,16,0,24,0,54,17,0,19,0,21,0,58,19,0,23,0,13,19,0,48,0,1,8,16,0,29,21,0,36,17,0,44,0,0,7,16,0,26,0,54,17,22,0,47,11,0,29,21,0,7,17,22,0,48,11,14,21,0,4,0,27,0,47,21,0,48,8,0,49,0,39,0,54,7,8,16,22,0,4,12,14,21,0,44,0,8,16,0,44,0,0,7,0,2,0,45,0,44,0,6,7,8,0,1,0,19,19,21,0,38,19,0,15,0,11,0,7,19,0,62,19,0,9,0,19,19,16,0,9,21,0,38,0,2,0,47,0,13,0,45,0,25,8,0,0,0,57,19,8,0,44,0,6,7,9,0,46,0,15,8,21,0,39,17,17,22,0,49,11,14,21,0,39,0,10,21,0,38,17,0,37,0,21,7,0,58,17,0,24,0,57,17,0,12,21,0,40,17,22,0,50,11,14,21,0,50,0,27,16,0,26,16,22,0,51,11,14,21,0,50,0,26,0,54,17,0,11,21,0,40,17,0,10,0,57,0,14,21,0,4,17,17,0,11,21,0,50,0,26,0,57,17,0,9,21,0,44,17,17,0,9,21,0,42,0,8,16,0,10,21,0,49,17,17,0,11,21,0,48,0,26,0,57,17,17,0,27,16,22,0,52,11,14,0,58,0,14,21,0,4,17,0,11,21,0,44,17,0,10,0,58,0,16,21,0,4,17,0,9,21,0,42,17,17,0,9,21,1,14,0,30,16,0,13,21,0,1,17,17,0,37,0,21,7,0,58,17,0,24,0,57,17,0,29,21,0,52,17,22,0,53,11,14,21,0,3,0,0,21,1,24,17,0,16,21,0,1,17,22,0,54,11,14,21,1,9,0,42,0,0,7,16,0,0,0,54,17,0,15,21,0,1,17,0,10,21,0,54,17,0,27,16,22,0,55,11,14,21,0,1,0,29,21,0,55,17,22,0,56,11,0,34,16,0,9,16,22,0,57,11,14,21,1,12,0,30,16,0,0,0,59,17,0,14,21,0,1,0,27,21,0,12,17,17,22,0,58,11,14,0,57,0,21,21,0,38,17,0,9,21,0,12,0,21,0,57,17,17,0,1,0,58,0,21,21,0,37,17,17,0,44,0,0,7,16,0,27,0,57,0,21,21,0,12,17,17,0,24,0,47,0,1,8,0,1,0,24,19,0,57,17,0,27,21,0,58,17,0,0,0,57,17,22,0,59,11,14,21,0,58,0,21,0,58,17,0,29,0,47,0,44,0,0,7,8,21,0,12,17,0,12,21,0,37,17,0,27,16,22,0,60,11,14,21,1,12,0,30,16,0,0,0,62,17,0,14,21,0,1,17,0,27,16,22,0,61,11,14,21,0,47,0,9,21,0,30,17,0,9,21,0,26,17,22,0,62,11,0,29,21,0,27,17,22,0,63,11,14,21,0,62,21,0,21,16,22,0,64,11,14,21,0,20,0,29,21,0,27,17,0,37,21,0,16,0,29,21,0,18,17,0,21,21,0,1,0,13,16,17,7,0,29,0,27,0,47,21,0,63,8,19,0,21,21,0,16,0,27,21,0,19,17,0,21,0,54,17,0,48,0,29,8,19,16,22,0,65,11,14,21,0,65,0,28,16,0,29,0,47,21,0,28,0,27,0,47,21,0,63,8,0,48,0,21,8,16,22,0,66,11,0,48,0,29,8,0,28,9,8,16,22,0,67,11,14,21,0,65,0,19,0,29,21,0,67,0,27,0,47,0,15,0,47,21,0,27,0,13,16,8,8,16,19,0,13,0,47,0,19,0,21,0,58,19,0,23,0,13,19,8,9,0,46,0,10,8,21,0,66,17,0,42,0,9,7,0,57,17,0,36,0,103,17,14,21,0,67,0,29,0,47,21,0,63,0,37,0,27,7,16,0,1,16,0,21,21,0,63,17,0,48,0,29,0,45,0,44,0,0,7,8,8,0,28,9,8,16,0,27,0,47,21,0,27,0,13,16,0,48,0,11,8,8,16,22,0,67,12,14,21,0,67,0,37,0,29,7,22,0,63,13,14,21,0,28,0,29,21,0,67,17,0,13,0,47,0,19,0,21,0,58,19,0,23,0,13,19,8,0,11,21,0,63,19,0,48,0,19,0,42,0,10,7,0,58,19,0,51,0,37,0,27,0,45,21,1,32,8,7,8,8,16,14,21,0,27,0,29,0,47,21,0,67,8,0,49,0,29,0,47,21,0,63,0,2,0,47,0,13,0,45,0,25,8,8,16,0,44,0,6,7,16,8,8,16,22,0,68,11,14,21,0,25,0,29,21,0,29,17,0,0,0,62,17,0,15,0,47,0,58,8,0,48,0,0,8,16,0,0,21,0,23,0,7,0,62,17,0,2,0,60,17,0,29,21,0,20,0,29,21,0,29,17,17,17,0,21,21,0,62,0,44,0,0,7,16,0,8,0,47,0,2,0,47,21,0,19,8,0,44,0,6,7,9,8,16,0,1,21,0,24,0,29,21,0,20,17,17,0,29,21,0,68,17,17,22,0,69,11,14,21,0,29,0,21,21,0,27,17,22,0,70,11,0,11,16,0,20,0,60,17,0,21,16,22,0,71,11,14,21,0,47,0,29,21,0,70,17,0,0,0,67,17,21,0,29,0,39,0,58,7,16,0,21,21,0,68,21,0,15,0,48,0,29,8,0,46,0,1,8,21,0,27,17,17,21,0,69,3,3,22,0,72,11,14,21,0,36,0,29,22,0,18,13,14,21,0,55,21,0,55,21,0,18,21,0,18,21,0,61,21,0,60,21,0,33,21,0,33,21,0,35,21,0,35,21,0,46,21,0,45,0,29,21,0,51,17,0,6,0,57,17,0,0,21,0,51,17,21,0,53,0,0,21,0,52,17,0,0,0,47,21,0,45,0,48,0,29,8,0,2,21,0,53,19,8,16,3,13,0,21,16,0,37,0,29,7,21,0,7,17,0,21,21,0,71,17,0,28,16,22,0,73,11,14,21,0,55,0,39,0,58,7,16,21,0,56,0,31,21,0,57,17,21,0,18,0,39,0,68,7,16,21,0,18,0,13,16,0,25,16,0,0,0,57,17,3,4,0,21,21,0,72,17,0,21,16,22,0,74,11,14,21,0,61,0,39,0,69,7,16,21,0,60,0,39,0,70,7,16,21,0,48,0,29,21,0,33,17,0,0,0,60,17,21,0,59,21,0,48,0,29,21,0,35,17,0,0,0,60,17,21,0,32,21,0,1,0,0,21,0,43,17,0,27,21,0,39,17,0,0,21,1,11,0,30,16,0,1,0,71,17,17,21,0,4,0,29,21,0,51,17,0,0,0,61,17,21,0,42,0,29,21,0,52,17,0,2,0,73,17,0,1,21,0,53,17,0,0,0,72,17,0,14,0,47,0,53,8,0,2,0,56,19,0,0,0,19,19,16,3,9,0,21,16,0,21,21,0,74,17,0,29,21,0,73,17,22,0,75,11,14,21,0,24,0,0,21,0,64,17,0,39,0,11,0,46,0,22,8,7,21,0,61,0,13,0,46,0,22,8,21,0,74,17,21,1,23,21,0,73,17,0,21,0,57,17,0,27,16,0,37,0,29,7,21,0,75,0,6,0,57,17,0,41,0,4,7,0,66,17,0,5,16,0,0,0,57,17,0,21,0,58,17,0,44,0,0,7,16,17,17,0,39,0,21,7,0,62,0,25,0,46,0,26,0,48,0,40,0,22,7,8,8,0,60,17,0,20,16,0,29,21,0,23,17,17,22,0,76,11,14,0,69,0,21,21,0,75,17,21,1,30,16,21,0,57,21,0,76,3,3,25,21,0,1,21,1,27,16,22,0,3,22,0,4,22,0,5,22,0,6,4,4,11,14,21,0,3,21,1,33,21,0,5,21,0,4,3,2,17,22,0,7,22,0,8,22,0,9,4,3,11,14,21,0,6,0,39,21,1,29,7,16,0,21,21,0,2,17,0,29,21,1,24,0,16,21,0,8,17,0,2,21,0,2,0,13,16,0,1,21,0,5,17,0,0,21,1,24,17,17,0,1,21,0,8,17,17,22,0,10,11,14,21,0,7,21,0,10,21,0,9,3,3,25,21,0,1,0,26,16,0,30,16,0,14,0,58,17,25,21,0,1,0,29,0,47,21,0,2,0,27,21,0,1,17,8,0,49,0,39,0,57,7,8,16,21,1,10,21,0,2,0,37,0,29,7,16,17,25,21,0,2,0,2,16,22,0,3,11,14,21,0,1,21,0,3,0,42,0,10,7,16,0,51,0,27,0,47,21,0,3,8,0,46,21,1,3,0,48,0,3,8,0,5,9,0,48,21,0,0,8,8,0,21,0,7,0,0,21,0,3,0,48,0,2,8,19,0,47,21,1,3,8,19,8,0,57,0,1,21,0,2,17,17,25,21,0,1,0,24,0,57,17,0,37,0,21,7,0,58,17,0,0,21,0,2,17,0,44,0,6,7,16,0,6,21,0,1,17,25,0,32,0,14,0,18,0,45,0,13,8,19,0,37,0,27,7,0,19,19,0,0,21,0,2,19,0,37,0,29,7,21,2,4,19,0,21,0,89,19,0,21,21,0,1,19,0,21,0,97,19,25]) + ,[runtime[0],runtime[1],runtime[2],runtime[3],runtime[4],runtime[6],runtime[7],runtime[8],runtime[9],runtime[10],runtime[11],runtime[12],runtime[13],runtime[14],runtime[15],runtime[16],runtime[17],runtime[19],runtime[20],runtime[21],runtime[22],runtime[23],runtime[24],runtime[25],runtime[26],runtime[27],runtime[28],runtime[30],runtime[31],runtime[33],runtime[34],runtime[35],runtime[36],runtime[37],runtime[38],runtime[39],runtime[40],runtime[42],runtime[43],runtime[44],runtime[45],runtime[46],runtime[47],runtime[48],runtime[49],runtime[50],runtime[51],runtime[52],runtime[53],runtime[54],runtime[56],runtime[59],' + ,[[0,1,0,35],[0,0,502,3],[1,1,568,4],[0,0,661,34],[0,0,2000,13],[0,0,2322,6],[0,0,2428,6],[0,0,2541,3],[0,0,2571,77],[0,0,5863,11],[0,0,5986,3],[0,0,6001,3],[0,0,6041,4],[0,0,6127,3],[2,1,6162,3]] ); runtime[40] = assertFn("!"); runtime.map((r,i) => { @@ -1,5 +1,3 @@ -#! ./dzref - nl←@+10 charSet←∾charGroups←⟨ chF←"+-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍↑↓↕⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!" # Function @@ -10,11 +8,12 @@ charSet←∾charGroups←⟨ "(){}⟨⟩" # Bracket "‿" # Ligature "·" # nOthing - "𝕊𝕏𝕎𝔽𝔾𝕤𝕩𝕨𝕗𝕘" # Input (𝕣 pending; ℝ not allowed) + ¯1⊏˘10‿∘⥊"𝕊𝕏𝕎𝔽𝔾𝕤𝕩𝕨𝕗𝕘" # Input (𝕣 pending; ℝ not allowed) "@" # nUll character '0'+↕10 # Digit "¯.π∞" # Numeric "_"∾˜⥊"aA"+⌜↕na←26 # Alphabetic + ¯1↓"𝕨" # Prefix for input (hack around UTF-16) " "∾@+9 # Whitespace # #'" eliminated during tokenization ⟩ @@ -26,7 +25,7 @@ CharCode←charSet{ Chk ← ⊢⊣ErrUnknownChars∘(≠/⊣)⍟≢⟜(⊏⟜𝕗) g←⍋𝕗 ⋄ ⊢ Chk g⊏˜1-˜1⌈(g⊏𝕗)⍋⊢ } -bF‿bM‿bC‿bS‿bG‿bB‿bL‿bO‿bI‿bU‿bD‿bN‿bA‿bW←≍¨˜⟜(+`≠↑0∾⊢)≠¨charGroups +bF‿bM‿bC‿bS‿bG‿bB‿bL‿bO‿bI‿bU‿bD‿bN‿bA‿bP‿bW←≍¨˜⟜(+`≠↑0∾⊢)≠¨charGroups bA_e←4+⊑bA M←1⊸⊑(0⊸≤∧>)-⟜⊑ vi←+´≠¨9↑charGroups @@ -54,7 +53,7 @@ Tokenize←{ iu←(≠↑¯1∾⌈`)⊸<is←⊐id⋄ni←≠in←0>iu/ti ti↩(us/˜(1↓0∾˜⊢)⊸<l)(⊢+∧⟜(2⊸=))0⌈ti - c↩(w∨¬l∨c M bW)/(vi+is⊏⍋⍋in)⌾(w⊸/)(vi+ni+lu⊐lit)⌾(cl⊸/)c + c↩(w∨¬l∨c M (⊑bP)≍+´1⊑¨bP‿bW)/(vi+is⊏⍋⍋in)⌾(w⊸/)(vi+ni+lu⊐lit)⌾(cl⊸/)c c/˜↩¬(≠↑1∾(c∊2‿4+⊑bB)∨⊢)⊸∧c M bS⋄c/˜↩¬(1↓1∾˜c∊3‿5+⊑bB)∧c M bS ic←(0⊸≤∧<⟜ni)c-vi⋄t←ti⌾(ic⊸/)(vi⌊c)⊏charRole c+↩5×c M 5≍˜⊑bI |
