aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/bqn.js19
-rw-r--r--docs/implementation/vm.html16
-rw-r--r--implementation/vm.md9
-rw-r--r--src/c.bqn19
-rw-r--r--test/cases/syntax.bqn10
-rw-r--r--vm.bqn10
6 files changed, 61 insertions, 22 deletions
diff --git a/docs/bqn.js b/docs/bqn.js
index fe035b92..78deb5de 100644
--- a/docs/bqn.js
+++ b/docs/bqn.js
@@ -69,6 +69,12 @@ let set = (d, id, v) => {
id.e[id.p] = v;
} else if (id.match) {
if (has(id.v) && !call(runtime[18],id.v,v)) throw Error();
+ } else if (id.merge) {
+ if (!v.sh||v.sh.length<1) throw Error("[…]← or ↩: Value must have rank 1 or more");
+ if (id.sh[0]!==v.sh[0]) throw Error("[…]← or ↩: Target and value lengths don't match");
+ let cs=v.sh.slice(1); let c=cs.reduce((a,b)=>a*b,1);
+ let cell = j => arr(v.slice(c*j,c*j+c),cs,v.fill);
+ id.map((n,j)=>set(d,n,cell(j)));
} else {
if (v.sh) {
if (!eq(id.sh,v.sh)) throw Error("← or ↩: Target and value shapes don't match");
@@ -90,6 +96,8 @@ let set = (d, id, v) => {
return v;
}
+let merge = x => { return call(runtime[13],x); }
+
let chkM = (v,m) => { if (m.m!==v) throw Error("Runtime: Only a "+v+"-modifier can be called as a "+v+"-modifier"); }
let genjs = (B, p, L) => { // Bytecode -> Javascript compiler
let rD = 0;
@@ -112,6 +120,7 @@ let genjs = (B, p, L) => { // Bytecode -> Javascript compiler
case 7: { if(rD!==1) throw Error("Internal compiler error: Wrong stack size"); r+= "return v0;"; break loop; }
case 8: { r+= "e.ns=e.vid.ns;return e;"; break loop; }
case 11:case 12: { let n=num(); rD-= n; r+=rP("llst(["+(new Array(n).fill().map((_,i)=>rV(rD+i)).join(","))+"])"); break; }
+ case 14: { let a=rG(); r+=rP(B[p-3]==12?"("+a+".merge=1,"+a+")":"merge("+a+")"); break; }
case 16:case 18: { let f=rG(),x=rG(); r+=rP("call("+f+","+x +")"); break; }
case 17:case 19: { let w=rG(),f=rG(),x=rG(); r+=rP("call("+f+","+x+","+w+")"); break; }
case 20: { let g=rG(),h=rG(); r+=rP("train2(" +g+","+h+")"); break; }
@@ -194,8 +203,8 @@ let run = (B,O,F,S,L,T,src,env) => { // Bytecode, Objects, Blocks, Bodies, Locat
if (type===0) c = de2+c;
if (type===1) c = "const mod=(f ) => {"+de2+" e2["+I+"]=mod;e2["+(I+1)+"]=f;" +c+"}; mod.m=1;return mod;";
if (type===2) c = "const mod=(f,g) => {"+de2+" e2["+I+"]=mod;e2["+(I+1)+"]=f;e2["+(I+2)+"]=g;"+c+"}; mod.m=2;return mod;";
- return Function("'use strict'; return (chkM,has,call,getv,get,set,setc,llst,train2,train3,readns,O,L,env,vid,inpreview) => D => oe => {"+c+"};")()
- (chkM,has,call,getv,get,set,setc,llst,train2,train3,readns,O,L,env,vid,inpreview);
+ return Function("'use strict'; return (chkM,has,call,getv,get,set,setc,llst,merge,train2,train3,readns,O,L,env,vid,inpreview) => D => oe => {"+c+"};")()
+ (chkM,has,call,getv,get,set,setc,llst,merge,train2,train3,readns,O,L,env,vid,inpreview);
});
D.forEach((d,i) => {D[i]=d(D)});
return D[0]([]);
@@ -463,10 +472,10 @@ let glyph = x => {
// Compiler
runtime[43] = assertFn("Compiler");
let compgen_raw = run(
- [1,1,7,34,0,1,33,0,3,33,0,4,33,0,5,12,3,48,6,0,59,0,60,11,2,0,0,0,92,17,33,0,6,48,6,34,0,3,32,0,4,34,0,5,32,0,6,0,22,0,98,17,0,99,0,100,0,101,0,102,0,103,0,104,0,21,0,62,0,51,11,2,17,0,45,0,35,26,0,61,17,0,105,0,59,0,27,16,0,0,0,93,17,0,63,33,0,7,48,0,27,16,0,47,0,0,26,0,107,17,0,21,16,0,44,0,22,26,0,106,17,0,64,0,0,0,92,17,0,22,0,110,17,0,22,0,109,0,26,0,61,17,17,0,22,0,108,17,0,111,11,15,0,46,0,13,26,0,24,0,22,21,16,33,0,8,33,0,9,12,2,48,6,32,0,9,0,50,0,0,26,0,29,0,65,21,0,54,0,44,0,46,0,24,26,26,27,16,33,0,10,33,0,11,33,0,12,33,0,13,33,0,14,33,0,15,33,0,16,33,0,17,33,0,18,33,0,19,33,0,20,33,0,21,33,0,22,33,0,23,33,0,24,12,15,48,6,0,36,0,54,0,1,27,0,12,0,9,0,15,0,53,0,65,27,21,0,36,0,53,0,66,27,21,33,0,25,48,6,32,0,13,0,36,16,33,0,26,48,6,32,0,14,0,36,16,0,0,0,67,17,33,0,27,48,6,0,68,0,1,0,54,0,24,27,16,0,0,32,0,19,17,33,0,28,48,6,32,0,19,0,36,16,0,0,0,69,17,33,0,29,48,6,0,13,0,11,0,66,21,0,44,0,32,26,0,112,21,0,54,0,22,27,33,0,30,48,6,1,2,33,0,31,48,6,1,3,32,0,8,26,33,0,32,48,6,0,116,0,32,0,53,34,0,4,0,54,0,39,27,27,16,32,0,32,16,33,0,33,48,6,32,0,20,0,36,16,33,0,34,48,0,0,0,66,17,33,0,35,48,6,0,66,0,67,0,71,0,61,0,61,0,72,0,61,0,65,11,2,0,73,0,65,0,68,0,74,11,2,0,32,16,0,8,16,11,10,0,43,34,0,9,26,0,25,0,13,21,0,54,0,44,0,46,0,21,26,26,27,16,0,22,16,0,44,0,22,26,0,70,17,33,0,36,48,6,0,2,0,50,0,6,26,20,33,0,37,48,6,32,0,37,0,53,0,13,0,51,0,27,27,27,33,0,38,48,6,32,0,37,0,53,0,13,0,51,0,27,27,0,0,0,66,21,27,33,0,39,48,6,0,19,0,32,0,10,21,0,44,0,22,26,0,32,0,22,21,0,66,21,33,0,40,48,6,1,4,33,0,41,48,6,1,5,33,0,42,48,6,1,6,33,0,43,48,6,1,7,33,0,44,48,7,34,0,1,0,11,16,0,46,1,8,26,34,0,4,17,0,22,16,7,32,1,31,32,1,30,0,53,0,113,27,0,114,0,20,11,3,26,0,42,20,33,0,2,48,6,32,0,1,0,54,0,35,27,0,54,0,18,0,58,0,19,0,32,0,13,21,0,51,34,0,2,27,27,27,0,19,0,20,21,33,0,3,48,6,32,0,1,0,35,34,0,1,0,33,16,33,0,4,48,17,33,0,5,48,0,26,0,53,0,1,27,0,14,0,26,21,0,66,17,0,49,0,10,26,0,58,0,22,0,53,0,65,27,0,44,0,32,26,32,0,5,21,0,22,0,115,21,0,42,20,27,16,6,0,20,0,33,34,0,5,21,0,6,0,66,21,0,44,0,1,26,0,66,21,0,44,0,35,26,34,0,4,21,34,0,3,0,20,21,7,34,0,2,33,0,3,33,0,4,12,2,48,6,0,94,0,14,32,0,1,17,33,0,5,48,6,0,95,0,14,32,0,1,17,33,0,6,48,0,9,0,53,0,28,0,53,0,65,0,65,11,2,27,27,16,0,32,16,33,0,7,48,6,0,96,0,14,32,0,1,17,33,0,8,48,0,32,16,33,0,9,48,6,32,0,7,32,0,9,0,26,0,61,17,32,0,5,0,32,16,11,3,0,22,16,33,0,10,48,0,33,16,33,0,11,48,6,32,0,10,0,35,32,0,11,17,33,0,10,49,6,34,0,7,0,0,0,67,17,34,0,9,0,26,0,66,17,0,66,0,22,32,1,6,0,39,32,0,1,17,17,0,32,16,0,32,0,53,32,0,5,0,50,0,0,26,16,0,22,0,65,17,0,54,0,35,0,51,0,29,0,54,0,1,27,27,27,27,16,11,3,0,22,16,0,35,34,0,11,17,33,0,12,48,6,0,20,0,36,0,61,21,0,14,0,65,21,0,58,1,9,27,33,0,13,48,6,0,32,0,53,32,0,12,0,33,32,0,10,17,0,46,0,65,26,0,22,0,66,21,32,0,13,0,13,0,54,0,22,27,21,0,25,0,13,21,16,27,0,48,0,32,26,20,0,25,32,0,1,0,13,16,21,33,0,14,48,6,34,0,10,32,0,14,16,33,0,15,48,6,34,0,12,34,0,14,16,33,0,16,48,6,32,0,16,0,10,32,0,15,17,33,0,17,48,0,50,0,13,26,0,66,17,33,0,18,48,6,32,0,18,0,11,34,0,16,17,0,9,32,0,8,0,10,32,0,6,17,17,0,49,0,10,26,0,58,1,10,27,16,6,0,97,0,14,32,0,1,17,0,9,32,0,18,17,33,0,19,48,6,34,0,6,0,9,32,0,15,17,0,29,16,0,10,32,0,19,17,0,32,16,33,0,20,48,6,32,0,20,34,0,19,0,54,0,35,27,0,2,0,92,0,1,0,97,17,21,0,1,32,0,1,0,54,0,35,27,21,16,33,0,21,48,6,32,0,8,0,9,33,0,15,50,0,28,16,0,9,32,0,8,17,33,0,22,48,0,12,33,0,18,50,6,34,0,17,0,9,34,0,8,17,0,50,0,13,26,16,0,11,0,66,0,54,0,22,27,0,52,0,2,0,53,0,50,0,0,26,27,27,0,19,21,34,0,22,0,29,16,0,12,34,0,15,17,33,0,23,48,17,0,44,0,1,26,0,66,17,0,44,0,41,26,32,0,1,17,33,0,24,48,6,32,0,18,0,32,16,33,0,25,48,6,32,0,18,0,29,0,66,17,0,32,16,0,25,0,53,0,13,27,32,0,25,17,33,0,26,48,6,32,0,25,34,0,5,0,54,0,35,27,0,2,0,1,21,32,0,26,17,0,1,33,0,26,50,6,34,0,1,0,35,32,0,25,17,32,1,32,16,33,0,27,48,6,32,1,21,32,1,25,32,0,27,17,0,28,16,0,12,32,1,20,0,36,16,0,14,32,0,27,17,17,33,0,28,48,6,32,1,29,0,14,32,0,27,17,33,0,29,48,6,32,1,23,0,36,0,52,0,44,0,1,26,0,24,0,19,21,27,32,1,20,17,32,1,25,32,0,27,17,0,11,34,0,28,17,0,10,32,0,29,17,33,0,30,48,0,11,0,53,0,29,27,16,33,0,31,48,6,32,1,22,0,49,0,0,26,16,0,0,0,61,17,0,14,32,0,27,17,33,0,32,48,6,32,1,23,0,36,16,0,14,32,0,27,17,33,0,33,48,6,32,0,32,0,12,32,0,30,17,0,19,0,32,0,10,21,0,28,0,32,0,20,21,0,66,21,0,11,0,32,21,32,0,31,17,0,49,0,10,26,0,58,1,11,27,16,6,32,0,27,0,32,32,0,31,17,0,44,0,1,26,32,1,22,0,36,16,17,0,44,0,3,0,51,0,5,27,26,32,1,7,17,0,2,32,0,29,0,32,32,0,31,17,0,8,16,17,33,0,34,48,6,32,1,22,0,36,16,0,0,32,1,7,17,0,16,32,0,27,17,0,9,32,0,30,17,0,2,32,1,7,17,0,1,33,0,27,50,6,32,0,30,0,28,16,0,12,32,0,33,17,0,49,0,10,26,0,58,1,12,27,16,6,32,0,33,0,10,0,53,0,29,27,16,0,13,33,0,31,50,6,34,0,33,0,32,32,0,31,17,0,20,0,0,0,8,0,54,0,2,27,21,0,65,0,16,32,0,34,17,0,2,0,67,17,17,33,0,35,48,0,11,0,65,17,33,0,36,48,6,32,0,36,0,8,16,0,22,0,65,17,0,35,32,0,31,0,50,0,0,26,16,17,0,9,32,0,30,17,33,0,37,48,0,12,32,0,30,17,33,0,38,48,6,32,0,30,0,2,32,0,27,17,0,22,0,53,0,65,27,0,32,32,0,37,0,22,0,65,17,0,28,0,54,0,10,27,16,0,11,32,0,32,0,22,0,65,17,17,21,0,52,32,1,42,27,32,0,26,17,33,0,39,48,6,34,0,34,0,32,32,0,36,17,0,14,0,53,0,67,27,0,54,0,9,27,0,0,0,20,21,32,0,38,0,11,0,53,0,28,27,16,0,44,0,32,26,32,0,32,17,17,33,0,40,48,6,32,0,37,0,12,32,0,31,17,0,50,0,0,26,16,0,2,32,0,32,0,12,32,0,38,17,17,33,0,41,48,0,11,0,53,0,50,0,6,26,0,29,20,27,16,33,0,42,48,6,32,0,29,0,32,32,0,42,17,0,11,32,0,35,0,32,34,0,36,17,0,14,0,66,17,17,33,0,43,48,6,32,0,31,33,0,44,48,0,9,34,0,37,17,0,10,32,0,42,17,33,0,31,49,6,32,0,29,0,32,32,0,31,17,0,8,16,0,44,0,32,26,33,0,35,50,0,32,0,53,0,11,0,53,0,65,27,27,16,0,14,0,66,17,33,0,45,48,6,32,0,43,0,22,0,65,17,0,35,32,0,41,17,0,11,0,53,32,0,42,27,0,10,0,13,0,53,32,0,29,27,21,16,0,9,32,0,32,0,12,34,0,38,17,17,0,49,0,10,26,0,58,1,13,27,16,6,34,0,42,0,11,32,0,29,17,0,32,16,32,0,27,0,54,0,35,27,0,12,32,1,22,0,36,16,21,0,11,32,0,45,21,0,54,0,20,0,49,0,10,26,20,0,58,1,14,27,27,16,6,34,0,43,0,8,16,0,2,0,53,0,50,0,0,26,27,16,0,22,0,65,17,0,44,0,1,26,0,66,17,0,35,33,0,41,50,6,32,1,8,0,35,32,0,27,17,0,41,34,0,41,17,0,41,0,67,0,22,34,0,45,17,17,0,36,0,55,0,22,0,53,32,0,4,27,27,16,33,0,46,48,6,34,0,18,0,29,16,0,50,0,0,26,16,0,35,34,0,23,0,32,16,0,22,34,0,20,17,17,0,22,34,0,29,0,12,32,0,31,17,0,32,16,0,35,0,53,0,34,27,34,0,35,17,17,33,0,47,48,6,34,0,39,34,0,21,34,0,24,11,3,0,22,34,0,46,17,33,0,48,48,6,32,0,48,0,46,0,37,26,16,33,0,49,48,0,44,0,46,0,32,0,53,0,50,0,6,26,0,29,0,61,21,0,12,0,20,21,27,26,26,33,0,48,50,6,32,0,48,0,36,0,53,0,66,27,0,55,34,0,3,27,16,33,0,48,49,6,32,1,23,32,1,25,32,0,27,17,0,10,32,0,30,17,0,8,16,33,0,50,48,6,34,0,44,0,10,32,0,50,17,0,44,0,32,26,33,0,26,50,6,34,0,30,0,28,0,54,0,12,27,16,0,10,32,0,50,17,0,44,0,32,26,33,0,25,50,6,32,0,27,0,35,0,53,34,0,47,27,0,55,32,0,48,0,46,0,13,26,16,33,0,51,48,0,29,32,1,35,17,0,50,0,0,26,16,0,0,34,0,49,17,0,22,16,0,26,0,53,0,13,27,34,0,4,17,27,16,0,32,34,0,50,0,10,32,0,31,17,17,33,0,27,49,6,32,1,13,0,36,0,54,0,1,27,0,2,32,1,25,21,32,0,27,17,0,1,33,0,27,50,6,32,1,26,0,14,32,0,27,17,0,44,0,22,26,0,13,0,22,21,0,66,17,0,32,16,0,26,0,66,17,0,26,0,61,17,33,0,52,48,0,46,0,66,26,16,0,50,0,13,26,16,33,0,53,48,6,32,0,27,0,35,32,0,53,0,1,32,0,52,17,17,0,0,0,53,32,0,53,27,0,44,0,39,26,32,1,16,0,36,16,0,0,0,71,0,68,11,2,17,21,0,10,32,1,14,0,54,32,1,25,27,21,16,0,28,0,54,0,10,27,16,0,12,34,0,53,17,0,44,0,32,26,34,0,52,17,33,0,54,48,6,32,1,26,0,13,32,0,27,17,0,35,0,53,34,0,54,27,0,55,0,46,0,66,26,27,16,0,44,1,15,26,33,0,27,50,6,34,0,51,0,25,0,67,17,0,49,0,0,26,16,0,24,32,1,35,17,32,1,25,32,0,27,17,0,10,32,1,29,0,14,32,0,27,17,17,33,0,55,48,6,0,65,0,22,32,1,36,17,0,35,32,0,27,0,5,32,1,35,17,17,0,32,0,53,34,0,55,27,0,55,34,0,40,27,16,33,0,56,48,6,32,0,27,0,15,0,53,0,0,0,53,0,71,27,27,0,0,0,68,21,0,2,0,68,0,54,0,24,27,32,1,25,0,20,21,21,32,1,19,0,36,16,17,0,0,33,0,27,50,6,32,0,27,0,14,0,2,0,59,21,0,0,0,11,21,32,1,34,17,0,1,33,0,27,50,6,34,0,27,34,0,56,34,0,48,32,0,26,32,0,25,11,5,7,1,16,33,0,3,48,6,32,1,31,32,1,30,0,53,0,122,27,0,123,32,1,8,0,54,0,35,27,0,124,11,4,26,33,0,4,48,6,32,1,20,0,49,0,27,0,54,0,0,27,26,16,0,22,0,125,0,49,0,1,26,16,0,0,32,1,22,0,36,16,17,17,0,46,32,0,1,0,54,0,14,27,26,16,33,0,5,33,0,6,33,0,7,33,0,8,33,0,9,12,5,48,6,32,1,22,0,36,16,0,11,32,0,1,17,0,10,32,0,5,17,0,8,16,0,10,32,1,29,0,14,32,0,1,17,17,32,0,2,32,0,3,32,0,1,0,54,0,32,27,0,51,34,0,4,27,27,16,6,32,0,1,0,14,0,65,17,33,0,10,48,0,10,32,0,5,17,33,0,11,48,0,10,32,0,6,17,33,0,12,48,6,32,0,11,0,10,32,0,7,17,0,8,16,33,0,13,48,6,32,0,11,0,29,16,0,12,32,0,7,17,32,0,2,32,0,3,0,126,27,16,6,32,0,12,0,10,32,0,7,17,0,9,32,0,12,0,28,0,66,17,17,32,0,2,32,0,3,0,127,27,16,6,32,0,1,0,32,32,0,12,17,0,11,0,53,0,29,27,0,10,0,14,0,53,0,65,27,21,16,0,8,16,32,0,2,0,32,34,0,12,21,32,0,3,0,128,27,16,6,32,0,5,0,29,16,0,12,32,0,7,17,0,10,32,0,10,17,0,28,0,10,34,0,5,0,28,16,0,9,32,0,8,17,21,0,9,0,29,21,0,66,17,0,12,32,0,9,0,10,34,0,8,17,17,34,0,2,34,0,3,0,129,27,16,6,32,0,13,0,9,0,53,0,8,32,1,39,0,52,0,12,27,32,1,21,0,36,16,0,13,32,0,1,17,0,11,32,0,6,17,21,0,15,0,28,21,27,16,33,0,14,48,0,9,0,53,0,50,0,0,26,32,1,37,0,1,0,20,21,0,8,21,0,16,0,75,21,27,16,33,0,15,48,6,32,1,20,0,36,16,0,0,0,66,17,0,1,34,0,1,17,0,2,32,0,15,17,0,32,32,0,6,0,8,16,17,0,44,0,35,26,0,59,0,27,16,0,22,0,76,0,66,11,2,17,0,22,0,61,17,17,33,0,16,48,6,32,0,16,0,50,0,0,0,53,0,59,0,54,0,2,27,27,0,2,0,15,0,53,0,65,27,21,26,0,65,17,0,32,34,0,16,0,15,0,65,17,0,28,0,54,0,12,27,16,17,33,0,17,48,6,34,0,7,0,29,16,0,32,34,0,13,0,29,0,54,0,12,27,16,33,0,18,48,17,0,44,0,35,26,0,66,0,61,11,2,17,0,2,33,0,17,50,6,34,0,10,0,32,34,0,11,17,33,0,19,48,6,34,0,14,0,28,0,54,0,12,27,0,32,20,0,52,0,1,0,53,34,0,6,0,28,16,32,1,39,16,0,54,0,35,27,27,0,20,0,2,0,11,21,0,1,0,53,0,29,27,21,0,1,0,1,21,27,34,0,15,17,0,32,32,0,19,17,33,0,20,48,6,32,0,19,0,8,16,0,2,32,0,17,17,0,28,16,0,32,32,0,19,17,0,44,0,1,26,34,0,20,17,33,0,21,48,0,7,16,0,4,0,59,17,33,0,22,48,6,0,66,0,77,11,2,0,35,34,0,9,0,32,34,0,18,17,17,0,2,34,0,17,17,0,32,34,0,19,17,0,32,0,53,32,0,21,0,11,0,65,17,27,0,55,0,2,27,32,0,22,17,0,32,0,53,34,0,21,0,12,0,65,17,27,0,55,0,44,0,3,26,27,34,0,22,17,7,34,0,2,33,0,3,33,0,4,33,0,5,33,0,6,33,0,7,12,5,48,6,34,0,4,0,13,16,33,0,8,48,6,1,17,33,0,9,48,6,1,18,33,0,10,48,6,32,0,1,0,13,16,0,11,0,65,17,0,42,0,131,17,6,32,1,16,32,1,25,32,0,1,17,0,2,32,0,3,0,2,0,67,17,0,1,0,61,17,17,33,0,11,48,0,50,0,0,26,16,33,0,12,48,0,33,16,33,0,13,48,6,0,61,0,14,32,0,3,17,0,35,32,0,13,17,33,0,14,48,6,32,0,1,0,35,32,0,13,17,33,0,15,48,0,32,0,53,0,65,0,54,0,11,27,27,0,44,0,1,26,0,66,21,0,17,0,32,0,53,0,65,0,54,0,12,27,27,21,32,0,11,0,35,32,0,13,17,17,0,8,0,58,32,0,1,0,51,34,0,9,27,27,16,6,34,0,12,0,36,32,0,13,0,36,16,17,0,12,0,65,17,32,0,13,0,25,0,66,21,32,0,10,0,132,27,16,6,32,0,15,0,32,32,0,14,17,33,0,16,48,0,14,0,53,32,1,26,27,0,10,0,14,0,53,32,1,27,27,21,0,9,0,53,0,29,27,0,14,0,53,32,1,16,0,36,16,27,21,16,32,0,13,0,32,32,0,14,21,32,0,10,0,133,27,16,6,32,0,16,0,32,0,53,0,13,0,53,32,1,26,27,27,16,0,14,0,53,32,1,27,27,0,9,0,53,0,29,27,0,14,0,53,32,1,16,0,36,16,0,0,0,70,17,27,21,16,32,0,13,0,32,32,0,14,21,0,32,34,0,16,0,13,32,1,26,21,21,32,0,10,0,134,27,16,6,34,0,14,0,22,0,66,17,0,9,0,53,0,28,0,53,0,66,27,27,16,1,19,16,6,0,70,0,14,32,0,3,17,33,0,17,48,0,10,0,53,0,28,27,16,33,0,18,48,6,32,0,11,0,0,32,0,3,17,0,15,0,65,17,0,11,32,0,17,17,0,28,16,33,0,19,48,0,12,32,1,15,0,36,16,0,14,32,0,1,17,17,0,1,33,0,3,50,6,32,0,3,0,15,0,65,17,0,11,32,0,17,17,0,29,16,0,9,32,1,15,0,36,16,0,0,0,67,17,0,14,32,0,1,17,0,10,34,0,19,17,17,0,12,32,0,3,0,73,0,54,0,15,27,0,9,0,11,0,53,0,79,27,21,16,17,0,13,0,27,20,32,0,10,0,136,27,16,6,32,1,27,0,14,32,0,1,17,0,9,32,0,3,0,14,0,79,17,0,29,16,17,0,13,0,27,20,32,0,10,0,137,27,16,6,32,1,34,32,0,8,11,2,32,1,25,32,0,1,17,0,28,16,0,12,32,0,17,17,0,13,0,27,20,32,0,10,0,138,27,16,6,0,73,0,14,32,0,3,17,0,10,0,53,0,28,27,16,33,0,20,48,0,35,0,53,32,0,13,0,35,0,53,32,0,18,0,54,0,35,27,0,33,20,27,16,27,0,55,0,29,27,16,33,0,21,48,6,32,0,21,0,10,32,0,20,17,0,8,16,33,0,22,48,6,32,1,16,0,36,16,0,0,0,66,17,0,14,32,0,1,17,33,0,23,48,6,32,1,18,0,36,16,0,14,32,0,1,17,0,2,0,67,17,0,0,32,1,28,0,36,16,0,0,0,67,17,0,14,32,0,1,17,17,0,35,32,0,23,0,8,16,32,1,38,16,17,33,0,24,48,6,0,65,33,0,25,48,6,32,0,24,0,13,16,0,27,16,33,0,26,48,6,1,20,33,0,27,48,6,32,0,18,0,10,32,0,20,17,33,0,28,48,0,35,32,0,13,17,0,33,16,0,44,0,35,26,33,0,13,50,6,32,0,3,0,13,16,0,27,16,0,35,0,53,32,0,13,27,0,55,0,29,0,53,0,13,27,27,16,33,0,29,48,6,0,61,0,14,32,0,3,17,0,10,34,0,28,17,0,35,32,0,13,17,0,22,0,66,17,0,0,0,53,0,50,0,0,26,27,16,0,33,16,0,44,0,35,26,0,8,0,33,0,54,0,44,0,35,26,27,21,0,35,0,53,0,33,27,0,19,21,32,0,13,0,22,0,61,17,17,0,26,0,61,17,0,50,0,0,26,16,0,33,16,33,0,30,48,6,32,1,16,0,36,16,0,0,0,67,17,0,67,11,2,32,1,25,32,0,1,17,0,2,32,0,11,17,0,35,32,0,30,17,33,0,31,48,0,50,0,0,26,16,33,0,32,48,0,33,16,33,0,33,48,6,32,0,33,0,44,0,35,26,33,0,30,50,6,32,0,33,0,44,0,35,26,33,0,32,50,6,32,0,33,0,44,0,35,26,33,0,31,50,6,32,0,30,0,44,0,35,26,33,0,1,50,6,32,0,30,0,44,0,35,26,33,0,17,50,6,32,0,30,0,44,0,35,26,33,0,5,50,6,32,0,30,0,44,0,35,26,33,0,6,50,6,32,0,11,0,35,32,0,30,17,0,44,0,1,26,32,0,31,17,33,0,11,49,0,50,0,0,26,16,0,33,16,33,0,13,49,6,34,0,11,0,35,32,0,13,17,0,12,32,0,13,0,54,0,32,27,0,52,0,24,27,0,11,21,0,65,17,33,0,34,48,6,32,0,17,0,10,0,53,0,28,27,16,0,35,32,0,13,17,0,33,16,0,44,0,35,26,33,0,13,50,6,32,0,30,0,35,32,0,13,17,33,0,35,48,6,32,0,20,0,1,32,0,21,17,0,35,32,0,35,17,0,12,0,32,0,52,0,1,27,0,11,21,0,65,17,0,44,0,3,26,0,67,17,0,0,0,66,17,33,0,36,48,6,32,1,16,0,36,16,0,0,0,68,17,0,14,32,0,1,17,0,35,32,0,13,17,0,32,16,33,0,37,48,6,0,65,0,12,32,0,31,17,33,0,38,48,6,0,65,0,11,34,0,31,17,0,32,16,33,0,39,48,6,32,0,38,0,32,16,32,0,39,11,2,0,46,0,22,26,33,0,34,50,6,32,0,20,0,35,32,0,35,17,0,33,16,33,0,40,48,0,44,0,35,26,33,0,13,50,6,32,0,30,0,35,32,0,13,17,33,0,35,49,6,32,0,13,0,33,16,33,0,41,48,6,32,1,14,0,36,16,0,14,32,0,1,17,33,0,42,48,6,32,1,14,0,36,16,0,0,0,66,17,0,14,32,0,1,17,33,0,43,48,6,32,1,27,0,14,32,0,1,17,33,0,44,48,6,32,0,44,0,10,32,0,43,17,0,10,32,0,42,17,0,11,32,0,38,0,50,0,10,26,16,17,0,13,0,27,20,32,0,10,0,139,27,16,6,32,0,43,0,10,32,0,38,17,33,0,45,48,0,50,0,0,26,16,33,0,46,48,6,0,20,32,1,40,0,51,0,8,27,32,0,45,21,33,0,47,48,6,32,0,42,32,0,47,16,33,0,48,48,0,10,34,0,44,32,0,47,16,17,33,0,49,48,6,32,0,43,0,32,32,0,45,17,33,0,50,48,0,8,16,0,22,0,66,17,33,0,51,48,6,32,0,50,0,28,0,54,0,10,27,16,0,22,0,65,17,33,0,52,48,6,32,0,49,0,26,0,9,32,0,50,21,0,11,0,26,0,53,0,1,27,21,0,66,17,32,0,45,0,32,20,32,0,10,0,140,27,16,6,32,0,49,0,26,0,61,17,0,12,32,0,50,17,0,9,0,53,0,29,27,16,32,0,45,0,32,20,32,0,10,0,141,27,16,6,34,0,43,0,32,16,0,22,32,0,39,17,0,35,34,0,50,0,28,16,0,33,16,0,33,16,17,33,0,53,48,6,32,0,42,0,10,32,0,45,17,0,35,0,53,32,0,13,0,30,16,27,0,55,32,1,38,0,54,0,44,0,35,26,27,27,34,0,42,17,33,0,54,48,0,32,16,33,0,55,48,6,32,0,1,0,35,32,0,55,17,0,37,0,1,0,19,0,51,0,13,27,21,32,1,33,17,33,0,56,48,0,14,0,65,17,33,0,57,48,6,32,0,56,0,14,0,53,0,67,27,0,9,32,0,57,0,29,0,66,17,21,0,10,0,16,0,53,0,29,27,21,16,0,11,32,0,57,17,32,0,55,32,0,10,0,142,27,16,6,32,0,56,0,29,16,0,32,34,0,57,17,33,0,58,48,6,34,0,56,0,14,0,65,17,0,44,0,32,26,33,0,55,50,6,32,0,55,0,44,0,35,26,32,0,30,17,32,0,3,0,54,0,35,27,0,2,32,0,22,0,54,0,35,27,21,16,33,0,59,48,6,32,0,59,0,14,0,61,17,33,0,60,48,0,28,0,0,0,29,0,53,0,66,27,21,16,33,0,61,48,0,14,0,67,17,33,0,62,48,6,32,0,54,0,35,32,0,55,0,32,32,0,60,17,0,0,0,66,17,17,32,0,55,0,32,32,0,60,21,32,0,10,0,143,27,16,6,32,0,59,0,15,0,67,17,33,0,63,48,0,11,32,0,62,17,0,20,0,9,0,71,0,14,32,0,59,17,21,0,28,20,0,10,0,29,21,16,33,0,64,48,6,34,0,63,0,10,32,0,60,17,0,9,32,0,64,17,0,10,0,71,0,14,32,0,59,17,0,9,32,0,58,17,17,32,0,55,32,0,10,0,144,27,16,6,34,0,61,0,14,0,66,17,0,9,32,0,59,0,14,0,65,17,17,0,11,32,0,64,17,33,0,65,48,0,10,32,0,64,17,0,8,16,33,0,66,48,6,32,0,60,0,32,32,0,66,17,0,14,0,53,0,29,0,53,0,66,27,27,16,32,0,55,0,32,32,0,66,21,32,0,10,0,145,27,16,6,32,0,21,0,35,32,0,30,17,0,8,16,0,2,32,0,1,17,0,35,32,0,55,17,33,0,67,48,0,33,32,0,8,0,22,32,1,28,17,0,50,0,0,26,16,17,0,44,0,1,26,0,66,17,0,7,0,71,17,33,0,68,48,6,32,0,68,0,13,0,66,17,0,9,32,0,59,0,14,0,65,17,17,0,9,32,0,62,17,33,0,69,48,0,12,32,0,66,17,33,0,70,48,6,32,0,69,0,0,33,0,59,50,6,32,0,69,0,12,33,0,62,50,6,32,0,59,0,5,0,67,17,0,44,0,1,26,0,66,17,0,2,0,71,17,0,2,32,0,70,17,0,0,32,0,59,0,14,0,71,17,0,28,16,0,0,0,70,17,0,2,32,0,64,17,17,0,0,32,0,60,0,28,16,0,0,0,66,17,0,2,32,0,65,17,0,0,34,0,69,17,17,33,0,71,48,6,32,1,28,0,36,16,0,0,32,0,71,17,0,13,34,0,67,17,0,9,32,0,68,0,14,0,65,17,17,32,0,55,32,0,10,0,146,27,16,6,32,0,59,0,14,0,65,17,0,9,32,0,62,17,0,10,32,0,60,17,0,8,16,0,2,33,0,68,50,6,32,0,60,0,12,33,0,66,50,6,32,0,66,0,44,0,32,26,33,0,59,50,6,32,0,65,0,32,32,0,60,0,29,0,66,17,17,33,0,72,48,6,34,0,64,0,2,32,0,58,17,0,29,0,54,0,1,27,16,0,1,33,0,58,50,6,32,0,58,0,2,16,0,11,32,0,66,17,32,0,55,32,0,10,0,142,27,16,6,0,65,0,22,32,0,72,17,0,35,0,53,0,50,0,0,26,27,32,0,60,17,0,12,32,0,65,17,32,0,55,32,0,10,0,147,27,16,6,0,67,0,13,32,0,68,17,0,12,34,0,70,17,32,0,55,32,0,10,0,148,27,16,6,32,0,66,0,44,0,32,26,33,0,58,50,6,32,0,59,0,14,0,66,17,0,10,33,0,72,50,6,32,0,58,0,2,16,0,11,32,0,72,17,32,0,55,0,32,32,0,66,21,32,0,10,0,149,27,16,6,32,0,68,0,13,0,65,17,33,0,73,48,0,0,0,66,17,0,2,34,0,65,17,0,6,32,0,62,17,0,29,16,0,32,32,0,60,17,33,0,74,48,6,32,0,58,0,14,0,67,17,33,0,75,48,0,9,32,0,74,0,14,0,65,17,17,32,0,55,32,0,10,0,150,27,16,6,32,0,51,0,28,0,11,0,20,21,0,66,17,0,11,32,0,49,0,29,16,17,0,28,0,54,0,1,27,16,0,0,0,66,17,0,32,0,53,32,0,48,27,0,55,34,0,75,0,2,0,67,17,0,6,34,0,74,17,27,16,33,0,76,48,6,34,0,66,0,44,0,32,26,33,0,62,50,6,32,0,54,0,35,0,53,32,0,55,27,0,55,32,0,73,0,8,16,27,16,33,0,77,48,6,32,0,55,0,32,32,0,73,17,0,44,0,35,26,32,0,41,17,33,0,78,48,6,32,0,68,0,32,32,0,73,17,0,14,0,67,17,33,0,79,48,6,32,1,28,0,36,16,0,1,32,0,1,17,0,35,0,53,34,0,55,27,0,55,0,1,0,53,32,0,71,27,0,2,34,0,68,0,11,0,65,17,21,0,0,0,20,21,27,16,0,33,0,65,0,71,0,68,0,74,11,4,17,33,0,80,48,6,32,1,28,0,36,16,0,0,0,71,17,0,14,32,0,1,17,0,9,0,71,0,14,32,0,3,17,0,35,32,0,30,17,17,0,0,33,0,80,50,6,34,0,80,0,54,0,14,27,32,1,40,0,51,0,8,27,34,0,38,21,0,35,32,0,51,0,50,0,0,26,0,61,17,21,33,0,81,48,6,32,1,28,32,1,25,32,0,1,17,0,11,32,0,77,17,0,32,16,33,0,82,48,6,0,66,32,0,81,16,33,0,83,48,6,0,71,34,0,81,0,52,0,20,0,2,0,67,21,0,6,0,19,21,27,0,67,17,33,0,84,48,0,0,0,53,0,11,0,53,0,65,27,0,10,32,0,83,21,27,16,33,0,85,48,6,32,0,83,0,32,32,0,48,17,0,11,32,0,72,17,0,11,32,0,62,17,0,10,32,0,85,0,32,32,0,48,17,0,11,32,0,59,17,17,32,0,45,0,51,0,32,27,0,22,0,65,21,0,32,32,0,48,21,32,0,10,0,151,27,16,6,32,0,85,0,32,0,53,32,0,48,27,0,55,34,0,59,27,16,33,0,85,49,0,44,0,1,26,0,66,17,0,6,33,0,84,50,6,32,0,83,0,32,0,53,32,0,48,27,0,55,0,6,0,53,34,0,72,27,27,16,33,0,83,49,6,32,0,85,0,36,16,0,11,0,65,17,32,0,1,0,51,1,21,27,0,32,20,32,0,10,0,152,27,16,6,32,0,83,0,12,32,0,52,17,0,11,34,0,49,0,32,0,53,32,0,48,27,0,55,34,0,62,0,8,16,27,16,0,10,0,53,0,29,27,16,17,0,26,0,66,17,32,0,45,0,32,20,32,0,10,0,153,27,16,6,32,0,83,0,2,0,71,17,0,0,0,65,0,67,0,71,11,3,0,35,32,0,84,17,17,33,0,86,48,6,32,0,83,0,32,32,0,48,17,0,8,16,0,2,0,71,17,0,35,34,0,60,0,50,0,0,26,16,0,29,16,17,0,1,33,0,71,50,6,32,0,3,0,35,0,53,32,0,30,0,35,32,0,39,17,27,0,55,34,0,85,0,32,32,0,51,17,0,26,0,66,17,27,16,0,2,32,0,22,17,0,44,0,1,26,32,0,20,17,33,0,3,49,6,32,0,22,0,9,34,0,23,17,33,0,87,48,6,0,65,0,11,32,0,3,17,0,44,0,22,26,0,66,17,0,35,32,0,29,17,33,0,88,48,0,29,16,0,9,32,0,87,17,33,0,89,48,6,32,0,3,0,35,32,0,89,0,8,16,32,1,38,16,17,0,2,32,0,89,17,0,0,32,0,3,17,0,20,0,15,0,67,21,0,11,32,0,88,21,0,1,0,20,21,0,6,0,20,0,14,0,71,21,0,2,34,0,88,0,0,0,66,17,21,0,44,0,22,26,0,65,21,0,35,34,0,29,21,21,16,33,0,90,48,6,32,0,90,0,35,0,0,0,6,0,66,21,0,5,0,20,21,34,0,89,0,8,16,0,50,0,0,26,16,0,54,0,20,0,1,0,35,21,27,21,0,65,0,14,32,0,90,17,0,9,32,0,87,17,0,8,16,32,1,38,16,17,0,6,33,0,90,50,6,32,0,90,0,29,16,0,2,34,0,87,17,0,0,33,0,3,50,6,32,0,24,0,14,0,66,17,0,9,32,0,90,0,13,0,65,17,17,0,10,33,0,25,50,0,8,16,0,2,33,0,24,50,6,32,0,24,0,1,32,0,24,0,14,0,65,17,0,2,32,0,90,17,17,33,0,90,49,6,0,61,0,14,32,0,3,17,0,29,0,66,17,0,9,0,79,0,14,32,0,3,17,17,0,1,33,0,3,50,6,0,65,0,14,32,0,3,17,0,29,16,0,12,0,70,0,14,32,0,3,17,17,32,0,30,0,51,0,33,27,32,0,10,0,154,27,16,6,34,0,18,0,20,0,1,0,8,0,54,0,2,27,21,33,0,3,50,6,32,1,34,0,1,32,0,1,17,33,0,91,48,6,34,0,34,0,49,1,22,26,16,6,32,0,13,0,44,0,35,26,33,0,1,50,6,34,0,54,0,35,32,0,13,17,33,0,92,48,6,32,0,35,0,44,0,35,26,33,0,3,50,6,32,0,35,0,44,0,35,26,33,0,90,50,6,34,0,20,0,12,34,0,21,17,0,35,32,0,35,17,0,32,16,0,22,34,0,40,0,33,16,0,35,32,0,37,17,17,33,0,37,49,6,32,0,3,0,72,0,54,0,15,27,0,9,0,11,0,53,0,80,27,21,16,33,0,93,48,6,0,65,0,11,32,0,3,17,0,11,32,0,93,17,33,0,94,48,6,32,0,94,0,29,16,32,1,38,16,0,44,0,35,26,32,0,90,17,33,0,95,48,0,15,0,66,17,33,0,96,48,6,32,0,90,0,1,16,0,6,0,65,17,33,0,97,48,6,32,0,95,0,1,16,0,6,0,65,17,33,0,98,48,6,32,0,13,33,0,26,49,6,32,0,35,0,44,0,35,26,33,0,25,50,6,32,0,93,0,2,32,0,98,17,32,0,27,0,155,26,16,6,32,1,27,0,14,32,0,1,17,0,2,32,0,98,17,32,0,27,0,156,26,16,6,0,67,0,16,32,0,3,17,0,9,0,67,0,11,32,0,95,17,17,33,0,99,48,0,11,32,0,92,17,0,32,16,0,30,16,33,0,100,48,6,0,71,0,14,32,0,3,17,33,0,101,48,0,9,32,0,99,17,0,28,16,0,10,32,0,99,17,33,0,102,48,6,0,67,0,27,16,0,39,32,0,3,17,0,10,32,0,102,17,0,16,32,0,101,17,0,2,0,67,17,0,6,32,0,97,17,0,29,0,2,34,0,101,21,0,6,0,28,21,0,67,17,0,2,32,0,99,17,32,0,27,0,157,26,16,6,32,1,26,0,14,32,0,1,17,33,0,103,48,6,32,1,16,0,36,16,0,0,0,67,17,32,1,14,0,36,16,0,0,0,66,17,11,2,0,39,32,0,1,17,33,0,104,48,6,32,1,16,0,36,16,0,0,0,70,17,0,14,32,0,1,17,33,0,105,48,32,1,38,0,52,0,11,27,32,0,104,17,0,9,32,0,103,17,33,0,106,48,6,0,65,0,14,32,0,3,17,0,11,0,53,0,10,0,53,0,29,27,27,32,0,102,17,0,28,0,54,0,9,27,16,32,0,13,32,0,10,0,158,27,16,6,32,1,15,0,36,16,0,0,0,67,17,0,14,32,0,1,17,33,0,107,48,6,0,66,0,16,34,0,90,17,0,28,16,0,9,32,0,107,17,0,11,32,0,96,17,33,0,108,48,6,32,0,94,0,29,0,66,17,0,9,33,0,107,50,6,32,0,107,0,11,32,0,108,17,32,0,13,32,0,10,0,159,27,16,6,32,0,108,0,10,32,0,102,17,0,8,16,0,30,0,55,32,1,37,0,1,0,19,21,0,53,0,13,0,51,0,27,27,27,27,16,33,0,109,48,6,32,0,93,0,32,16,33,0,110,48,0,0,0,53,32,0,109,0,54,0,35,27,27,16,0,0,0,66,17,33,0,111,48,6,32,0,3,0,35,32,0,110,17,0,13,0,79,17,33,0,112,48,6,32,0,3,0,35,32,0,111,17,33,0,113,48,6,32,0,95,0,35,32,0,111,17,0,6,0,65,17,0,13,32,0,113,17,0,9,32,0,112,17,32,0,13,0,35,32,0,111,21,32,0,10,0,160,27,16,6,32,0,1,0,35,32,0,110,17,0,44,0,1,26,32,1,15,0,36,16,17,0,0,32,0,108,0,35,32,0,110,17,17,0,0,34,0,113,0,15,0,65,17,17,0,0,32,0,112,17,33,0,114,48,6,32,0,78,0,22,33,0,111,50,6,32,0,1,0,46,0,65,26,16,0,35,0,53,32,0,111,27,0,55,32,0,78,0,46,0,74,26,16,0,22,32,0,114,17,27,16,0,1,0,53,0,28,27,16,33,0,115,48,6,32,0,115,0,35,32,0,41,17,0,2,0,53,0,50,0,0,26,0,14,0,65,21,0,10,0,53,0,29,0,53,0,66,27,27,20,27,16,0,50,0,0,26,16,0,29,16,33,0,115,49,0,35,32,0,13,17,33,0,116,48,0,2,16,33,0,117,48,6,32,0,97,0,14,0,67,17,0,9,32,0,117,17,33,0,118,48,0,9,32,1,18,0,36,16,0,14,32,0,1,17,17,0,32,16,33,0,119,48,6,32,0,106,0,10,32,0,105,17,0,29,16,0,10,34,0,22,0,8,16,0,35,34,0,35,17,17,0,2,32,0,97,17,0,2,32,0,118,0,8,16,17,34,0,27,0,161,26,16,6,32,0,115,0,14,0,74,17,33,0,120,48,0,2,0,71,17,0,1,33,0,115,50,6,32,0,97,0,14,0,66,17,0,2,32,0,117,17,0,6,33,0,25,50,6,32,1,15,0,36,16,0,44,0,1,26,32,1,34,17,0,14,32,0,91,17,0,11,32,0,115,17,32,0,47,16,33,0,121,48,6,32,0,25,0,35,32,0,41,17,34,0,47,16,33,0,122,48,6,32,0,30,0,35,32,0,53,17,0,22,0,65,17,0,44,0,1,26,0,66,17,1,23,16,6,32,0,122,33,0,123,48,6,32,0,51,32,1,39,0,52,0,16,27,33,0,122,50,6,0,65,0,14,32,0,76,17,0,9,32,0,122,17,0,26,0,66,17,32,0,45,0,32,20,32,0,10,0,163,0,153,11,2,0,56,0,11,0,53,34,0,123,0,26,0,66,17,27,0,49,0,10,26,20,27,27,16,6,32,0,122,0,2,0,67,17,0,6,33,0,76,50,6,32,0,83,0,2,33,0,76,50,6,32,0,76,0,14,0,67,17,0,35,32,0,46,17,0,35,32,0,13,17,33,0,124,48,6,32,0,124,0,14,0,1,0,19,21,33,0,97,50,6,34,0,124,0,14,0,1,0,19,21,33,0,98,50,6,32,1,34,0,1,32,0,1,17,32,0,8,0,54,0,11,27,0,9,0,15,0,53,0,81,27,21,16,33,0,125,48,6,32,1,34,0,0,32,0,8,17,0,16,32,0,1,17,0,9,34,0,120,0,35,32,0,13,17,17,33,0,126,48,0,32,16,33,0,127,48,6,32,1,16,32,1,25,0,11,0,36,0,0,0,71,21,0,54,0,14,27,21,32,0,1,17,0,10,32,1,17,0,36,16,0,14,32,0,1,17,0,28,16,0,12,32,0,94,17,17,0,10,34,0,126,17,0,10,34,0,125,17,0,11,0,65,0,16,32,0,3,17,0,9,32,0,117,17,0,28,16,0,11,32,0,94,17,0,11,32,0,92,17,17,33,0,128,48,6,32,0,117,0,11,34,0,118,0,10,34,0,128,17,0,10,32,0,93,17,17,32,0,13,32,0,10,0,164,27,16,6,32,0,117,0,35,32,0,110,17,0,11,0,67,0,14,34,0,114,17,0,9,34,0,116,0,35,32,0,110,17,0,13,0,68,17,17,17,32,0,13,0,35,32,0,110,21,32,0,10,0,165,27,16,6,32,0,117,0,12,0,53,0,29,27,16,0,9,32,0,3,0,15,0,65,17,17,0,9,32,0,95,0,11,0,65,17,17,0,11,32,0,92,17,32,0,13,32,0,10,0,166,27,16,6,32,0,117,0,35,32,0,110,17,33,0,129,48,0,12,33,0,112,50,6,32,0,110,0,32,34,0,129,17,33,0,130,48,6,32,0,112,0,44,0,32,26,33,0,110,50,6,32,0,78,0,46,0,66,26,16,0,22,34,0,112,17,0,44,0,32,26,33,0,111,50,6,34,0,17,0,29,16,33,0,131,48,0,32,16,33,0,132,48,6,32,0,91,32,0,8,0,54,0,11,27,0,9,0,15,0,53,0,65,27,21,16,0,11,34,0,93,0,9,32,0,117,17,0,28,16,0,35,32,0,41,17,0,10,34,0,131,17,0,10,34,0,77,17,17,0,32,16,33,0,133,48,6,32,0,115,0,35,32,0,82,17,33,0,134,48,0,11,0,65,17,33,0,135,48,6,0,67,0,67,11,2,32,1,25,34,0,115,0,35,32,0,133,17,33,0,136,48,17,33,0,137,48,6,0,70,0,11,34,0,134,17,0,9,32,0,135,17,32,0,82,32,0,10,0,167,27,16,6,32,0,46,0,35,32,0,133,17,33,0,138,48,6,32,0,91,0,35,32,0,133,17,33,0,139,48,6,32,0,7,0,13,16,0,11,32,0,139,17,0,9,32,0,138,0,14,0,65,17,17,0,9,32,0,137,17,33,0,140,48,6,32,0,7,0,35,32,0,139,0,32,32,0,140,17,17,33,0,141,48,0,14,0,65,17,32,0,133,0,32,32,0,140,21,32,0,10,0,168,27,16,6,32,0,137,0,32,0,53,34,0,140,27,0,55,34,0,141,0,15,0,65,17,27,16,33,0,137,49,6,0,65,0,15,32,0,7,17,0,32,16,33,0,142,48,0,46,0,65,26,16,33,0,143,48,6,32,0,139,0,32,32,0,137,17,33,0,144,48,0,22,32,0,142,17,0,41,32,0,86,0,13,16,0,22,32,0,138,0,32,32,0,137,17,33,0,145,48,17,0,22,32,0,143,17,33,0,146,48,17,33,0,147,48,6,32,0,33,0,35,34,0,53,17,0,44,0,1,26,0,66,17,0,22,32,0,1,0,13,16,17,0,35,32,0,145,17,0,22,34,0,33,0,32,34,0,45,17,0,22,0,61,17,0,35,34,0,138,17,0,0,32,0,136,0,14,0,66,17,17,17,33,0,148,48,6,32,0,148,0,33,16,0,35,0,53,32,0,144,0,22,32,0,139,17,33,0,149,48,0,54,0,35,27,0,33,20,27,16,33,0,150,48,6,32,0,150,0,32,0,53,0,15,0,53,32,0,137,0,13,16,27,27,16,1,24,16,6,32,0,150,0,35,34,0,144,0,46,0,61,26,16,0,22,32,0,137,17,0,35,32,0,150,17,0,50,0,0,26,16,33,0,151,48,0,33,16,17,0,32,0,53,32,0,137,0,13,16,0,54,0,11,27,27,16,33,0,150,49,6,32,0,150,0,44,0,35,26,33,0,137,50,6,32,0,150,0,44,0,35,26,33,0,133,50,6,32,0,150,0,44,0,35,26,33,0,136,50,6,34,0,151,0,11,0,65,17,0,10,0,53,0,29,27,16,0,8,16,0,49,0,0,26,16,33,0,152,48,6,34,0,139,0,35,32,0,150,0,25,32,0,152,17,17,33,0,153,48,6,32,0,7,0,13,16,0,16,32,0,153,17,32,0,133,0,25,32,0,152,21,32,0,10,32,0,153,0,54,0,32,27,0,40,20,32,1,30,0,169,21,27,16,6,32,0,136,0,11,0,65,17,33,0,154,48,0,9,0,71,0,11,34,0,136,17,17,33,0,155,48,6,34,0,32,0,35,32,0,133,17,0,35,0,53,32,0,137,32,1,38,16,0,26,32,0,152,17,27,0,22,34,0,7,0,6,0,65,17,0,1,16,33,0,156,48,0,35,32,0,153,17,21,0,1,0,20,21,16,33,0,157,48,6,32,0,157,0,11,0,65,17,0,9,32,0,155,17,32,0,133,32,0,10,0,170,27,16,6,34,0,155,32,1,40,0,26,0,66,21,0,16,0,32,21,32,0,137,17,33,0,158,48,0,35,34,0,150,0,32,32,0,137,17,0,33,16,33,0,159,48,17,0,22,34,0,143,17,0,41,34,0,146,17,33,0,160,48,6,34,0,145,0,22,34,0,156,17,0,38,0,0,32,0,86,0,54,0,35,27,21,16,0,20,0,26,0,53,0,13,27,34,0,142,21,0,35,0,53,0,33,27,34,0,159,21,0,35,32,0,137,0,26,34,0,152,17,0,50,0,0,26,0,61,17,21,0,22,0,35,0,53,34,0,153,27,21,16,33,0,161,48,6,32,0,157,0,11,0,65,17,32,1,40,0,11,34,0,158,0,22,0,66,17,21,0,35,0,53,0,50,0,0,26,27,0,19,21,32,0,137,17,0,9,32,0,137,0,28,0,66,17,0,11,32,0,154,17,17,33,0,162,48,6,32,0,91,0,35,32,0,82,17,0,0,0,71,17,0,0,32,0,83,0,2,0,71,17,0,35,32,0,46,0,35,32,0,82,17,33,0,163,48,17,17,33,0,164,48,6,34,0,163,0,2,0,74,17,0,0,32,0,164,17,0,30,0,55,0,39,27,16,0,22,33,0,162,50,6,0,66,0,1,32,0,78,17,0,44,0,35,26,32,0,13,17,0,0,0,66,17,32,0,132,32,0,82,0,22,32,0,133,17,11,3,0,32,0,71,0,67,0,71,11,3,17,0,22,16,33,0,165,48,6,34,0,135,0,22,34,0,154,17,0,12,0,2,0,67,21,0,0,0,20,21,34,0,162,17,0,0,0,82,17,33,0,166,48,6,32,0,78,0,46,0,82,26,16,32,0,78,0,46,0,65,26,16,34,0,71,0,32,34,0,73,17,32,0,132,0,46,0,78,26,16,34,0,91,0,35,34,0,132,17,34,0,166,34,0,82,0,46,0,65,26,16,0,22,34,0,157,17,34,0,164,0,22,34,0,161,17,11,8,33,0,167,48,6,32,0,102,0,8,16,0,50,0,0,26,16,32,1,37,0,1,0,20,21,32,0,94,17,0,7,0,10,0,12,21,0,67,17,0,9,32,0,96,17,33,0,168,48,6,34,0,99,0,29,16,0,10,0,66,0,14,32,0,3,17,17,33,0,169,48,0,11,32,0,117,0,11,32,0,94,17,0,10,0,53,0,28,27,16,0,10,32,0,102,17,0,10,34,0,168,17,0,10,32,0,92,17,33,0,170,48,17,0,32,16,33,0,171,48,6,34,0,169,0,10,34,0,170,17,0,12,32,0,96,17,32,0,13,32,0,10,0,171,27,16,6,0,65,0,14,32,0,3,17,0,11,32,0,102,17,0,10,0,65,0,16,32,0,3,17,0,9,34,0,96,17,17,0,8,16,0,2,0,67,17,0,6,34,0,97,17,0,28,0,67,17,0,35,32,0,171,17,33,0,172,48,0,13,0,67,17,33,0,173,48,6,32,1,26,0,11,32,0,1,17,0,11,34,0,92,17,0,32,16,33,0,174,48,0,44,0,35,26,32,0,1,17,33,0,175,48,0,9,16,0,40,16,33,0,176,48,0,29,0,1,0,20,21,0,61,17,0,32,16,0,35,34,0,175,17,33,0,177,48,6,34,0,8,0,0,32,1,34,17,33,0,178,48,0,16,32,0,1,17,0,32,16,33,0,179,48,0,22,34,0,174,17,33,0,180,48,6,32,0,1,0,35,34,0,179,17,0,0,32,0,176,0,13,16,0,44,0,1,26,34,0,178,17,17,0,22,33,0,177,50,6,34,0,41,0,35,34,0,39,17,33,0,181,48,6,0,65,0,22,32,0,106,17,0,50,0,0,26,16,0,32,0,66,0,22,32,0,105,17,17,0,26,0,66,17,0,29,0,54,0,1,27,16,0,0,34,0,94,0,28,0,66,17,0,32,34,0,105,17,0,8,16,17,0,44,0,22,26,34,0,36,17,33,0,182,48,6,0,80,0,14,32,0,3,17,0,29,16,0,10,34,0,106,17,0,10,32,0,98,0,14,0,67,17,17,0,12,34,0,103,17,0,32,16,0,22,32,0,78,0,32,0,53,0,8,27,32,0,79,17,17,33,0,183,48,6,34,0,104,0,32,16,33,0,184,48,6,32,1,27,0,14,32,0,1,17,0,32,16,33,0,185,48,6,32,0,173,0,0,32,0,171,17,0,0,0,53,32,0,109,0,54,0,35,27,0,2,32,0,173,21,27,16,33,0,186,48,6,32,0,186,0,32,34,0,98,0,35,32,0,171,17,33,0,187,48,0,14,0,67,17,33,0,188,48,0,2,32,0,173,0,0,0,66,17,17,17,0,22,33,0,183,50,6,32,0,188,0,8,16,33,0,188,49,6,32,0,188,0,44,0,32,26,33,0,171,50,6,32,0,188,0,44,0,32,26,33,0,186,50,6,34,0,79,0,1,16,0,22,34,0,107,0,0,32,0,108,17,0,0,32,0,1,17,0,35,32,0,110,17,0,44,0,1,26,32,1,15,0,36,16,0,0,0,66,17,17,0,6,0,65,17,17,0,0,0,83,17,33,0,189,48,6,32,0,180,32,0,180,32,0,181,32,0,181,32,0,127,32,0,119,32,0,37,0,32,0,67,17,32,0,111,32,0,183,32,0,185,0,66,0,0,32,0,130,17,0,66,0,0,32,0,130,17,34,0,109,0,35,32,0,100,17,0,6,0,66,17,0,0,32,0,100,17,34,0,186,32,0,184,11,15,33,0,190,48,0,22,16,0,44,0,35,26,32,0,13,17,0,22,32,0,165,17,33,0,191,48,0,33,16,33,0,192,48,6,34,0,180,0,46,0,65,26,16,34,0,177,32,0,181,0,46,0,66,26,16,34,0,181,0,13,16,0,27,16,0,0,0,66,17,34,0,127,0,46,0,84,26,16,34,0,119,0,46,0,85,26,16,34,0,182,0,23,34,0,117,0,35,34,0,37,17,0,0,0,62,17,17,0,31,16,0,21,16,34,0,189,34,0,183,0,46,0,74,26,16,34,0,185,0,46,0,86,26,16,32,0,130,0,46,0,87,26,16,34,0,1,0,35,0,66,0,1,34,0,130,17,17,0,44,0,1,26,32,1,34,17,34,0,3,0,35,32,0,100,17,0,0,0,88,17,34,0,95,0,35,32,0,171,17,0,11,0,65,17,0,2,0,70,17,0,0,34,0,172,0,14,0,66,17,0,6,34,0,187,17,0,2,0,67,17,0,0,34,0,173,17,0,32,34,0,188,17,17,0,0,0,89,17,32,0,121,0,0,0,90,17,33,0,193,48,0,26,0,61,17,11,15,0,22,34,0,167,17,0,22,16,0,35,32,0,192,17,33,0,194,48,6,34,0,190,0,46,0,13,26,16,0,22,34,0,165,0,13,16,17,0,35,0,46,0,27,0,54,0,0,27,26,0,50,0,0,26,0,29,20,0,54,0,35,27,21,0,69,0,60,0,91,11,3,17,33,0,195,48,6,34,0,191,0,35,0,53,32,0,195,0,22,16,27,0,55,34,0,110,34,0,78,11,2,0,46,0,13,26,16,0,44,0,32,26,0,66,0,65,11,2,17,0,1,34,0,111,17,34,0,100,32,0,171,11,3,0,22,16,0,44,0,35,26,32,0,13,17,27,16,33,0,196,48,6,32,0,5,32,0,6,11,2,0,46,0,35,0,53,0,35,0,53,32,0,192,27,0,44,0,22,26,0,61,21,27,26,32,0,196,34,0,196,0,35,0,53,34,0,195,0,36,0,61,17,27,0,55,34,0,108,0,10,34,0,102,17,0,8,16,0,29,16,32,1,38,16,0,35,34,0,171,17,0,44,0,35,26,32,0,13,17,27,16,11,2,17,33,0,197,48,6,32,0,48,0,32,0,53,34,0,48,27,0,55,32,0,58,27,16,33,0,58,49,0,11,0,65,17,0,10,32,0,76,0,13,0,66,17,0,9,32,0,83,17,17,0,10,33,0,52,50,6,32,0,52,0,32,16,33,0,198,48,0,44,0,35,26,34,0,76,17,33,0,199,48,0,14,0,66,17,0,0,0,66,17,33,0,200,48,0,32,16,33,0,201,48,6,34,0,199,0,11,0,66,17,0,0,34,0,58,0,35,32,0,198,17,0,2,0,67,17,17,0,5,0,70,17,33,0,202,48,6,32,0,51,0,35,32,0,198,17,33,0,203,48,0,50,0,0,26,0,61,17,33,0,204,48,6,32,0,202,0,0,34,0,200,17,0,35,0,53,0,34,0,51,0,35,0,53,32,0,204,0,54,0,35,27,0,33,20,0,32,34,0,203,21,27,27,27,16,0,6,32,0,83,0,32,32,0,52,0,9,32,0,51,17,17,0,8,16,0,1,0,67,17,17,33,0,205,48,6,32,0,198,0,35,32,0,201,17,0,41,32,0,205,0,50,0,0,26,16,0,22,0,65,17,0,26,0,35,34,0,204,21,0,0,34,0,202,21,0,35,0,0,0,19,0,51,0,38,27,21,34,0,201,21,0,44,0,22,26,0,25,21,0,61,17,17,0,41,0,53,0,32,27,34,0,205,17,33,0,198,49,6,34,0,84,0,32,32,0,51,17,34,0,83,0,8,16,0,32,32,0,51,17,32,0,51,0,32,16,0,32,0,53,34,0,52,0,32,34,0,51,17,27,0,55,34,0,198,27,16,11,3,33,0,206,48,6,34,0,184,0,13,0,52,0,1,27,32,0,194,17,0,16,34,0,192,17,0,22,0,66,17,0,32,16,32,0,147,0,46,0,13,26,16,0,0,34,0,86,17,34,0,147,34,0,160,11,4,33,0,207,48,6,34,0,193,0,36,0,61,17,0,22,34,0,194,17,34,0,176,34,0,206,34,0,207,34,0,197,11,5,7,11,0,0,46,0,172,0,51,0,42,27,26,11,0,0,65,0,27,16,11,4,33,0,3,48,6,34,0,2,0,13,0,11,0,70,21,0,58,0,24,27,16,0,43,34,0,3,26,0,26,0,13,21,0,54,0,22,27,16,33,0,4,33,0,5,33,0,6,33,0,7,12,4,48,6,34,0,1,32,1,41,34,0,5,32,0,6,11,2,17,33,0,8,48,33,0,9,33,0,10,33,0,11,33,0,12,33,0,13,12,5,48,6,34,0,9,32,1,43,34,0,10,32,0,11,0,36,16,34,0,12,34,0,13,34,0,6,0,46,0,65,26,16,0,29,34,0,7,17,11,5,17,33,0,14,33,0,15,33,0,16,33,0,17,33,0,18,12,5,48,6,34,0,14,34,0,11,0,26,0,66,17,0,22,34,0,4,0,35,34,0,15,17,11,1,17,0,22,16,34,0,16,0,12,16,0,31,16,0,45,0,11,26,16,34,0,17,0,12,16,0,31,16,0,45,0,11,26,16,34,0,18,34,0,8,11,6,7,34,0,1,34,0,2,16,7,32,0,1,0,35,0,53,32,0,2,0,32,34,0,1,17,27,0,55,0,46,0,66,26,27,16,32,1,13,34,0,2,0,44,0,35,26,16,17,7,34,0,1,0,32,16,0,36,16,0,117,11,2,0,42,16,7,34,0,1,0,22,0,65,17,0,35,0,53,0,50,0,0,26,27,32,1,31,17,0,9,32,1,32,17,0,32,16,0,118,11,2,0,42,16,7,32,1,26,0,32,34,0,1,17,0,119,11,2,0,42,16,7,32,1,26,0,32,34,0,1,17,0,120,11,2,0,42,16,7,34,0,2,0,32,34,0,1,17,0,44,0,35,26,32,1,26,17,0,121,11,2,0,42,16,7,32,0,2,0,44,0,32,26,33,1,26,50,6,32,0,2,0,44,0,32,26,33,1,25,50,6,34,0,1,0,32,34,0,2,17,7,0,49,0,10,26,0,58,34,0,1,0,24,34,0,2,0,54,0,32,27,21,0,42,20,27,7,32,0,1,0,54,0,36,27,33,0,3,48,6,0,26,0,25,11,2,0,46,1,25,26,16,33,0,4,33,0,5,12,2,48,6,0,36,0,55,0,26,0,53,0,61,27,27,0,24,20,33,0,6,48,6,0,46,0,25,26,0,30,20,0,46,0,22,26,0,46,0,26,26,21,0,53,0,61,0,65,11,2,27,33,0,7,48,6,1,26,33,0,8,48,6,32,2,16,32,2,25,34,0,1,17,0,32,16,0,30,16,0,49,0,46,34,0,8,26,0,22,20,0,32,0,53,0,46,0,36,26,0,39,20,27,20,0,25,0,53,0,13,0,5,0,78,21,27,20,26,0,65,0,27,16,0,44,0,24,26,16,0,24,16,17,0,46,0,22,26,16,0,36,0,53,0,46,0,13,26,0,49,0,5,26,0,37,0,20,21,0,36,20,20,27,16,33,0,9,48,6,0,66,32,0,9,32,1,10,34,0,9,32,2,30,0,130,17,27,16,7,0,14,0,58,0,49,0,10,26,27,0,58,34,0,1,0,24,34,0,2,0,54,0,32,27,0,44,0,66,0,57,0,35,27,26,0,43,32,1,6,26,0,23,32,1,5,21,21,0,31,0,51,0,9,27,20,21,0,42,20,27,7,32,1,15,0,22,0,65,17,0,32,32,0,1,17,0,13,32,2,16,0,36,16,0,0,0,70,17,17,32,1,13,0,22,0,65,21,0,32,34,0,1,21,32,1,10,0,135,27,16,7,34,0,1,0,6,33,1,25,50,0,14,0,67,17,32,1,26,32,1,10,34,0,4,27,16,7,32,2,28,32,2,25,34,0,1,17,0,9,32,1,46,0,14,0,65,17,17,7,32,1,5,0,35,0,53,32,0,1,27,0,55,32,1,5,0,35,32,0,2,17,27,16,33,1,5,49,6,32,1,6,0,35,0,53,34,0,2,27,0,55,32,1,6,0,35,34,0,1,17,27,16,33,1,6,49,7,32,1,24,0,35,32,0,1,17,0,2,0,53,0,8,27,32,1,121,17,0,6,33,1,122,50,0,14,0,67,17,32,1,30,0,51,0,33,27,0,35,34,0,1,21,32,1,10,0,162,27,16,7,32,1,148,0,35,0,53,32,0,1,27,0,13,0,53,0,29,27,20,0,52,0,10,27,32,1,149,17,0,8,16,32,1,133,0,32,0,53,32,1,137,27,0,54,0,22,27,20,0,35,34,0,1,21,32,1,10,0,168,27,16,7,0,44,0,24,34,0,1,20,0,54,0,46,0,22,26,27,26,0,24,20,7,34,0,1,32,1,4,32,1,5,0,20,32,1,6,20,32,1,7,0,54,34,0,0,27,0,22,32,1,5,21,11,2,0,56,0,36,0,36,0,61,21,0,54,32,1,3,0,52,0,1,27,27,0,13,0,66,21,27,11,2,0,56,0,20,0,51,0,36,0,51,0,13,27,27,0,11,0,65,21,27,11,2,0,56,32,1,3,0,7,0,67,21,27,34,0,2,19,7]
- ,[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[18],runtime[19],runtime[20],runtime[21],runtime[22],runtime[23],runtime[24],runtime[25],runtime[26],runtime[27],runtime[28],runtime[29],runtime[30],runtime[31],runtime[32],runtime[33],runtime[34],runtime[35],runtime[36],runtime[37],runtime[38],runtime[39],runtime[40],runtime[41],runtime[42],runtime[43],runtime[44],runtime[45],runtime[46],runtime[47],runtime[48],runtime[49],runtime[50],runtime[52],runtime[53],runtime[54],runtime[55],runtime[56],runtime[57],runtime[59],runtime[60],runtime[62],10,13,-1,11,26,9,0,1,2,5,8,4,3,-3,-2,6,17,Math.PI,Infinity,64,-4,-5,-6,32,48,43,44,42,66,24,16,7,14,'\0','0','#','\'','\"','@',str("⋄,"),str(":;?"),str("⇐←↩"),str("(){}⟨⟩"),str("‿"),str("·"),str("𝕊𝕏𝕎𝔽𝔾𝕤𝕩𝕨𝕣𝕗𝕘"),str(".¯π∞"),str("_"),str("aA"),str("•"),str("𝕨"),str(" "),str("#\'\"@"),str("s"),str("Unknown character"),str(": "),str("Character set conflict: "),str("˜⁼"),str("Unclosed quote"),str("Words can\'t only have underscores"),str("System dot with no name"),str("𝕣 can\'t be used with other word characters"),str("Numbers can\'t start with underscores"),str("Letter"),str(" \""),str("\" not allowed in numbers"),str("ea"),str("Negative sign in the middle of a number"),str("Portion of a number is empty"),str("Ill-formed decimal or exponent use"),str("π and ∞ must occur alone"),str("Unmatched bracket"),str("Empty program"),str("Swapped open and closed brackets"),str("Parentheses can\'t contain separators"),str("Predicates can\'t be placed inside lists"),str("Empty statement or expression"),str("Invalid assignment or stranding use"),str("Can\'t use export statement as predicate"),str("Dot must be followed by a name"),str("Punctuation : ; ? not allowed outside blocks"),str("Header-less bodies must come last"),str("At most two header-less bodies allowed"),str("Invalid Undo header syntax"),str("Only one header per body allowed"),str("Missing operand in header"),str("Invalid header structure"),str("Incorrect special name"),str("Header left argument without right"),str("Header operation must be a plain name"),str("Header with ⁼ must take arguments"),str("Header with ˜⁼ must have left argument"),str("Block header type conflict"),str("Special name outside of any block"),str("Unreachable body"),str("Dot must be preceded by a subject"),str("Nothing (·) cannot be assigned"),str("Can\'t use Nothing (·) as predicate"),str("Missing operand"),str("Double subjects (missing ‿?)"),str("No right-hand side in non-modified assignment"),str("Role of the two sides in assignment must match"),str("Can\'t use Nothing (·) in lists"),str("Can\'t return Nothing (·)"),str("Invalid use of 𝕨 in monadic case"),str("Assignment target must be a name or list of targets"),str("Can\'t nest assignments (write aliases with ⇐)"),str("Can\'t use result of function/modifier assignment without parentheses"),str("Can\'t define special name"),str("Redefinition"),str("Undefined identifier"),str("Can\'t export from surrounding scope"),str("Second-level parts of a train must be functions"),str("System values not supported")]
+ [1,1,7,34,0,1,33,0,3,33,0,4,33,0,5,12,3,48,6,0,59,0,60,11,2,0,0,0,93,17,33,0,6,48,6,34,0,3,32,0,4,34,0,5,32,0,6,0,22,0,99,17,0,100,0,101,0,102,0,103,0,104,0,105,0,21,0,62,0,51,11,2,17,0,45,0,35,26,0,61,17,0,106,0,59,0,27,16,0,0,0,94,17,0,63,33,0,7,48,0,27,16,0,47,0,0,26,0,108,17,0,21,16,0,44,0,22,26,0,107,17,0,64,0,0,0,93,17,0,22,0,111,17,0,22,0,110,0,26,0,61,17,17,0,22,0,109,17,0,112,11,15,0,46,0,13,26,0,24,0,22,21,16,33,0,8,33,0,9,12,2,48,6,32,0,9,0,50,0,0,26,0,29,0,65,21,0,54,0,44,0,46,0,24,26,26,27,16,33,0,10,33,0,11,33,0,12,33,0,13,33,0,14,33,0,15,33,0,16,33,0,17,33,0,18,33,0,19,33,0,20,33,0,21,33,0,22,33,0,23,33,0,24,12,15,48,6,0,36,0,54,0,1,27,0,12,0,9,0,15,0,53,0,65,27,21,0,36,0,53,0,66,27,21,33,0,25,48,6,32,0,13,0,36,16,33,0,26,48,6,32,0,14,0,36,16,0,0,0,67,17,33,0,27,48,6,0,68,0,1,0,54,0,24,27,16,0,0,32,0,19,17,33,0,28,48,6,32,0,19,0,36,16,0,0,0,69,17,33,0,29,48,6,0,13,0,11,0,66,21,0,44,0,32,26,0,113,21,0,54,0,22,27,33,0,30,48,6,1,2,33,0,31,48,6,1,3,32,0,8,26,33,0,32,48,6,0,117,0,32,0,53,34,0,4,0,54,0,39,27,27,16,32,0,32,16,33,0,33,48,6,32,0,20,0,36,16,33,0,34,48,0,0,0,66,17,33,0,35,48,6,0,66,0,67,0,71,0,61,0,61,0,72,0,61,0,65,11,2,0,73,0,65,0,68,0,74,11,2,0,32,16,0,8,16,11,10,0,43,34,0,9,26,0,25,0,13,21,0,54,0,44,0,46,0,21,26,26,27,16,0,22,16,0,44,0,22,26,0,70,17,33,0,36,48,6,0,2,0,50,0,6,26,20,33,0,37,48,6,32,0,37,0,53,0,13,0,51,0,27,27,27,33,0,38,48,6,32,0,37,0,53,0,13,0,51,0,27,27,0,0,0,66,21,27,33,0,39,48,6,0,19,0,32,0,10,21,0,44,0,22,26,0,32,0,22,21,0,66,21,33,0,40,48,6,1,4,33,0,41,48,6,1,5,33,0,42,48,6,1,6,33,0,43,48,6,1,7,33,0,44,48,7,34,0,1,0,11,16,0,46,1,8,26,34,0,4,17,0,22,16,7,32,1,31,32,1,30,0,53,0,114,27,0,115,0,20,11,3,26,0,42,20,33,0,2,48,6,32,0,1,0,54,0,35,27,0,54,0,18,0,58,0,19,0,32,0,13,21,0,51,34,0,2,27,27,27,0,19,0,20,21,33,0,3,48,6,32,0,1,0,35,34,0,1,0,33,16,33,0,4,48,17,33,0,5,48,0,26,0,53,0,1,27,0,14,0,26,21,0,66,17,0,49,0,10,26,0,58,0,22,0,53,0,65,27,0,44,0,32,26,32,0,5,21,0,22,0,116,21,0,42,20,27,16,6,0,20,0,33,34,0,5,21,0,6,0,66,21,0,44,0,1,26,0,66,21,0,44,0,35,26,34,0,4,21,34,0,3,0,20,21,7,34,0,2,33,0,3,33,0,4,12,2,48,6,0,95,0,14,32,0,1,17,33,0,5,48,6,0,96,0,14,32,0,1,17,33,0,6,48,0,9,0,53,0,28,0,53,0,65,0,65,11,2,27,27,16,0,32,16,33,0,7,48,6,0,97,0,14,32,0,1,17,33,0,8,48,0,32,16,33,0,9,48,6,32,0,7,32,0,9,0,26,0,61,17,32,0,5,0,32,16,11,3,0,22,16,33,0,10,48,0,33,16,33,0,11,48,6,32,0,10,0,35,32,0,11,17,33,0,10,49,6,34,0,7,0,0,0,67,17,34,0,9,0,26,0,66,17,0,66,0,22,32,1,6,0,39,32,0,1,17,17,0,32,16,0,32,0,53,32,0,5,0,50,0,0,26,16,0,22,0,65,17,0,54,0,35,0,51,0,29,0,54,0,1,27,27,27,27,16,11,3,0,22,16,0,35,34,0,11,17,33,0,12,48,6,0,20,0,36,0,61,21,0,14,0,65,21,0,58,1,9,27,33,0,13,48,6,0,32,0,53,32,0,12,0,33,32,0,10,17,0,46,0,65,26,0,22,0,66,21,32,0,13,0,13,0,54,0,22,27,21,0,25,0,13,21,16,27,0,48,0,32,26,20,0,25,32,0,1,0,13,16,21,33,0,14,48,6,34,0,10,32,0,14,16,33,0,15,48,6,34,0,12,34,0,14,16,33,0,16,48,6,32,0,16,0,10,32,0,15,17,33,0,17,48,0,50,0,13,26,0,66,17,33,0,18,48,6,32,0,18,0,11,34,0,16,17,0,9,32,0,8,0,10,32,0,6,17,17,0,49,0,10,26,0,58,1,10,27,16,6,0,98,0,14,32,0,1,17,0,9,32,0,18,17,33,0,19,48,6,34,0,6,0,9,32,0,15,17,0,29,16,0,10,32,0,19,17,0,32,16,33,0,20,48,6,32,0,20,34,0,19,0,54,0,35,27,0,2,0,93,0,1,0,98,17,21,0,1,32,0,1,0,54,0,35,27,21,16,33,0,21,48,6,32,0,8,0,9,33,0,15,50,0,28,16,0,9,32,0,8,17,33,0,22,48,0,12,33,0,18,50,6,34,0,17,0,9,34,0,8,17,0,50,0,13,26,16,0,11,0,66,0,54,0,22,27,0,52,0,2,0,53,0,50,0,0,26,27,27,0,19,21,34,0,22,0,29,16,0,12,34,0,15,17,33,0,23,48,17,0,44,0,1,26,0,66,17,0,44,0,41,26,32,0,1,17,33,0,24,48,6,32,0,18,0,32,16,33,0,25,48,6,32,0,18,0,29,0,66,17,0,32,16,0,25,0,53,0,13,27,32,0,25,17,33,0,26,48,6,32,0,25,34,0,5,0,54,0,35,27,0,2,0,1,21,32,0,26,17,0,1,33,0,26,50,6,34,0,1,0,35,32,0,25,17,32,1,32,16,33,0,27,48,6,32,1,21,32,1,25,32,0,27,17,0,28,16,0,12,32,1,20,0,36,16,0,14,32,0,27,17,17,33,0,28,48,6,32,1,29,0,14,32,0,27,17,33,0,29,48,6,32,1,23,0,36,0,52,0,44,0,1,26,0,24,0,19,21,27,32,1,20,17,32,1,25,32,0,27,17,0,11,34,0,28,17,0,10,32,0,29,17,33,0,30,48,0,11,0,53,0,29,27,16,33,0,31,48,6,32,1,22,0,49,0,0,26,16,0,0,0,61,17,0,14,32,0,27,17,33,0,32,48,6,32,1,23,0,36,16,0,14,32,0,27,17,33,0,33,48,6,32,0,32,0,12,32,0,30,17,0,19,0,32,0,10,21,0,28,0,32,0,20,21,0,66,21,0,11,0,32,21,32,0,31,17,0,49,0,10,26,0,58,1,11,27,16,6,32,0,27,0,32,32,0,31,17,0,44,0,1,26,32,1,22,0,36,16,17,0,44,0,3,0,51,0,5,27,26,32,1,7,17,0,2,32,0,29,0,32,32,0,31,17,0,8,16,17,33,0,34,48,6,32,1,22,0,36,16,0,0,32,1,7,17,0,16,32,0,27,17,0,9,32,0,30,17,0,2,32,1,7,17,0,1,33,0,27,50,6,32,0,30,0,28,16,0,12,32,0,33,17,0,49,0,10,26,0,58,1,12,27,16,6,32,0,33,0,10,0,53,0,29,27,16,0,13,33,0,31,50,6,34,0,33,0,32,32,0,31,17,0,20,0,0,0,8,0,54,0,2,27,21,0,65,0,16,32,0,34,17,0,2,0,67,17,17,33,0,35,48,0,11,0,65,17,33,0,36,48,6,32,0,36,0,8,16,0,22,0,65,17,0,35,32,0,31,0,50,0,0,26,16,17,0,9,32,0,30,17,33,0,37,48,0,12,32,0,30,17,33,0,38,48,6,32,0,30,0,2,32,0,27,17,0,22,0,53,0,65,27,0,32,32,0,37,0,22,0,65,17,0,28,0,54,0,10,27,16,0,11,32,0,32,0,22,0,65,17,17,21,0,52,32,1,42,27,32,0,26,17,33,0,39,48,6,34,0,34,0,32,32,0,36,17,0,14,0,53,0,67,27,0,54,0,9,27,0,0,0,20,21,32,0,38,0,11,0,53,0,28,27,16,0,44,0,32,26,32,0,32,17,17,33,0,40,48,6,32,0,37,0,12,32,0,31,17,0,50,0,0,26,16,0,2,32,0,32,0,12,32,0,38,17,17,33,0,41,48,0,11,0,53,0,50,0,6,26,0,29,20,27,16,33,0,42,48,6,32,0,29,0,32,32,0,42,17,0,11,32,0,35,0,32,34,0,36,17,0,14,0,66,17,17,33,0,43,48,6,32,0,31,33,0,44,48,0,9,34,0,37,17,0,10,32,0,42,17,33,0,31,49,6,32,0,29,0,32,32,0,31,17,0,8,16,0,44,0,32,26,33,0,35,50,0,32,0,53,0,11,0,53,0,65,27,27,16,0,14,0,66,17,33,0,45,48,6,32,0,43,0,22,0,65,17,0,35,32,0,41,17,0,11,0,53,32,0,42,27,0,10,0,13,0,53,32,0,29,27,21,16,0,9,32,0,32,0,12,34,0,38,17,17,0,49,0,10,26,0,58,1,13,27,16,6,34,0,42,0,11,32,0,29,17,0,32,16,32,0,27,0,54,0,35,27,0,12,32,1,22,0,36,16,21,0,11,32,0,45,21,0,54,0,20,0,49,0,10,26,20,0,58,1,14,27,27,16,6,34,0,43,0,8,16,0,2,0,53,0,50,0,0,26,27,16,0,22,0,65,17,0,44,0,1,26,0,66,17,0,35,33,0,41,50,6,32,1,8,0,35,32,0,27,17,0,41,34,0,41,17,0,41,0,67,0,22,34,0,45,17,17,0,36,0,55,0,22,0,53,32,0,4,27,27,16,33,0,46,48,6,34,0,18,0,29,16,0,50,0,0,26,16,0,35,34,0,23,0,32,16,0,22,34,0,20,17,17,0,22,34,0,29,0,12,32,0,31,17,0,32,16,0,35,0,53,0,34,27,34,0,35,17,17,33,0,47,48,6,34,0,39,34,0,21,34,0,24,11,3,0,22,34,0,46,17,33,0,48,48,6,32,0,48,0,46,0,37,26,16,33,0,49,48,0,44,0,46,0,32,0,53,0,50,0,6,26,0,29,0,61,21,0,12,0,20,21,27,26,26,33,0,48,50,6,32,0,48,0,36,0,53,0,66,27,0,55,34,0,3,27,16,33,0,48,49,6,32,1,23,32,1,25,32,0,27,17,0,10,32,0,30,17,0,8,16,33,0,50,48,6,34,0,44,0,10,32,0,50,17,0,44,0,32,26,33,0,26,50,6,34,0,30,0,28,0,54,0,12,27,16,0,10,32,0,50,17,0,44,0,32,26,33,0,25,50,6,32,0,27,0,35,0,53,34,0,47,27,0,55,32,0,48,0,46,0,13,26,16,33,0,51,48,0,29,32,1,35,17,0,50,0,0,26,16,0,0,34,0,49,17,0,22,16,0,26,0,53,0,13,27,34,0,4,17,27,16,0,32,34,0,50,0,10,32,0,31,17,17,33,0,27,49,6,32,1,13,0,36,0,54,0,1,27,0,2,32,1,25,21,32,0,27,17,0,1,33,0,27,50,6,32,1,26,0,14,32,0,27,17,0,44,0,22,26,0,13,0,22,21,0,66,17,0,32,16,0,26,0,66,17,0,26,0,61,17,33,0,52,48,0,46,0,66,26,16,0,50,0,13,26,16,33,0,53,48,6,32,1,16,0,36,16,0,0,0,71,0,68,0,75,11,3,17,33,0,54,48,6,32,0,27,0,35,32,0,53,0,1,32,0,52,17,17,0,0,0,53,32,0,53,27,0,44,0,39,26,34,0,54,21,0,10,32,1,14,0,54,32,1,25,27,21,16,0,28,0,54,0,10,27,16,0,12,34,0,53,17,0,44,0,32,26,34,0,52,17,33,0,55,48,6,32,1,26,0,13,32,0,27,17,0,35,0,53,34,0,55,27,0,55,0,46,0,66,26,27,16,0,44,1,15,26,33,0,27,50,6,34,0,51,0,25,0,67,17,0,49,0,0,26,16,0,24,32,1,35,17,32,1,25,32,0,27,17,0,10,32,1,29,0,14,32,0,27,17,17,33,0,56,48,6,0,65,0,22,32,1,36,17,0,35,32,0,27,0,5,32,1,35,17,17,0,32,0,53,34,0,56,27,0,55,34,0,40,27,16,33,0,57,48,6,32,0,27,0,15,0,53,0,0,0,53,0,71,27,27,0,0,0,68,21,0,2,0,68,0,54,0,24,27,32,1,25,0,20,21,21,32,1,19,0,36,16,17,0,0,33,0,27,50,6,32,0,27,0,14,0,2,0,59,21,0,0,0,11,21,32,1,34,17,0,1,33,0,27,50,6,34,0,27,34,0,57,34,0,48,32,0,26,32,0,25,11,5,7,1,16,33,0,3,48,6,32,1,31,32,1,30,0,53,0,123,27,0,124,32,1,8,0,54,0,35,27,0,125,11,4,26,33,0,4,48,6,32,1,20,0,49,0,27,0,54,0,0,27,26,16,0,22,0,126,0,49,0,1,26,16,0,0,32,1,22,0,36,16,17,17,0,46,32,0,1,0,54,0,14,27,26,16,33,0,5,33,0,6,33,0,7,33,0,8,33,0,9,12,5,48,6,32,1,22,0,36,16,0,11,32,0,1,17,0,10,32,0,5,17,0,8,16,0,10,32,1,29,0,14,32,0,1,17,17,32,0,2,32,0,3,32,0,1,0,54,0,32,27,0,51,34,0,4,27,27,16,6,32,0,1,0,14,0,65,17,33,0,10,48,0,10,32,0,5,17,33,0,11,48,0,10,32,0,6,17,33,0,12,48,6,32,0,11,0,10,32,0,7,17,0,8,16,33,0,13,48,6,32,0,11,0,29,16,0,12,32,0,7,17,32,0,2,32,0,3,0,127,27,16,6,32,0,12,0,10,32,0,7,17,0,9,32,0,12,0,28,0,66,17,17,32,0,2,32,0,3,0,128,27,16,6,32,0,1,0,32,32,0,12,17,0,11,0,53,0,29,27,0,10,0,14,0,53,0,65,27,21,16,0,8,16,32,0,2,0,32,34,0,12,21,32,0,3,0,129,27,16,6,32,0,5,0,29,16,0,12,32,0,7,17,0,10,32,0,10,17,0,28,0,10,34,0,5,0,28,16,0,9,32,0,8,17,21,0,9,0,29,21,0,66,17,0,12,32,0,9,0,10,34,0,8,17,17,34,0,2,34,0,3,0,130,27,16,6,32,0,13,0,9,0,53,0,8,32,1,39,0,52,0,12,27,32,1,21,0,36,16,0,13,32,0,1,17,0,11,32,0,6,17,21,0,15,0,28,21,27,16,33,0,14,48,0,9,0,53,0,50,0,0,26,32,1,37,0,1,0,20,21,0,8,21,0,16,0,76,21,27,16,33,0,15,48,6,32,1,20,0,36,16,0,0,0,66,17,0,1,34,0,1,17,0,2,32,0,15,17,0,32,32,0,6,0,8,16,17,0,44,0,35,26,0,59,0,27,16,0,22,0,77,0,66,11,2,17,0,22,0,61,17,17,33,0,16,48,6,32,0,16,0,50,0,0,0,53,0,59,0,54,0,2,27,27,0,2,0,15,0,53,0,65,27,21,26,0,65,17,0,32,34,0,16,0,15,0,65,17,0,28,0,54,0,12,27,16,17,33,0,17,48,6,34,0,7,0,29,16,0,32,34,0,13,0,29,0,54,0,12,27,16,33,0,18,48,17,0,44,0,35,26,0,66,0,61,11,2,17,0,2,33,0,17,50,6,34,0,10,0,32,34,0,11,17,33,0,19,48,6,34,0,14,0,28,0,54,0,12,27,0,32,20,0,52,0,1,0,53,34,0,6,0,28,16,32,1,39,16,0,54,0,35,27,27,0,20,0,2,0,11,21,0,1,0,53,0,29,27,21,0,1,0,1,21,27,34,0,15,17,0,32,32,0,19,17,33,0,20,48,6,32,0,19,0,8,16,0,2,32,0,17,17,0,28,16,0,32,32,0,19,17,0,44,0,1,26,34,0,20,17,33,0,21,48,0,7,16,0,4,0,59,17,33,0,22,48,6,0,66,0,78,11,2,0,35,34,0,9,0,32,34,0,18,17,17,0,2,34,0,17,17,0,32,34,0,19,17,0,32,0,53,32,0,21,0,11,0,65,17,27,0,55,0,2,27,32,0,22,17,0,32,0,53,34,0,21,0,12,0,65,17,27,0,55,0,44,0,3,26,27,34,0,22,17,7,34,0,2,33,0,3,33,0,4,33,0,5,33,0,6,33,0,7,12,5,48,6,34,0,4,0,13,16,33,0,8,48,6,1,17,33,0,9,48,6,1,18,33,0,10,48,6,32,0,1,0,13,16,0,11,0,65,17,0,42,0,132,17,6,32,1,16,32,1,25,32,0,1,17,0,2,32,0,3,0,2,0,67,17,0,1,0,61,17,17,33,0,11,48,0,50,0,0,26,16,33,0,12,48,0,33,16,33,0,13,48,6,0,61,0,14,32,0,3,17,0,35,32,0,13,17,33,0,14,48,6,32,0,1,0,35,32,0,13,17,33,0,15,48,0,32,0,53,0,65,0,54,0,11,27,27,0,44,0,1,26,0,66,21,0,17,0,32,0,53,0,65,0,54,0,12,27,27,21,32,0,11,0,35,32,0,13,17,17,0,8,0,58,32,0,1,0,51,34,0,9,27,27,16,6,34,0,12,0,36,32,0,13,0,36,16,17,0,12,0,65,17,32,0,13,0,25,0,66,21,32,0,10,0,133,27,16,6,32,0,15,0,32,32,0,14,17,33,0,16,48,0,14,0,53,32,1,26,27,0,10,0,14,0,53,32,1,27,27,21,0,9,0,53,0,29,27,0,14,0,53,32,1,16,0,36,16,27,21,16,32,0,13,0,32,32,0,14,21,32,0,10,0,134,27,16,6,0,14,0,53,0,67,0,54,0,0,27,27,0,10,0,14,21,33,0,17,48,6,32,0,16,0,32,0,53,0,13,0,53,32,1,26,27,27,16,0,14,0,53,32,1,27,27,0,9,0,53,0,29,27,32,0,17,0,53,32,1,16,0,36,16,0,0,0,70,17,27,21,16,32,0,13,0,32,32,0,14,21,0,32,34,0,16,0,13,32,1,26,21,21,32,0,10,0,135,27,16,6,34,0,14,0,22,0,66,17,0,9,0,53,0,28,0,53,0,66,27,27,16,1,19,16,6,0,70,0,14,32,0,3,17,33,0,18,48,0,10,0,53,0,28,27,16,33,0,19,48,6,32,0,11,0,0,32,0,3,17,0,15,0,65,17,0,11,32,0,18,17,0,28,16,33,0,20,48,0,12,32,1,15,0,36,16,0,14,32,0,1,17,17,0,1,33,0,3,50,6,32,0,3,0,15,0,65,17,0,11,32,0,18,17,0,29,16,0,9,32,1,15,0,36,16,0,0,0,67,17,0,14,32,0,1,17,0,10,34,0,20,17,17,0,12,32,0,3,0,73,0,54,0,15,27,0,9,0,11,0,53,0,80,27,21,16,17,0,13,0,27,20,32,0,10,0,137,27,16,6,32,1,27,0,14,32,0,1,17,0,9,32,0,3,0,14,0,80,17,0,29,16,17,0,13,0,27,20,32,0,10,0,138,27,16,6,32,1,34,32,0,8,11,2,32,1,25,32,0,1,17,0,28,16,0,12,32,0,18,17,0,13,0,27,20,32,0,10,0,139,27,16,6,0,73,0,14,32,0,3,17,0,10,0,53,0,28,27,16,33,0,21,48,0,35,0,53,32,0,13,0,35,0,53,32,0,19,0,54,0,35,27,0,33,20,27,16,27,0,55,0,29,27,16,33,0,22,48,6,32,0,22,0,10,32,0,21,17,0,8,16,33,0,23,48,6,32,1,16,0,36,16,0,0,0,66,17,0,14,32,0,1,17,33,0,24,48,6,32,1,18,0,36,16,0,14,32,0,1,17,0,2,0,67,17,0,0,32,1,28,0,36,16,0,0,0,67,17,0,14,32,0,1,17,17,0,35,32,0,24,0,8,16,32,1,38,16,17,33,0,25,48,6,0,65,33,0,26,48,6,32,0,25,0,13,16,0,27,16,33,0,27,48,6,1,20,33,0,28,48,6,32,0,19,0,10,32,0,21,17,33,0,29,48,0,35,32,0,13,17,0,33,16,0,44,0,35,26,33,0,13,50,6,32,0,3,0,13,16,0,27,16,0,35,0,53,32,0,13,27,0,55,0,29,0,53,0,13,27,27,16,33,0,30,48,6,0,61,0,14,32,0,3,17,0,10,34,0,29,17,0,35,32,0,13,17,0,22,0,66,17,0,0,0,53,0,50,0,0,26,27,16,0,33,16,0,44,0,35,26,0,8,0,33,0,54,0,44,0,35,26,27,21,0,35,0,53,0,33,27,0,19,21,32,0,13,0,22,0,61,17,17,0,26,0,61,17,0,50,0,0,26,16,0,33,16,33,0,31,48,6,32,1,16,0,36,16,0,0,0,67,17,0,67,11,2,32,1,25,32,0,1,17,0,2,32,0,11,17,0,35,32,0,31,17,33,0,32,48,0,50,0,0,26,16,33,0,33,48,0,33,16,33,0,34,48,6,32,0,34,0,44,0,35,26,33,0,31,50,6,32,0,34,0,44,0,35,26,33,0,33,50,6,32,0,34,0,44,0,35,26,33,0,32,50,6,32,0,31,0,44,0,35,26,33,0,1,50,6,32,0,31,0,44,0,35,26,33,0,18,50,6,32,0,31,0,44,0,35,26,33,0,5,50,6,32,0,31,0,44,0,35,26,33,0,6,50,6,32,0,11,0,35,32,0,31,17,0,44,0,1,26,32,0,32,17,33,0,11,49,0,50,0,0,26,16,0,33,16,33,0,13,49,6,34,0,11,0,35,32,0,13,17,0,12,32,0,13,0,54,0,32,27,0,52,0,24,27,0,11,21,0,65,17,33,0,35,48,6,32,0,18,0,10,0,53,0,28,27,16,0,35,32,0,13,17,0,33,16,0,44,0,35,26,33,0,13,50,6,32,0,31,0,35,32,0,13,17,33,0,36,48,6,32,0,21,0,1,32,0,22,17,0,35,32,0,36,17,0,12,0,32,0,52,0,1,27,0,11,21,0,65,17,0,44,0,3,26,0,67,17,0,0,0,66,17,33,0,37,48,6,32,1,16,0,36,16,0,0,0,68,17,0,44,32,0,17,26,32,0,1,17,0,35,32,0,13,17,0,32,16,33,0,38,48,6,0,65,0,12,32,0,32,17,33,0,39,48,6,0,65,0,11,34,0,32,17,0,32,16,33,0,40,48,6,32,0,39,0,32,16,32,0,40,11,2,0,46,0,22,26,33,0,35,50,6,32,0,21,0,35,32,0,36,17,0,33,16,33,0,41,48,0,44,0,35,26,33,0,13,50,6,32,0,31,0,35,32,0,13,17,33,0,36,49,6,32,0,13,0,33,16,33,0,42,48,6,32,1,14,0,36,16,0,14,32,0,1,17,33,0,43,48,6,32,1,14,0,36,16,0,0,0,66,17,0,14,32,0,1,17,33,0,44,48,6,32,1,27,0,14,32,0,1,17,33,0,45,48,6,32,0,45,0,10,32,0,44,17,0,10,32,0,43,17,0,11,32,0,39,0,50,0,10,26,16,17,0,13,0,27,20,32,0,10,0,140,27,16,6,32,0,44,0,10,32,0,39,17,33,0,46,48,0,50,0,0,26,16,33,0,47,48,6,0,20,32,1,40,0,51,0,8,27,32,0,46,21,33,0,48,48,6,32,0,43,32,0,48,16,33,0,49,48,0,10,34,0,45,32,0,48,16,17,33,0,50,48,6,32,0,44,0,32,32,0,46,17,33,0,51,48,0,8,16,0,22,0,66,17,33,0,52,48,6,32,0,51,0,28,0,54,0,10,27,16,0,22,0,65,17,33,0,53,48,6,32,0,50,0,26,0,9,32,0,51,21,0,11,0,26,0,53,0,1,27,21,0,66,17,32,0,46,0,32,20,32,0,10,0,141,27,16,6,32,0,50,0,26,0,61,17,0,12,32,0,51,17,0,9,0,53,0,29,27,16,32,0,46,0,32,20,32,0,10,0,142,27,16,6,34,0,44,0,32,16,0,22,32,0,40,17,0,35,34,0,51,0,28,16,0,33,16,0,33,16,17,33,0,54,48,6,32,0,43,0,10,32,0,46,17,0,35,0,53,32,0,13,0,30,16,27,0,55,32,1,38,0,54,0,44,0,35,26,27,27,34,0,43,17,33,0,55,48,0,32,16,33,0,56,48,6,32,0,1,0,35,32,0,56,17,0,37,0,1,0,19,0,51,0,13,27,21,32,1,33,17,33,0,57,48,0,14,0,65,17,33,0,58,48,6,32,0,57,0,14,0,53,0,67,27,0,9,32,0,58,0,29,0,66,17,21,0,10,0,16,0,53,0,29,27,21,16,0,11,32,0,58,17,32,0,56,32,0,10,0,143,27,16,6,32,0,57,0,29,16,0,32,34,0,58,17,33,0,59,48,6,34,0,57,0,14,0,65,17,0,44,0,32,26,33,0,56,50,6,32,0,56,0,44,0,35,26,32,0,31,17,32,0,3,0,54,0,35,27,0,2,32,0,23,0,54,0,35,27,21,16,33,0,60,48,6,32,0,60,0,14,0,61,17,33,0,61,48,0,28,0,0,0,29,0,53,0,66,27,21,16,33,0,62,48,0,14,0,67,17,33,0,63,48,6,32,0,55,0,35,32,0,56,0,32,32,0,61,17,0,0,0,66,17,17,32,0,56,0,32,32,0,61,21,32,0,10,0,144,27,16,6,32,0,60,0,15,0,67,17,33,0,64,48,0,11,32,0,63,17,0,20,0,9,0,71,0,14,32,0,60,17,21,0,28,20,0,10,0,29,21,16,33,0,65,48,6,34,0,64,0,10,32,0,61,17,0,9,32,0,65,17,0,10,0,71,0,14,32,0,60,17,0,9,32,0,59,17,17,32,0,56,32,0,10,0,145,27,16,6,34,0,62,0,14,0,66,17,0,9,32,0,60,0,14,0,65,17,17,0,11,32,0,65,17,33,0,66,48,0,10,32,0,65,17,0,8,16,33,0,67,48,6,32,0,61,0,32,32,0,67,17,0,14,0,53,0,29,0,53,0,66,27,27,16,32,0,56,0,32,32,0,67,21,32,0,10,0,146,27,16,6,32,0,22,0,35,32,0,31,17,0,8,16,0,2,32,0,1,17,0,35,32,0,56,17,33,0,68,48,0,33,32,0,8,0,22,32,1,28,17,0,50,0,0,26,16,17,0,44,0,1,26,0,66,17,0,7,0,71,17,33,0,69,48,6,32,0,69,0,13,0,66,17,0,9,32,0,60,0,14,0,65,17,17,0,9,32,0,63,17,33,0,70,48,0,12,32,0,67,17,33,0,71,48,6,32,0,70,0,0,33,0,60,50,6,32,0,70,0,12,33,0,63,50,6,32,0,60,0,5,0,67,17,0,44,0,1,26,0,66,17,0,2,0,71,17,0,2,32,0,71,17,0,0,32,0,60,0,14,0,71,17,0,28,16,0,0,0,70,17,0,2,32,0,65,17,17,0,0,32,0,61,0,28,16,0,0,0,66,17,0,2,32,0,66,17,0,0,34,0,70,17,17,33,0,72,48,6,32,1,28,0,36,16,0,0,32,0,72,17,0,13,34,0,68,17,0,9,32,0,69,0,14,0,65,17,17,32,0,56,32,0,10,0,147,27,16,6,32,0,60,0,14,0,65,17,0,9,32,0,63,17,0,10,32,0,61,17,0,8,16,0,2,33,0,69,50,6,32,0,61,0,12,33,0,67,50,6,32,0,67,0,44,0,32,26,33,0,60,50,6,32,0,66,0,32,32,0,61,0,29,0,66,17,17,33,0,73,48,6,34,0,65,0,2,32,0,59,17,0,29,0,54,0,1,27,16,0,1,33,0,59,50,6,32,0,59,0,2,16,0,11,32,0,67,17,32,0,56,32,0,10,0,143,27,16,6,0,65,0,22,32,0,73,17,0,35,0,53,0,50,0,0,26,27,32,0,61,17,0,12,32,0,66,17,32,0,56,32,0,10,0,148,27,16,6,0,67,0,13,32,0,69,17,0,12,34,0,71,17,32,0,56,32,0,10,0,149,27,16,6,32,0,67,0,44,0,32,26,33,0,59,50,6,32,0,60,0,14,0,66,17,0,10,33,0,73,50,6,32,0,59,0,2,16,0,11,32,0,73,17,32,0,56,0,32,32,0,67,21,32,0,10,0,150,27,16,6,32,0,69,0,13,0,65,17,33,0,74,48,0,0,0,66,17,0,2,34,0,66,17,0,6,32,0,63,17,0,29,16,0,32,32,0,61,17,33,0,75,48,6,32,0,59,0,14,0,67,17,33,0,76,48,0,9,32,0,75,0,14,0,65,17,17,32,0,56,32,0,10,0,151,27,16,6,32,0,52,0,28,0,11,0,20,21,0,66,17,0,11,32,0,50,0,29,16,17,0,28,0,54,0,1,27,16,0,0,0,66,17,0,32,0,53,32,0,49,27,0,55,34,0,76,0,2,0,67,17,0,6,34,0,75,17,27,16,33,0,77,48,6,34,0,67,0,44,0,32,26,33,0,63,50,6,32,0,55,0,35,0,53,32,0,56,27,0,55,32,0,74,0,8,16,27,16,33,0,78,48,6,32,0,56,0,32,32,0,74,17,0,44,0,35,26,32,0,42,17,33,0,79,48,6,32,0,69,0,32,32,0,74,17,0,14,0,67,17,33,0,80,48,6,32,1,28,0,36,16,0,1,32,0,1,17,0,35,0,53,34,0,56,27,0,55,0,1,0,53,32,0,72,27,0,2,34,0,69,0,11,0,65,17,21,0,0,0,20,21,27,16,0,33,0,65,0,71,0,68,0,74,11,4,17,33,0,81,48,6,32,1,28,0,36,16,0,0,0,71,17,0,14,32,0,1,17,0,9,0,71,0,14,32,0,3,17,0,35,32,0,31,17,17,0,0,33,0,81,50,6,34,0,81,0,54,0,14,27,32,1,40,0,51,0,8,27,34,0,39,21,0,35,32,0,52,0,50,0,0,26,0,61,17,21,33,0,82,48,6,32,1,28,32,1,25,32,0,1,17,0,11,32,0,78,17,0,32,16,33,0,83,48,6,0,66,32,0,82,16,33,0,84,48,6,0,71,34,0,82,0,52,0,20,0,2,0,67,21,0,6,0,19,21,27,0,67,17,33,0,85,48,0,0,0,53,0,11,0,53,0,65,27,0,10,32,0,84,21,27,16,33,0,86,48,6,32,0,84,0,32,32,0,49,17,0,11,32,0,73,17,0,11,32,0,63,17,0,10,32,0,86,0,32,32,0,49,17,0,11,32,0,60,17,17,32,0,46,0,51,0,32,27,0,22,0,65,21,0,32,32,0,49,21,32,0,10,0,152,27,16,6,32,0,86,0,32,0,53,32,0,49,27,0,55,34,0,60,27,16,33,0,86,49,0,44,0,1,26,0,66,17,0,6,33,0,85,50,6,32,0,84,0,32,0,53,32,0,49,27,0,55,0,6,0,53,34,0,73,27,27,16,33,0,84,49,6,32,0,86,0,36,16,0,11,0,65,17,32,0,1,0,51,1,21,27,0,32,20,32,0,10,0,153,27,16,6,32,0,84,0,12,32,0,53,17,0,11,34,0,50,0,32,0,53,32,0,49,27,0,55,34,0,63,0,8,16,27,16,0,10,0,53,0,29,27,16,17,0,26,0,66,17,32,0,46,0,32,20,32,0,10,0,154,27,16,6,32,0,84,0,2,0,71,17,0,0,0,65,0,67,0,71,11,3,0,35,32,0,85,17,17,33,0,87,48,6,32,0,84,0,32,32,0,49,17,0,8,16,0,2,0,71,17,0,35,34,0,61,0,50,0,0,26,16,0,29,16,17,0,1,33,0,72,50,6,32,0,3,0,35,0,53,32,0,31,0,35,32,0,40,17,27,0,55,34,0,86,0,32,32,0,52,17,0,26,0,66,17,27,16,0,2,32,0,23,17,0,44,0,1,26,32,0,21,17,33,0,3,49,6,32,0,23,0,9,34,0,24,17,33,0,88,48,6,0,65,0,11,32,0,3,17,0,44,0,22,26,0,66,17,0,35,32,0,30,17,33,0,89,48,0,29,16,0,9,32,0,88,17,33,0,90,48,6,32,0,3,0,35,32,0,90,0,8,16,32,1,38,16,17,0,2,32,0,90,17,0,0,32,0,3,17,0,20,0,15,0,67,21,0,11,32,0,89,21,0,1,0,20,21,0,6,0,20,0,14,0,71,21,0,2,34,0,89,0,0,0,66,17,21,0,44,0,22,26,0,65,21,0,35,34,0,30,21,21,16,33,0,91,48,6,32,0,91,0,35,0,0,0,6,0,66,21,0,5,0,20,21,34,0,90,0,8,16,0,50,0,0,26,16,0,54,0,20,0,1,0,35,21,27,21,0,65,0,14,32,0,91,17,0,9,32,0,88,17,0,8,16,32,1,38,16,17,0,6,33,0,91,50,6,32,0,91,0,29,16,0,2,34,0,88,17,0,0,33,0,3,50,6,32,0,25,0,14,0,66,17,0,9,32,0,91,0,13,0,65,17,17,0,10,33,0,26,50,0,8,16,0,2,33,0,25,50,6,32,0,25,0,1,32,0,25,0,14,0,65,17,0,2,32,0,91,17,17,33,0,91,49,6,0,61,0,14,32,0,3,17,0,29,0,66,17,0,9,0,80,0,14,32,0,3,17,17,0,1,33,0,3,50,6,0,65,0,14,32,0,3,17,0,29,16,0,12,0,70,0,14,32,0,3,17,17,32,0,31,0,51,0,33,27,32,0,10,0,155,27,16,6,34,0,19,0,20,0,1,0,8,0,54,0,2,27,21,33,0,3,50,6,32,1,34,0,1,32,0,1,17,33,0,92,48,6,34,0,35,0,49,1,22,26,16,6,32,0,13,0,44,0,35,26,33,0,1,50,6,34,0,55,0,35,32,0,13,17,33,0,93,48,6,32,0,36,0,44,0,35,26,33,0,3,50,6,32,0,36,0,44,0,35,26,33,0,91,50,6,34,0,21,0,12,34,0,22,17,0,35,32,0,36,17,0,32,16,0,22,34,0,41,0,33,16,0,35,32,0,38,17,17,33,0,38,49,6,32,0,3,0,72,0,54,0,15,27,0,9,0,11,0,53,0,81,27,21,16,33,0,94,48,6,0,65,0,11,32,0,3,17,0,11,32,0,94,17,33,0,95,48,6,32,0,95,0,29,16,32,1,38,16,0,44,0,35,26,32,0,91,17,33,0,96,48,0,15,0,66,17,33,0,97,48,6,32,0,91,0,1,16,0,6,0,65,17,33,0,98,48,6,32,0,96,0,1,16,0,6,0,65,17,33,0,99,48,6,32,0,13,33,0,27,49,6,32,0,36,0,44,0,35,26,33,0,26,50,6,32,0,94,0,2,32,0,99,17,32,0,28,0,156,26,16,6,32,1,27,0,14,32,0,1,17,0,2,32,0,99,17,32,0,28,0,157,26,16,6,0,67,0,16,32,0,3,17,0,9,0,67,0,11,32,0,96,17,17,33,0,100,48,0,11,32,0,93,17,0,32,16,0,30,16,33,0,101,48,6,0,71,0,14,32,0,3,17,33,0,102,48,0,9,32,0,100,17,0,28,16,0,10,32,0,100,17,33,0,103,48,6,0,67,0,27,16,0,39,32,0,3,17,0,10,32,0,103,17,0,16,32,0,102,17,0,2,0,67,17,0,6,32,0,98,17,0,29,0,2,34,0,102,21,0,6,0,28,21,0,67,17,0,2,32,0,100,17,32,0,28,0,158,26,16,6,32,1,26,0,14,32,0,1,17,33,0,104,48,6,32,1,16,0,36,16,0,0,0,67,17,32,1,14,0,36,16,0,0,0,66,17,11,2,0,39,32,0,1,17,33,0,105,48,6,32,1,16,0,36,16,0,0,0,70,17,0,44,34,0,17,26,32,0,1,17,33,0,106,48,32,1,38,0,52,0,11,27,32,0,105,17,0,9,32,0,104,17,33,0,107,48,6,0,65,0,14,32,0,3,17,0,11,0,53,0,10,0,53,0,29,27,27,32,0,103,17,0,28,0,54,0,9,27,16,32,0,13,32,0,10,0,159,27,16,6,32,1,15,0,36,16,0,0,0,67,17,0,14,32,0,1,17,33,0,108,48,6,0,66,0,16,34,0,91,17,0,28,16,0,9,32,0,108,17,0,11,32,0,97,17,33,0,109,48,6,32,0,95,0,29,0,66,17,0,9,33,0,108,50,6,32,0,108,0,11,32,0,109,17,32,0,13,32,0,10,0,160,27,16,6,32,0,109,0,10,32,0,103,17,0,8,16,0,30,0,55,32,1,37,0,1,0,19,21,0,53,0,13,0,51,0,27,27,27,27,16,33,0,110,48,6,32,0,94,0,32,16,33,0,111,48,0,0,0,53,32,0,110,0,54,0,35,27,27,16,0,0,0,66,17,33,0,112,48,6,32,0,3,0,35,32,0,111,17,0,13,0,80,17,33,0,113,48,6,32,0,3,0,35,32,0,112,17,33,0,114,48,6,32,0,96,0,35,32,0,112,17,0,6,0,65,17,0,13,32,0,114,17,0,9,32,0,113,17,32,0,13,0,35,32,0,112,21,32,0,10,0,161,27,16,6,32,0,1,0,35,32,0,111,17,0,44,0,1,26,32,1,15,0,36,16,17,0,0,32,0,109,0,35,32,0,111,17,17,0,0,34,0,114,0,15,0,65,17,17,0,0,32,0,113,17,33,0,115,48,6,32,0,79,0,22,33,0,112,50,6,32,0,1,0,46,0,65,26,16,0,35,0,53,32,0,112,27,0,55,32,0,79,0,46,0,74,26,16,0,22,32,0,115,17,27,16,0,1,0,53,0,28,27,16,33,0,116,48,6,32,0,116,0,35,32,0,42,17,0,2,0,53,0,50,0,0,26,0,14,0,65,21,0,10,0,53,0,29,0,53,0,66,27,27,20,27,16,0,50,0,0,26,16,0,29,16,33,0,116,49,0,35,32,0,13,17,33,0,117,48,0,2,16,33,0,118,48,6,32,0,98,0,14,0,67,17,0,9,32,0,118,17,33,0,119,48,0,9,32,1,18,0,36,16,0,14,32,0,1,17,17,0,32,16,33,0,120,48,6,32,0,107,0,10,32,0,106,17,0,29,16,0,10,34,0,23,0,8,16,0,35,34,0,36,17,17,0,2,32,0,98,17,0,2,32,0,119,0,8,16,17,34,0,28,0,162,26,16,6,32,0,116,0,14,0,74,17,33,0,121,48,0,2,0,71,17,0,1,33,0,116,50,6,32,0,98,0,14,0,66,17,0,2,32,0,118,17,0,6,33,0,26,50,6,32,1,15,0,36,16,0,44,0,1,26,32,1,34,17,0,14,32,0,92,17,0,11,32,0,116,17,32,0,48,16,33,0,122,48,6,32,0,26,0,35,32,0,42,17,34,0,48,16,33,0,123,48,6,32,0,31,0,35,32,0,54,17,0,22,0,65,17,0,44,0,1,26,0,66,17,1,23,16,6,32,0,123,33,0,124,48,6,32,0,52,32,1,39,0,52,0,16,27,33,0,123,50,6,0,65,0,14,32,0,77,17,0,9,32,0,123,17,0,26,0,66,17,32,0,46,0,32,20,32,0,10,0,164,0,154,11,2,0,56,0,11,0,53,34,0,124,0,26,0,66,17,27,0,49,0,10,26,20,27,27,16,6,32,0,123,0,2,0,67,17,0,6,33,0,77,50,6,32,0,84,0,2,33,0,77,50,6,32,0,77,0,14,0,67,17,0,35,32,0,47,17,0,35,32,0,13,17,33,0,125,48,6,32,0,125,0,14,0,1,0,19,21,33,0,98,50,6,34,0,125,0,14,0,1,0,19,21,33,0,99,50,6,32,1,34,0,1,32,0,1,17,32,0,8,0,54,0,11,27,0,9,0,15,0,53,0,82,27,21,16,33,0,126,48,6,32,1,34,0,0,32,0,8,17,0,16,32,0,1,17,0,9,34,0,121,0,35,32,0,13,17,17,33,0,127,48,0,32,16,33,0,128,48,6,32,1,16,32,1,25,0,11,0,36,0,0,0,71,21,0,54,0,14,27,21,32,0,1,17,0,10,32,1,17,0,36,16,0,14,32,0,1,17,0,28,16,0,12,32,0,95,17,17,0,10,34,0,127,17,0,10,34,0,126,17,0,11,0,65,0,16,32,0,3,17,0,9,32,0,118,17,0,28,16,0,11,32,0,95,17,0,11,32,0,93,17,17,33,0,129,48,6,32,0,118,0,11,34,0,119,0,10,34,0,129,17,0,10,32,0,94,17,17,32,0,13,32,0,10,0,165,27,16,6,32,0,118,0,35,32,0,111,17,0,11,0,67,0,14,34,0,115,17,0,9,34,0,117,0,35,32,0,111,17,0,13,0,68,17,17,17,32,0,13,0,35,32,0,111,21,32,0,10,0,166,27,16,6,32,0,118,0,12,0,53,0,29,27,16,0,9,32,0,3,0,15,0,65,17,17,0,9,32,0,96,0,11,0,65,17,17,0,11,32,0,93,17,32,0,13,32,0,10,0,167,27,16,6,32,0,118,0,35,32,0,111,17,33,0,130,48,0,12,33,0,113,50,6,32,0,111,0,32,34,0,130,17,33,0,131,48,6,32,0,113,0,44,0,32,26,33,0,111,50,6,32,0,79,0,46,0,66,26,16,0,22,34,0,113,17,0,44,0,32,26,33,0,112,50,6,34,0,18,0,29,16,33,0,132,48,0,32,16,33,0,133,48,6,32,0,92,32,0,8,0,54,0,11,27,0,9,0,15,0,53,0,65,27,21,16,0,11,34,0,94,0,9,32,0,118,17,0,28,16,0,35,32,0,42,17,0,10,34,0,132,17,0,10,34,0,78,17,17,0,32,16,33,0,134,48,6,32,0,116,0,35,32,0,83,17,33,0,135,48,0,11,0,65,17,33,0,136,48,6,0,67,0,67,11,2,32,1,25,34,0,116,0,35,32,0,134,17,33,0,137,48,17,33,0,138,48,6,0,70,0,11,34,0,135,17,0,9,32,0,136,17,32,0,83,32,0,10,0,168,27,16,6,32,0,47,0,35,32,0,134,17,33,0,139,48,6,32,0,92,0,35,32,0,134,17,33,0,140,48,6,32,0,7,0,13,16,0,11,32,0,140,17,0,9,32,0,139,0,14,0,65,17,17,0,9,32,0,138,17,33,0,141,48,6,32,0,7,0,35,32,0,140,0,32,32,0,141,17,17,33,0,142,48,0,14,0,65,17,32,0,134,0,32,32,0,141,21,32,0,10,0,169,27,16,6,32,0,138,0,32,0,53,34,0,141,27,0,55,34,0,142,0,15,0,65,17,27,16,33,0,138,49,6,0,65,0,15,32,0,7,17,0,32,16,33,0,143,48,0,46,0,65,26,16,33,0,144,48,6,32,0,140,0,32,32,0,138,17,33,0,145,48,0,22,32,0,143,17,0,41,32,0,87,0,13,16,0,22,32,0,139,0,32,32,0,138,17,33,0,146,48,17,0,22,32,0,144,17,33,0,147,48,17,33,0,148,48,6,32,0,34,0,35,34,0,54,17,0,44,0,1,26,0,66,17,0,22,32,0,1,0,13,16,17,0,35,32,0,146,17,0,22,34,0,34,0,32,34,0,46,17,0,22,0,61,17,0,35,34,0,139,17,0,0,32,0,137,0,14,0,66,17,17,17,33,0,149,48,6,32,0,149,0,33,16,0,35,0,53,32,0,145,0,22,32,0,140,17,33,0,150,48,0,54,0,35,27,0,33,20,27,16,33,0,151,48,6,32,0,151,0,32,0,53,0,15,0,53,32,0,138,0,13,16,27,27,16,1,24,16,6,32,0,151,0,35,34,0,145,0,46,0,61,26,16,0,22,32,0,138,17,0,35,32,0,151,17,0,50,0,0,26,16,33,0,152,48,0,33,16,17,0,32,0,53,32,0,138,0,13,16,0,54,0,11,27,27,16,33,0,151,49,6,32,0,151,0,44,0,35,26,33,0,138,50,6,32,0,151,0,44,0,35,26,33,0,134,50,6,32,0,151,0,44,0,35,26,33,0,137,50,6,34,0,152,0,11,0,65,17,0,10,0,53,0,29,27,16,0,8,16,0,49,0,0,26,16,33,0,153,48,6,34,0,140,0,35,32,0,151,0,25,32,0,153,17,17,33,0,154,48,6,32,0,7,0,13,16,0,16,32,0,154,17,32,0,134,0,25,32,0,153,21,32,0,10,32,0,154,0,54,0,32,27,0,40,20,32,1,30,0,170,21,27,16,6,32,0,137,0,11,0,65,17,33,0,155,48,0,9,0,71,0,11,34,0,137,17,17,33,0,156,48,6,34,0,33,0,35,32,0,134,17,0,35,0,53,32,0,138,32,1,38,16,0,26,32,0,153,17,27,0,22,34,0,7,0,6,0,65,17,0,1,16,33,0,157,48,0,35,32,0,154,17,21,0,1,0,20,21,16,33,0,158,48,6,32,0,158,0,11,0,65,17,0,9,32,0,156,17,32,0,134,32,0,10,0,171,27,16,6,34,0,156,32,1,40,0,26,0,66,21,0,16,0,32,21,32,0,138,17,33,0,159,48,0,35,34,0,151,0,32,32,0,138,17,0,33,16,33,0,160,48,17,0,22,34,0,144,17,0,41,34,0,147,17,33,0,161,48,6,34,0,146,0,22,34,0,157,17,0,38,0,0,32,0,87,0,54,0,35,27,21,16,0,20,0,26,0,53,0,13,27,34,0,143,21,0,35,0,53,0,33,27,34,0,160,21,0,35,32,0,138,0,26,34,0,153,17,0,50,0,0,26,0,61,17,21,0,22,0,35,0,53,34,0,154,27,21,16,33,0,162,48,6,32,0,158,0,11,0,65,17,32,1,40,0,11,34,0,159,0,22,0,66,17,21,0,35,0,53,0,50,0,0,26,27,0,19,21,32,0,138,17,0,9,32,0,138,0,28,0,66,17,0,11,32,0,155,17,17,33,0,163,48,6,32,0,92,0,35,32,0,83,17,0,0,0,71,17,0,0,32,0,84,0,2,0,71,17,0,35,32,0,47,0,35,32,0,83,17,33,0,164,48,17,17,33,0,165,48,6,34,0,164,0,2,0,74,17,0,0,32,0,165,17,0,30,0,55,0,39,27,16,0,22,33,0,163,50,6,0,66,0,1,32,0,79,17,0,44,0,35,26,32,0,13,17,0,0,0,66,17,32,0,133,32,0,83,0,22,32,0,134,17,11,3,0,32,0,71,0,67,0,71,11,3,17,0,22,16,33,0,166,48,6,34,0,136,0,22,34,0,155,17,0,12,0,2,0,67,21,0,0,0,20,21,34,0,163,17,0,0,0,83,17,33,0,167,48,6,32,0,79,0,46,0,83,26,16,32,0,79,0,46,0,65,26,16,34,0,72,0,32,34,0,74,17,32,0,133,0,46,0,79,26,16,34,0,92,0,35,34,0,133,17,34,0,167,34,0,83,0,46,0,65,26,16,0,22,34,0,158,17,34,0,165,0,22,34,0,162,17,11,8,33,0,168,48,6,32,0,103,0,8,16,0,50,0,0,26,16,32,1,37,0,1,0,20,21,32,0,95,17,0,7,0,10,0,12,21,0,67,17,0,9,32,0,97,17,33,0,169,48,6,34,0,100,0,29,16,0,10,0,66,0,14,32,0,3,17,17,33,0,170,48,0,11,32,0,118,0,11,32,0,95,17,0,10,0,53,0,28,27,16,0,10,32,0,103,17,0,10,34,0,169,17,0,10,32,0,93,17,33,0,171,48,17,0,32,16,33,0,172,48,6,34,0,170,0,10,34,0,171,17,0,12,32,0,97,17,32,0,13,32,0,10,0,172,27,16,6,0,65,0,14,32,0,3,17,0,11,32,0,103,17,0,10,0,65,0,16,32,0,3,17,0,9,34,0,97,17,17,0,8,16,0,2,0,67,17,0,6,34,0,98,17,0,28,0,67,17,0,35,32,0,172,17,33,0,173,48,0,13,0,67,17,33,0,174,48,6,32,1,26,0,11,32,0,1,17,0,11,34,0,93,17,0,32,16,33,0,175,48,0,44,0,35,26,32,0,1,17,33,0,176,48,0,9,16,0,40,16,33,0,177,48,0,29,0,1,0,20,21,0,61,17,0,32,16,0,35,34,0,176,17,33,0,178,48,6,34,0,8,0,0,32,1,34,17,33,0,179,48,0,16,32,0,1,17,0,32,16,33,0,180,48,0,22,34,0,175,17,33,0,181,48,6,32,0,1,0,35,34,0,180,17,0,0,32,0,177,0,13,16,0,44,0,1,26,34,0,179,17,17,0,22,33,0,178,50,6,34,0,42,0,35,34,0,40,17,33,0,182,48,6,0,65,0,22,32,0,107,17,0,50,0,0,26,16,0,32,0,66,0,22,32,0,106,17,17,0,26,0,66,17,0,29,0,54,0,1,27,16,0,0,34,0,95,0,28,0,66,17,0,32,34,0,106,17,0,8,16,17,0,44,0,22,26,34,0,37,17,33,0,183,48,6,32,1,16,0,36,16,0,0,0,75,17,0,14,32,0,1,17,0,32,16,33,0,184,48,6,0,81,0,14,32,0,3,17,0,29,16,0,10,34,0,107,17,0,10,32,0,99,0,14,0,67,17,17,0,12,34,0,104,17,0,32,16,0,22,32,0,79,0,32,0,53,0,8,27,32,0,80,17,17,33,0,185,48,6,34,0,105,0,32,16,33,0,186,48,6,32,1,27,0,14,32,0,1,17,0,32,16,33,0,187,48,6,32,0,174,0,0,32,0,172,17,0,0,0,53,32,0,110,0,54,0,35,27,0,2,32,0,174,21,27,16,33,0,188,48,6,32,0,188,0,32,34,0,99,0,35,32,0,172,17,33,0,189,48,0,14,0,67,17,33,0,190,48,0,2,32,0,174,0,0,0,66,17,17,17,0,22,33,0,185,50,6,32,0,190,0,8,16,33,0,190,49,6,32,0,190,0,44,0,32,26,33,0,172,50,6,32,0,190,0,44,0,32,26,33,0,188,50,6,34,0,80,0,1,16,0,22,34,0,108,0,0,32,0,109,17,0,0,32,0,1,17,0,35,32,0,111,17,0,44,0,1,26,32,1,15,0,36,16,0,0,0,66,17,17,0,6,0,65,17,17,0,0,0,84,17,33,0,191,48,6,32,0,181,32,0,181,32,0,182,32,0,182,32,0,128,32,0,120,32,0,38,0,32,0,67,17,32,0,184,32,0,112,32,0,185,32,0,187,0,66,0,0,32,0,131,17,0,66,0,0,32,0,131,17,34,0,110,0,35,32,0,101,17,0,6,0,66,17,0,0,32,0,101,17,34,0,188,32,0,186,11,16,33,0,192,48,0,22,16,0,44,0,35,26,32,0,13,17,0,22,32,0,166,17,33,0,193,48,0,33,16,33,0,194,48,6,34,0,181,0,46,0,65,26,16,34,0,178,32,0,182,0,46,0,66,26,16,34,0,182,0,13,16,0,27,16,0,0,0,66,17,34,0,128,0,46,0,85,26,16,34,0,120,0,46,0,86,26,16,34,0,183,0,23,34,0,118,0,35,34,0,38,17,0,0,0,62,17,17,0,31,16,0,21,16,34,0,184,0,46,0,87,26,16,34,0,191,34,0,185,0,46,0,74,26,16,34,0,187,0,46,0,88,26,16,32,0,131,0,46,0,89,26,16,34,0,1,0,35,0,66,0,1,34,0,131,17,17,0,44,0,1,26,32,1,34,17,34,0,3,0,35,32,0,101,17,0,0,0,90,17,34,0,96,0,35,32,0,172,17,0,11,0,65,17,0,2,0,70,17,0,0,34,0,173,0,14,0,66,17,0,6,34,0,189,17,0,2,0,67,17,0,0,34,0,174,17,0,32,34,0,190,17,17,0,0,0,91,17,32,0,122,0,0,0,75,17,33,0,195,48,0,26,0,61,17,11,16,0,22,34,0,168,17,0,22,16,0,35,32,0,194,17,33,0,196,48,6,34,0,192,0,46,0,13,26,16,0,22,34,0,166,0,13,16,17,0,35,0,46,0,27,0,54,0,0,27,26,0,50,0,0,26,0,29,20,0,54,0,35,27,21,0,64,0,87,0,92,11,3,17,33,0,197,48,6,34,0,193,0,35,0,53,32,0,197,0,22,16,27,0,55,34,0,111,34,0,79,11,2,0,46,0,13,26,16,0,44,0,32,26,0,66,0,65,11,2,17,0,1,34,0,112,17,34,0,101,32,0,172,11,3,0,22,16,0,44,0,35,26,32,0,13,17,27,16,33,0,198,48,6,32,0,5,32,0,6,11,2,0,46,0,35,0,53,0,35,0,53,32,0,194,27,0,44,0,22,26,0,61,21,27,26,32,0,198,34,0,198,0,35,0,53,34,0,197,0,36,0,61,17,27,0,55,34,0,109,0,10,34,0,103,17,0,8,16,0,29,16,32,1,38,16,0,35,34,0,172,17,0,44,0,35,26,32,0,13,17,27,16,11,2,17,33,0,199,48,6,32,0,49,0,32,0,53,34,0,49,27,0,55,32,0,59,27,16,33,0,59,49,0,11,0,65,17,0,10,32,0,77,0,13,0,66,17,0,9,32,0,84,17,17,0,10,33,0,53,50,6,32,0,53,0,32,16,33,0,200,48,0,44,0,35,26,34,0,77,17,33,0,201,48,0,14,0,66,17,0,0,0,66,17,33,0,202,48,0,32,16,33,0,203,48,6,34,0,201,0,11,0,66,17,0,0,34,0,59,0,35,32,0,200,17,0,2,0,67,17,17,0,5,0,70,17,33,0,204,48,6,32,0,52,0,35,32,0,200,17,33,0,205,48,0,50,0,0,26,0,61,17,33,0,206,48,6,32,0,204,0,0,34,0,202,17,0,35,0,53,0,34,0,51,0,35,0,53,32,0,206,0,54,0,35,27,0,33,20,0,32,34,0,205,21,27,27,27,16,0,6,32,0,84,0,32,32,0,53,0,9,32,0,52,17,17,0,8,16,0,1,0,67,17,17,33,0,207,48,6,32,0,200,0,35,32,0,203,17,0,41,32,0,207,0,50,0,0,26,16,0,22,0,65,17,0,26,0,35,34,0,206,21,0,0,34,0,204,21,0,35,0,0,0,19,0,51,0,38,27,21,34,0,203,21,0,44,0,22,26,0,25,21,0,61,17,17,0,41,0,53,0,32,27,34,0,207,17,33,0,200,49,6,34,0,85,0,32,32,0,52,17,34,0,84,0,8,16,0,32,32,0,52,17,32,0,52,0,32,16,0,32,0,53,34,0,53,0,32,34,0,52,17,27,0,55,34,0,200,27,16,11,3,33,0,208,48,6,34,0,186,0,13,0,52,0,1,27,32,0,196,17,0,16,34,0,194,17,0,22,0,66,17,0,32,16,32,0,148,0,46,0,13,26,16,0,0,34,0,87,17,34,0,148,34,0,161,11,4,33,0,209,48,6,34,0,195,0,36,0,61,17,0,22,34,0,196,17,34,0,177,34,0,208,34,0,209,34,0,199,11,5,7,11,0,0,46,0,173,0,51,0,42,27,26,11,0,0,65,0,27,16,11,4,33,0,3,48,6,34,0,2,0,13,0,11,0,70,21,0,58,0,24,27,16,0,43,34,0,3,26,0,26,0,13,21,0,54,0,22,27,16,33,0,4,33,0,5,33,0,6,33,0,7,12,4,48,6,34,0,1,32,1,41,34,0,5,32,0,6,11,2,17,33,0,8,48,33,0,9,33,0,10,33,0,11,33,0,12,33,0,13,12,5,48,6,34,0,9,32,1,43,34,0,10,32,0,11,0,36,16,34,0,12,34,0,13,34,0,6,0,46,0,65,26,16,0,29,34,0,7,17,11,5,17,33,0,14,33,0,15,33,0,16,33,0,17,33,0,18,12,5,48,6,34,0,14,34,0,11,0,26,0,66,17,0,22,34,0,4,0,35,34,0,15,17,11,1,17,0,22,16,34,0,16,0,12,16,0,31,16,0,45,0,11,26,16,34,0,17,0,12,16,0,31,16,0,45,0,11,26,16,34,0,18,34,0,8,11,6,7,34,0,1,34,0,2,16,7,32,0,1,0,35,0,53,32,0,2,0,32,34,0,1,17,27,0,55,0,46,0,66,26,27,16,32,1,13,34,0,2,0,44,0,35,26,16,17,7,34,0,1,0,32,16,0,36,16,0,118,11,2,0,42,16,7,34,0,1,0,22,0,65,17,0,35,0,53,0,50,0,0,26,27,32,1,31,17,0,9,32,1,32,17,0,32,16,0,119,11,2,0,42,16,7,32,1,26,0,32,34,0,1,17,0,120,11,2,0,42,16,7,32,1,26,0,32,34,0,1,17,0,121,11,2,0,42,16,7,34,0,2,0,32,34,0,1,17,0,44,0,35,26,32,1,26,17,0,122,11,2,0,42,16,7,32,0,2,0,44,0,32,26,33,1,26,50,6,32,0,2,0,44,0,32,26,33,1,25,50,6,34,0,1,0,32,34,0,2,17,7,0,49,0,10,26,0,58,34,0,1,0,24,34,0,2,0,54,0,32,27,21,0,42,20,27,7,32,0,1,0,54,0,36,27,33,0,3,48,6,0,26,0,25,11,2,0,46,1,25,26,16,33,0,4,33,0,5,12,2,48,6,0,36,0,55,0,26,0,53,0,61,27,27,0,24,20,33,0,6,48,6,0,46,0,25,26,0,30,20,0,46,0,22,26,0,46,0,26,26,21,0,53,0,61,0,65,11,2,27,33,0,7,48,6,1,26,33,0,8,48,6,32,2,16,32,2,25,34,0,1,17,0,32,16,0,30,16,0,49,0,46,34,0,8,26,0,22,20,0,32,0,53,0,46,0,36,26,0,39,20,27,20,0,25,0,53,0,13,0,5,0,79,21,27,20,26,0,65,0,27,16,0,44,0,24,26,16,0,24,16,17,0,46,0,22,26,16,0,36,0,53,0,46,0,13,26,0,49,0,5,26,0,37,0,20,21,0,36,20,20,27,16,33,0,9,48,6,0,66,32,0,9,32,1,10,34,0,9,32,2,30,0,131,17,27,16,7,0,14,0,58,0,49,0,10,26,27,0,58,34,0,1,0,24,34,0,2,0,54,0,32,27,0,44,0,66,0,57,0,35,27,26,0,43,32,1,6,26,0,23,32,1,5,21,21,0,31,0,51,0,9,27,20,21,0,42,20,27,7,32,1,15,0,22,0,65,17,0,32,32,0,1,17,0,13,32,2,16,0,36,16,0,0,0,70,17,17,32,1,13,0,22,0,65,21,0,32,34,0,1,21,32,1,10,0,136,27,16,7,34,0,1,0,6,33,1,26,50,0,14,0,67,17,32,1,27,32,1,10,34,0,4,27,16,7,32,2,28,32,2,25,34,0,1,17,0,9,32,1,47,0,14,0,65,17,17,7,32,1,5,0,35,0,53,32,0,1,27,0,55,32,1,5,0,35,32,0,2,17,27,16,33,1,5,49,6,32,1,6,0,35,0,53,34,0,2,27,0,55,32,1,6,0,35,34,0,1,17,27,16,33,1,6,49,7,32,1,25,0,35,32,0,1,17,0,2,0,53,0,8,27,32,1,122,17,0,6,33,1,123,50,0,14,0,67,17,32,1,31,0,51,0,33,27,0,35,34,0,1,21,32,1,10,0,163,27,16,7,32,1,149,0,35,0,53,32,0,1,27,0,13,0,53,0,29,27,20,0,52,0,10,27,32,1,150,17,0,8,16,32,1,134,0,32,0,53,32,1,138,27,0,54,0,22,27,20,0,35,34,0,1,21,32,1,10,0,169,27,16,7,0,44,0,24,34,0,1,20,0,54,0,46,0,22,26,27,26,0,24,20,7,34,0,1,32,1,4,32,1,5,0,20,32,1,6,20,32,1,7,0,54,34,0,0,27,0,22,32,1,5,21,11,2,0,56,0,36,0,36,0,61,21,0,54,32,1,3,0,52,0,1,27,27,0,13,0,66,21,27,11,2,0,56,0,20,0,51,0,36,0,51,0,13,27,27,0,11,0,65,21,27,11,2,0,56,32,1,3,0,7,0,67,21,27,34,0,2,19,7]
+ ,[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[18],runtime[19],runtime[20],runtime[21],runtime[22],runtime[23],runtime[24],runtime[25],runtime[26],runtime[27],runtime[28],runtime[29],runtime[30],runtime[31],runtime[32],runtime[33],runtime[34],runtime[35],runtime[36],runtime[37],runtime[38],runtime[39],runtime[40],runtime[41],runtime[42],runtime[43],runtime[44],runtime[45],runtime[46],runtime[47],runtime[48],runtime[49],runtime[50],runtime[52],runtime[53],runtime[54],runtime[55],runtime[56],runtime[57],runtime[59],runtime[60],runtime[62],10,13,-1,11,26,9,0,1,2,5,8,4,3,-3,-2,6,7,17,Math.PI,Infinity,64,-4,-5,-6,32,48,43,44,14,42,66,24,16,15,'\0','0','#','\'','\"','@',str("⋄,"),str(":;?"),str("⇐←↩"),str("(){}⟨⟩[]"),str("‿"),str("·"),str("𝕊𝕏𝕎𝔽𝔾𝕤𝕩𝕨𝕣𝕗𝕘"),str(".¯π∞"),str("_"),str("aA"),str("•"),str("𝕨"),str(" "),str("#\'\"@"),str("s"),str("Unknown character"),str(": "),str("Character set conflict: "),str("˜⁼"),str("Unclosed quote"),str("Words can\'t only have underscores"),str("System dot with no name"),str("𝕣 can\'t be used with other word characters"),str("Numbers can\'t start with underscores"),str("Letter"),str(" \""),str("\" not allowed in numbers"),str("ea"),str("Negative sign in the middle of a number"),str("Portion of a number is empty"),str("Ill-formed decimal or exponent use"),str("π and ∞ must occur alone"),str("Unmatched bracket"),str("Empty program"),str("Swapped open and closed brackets"),str("Parentheses can\'t contain separators"),str("Predicates can\'t be placed inside lists"),str("Empty statement or expression"),str("Invalid assignment or stranding use"),str("Can\'t use export statement as predicate"),str("Dot must be followed by a name"),str("Punctuation : ; ? not allowed outside blocks"),str("Header-less bodies must come last"),str("At most two header-less bodies allowed"),str("Invalid Undo header syntax"),str("Only one header per body allowed"),str("Missing operand in header"),str("Invalid header structure"),str("Incorrect special name"),str("Header left argument without right"),str("Header operation must be a plain name"),str("Header with ⁼ must take arguments"),str("Header with ˜⁼ must have left argument"),str("Block header type conflict"),str("Special name outside of any block"),str("Unreachable body"),str("Dot must be preceded by a subject"),str("Nothing (·) cannot be assigned"),str("Can\'t use Nothing (·) as predicate"),str("Missing operand"),str("Double subjects (missing ‿?)"),str("No right-hand side in non-modified assignment"),str("Role of the two sides in assignment must match"),str("Can\'t use Nothing (·) in lists"),str("Can\'t return Nothing (·)"),str("Invalid use of 𝕨 in monadic case"),str("Assignment target must be a name or list of targets"),str("Can\'t nest assignments (write aliases with ⇐)"),str("Can\'t use result of function/modifier assignment without parentheses"),str("Can\'t define special name"),str("Redefinition"),str("Undefined identifier"),str("Can\'t export from surrounding scope"),str("Second-level parts of a train must be functions"),str("System values not supported")]
,[[0,1,0],[0,0,1],[1,0,2],[1,1,3],[0,0,[[],[4]]],[0,0,[[],[5]]],[0,0,[[],[6]]],[0,0,[[],[7]]],[0,0,[[],[8]]],[0,0,[[],[9]]],[0,0,10],[0,0,11],[0,0,12],[0,0,13],[0,0,[[],[14]]],[0,0,[[],[15]]],[2,1,16],[0,0,17],[2,1,18],[0,0,19],[1,0,20],[0,0,21],[0,0,[[],[22]]],[0,0,23],[0,0,24],[0,0,25],[0,0,26]]
- ,[[0,0],[3,45],[613,5],[632,6],[803,57],[3009,23],[3834,208],[12431,19],[12669,3],[12677,3],[12717,3],[12734,3],[12773,3],[12790,3],[12807,3],[12833,3],[12869,3],[12895,10],[13116,3],[13178,3],[13228,5],[13254,3],[13276,3],[13334,3],[13387,3],[13449,3],[13470,3]]
+ ,[[0,0],[3,45],[613,5],[632,6],[803,58],[3019,23],[3844,210],[12509,19],[12747,3],[12755,3],[12795,3],[12812,3],[12851,3],[12868,3],[12885,3],[12911,3],[12947,3],[12973,10],[13194,3],[13256,3],[13306,5],[13332,3],[13354,3],[13412,3],[13465,3],[13527,3],[13548,3]]
);
let compgen = sys => {
let gl = sys.glyphs, rt = sys.runtime;
diff --git a/docs/implementation/vm.html b/docs/implementation/vm.html
index ba5731db..ba96ac12 100644
--- a/docs/implementation/vm.html
+++ b/docs/implementation/vm.html
@@ -43,7 +43,7 @@
<p>The starting index refers to the position in bytecode where execution starts in order to evaluate the block. Different bodies will always have the same set of special names, but the variables they define are unrelated, so of course they can have different counts. The given number of variables includes special names, but list of names and export mask don't.</p>
<p>The program's symbol list is included in the tokenization information <code><span class='Value'>t</span></code>: it is <code><span class='Number'>0</span><span class='Function'>⊑</span><span class='Number'>2</span><span class='Function'>⊑</span><span class='Value'>t</span></code>. Since the entire program (the source code passed in one compiler call) uses this list, namespace field accesses can be performed with indices alone within a program. The symbol list is needed for cross-program access, for example if <code><span class='Function'>•BQN</span></code> returns a namespace.</p>
<h3 id="instructions"><a class="header" href="#instructions">Instructions</a></h3>
-<p>The following instructions are defined (those without names are tentatively reserved only). The ones emitted by the self-hosted BQN compiler are marked in the &quot;used&quot; column. Instructions marked &quot;NS&quot; are used only in programs with namespaces, and those marked &quot;HE&quot; are used only with headers <code><span class='Head'>:</span></code> or predicates <code><span class='Head'>?</span></code>. Only those marked &quot;X&quot; are needed to support the compiler and self-hosted runtime.</p>
+<p>The following instructions are defined (those without names are tentatively reserved only). The ones emitted by the self-hosted BQN compiler are marked in the &quot;used&quot; column. Only those marked &quot;X&quot; are needed to support the compiler and self-hosted runtime. &quot;NS&quot; indicates instructions used only in programs with namespaces, &quot;HE&quot; is for headers <code><span class='Head'>:</span></code> or predicates <code><span class='Head'>?</span></code>, and &quot;HR&quot; is for high-rank array notation <code><span class='Value'>[]</span></code>.</p>
<table>
<thead>
<tr>
@@ -130,8 +130,8 @@
</tr>
<tr>
<td align="right">0E</td>
-<td></td>
-<td align="center"></td>
+<td>ARRH</td>
+<td align="center">HR</td>
<td align="right"></td>
<td align="left"></td>
<td>Merge top of stack (for <code><span class='Value'>[]</span></code>)</td>
@@ -410,6 +410,12 @@
<td><code><span class='Function'>N</span></code> total variables (<code><span class='Value'>m</span><span class='Function'>=</span><span class='Value'>n</span><span class='Function'>-</span><span class='Number'>1</span></code>)</td>
</tr>
<tr>
+<td align="right">0B</td>
+<td>ARRH</td>
+<td><code><span class='Value'>l</span> <span class='Gets'>→</span> <span class='Value'>a</span></code></td>
+<td>List to array</td>
+</tr>
+<tr>
<td align="right">10</td>
<td>FN1C</td>
<td><code><span class='Value'>𝕩</span> <span class='Value'>𝕤</span> <span class='Gets'>→</span> <span class='Paren'>(</span><span class='Function'>𝕊</span> <span class='Value'>𝕩</span><span class='Paren'>)</span></code></td>
@@ -526,9 +532,9 @@
<p>When a block is pushed with <strong>DFND</strong>, an instance of the block is created, with its <em>parent frame</em> set to be the frame of the currently-executing block. Setting the parent frame when the block is first seen, instead of when it's evaluated, is what distinguishes lexical from dynamic scoping. If it's an immediate block, it's evaluated immediately, and otherwise it's pushed onto the stack. When the block is evaluated, its frame is initialized using any arguments passed to it, the next instruction's index is pushed onto the return stack, and execution moves to the first instruction in the block. When the RETN instruction is encountered, an index is popped from the return stack and execution returns to this location. As an alternative to maintaining an explicit return stack, a block can be implemented as a native function that creates a new execution stack and returns the value in it when the <strong>RETN</strong> instruction is reached. This approach uses the implementation language's call stack for the return stack.</p>
<p>Local variables are manipulated with the <strong>VARO</strong> (or <strong>VARU</strong>) and <strong>VARM</strong> instructions, which load the value of a variable and a reference to it (see the next section) respectively. These instructions reference variables by <em>frame depth</em> and <em>slot index</em>. The frame depth indicates in which frame the variable is found: the current frame has depth 0, its block's parent frame has depth 1, and so on. The slot index is an index within that frame.</p>
<p>Slots should be initialized with some indication they are not yet defined. The variable can be defined with SETN only if it hasn't been defined yet, and can be accessed with VARO or VARU or modified with SETU, SETM, or SETC only if it <em>has</em> been defined.</p>
-<h3 id="variable-references-arrm-varm-setn-setu-setm-setc"><a class="header" href="#variable-references-arrm-varm-setn-setu-setm-setc">Variable references: ARRM VARM SETN SETU SETM SETC</a></h3>
+<h3 id="variable-references-arrm-arrh-varm-setn-setu-setm-setc"><a class="header" href="#variable-references-arrm-arrh-varm-setn-setu-setm-setc">Variable references: ARRM ARRH VARM SETN SETU SETM SETC</a></h3>
<p>A <em>variable reference</em> indicates a particular frame slot in a way that's independent of the execution context. For example, it could be a pointer to the slot, or a reference to the frame along with the index of the slot. <strong>VARM</strong> pushes a variable reference to the stack.</p>
-<p>A <em>reference list</em> is a list of variable references or reference lists. It's created with the <strong>ARRM</strong> instruction. In the Javascript VM there's no difference between a reference list and an ordinary BQN list other than the contents.</p>
+<p>A <em>reference list</em> is a list of variable references or reference lists. It's created with the <strong>ARRM</strong> instruction. In the Javascript VM there's no difference between a reference list and an ordinary BQN list other than the contents. The <strong>ARRH</strong> instruction converts this to a <em>merged reference list</em>, which matches an array of rank 1 or more by splitting it into cells.</p>
<p>The <strong>SETN</strong>, <strong>SETU</strong>, <strong>SETM</strong>, and <strong>SETC</strong> instructions set a value for a reference. If the reference is to a variable, they simply set its value. For a reference list, the value needs to be destructured. It must be a list of the same length, and each reference in the reference list is set to the corresponding element of the value list.</p>
<p><strong>SETM</strong> and <strong>SETC</strong> additionally need to get the current value of a reference. For a variable reference this is its current value (with an error if it's not defined yet); for a reference list it's a list of the values of each reference in the list.</p>
<table>
diff --git a/implementation/vm.md b/implementation/vm.md
index 50faa7df..e4f9b4fe 100644
--- a/implementation/vm.md
+++ b/implementation/vm.md
@@ -53,7 +53,7 @@ The program's symbol list is included in the tokenization information `t`: it is
### Instructions
-The following instructions are defined (those without names are tentatively reserved only). The ones emitted by the self-hosted BQN compiler are marked in the "used" column. Instructions marked "NS" are used only in programs with namespaces, and those marked "HE" are used only with headers `:` or predicates `?`. Only those marked "X" are needed to support the compiler and self-hosted runtime.
+The following instructions are defined (those without names are tentatively reserved only). The ones emitted by the self-hosted BQN compiler are marked in the "used" column. Only those marked "X" are needed to support the compiler and self-hosted runtime. "NS" indicates instructions used only in programs with namespaces, "HE" is for headers `:` or predicates `?`, and "HR" is for high-rank array notation `[]`.
| B | Name | Used | Like | Args | Description
|---:|------|:----:|-----:|:---------|------------
@@ -66,7 +66,7 @@ The following instructions are defined (those without names are tentatively rese
| 08 | RETD | NS | 07 | | Return the running scope's namespace
| 0B | ARRO | X | | `N` | Create length-`N` list
| 0C | ARRM | X | 0B | `N` | Create length-`N` reference list
-| 0E | | | | | Merge top of stack (for `[]`)
+| 0E | ARRH | HR | | | Merge top of stack (for `[]`)
| 10 | FN1C | X | | | Monadic function call
| 11 | FN2C | X | | | Dyadic function call
| 12 | FN1O | X | 10 | | Monadic call, checking for `·`
@@ -106,6 +106,7 @@ Stack effects for most instructions are given below. Instructions `FN1O`, `FN2O`
| 07 | RETN | `x → x` | Returns from current block
| 08 | RETD | `x? → n` | Clears stack, dropping 0 or 1 value
| 0B | ARRO | `x0 … xm → ⟨x0 … xm⟩` | `N` total variables (`m=n-1`)
+| 0B | ARRH | `l → a` | List to array
| 10 | FN1C | `𝕩 𝕤 → (𝕊 𝕩)` | 12: `𝕩` may be `·`
| 11 | FN2C | `𝕩 𝕤 𝕨 → (𝕨 𝕊 𝕩)` | 13: `𝕨` or `𝕩` may be `·`
| 14 | TR2D | `h g → (G H)` |
@@ -139,11 +140,11 @@ Local variables are manipulated with the **VARO** (or **VARU**) and **VARM** ins
Slots should be initialized with some indication they are not yet defined. The variable can be defined with SETN only if it hasn't been defined yet, and can be accessed with VARO or VARU or modified with SETU, SETM, or SETC only if it *has* been defined.
-### Variable references: ARRM VARM SETN SETU SETM SETC
+### Variable references: ARRM ARRH VARM SETN SETU SETM SETC
A *variable reference* indicates a particular frame slot in a way that's independent of the execution context. For example, it could be a pointer to the slot, or a reference to the frame along with the index of the slot. **VARM** pushes a variable reference to the stack.
-A *reference list* is a list of variable references or reference lists. It's created with the **ARRM** instruction. In the Javascript VM there's no difference between a reference list and an ordinary BQN list other than the contents.
+A *reference list* is a list of variable references or reference lists. It's created with the **ARRM** instruction. In the Javascript VM there's no difference between a reference list and an ordinary BQN list other than the contents. The **ARRH** instruction converts this to a *merged reference list*, which matches an array of rank 1 or more by splitting it into cells.
The **SETN**, **SETU**, **SETM**, and **SETC** instructions set a value for a reference. If the reference is to a variable, they simply set its value. For a reference list, the value needs to be destructured. It must be a list of the same length, and each reference in the reference list is set to the corresponding element of the value list.
diff --git a/src/c.bqn b/src/c.bqn
index f87415d3..f76d4721 100644
--- a/src/c.bqn
+++ b/src/c.bqn
@@ -7,7 +7,7 @@ charSet‿cgl←(∾ ⋈ ≠¨)⟨
"⋄,"∾lf # Separator
":;?" # Header punctuation
"⇐←↩" # Gets
- "(){}⟨⟩" # Bracket
+ "(){}⟨⟩[]" # Bracket
"‿" # Ligature
"·" # nOthing
# Use last character in case of UTF-16 (like dzaima/BQN)
@@ -89,7 +89,8 @@ Tokenize←{System‿vars←𝕨
t↩(w∨wf)/(vars≠⊸↓∾j++`vd»kk←≠¨k)⌾(ki⊸⊏)t # Add IDs; remove words/whitespace
t-↩t(M×-⟜⊑)bS # Separators are equivalent
p←≠`1¨sb←¯1↓1↓/1(∾≠∾˜)t=sep # Separator group boundaries (excludes leading and trailing)
- sk←sb/˜p>∨⟜«(M⟜bH∨(3‿5+⊑bB)∊˜p⊸+)(sb-p)⊏t # Keep the first of each group that's not just inside a bracket
+ eb←3‿5‿7+⊑bB # End brackets that allow separators
+ sk←sb/˜p>∨⟜«(M⟜bH∨eb∊˜p⊸+)(sb-p)⊏t # Keep the first of each group that's not just inside a bracket
t{is/˜↩𝕨⋄ie/˜↩𝕨⋄𝕨/𝕩}˜↩1¨⌾(sk⊸⊏)t≠sep # Remove the rest
im←(t=bR)∨t M vd⋈+´2↑kk # Identifier (or 𝕣) mask
r←ir⌾(im⊸/)(vd⌊t)⊏charRole∾0 # Role
@@ -139,7 +140,8 @@ Parse ← {r‿vn‿i‿e‿def←𝕨⋄nv←≠vn
ErrMismatchedBrackets∘𝕩⍟¬ (g⊏p)(>⟜0⊸/≡1-˜<⟜0⊸/)gx←g⊏𝕩
"Swapped open and closed brackets"_err_(1↑G) 0>(⊑g)⊑pd
"Parentheses can't contain separators"_err_(gb/G) ((⊑bB)⊸=»⊸∧pred⊸=∨sep⊸=)gbx←gb/gx
- "Predicates can't be placed inside lists"_err_((sep≠GBX)/gb/G) ((4+⊑bB)⊸=»⊸∧pred⊸=)sep⊸≠⊸/gbx
+ BE←=∨+⟜2⊸= # Bracket equals: match ⟨[ or ⟩] given ⟨ or ⟩ only
+ "Predicates can't be placed inside lists"_err_((sep≠GBX)/gb/G) ((4+⊑bB)⊸BE»⊸∧pred⊸=)sep⊸≠⊸/gbx
{"Empty statement or expression"_err_(𝕩/0∾G) (4+⊑bB)≠𝕩/0∾gx}1⊸«⊸∧1∾gb
dl←«⊸∨dc←r=4 # Dot left
r-↩(𝕩=⊑bG)>ec←«dc<0≤r+p # Role ¯4 for exports: ⊑bG is ⇐
@@ -161,7 +163,7 @@ Parse ← {r‿vn‿i‿e‿def←𝕨⋄nv←≠vn
# Compute parsing ordering gr≡g⊏rev
g↩⍋+`p↩br-˜rev⊏p⋄bp←0(<⋈○(/⟜g)>)g⊏p # Order by non-brace bracket depth
g⊏˜↩⍋g⊏«⊸∨dc⋄gr←g⊏rev # Now by dots
- sll←1+2÷˜0(<-○/>)gr⊏sr-sl⋄l←/g⊏𝕩=5+⊑bB # Strand length; list starts
+ sll←1+2÷˜0(<-○/>)gr⊏sr-sl⋄l←/g⊏𝕩BE˜5+⊑bB # Strand length; list starts
b←br>0⋄c←/br<0⋄bp∾¨↩⟨/b,c⟩ # Block Begin (mask) and Close (index), in matching order
g⊏˜↩gs←⍋gr⊏sl⋄gr↩g⊏rev⋄gi←⍋g # Send strand prefixes *‿ to the end
@@ -243,7 +245,7 @@ Parse ← {r‿vn‿i‿e‿def←𝕨⋄nv←≠vn
oa←⌽/hg<op←(er<2)∧r≥2⋄ro←op∨«op∧m2←r=3 # op: active modifiers; ro: mod or right operand
"Missing operand"_nerr op×2(«⌈m2×»)no⌈2×m2≥ro∨r∊↕2
s←𝕩=sep⋄fo←𝕩∊⟨2+⊑bB,1+⊑bH⟩ # Separators, function open { or ;
- ls←s∧fo<○IT lo←𝕩=4+⊑bB # List Separators: after ⟨lo, not {fo
+ ls←s∧fo<○IT lo←𝕩BE˜4+⊑bB # List Separators: after ⟨lo, not {fo
"Double subjects (missing ‿?)"_err_(G) ∧⟜«ro»⊸∨⊸<r=0
mm←𝕩=2+⊑bG⋄ma←tr<mm∧«ir≥1⋄mm∧↩1»ps # Modified assignment; monadic modified
"No right-hand side in non-modified assignment"_err_(G) ma<mm
@@ -313,6 +315,7 @@ Parse ← {r‿vn‿i‿e‿def←𝕨⋄nv←≠vn
cn←pi∾lt←/𝕩≥cl←vi+nv⋄ob∾↩(cl-˜≠u)+lt⊏𝕩 # Constants
bk←c⊏gi # Block loads
ll←sll∾˜(¬lo/1«ps)+-⟜»1↓(lo∾1)/+`ls∾0 # List Length
+ lm←/𝕩=7+⊑bB # List merge, for []
dr←(hd¬⊸/hj)∾/s>(2=ne)∨ls∨»r=¯5⋄rt←/fo # Drop (block separator) and return
qp←/𝕩=pred # Predicate
fl←(dy×⊏⟜os)⊸+fa+dy # Function application site
@@ -321,11 +324,11 @@ Parse ← {r‿vn‿i‿e‿def←𝕨⋄nv←≠vn
# Object code generation: numbers oc ordered by source location (after rev) oi
ao←48+(0⌈(1+⊑bG)-˜ai⊏𝕩+ma+mm)∾-hd # Assignment opcode
- or←⍋oi←idor∾g⊏˜∾oil←⟨cn,cn,bk,bk,hq,api,2/l,at,dr,qp,al+1,al+1,oa+1⌈oa⊏os,fl,rt⟩
- oc←or⊏∾idoc∾⟨0¨cn,ob,1¨bk,1+↕≠bk,43¨hq,44¨api,⥊⍉(11+l⊏aa)≍ll,ao,6¨dr,42¨qp,66¨al,vi-˜(al-1)⊏𝕩
+ or←⍋oi←idor∾g⊏˜∾oil←⟨cn,cn,bk,bk,hq,api,2/l,lm,at,dr,qp,al+1,al+1,oa+1⌈oa⊏os,fl,rt⟩
+ oc←or⊏∾idoc∾⟨0¨cn,ob,1¨bk,1+↕≠bk,43¨hq,44¨api,⥊⍉(11+l⊏aa)≍ll,14¨lm,ao,6¨dr,42¨qp,66¨al,vi-˜(al-1)⊏𝕩
24+oa⊏r,16+(fn/dy+2×fm⌈1=ny)+4×0<fa⊏er,¯1↓rc←7+nf⟩
# Instruction source positions
- ui←8‿13‿14(⊏⟜(»+`)+⟜↕¨⊏)(≠idor)∾≠¨oil # at,oa+…,fl locations
+ ui←9‿14‿15(⊏⟜(»+`)+⟜↕¨⊏)(≠idor)∾≠¨oil # at,oa+…,fl locations
oj←(g⊏˜∾⟨at-1‿0/˜≠¨ai‿hj,oa,fa⟩)⌾((∾ui)⊸⊏)oi
ind←⟨oj,(g⊏˜fa⊏IT»¬ro∨ma)⌾((¯1⊑ui)⊸⊏)oj⟩(¯1∾˜or⊸⊏)⊸⊏¨i‿e
# Indices for multi-body blocks
diff --git a/test/cases/syntax.bqn b/test/cases/syntax.bqn
index 078369b8..aac53771 100644
--- a/test/cases/syntax.bqn
+++ b/test/cases/syntax.bqn
@@ -106,6 +106,16 @@
! % 0‿↩‿2
! % ⟨0,‿,2⟩
+# High-rank arrays
+! % []
+! % [⋄]
+1 % (↕3)≡[,0,1,2]
+1 % {[𝕩]≡≍𝕩}"ab"
+3 % [a⋄b]←↕2‿3⋄≠b
+! % [a,b,c]←↕2‿3
+1 % [a‿b‿c,[x,y,z]]←↕2‿3⋄x≡<⌽b
+3 % [[a,·],[·,b]]←2‿2‿1⥊↕4⋄-˜´a∾b
+
# Blocks
1 % {𝕩-1}2
4 % ({𝕩×𝕩})2
diff --git a/vm.bqn b/vm.bqn
index 0293d039..2c0c059b 100644
--- a/vm.bqn
+++ b/vm.bqn
@@ -49,6 +49,15 @@ ref ← {
SetN ⇐ {𝕨.SetN𝕩}_set_"←"
SetU ⇐ {𝕨.SetU𝕩}_set_"↩"
SetQ ⇐ ∨´ {𝕨.SetQ𝕩}_set_@
+ # Create a merged reference array based on this one
+ Merge ⇐ {𝕊:
+ Split ← {
+ "[…]←: Value must have rank 1 or more" ! 1≤=𝕩
+ <˘ 𝕩
+ }
+ Get ⇐ > Get
+ SetN‿SetU‿SetQ ⇐ {𝕏⟜Split}¨ SetN‿SetU‿SetQ
+ }
}
# Alias, like ⇐vals in ⟨a‿b⇐vals⟩←
# It behaves like ⟨a‿b⟩← except when destructuring a namespace (GetF)
@@ -127,6 +136,7 @@ ops ← ((!∘"Unknown opcode")˙⊣´⊢)¨ ⊔˝ ⍉> ⟨
# Arrays
11‿{i←𝕏@ ⋄ {s𝕊e: s.Push ⌽s.Pop i } }
12‿{i←𝕏@ ⋄ {s𝕊e: s.Push ref.Array ⌽s.Pop i } }
+ 14‿( {s𝕊e: s.Push =◶{𝕩.Merge@}‿> ⊑s.Pop 1 }˙)
# Application
16‿( {s𝕊e: s.Push { f‿x: F x } s.Pop 2 }˙)
17‿( {s𝕊e: s.Push { w‿f‿x: w F x } s.Pop 3 }˙)