From f05c4e133897a14351d3e27b73ff4ef4ffd2845e Mon Sep 17 00:00:00 2001 From: Jordi Baylina Date: Thu, 29 Aug 2019 16:26:19 +0200 Subject: [PATCH] compute block added --- package-lock.json | 17 +- parser/jaz.jison | 13 ++ parser/jaz.js | 322 ++++++++++++++++++----------------- src/exec.js | 2 + src/gencode.js | 8 + test/cases.js | 10 ++ test/circuits/compute.circom | 17 ++ 7 files changed, 225 insertions(+), 164 deletions(-) create mode 100644 test/circuits/compute.circom diff --git a/package-lock.json b/package-lock.json index 6c1092a..450db72 100644 --- a/package-lock.json +++ b/package-lock.json @@ -432,10 +432,13 @@ } }, "eslint-utils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", - "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", - "dev": true + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz", + "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.0.0" + } }, "eslint-visitor-keys": { "version": "1.0.0", @@ -868,9 +871,9 @@ } }, "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, "map-age-cleaner": { diff --git a/parser/jaz.jison b/parser/jaz.jison index 52bd166..356c684 100644 --- a/parser/jaz.jison +++ b/parser/jaz.jison @@ -40,6 +40,7 @@ if { return 'if'; } else { return 'else'; } for { return 'for'; } while { return 'while'; } +compute { return 'compute'; } do { return 'do'; } return { return 'return'; } include { return 'include'; } @@ -198,6 +199,10 @@ statment { $$ = $1; } + | computeStatment + { + $$ = $1; + } | returnStatment { $$ = $1; @@ -302,6 +307,14 @@ doWhileStatment } ; +computeStatment + : 'compute' statment + { + $$ = { type: "COMPUTE", body: $2 }; + setLines($$, @1, @2); + } + ; + returnStatment : 'return' expression ';' { diff --git a/parser/jaz.js b/parser/jaz.js index 1d202be..191f36a 100644 --- a/parser/jaz.js +++ b/parser/jaz.js @@ -72,12 +72,12 @@ } */ var jaz = (function(){ -var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,14],$V1=[1,31],$V2=[1,59],$V3=[1,15],$V4=[1,16],$V5=[1,17],$V6=[1,18],$V7=[1,19],$V8=[1,20],$V9=[1,23],$Va=[1,21],$Vb=[1,50],$Vc=[1,51],$Vd=[1,48],$Ve=[1,49],$Vf=[1,52],$Vg=[1,53],$Vh=[1,57],$Vi=[1,58],$Vj=[1,32],$Vk=[1,33],$Vl=[1,34],$Vm=[1,37],$Vn=[5,17,18,19,22,24,27,29,30,31,32,34,35,80,82,90,91,92,93,97,98,102,103,107,110],$Vo=[5,17,18,19,22,24,26,27,29,30,31,32,34,35,80,82,90,91,92,93,97,98,102,103,107,110],$Vp=[1,72],$Vq=[1,73],$Vr=[1,74],$Vs=[5,17,18,19,21,22,23,24,26,27,28,29,30,31,32,34,35,50,52,54,55,56,59,61,63,65,67,69,71,72,74,75,76,77,79,80,82,83,85,86,87,88,92,93,97,98,102,103,107,110,111],$Vt=[2,95],$Vu=[1,88],$Vv=[1,89],$Vw=[5,17,18,19,21,22,23,24,26,27,28,29,30,31,32,34,35,50,52,55,56,80,82,90,91,92,93,97,98,102,103,107,110,111],$Vx=[5,17,18,19,21,22,23,24,26,27,28,29,30,31,32,34,35,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,54,55,56,59,61,63,65,67,69,71,72,74,75,76,77,79,80,82,83,85,86,87,88,90,91,92,93,97,98,102,103,107,111],$Vy=[5,17,18,19,21,22,23,24,26,27,28,29,30,31,32,34,35,50,52,54,55,56,80,82,90,91,92,93,97,98,102,103,107,110,111],$Vz=[2,109],$VA=[1,96],$VB=[5,17,18,19,21,22,23,24,26,27,28,29,30,31,32,34,35,50,52,54,55,56,59,80,82,90,91,92,93,97,98,102,103,107,110,111],$VC=[1,102],$VD=[5,17,18,19,21,22,23,24,26,27,28,29,30,31,32,34,35,50,52,54,55,56,59,61,80,82,90,91,92,93,97,98,102,103,107,110,111],$VE=[1,105],$VF=[5,17,18,19,21,22,23,24,26,27,28,29,30,31,32,34,35,50,52,54,55,56,59,61,63,80,82,90,91,92,93,97,98,102,103,107,110,111],$VG=[1,106],$VH=[5,17,18,19,21,22,23,24,26,27,28,29,30,31,32,34,35,50,52,54,55,56,59,61,63,65,80,82,90,91,92,93,97,98,102,103,107,110,111],$VI=[1,107],$VJ=[5,17,18,19,21,22,23,24,26,27,28,29,30,31,32,34,35,50,52,54,55,56,59,61,63,65,67,80,82,90,91,92,93,97,98,102,103,107,110,111],$VK=[1,108],$VL=[1,109],$VM=[5,17,18,19,21,22,23,24,26,27,28,29,30,31,32,34,35,50,52,54,55,56,59,61,63,65,67,69,71,80,82,90,91,92,93,97,98,102,103,107,110,111],$VN=[1,110],$VO=[1,111],$VP=[1,112],$VQ=[1,113],$VR=[5,17,18,19,21,22,23,24,26,27,28,29,30,31,32,34,35,50,52,54,55,56,59,61,63,65,67,69,71,72,74,75,76,80,82,90,91,92,93,97,98,102,103,107,110,111],$VS=[1,114],$VT=[1,115],$VU=[5,17,18,19,21,22,23,24,26,27,28,29,30,31,32,34,35,50,52,54,55,56,59,61,63,65,67,69,71,72,74,75,76,77,79,90,91,92,93,97,98,102,103,107,110,111],$VV=[1,116],$VW=[1,117],$VX=[5,17,18,19,21,22,23,24,26,27,28,29,30,31,32,34,35,50,52,54,55,56,59,61,63,65,67,69,71,72,74,75,76,77,79,80,82,90,91,92,93,97,98,102,103,107,110,111],$VY=[1,118],$VZ=[1,119],$V_=[1,120],$V$=[1,121],$V01=[5,17,18,19,21,22,23,24,26,27,28,29,30,31,32,34,35,50,52,54,55,56,59,61,63,65,67,69,71,72,74,75,76,77,79,80,82,83,85,86,87,90,91,92,93,97,98,102,103,107,110,111],$V11=[1,122],$V21=[5,17,18,19,21,22,23,24,26,27,28,29,30,31,32,34,35,50,52,54,55,56,59,61,63,65,67,69,71,72,74,75,76,77,79,80,82,83,85,86,87,88,90,91,92,93,97,98,102,103,107,110,111],$V31=[5,17,18,19,21,22,23,24,26,27,28,29,30,31,32,34,35,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,54,55,56,59,61,63,65,67,69,71,72,74,75,76,77,79,80,82,83,85,86,87,88,90,91,92,93,97,98,100,102,103,107,110,111],$V41=[1,166],$V51=[21,23,111],$V61=[1,188],$V71=[5,17,18,19,21,22,23,24,26,27,28,29,30,31,32,34,35,56,80,82,90,91,92,93,97,98,102,103,107,110,111],$V81=[1,200],$V91=[21,23]; +var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,15],$V1=[1,33],$V2=[1,61],$V3=[1,16],$V4=[1,17],$V5=[1,18],$V6=[1,19],$V7=[1,20],$V8=[1,21],$V9=[1,22],$Va=[1,25],$Vb=[1,23],$Vc=[1,52],$Vd=[1,53],$Ve=[1,50],$Vf=[1,51],$Vg=[1,54],$Vh=[1,55],$Vi=[1,59],$Vj=[1,60],$Vk=[1,34],$Vl=[1,35],$Vm=[1,36],$Vn=[1,39],$Vo=[5,18,19,20,23,25,28,30,31,32,33,34,36,37,82,84,92,93,94,95,99,100,104,105,109,112],$Vp=[5,18,19,20,23,25,27,28,30,31,32,33,34,36,37,82,84,92,93,94,95,99,100,104,105,109,112],$Vq=[1,75],$Vr=[1,76],$Vs=[1,77],$Vt=[5,18,19,20,22,23,24,25,27,28,29,30,31,32,33,34,36,37,52,54,56,57,58,61,63,65,67,69,71,73,74,76,77,78,79,81,82,84,85,87,88,89,90,94,95,99,100,104,105,109,112,113],$Vu=[2,97],$Vv=[1,91],$Vw=[1,92],$Vx=[5,18,19,20,22,23,24,25,27,28,29,30,31,32,33,34,36,37,52,54,57,58,82,84,92,93,94,95,99,100,104,105,109,112,113],$Vy=[5,18,19,20,22,23,24,25,27,28,29,30,31,32,33,34,36,37,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,56,57,58,61,63,65,67,69,71,73,74,76,77,78,79,81,82,84,85,87,88,89,90,92,93,94,95,99,100,104,105,109,113],$Vz=[5,18,19,20,22,23,24,25,27,28,29,30,31,32,33,34,36,37,52,54,56,57,58,82,84,92,93,94,95,99,100,104,105,109,112,113],$VA=[2,111],$VB=[1,99],$VC=[5,18,19,20,22,23,24,25,27,28,29,30,31,32,33,34,36,37,52,54,56,57,58,61,82,84,92,93,94,95,99,100,104,105,109,112,113],$VD=[1,105],$VE=[5,18,19,20,22,23,24,25,27,28,29,30,31,32,33,34,36,37,52,54,56,57,58,61,63,82,84,92,93,94,95,99,100,104,105,109,112,113],$VF=[1,108],$VG=[5,18,19,20,22,23,24,25,27,28,29,30,31,32,33,34,36,37,52,54,56,57,58,61,63,65,82,84,92,93,94,95,99,100,104,105,109,112,113],$VH=[1,109],$VI=[5,18,19,20,22,23,24,25,27,28,29,30,31,32,33,34,36,37,52,54,56,57,58,61,63,65,67,82,84,92,93,94,95,99,100,104,105,109,112,113],$VJ=[1,110],$VK=[5,18,19,20,22,23,24,25,27,28,29,30,31,32,33,34,36,37,52,54,56,57,58,61,63,65,67,69,82,84,92,93,94,95,99,100,104,105,109,112,113],$VL=[1,111],$VM=[1,112],$VN=[5,18,19,20,22,23,24,25,27,28,29,30,31,32,33,34,36,37,52,54,56,57,58,61,63,65,67,69,71,73,82,84,92,93,94,95,99,100,104,105,109,112,113],$VO=[1,113],$VP=[1,114],$VQ=[1,115],$VR=[1,116],$VS=[5,18,19,20,22,23,24,25,27,28,29,30,31,32,33,34,36,37,52,54,56,57,58,61,63,65,67,69,71,73,74,76,77,78,82,84,92,93,94,95,99,100,104,105,109,112,113],$VT=[1,117],$VU=[1,118],$VV=[5,18,19,20,22,23,24,25,27,28,29,30,31,32,33,34,36,37,52,54,56,57,58,61,63,65,67,69,71,73,74,76,77,78,79,81,92,93,94,95,99,100,104,105,109,112,113],$VW=[1,119],$VX=[1,120],$VY=[5,18,19,20,22,23,24,25,27,28,29,30,31,32,33,34,36,37,52,54,56,57,58,61,63,65,67,69,71,73,74,76,77,78,79,81,82,84,92,93,94,95,99,100,104,105,109,112,113],$VZ=[1,121],$V_=[1,122],$V$=[1,123],$V01=[1,124],$V11=[5,18,19,20,22,23,24,25,27,28,29,30,31,32,33,34,36,37,52,54,56,57,58,61,63,65,67,69,71,73,74,76,77,78,79,81,82,84,85,87,88,89,92,93,94,95,99,100,104,105,109,112,113],$V21=[1,125],$V31=[5,18,19,20,22,23,24,25,27,28,29,30,31,32,33,34,36,37,52,54,56,57,58,61,63,65,67,69,71,73,74,76,77,78,79,81,82,84,85,87,88,89,90,92,93,94,95,99,100,104,105,109,112,113],$V41=[5,18,19,20,22,23,24,25,27,28,29,30,31,32,33,34,36,37,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,56,57,58,61,63,65,67,69,71,73,74,76,77,78,79,81,82,84,85,87,88,89,90,92,93,94,95,99,100,102,104,105,109,112,113],$V51=[1,169],$V61=[22,24,113],$V71=[1,191],$V81=[5,18,19,20,22,23,24,25,27,28,29,30,31,32,33,34,36,37,58,82,84,92,93,94,95,99,100,104,105,109,112,113],$V91=[1,203],$Va1=[22,24]; var parser = {trace: function trace () { }, yy: {}, -symbols_: {"error":2,"allStatments":3,"statmentList":4,"EOF":5,"statment":6,"functionDefinitionStatment":7,"templateDefinitionStatment":8,"ifStatment":9,"forStatment":10,"whileStatment":11,"doWhileStatment":12,"returnStatment":13,"block":14,"expressionStatment":15,"includeStatment":16,"function":17,"IDENTIFIER":18,"(":19,"identifierList":20,")":21,"template":22,",":23,"if":24,"expression":25,"else":26,"for":27,";":28,"while":29,"do":30,"return":31,"include":32,"STRING":33,"{":34,"}":35,"e17":36,"leftHandExpression":37,"=":38,"+=":39,"-=":40,"*=":41,"/=":42,"%=":43,"<<=":44,">>=":45,"&=":46,"|=":47,"^=":48,"<==":49,"==>":50,"<--":51,"-->":52,"e16":53,"===":54,"?":55,":":56,"rightArray":57,"e15":58,"||":59,"e14":60,"&&":61,"e13":62,"|":63,"e12":64,"^":65,"e11":66,"&":67,"e10":68,"==":69,"e9":70,"!=":71,"<=":72,"e7":73,">=":74,"<":75,">":76,"<<":77,"e6":78,">>":79,"+":80,"e5":81,"-":82,"*":83,"e4":84,"/":85,"\\\\":86,"%":87,"**":88,"e3":89,"++":90,"--":91,"!":92,"~":93,"e2":94,"functionCall":95,"e0":96,"DECNUMBER":97,"HEXNUMBER":98,"simpleLeftHandExpression":99,".":100,"declaration":101,"var":102,"signal":103,"input":104,"private":105,"output":106,"component":107,"array":108,"expressionList":109,"[":110,"]":111,"$accept":0,"$end":1}, -terminals_: {2:"error",5:"EOF",17:"function",18:"IDENTIFIER",19:"(",21:")",22:"template",23:",",24:"if",26:"else",27:"for",28:";",29:"while",30:"do",31:"return",32:"include",33:"STRING",34:"{",35:"}",38:"=",39:"+=",40:"-=",41:"*=",42:"/=",43:"%=",44:"<<=",45:">>=",46:"&=",47:"|=",48:"^=",49:"<==",50:"==>",51:"<--",52:"-->",54:"===",55:"?",56:":",59:"||",61:"&&",63:"|",65:"^",67:"&",69:"==",71:"!=",72:"<=",74:">=",75:"<",76:">",77:"<<",79:">>",80:"+",82:"-",83:"*",85:"/",86:"\\\\",87:"%",88:"**",90:"++",91:"--",92:"!",93:"~",97:"DECNUMBER",98:"HEXNUMBER",100:".",102:"var",103:"signal",104:"input",105:"private",106:"output",107:"component",110:"[",111:"]"}, -productions_: [0,[3,2],[4,2],[4,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[7,6],[7,5],[8,6],[8,5],[20,3],[20,1],[9,7],[9,5],[10,9],[11,5],[12,6],[13,3],[13,2],[16,3],[16,2],[14,3],[15,2],[15,1],[25,1],[36,3],[36,3],[36,3],[36,3],[36,3],[36,3],[36,3],[36,3],[36,3],[36,3],[36,3],[36,3],[36,3],[36,3],[36,3],[36,3],[36,5],[36,1],[53,1],[53,1],[58,3],[58,1],[60,3],[60,1],[62,3],[62,1],[64,3],[64,1],[66,3],[66,1],[68,3],[68,3],[68,1],[70,3],[70,3],[70,3],[70,3],[70,1],[73,3],[73,3],[73,1],[78,3],[78,3],[78,1],[81,3],[81,3],[81,3],[81,3],[81,1],[84,3],[84,1],[89,2],[89,2],[89,2],[89,2],[89,2],[89,2],[89,1],[94,2],[94,2],[94,1],[94,1],[96,1],[96,1],[96,1],[96,3],[37,3],[37,1],[37,1],[101,2],[101,2],[101,3],[101,4],[101,3],[101,2],[99,2],[99,1],[95,4],[95,3],[109,3],[109,1],[57,1],[108,3]], +symbols_: {"error":2,"allStatments":3,"statmentList":4,"EOF":5,"statment":6,"functionDefinitionStatment":7,"templateDefinitionStatment":8,"ifStatment":9,"forStatment":10,"whileStatment":11,"doWhileStatment":12,"computeStatment":13,"returnStatment":14,"block":15,"expressionStatment":16,"includeStatment":17,"function":18,"IDENTIFIER":19,"(":20,"identifierList":21,")":22,"template":23,",":24,"if":25,"expression":26,"else":27,"for":28,";":29,"while":30,"do":31,"compute":32,"return":33,"include":34,"STRING":35,"{":36,"}":37,"e17":38,"leftHandExpression":39,"=":40,"+=":41,"-=":42,"*=":43,"/=":44,"%=":45,"<<=":46,">>=":47,"&=":48,"|=":49,"^=":50,"<==":51,"==>":52,"<--":53,"-->":54,"e16":55,"===":56,"?":57,":":58,"rightArray":59,"e15":60,"||":61,"e14":62,"&&":63,"e13":64,"|":65,"e12":66,"^":67,"e11":68,"&":69,"e10":70,"==":71,"e9":72,"!=":73,"<=":74,"e7":75,">=":76,"<":77,">":78,"<<":79,"e6":80,">>":81,"+":82,"e5":83,"-":84,"*":85,"e4":86,"/":87,"\\\\":88,"%":89,"**":90,"e3":91,"++":92,"--":93,"!":94,"~":95,"e2":96,"functionCall":97,"e0":98,"DECNUMBER":99,"HEXNUMBER":100,"simpleLeftHandExpression":101,".":102,"declaration":103,"var":104,"signal":105,"input":106,"private":107,"output":108,"component":109,"array":110,"expressionList":111,"[":112,"]":113,"$accept":0,"$end":1}, +terminals_: {2:"error",5:"EOF",18:"function",19:"IDENTIFIER",20:"(",22:")",23:"template",24:",",25:"if",27:"else",28:"for",29:";",30:"while",31:"do",32:"compute",33:"return",34:"include",35:"STRING",36:"{",37:"}",40:"=",41:"+=",42:"-=",43:"*=",44:"/=",45:"%=",46:"<<=",47:">>=",48:"&=",49:"|=",50:"^=",51:"<==",52:"==>",53:"<--",54:"-->",56:"===",57:"?",58:":",61:"||",63:"&&",65:"|",67:"^",69:"&",71:"==",73:"!=",74:"<=",76:">=",77:"<",78:">",79:"<<",81:">>",82:"+",84:"-",85:"*",87:"/",88:"\\\\",89:"%",90:"**",92:"++",93:"--",94:"!",95:"~",99:"DECNUMBER",100:"HEXNUMBER",102:".",104:"var",105:"signal",106:"input",107:"private",108:"output",109:"component",112:"[",113:"]"}, +productions_: [0,[3,2],[4,2],[4,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[7,6],[7,5],[8,6],[8,5],[21,3],[21,1],[9,7],[9,5],[10,9],[11,5],[12,6],[13,2],[14,3],[14,2],[17,3],[17,2],[15,3],[16,2],[16,1],[26,1],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,5],[38,1],[55,1],[55,1],[60,3],[60,1],[62,3],[62,1],[64,3],[64,1],[66,3],[66,1],[68,3],[68,1],[70,3],[70,3],[70,1],[72,3],[72,3],[72,3],[72,3],[72,1],[75,3],[75,3],[75,1],[80,3],[80,3],[80,1],[83,3],[83,3],[83,3],[83,3],[83,1],[86,3],[86,1],[91,2],[91,2],[91,2],[91,2],[91,2],[91,2],[91,1],[96,2],[96,2],[96,1],[96,1],[98,1],[98,1],[98,1],[98,3],[39,3],[39,1],[39,1],[103,2],[103,2],[103,3],[103,4],[103,3],[103,2],[101,2],[101,1],[97,4],[97,3],[111,3],[111,1],[59,1],[110,3]], performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { /* this == yyval */ @@ -103,48 +103,48 @@ case 3: setLines(this.$, _$[$0]); break; -case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 31: case 32: case 60: case 62: case 76: case 81: case 83: case 90: case 93: case 94: case 114: +case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 33: case 34: case 62: case 64: case 78: case 83: case 85: case 92: case 95: case 96: case 116: this.$ = $$[$0]; break; -case 14: +case 15: this.$ = { type: "FUNCTIONDEF", name: $$[$0-4], params: $$[$0-2].identifiers, block: $$[$0]}; setLines(this.$, _$[$0-5], _$[$0]); break; -case 15: +case 16: this.$ = { type: "FUNCTIONDEF", name: $$[$0-3], params: [], block: $$[$0] }; setLines(this.$, _$[$0-4], _$[$0]); break; -case 16: +case 17: this.$ = { type: "TEMPLATEDEF", name: $$[$0-4], params: $$[$0-2].identifiers, block: $$[$0] }; setLines(this.$, _$[$0-5], _$[$0]); break; -case 17: +case 18: this.$ = { type: "TEMPLATEDEF", name: $$[$0-3], params: [], block: $$[$0] }; setLines(this.$, _$[$0-4], _$[$0]); break; -case 18: +case 19: $$[$0-2].identifiers.push($$[$0]); setLines($$[$0-2], _$[$0-2], _$[$0]); break; -case 19: +case 20: this.$ = { type: "IDENTIFIERLIST", identifiers: [$$[$0]] }; setLines(this.$, _$[$0]); break; -case 20: +case 21: if ($$[$0-4].type == "NUMBER") { this.$ = !$$[$0-4].value.eq(0) ? $$[$0-2] : $$[$0]; @@ -154,7 +154,7 @@ case 20: setLines(this.$, _$[$0-6], _$[$0]); break; -case 21: +case 22: if ($$[$0-2].type == "NUMBER") { this.$ = !$$[$0-2].value.eq(0) ? $$[$0] : { type: "NUMBER", value: bigInt(0) }; @@ -164,156 +164,162 @@ case 21: setLines(this.$, _$[$0-4], _$[$0]); break; -case 22: +case 23: this.$ = { type: "FOR", init: $$[$0-6], condition: $$[$0-4], step: $$[$0-2], body: $$[$0] }; setLines(this.$, _$[$0-8], _$[$0]); break; -case 23: +case 24: this.$ = { type: "WHILE", condition: $$[$0-2], body: $$[$0] }; setLines(this.$, _$[$0-4], _$[$0]); break; -case 24: +case 25: this.$ = { type: "DOWHILE", condition: $$[$0-1], body: $$[$0-4] }; setLines(this.$, _$[$0-5], _$[$0]); break; -case 25: +case 26: + + this.$ = { type: "COMPUTE", body: $$[$0] }; + setLines(this.$, _$[$0-1], _$[$0]); + +break; +case 27: this.$ = { type: "RETURN", value: $$[$0-1] }; setLines(this.$, _$[$0-2], _$[$0]); break; -case 26: +case 28: this.$ = { type: "RETURN", value: $$[$0] } setLines(this.$, _$[$0-1], _$[$0]); break; -case 27: +case 29: this.$ = { type: "INCLUDE", file: $$[$0-1] }; setLines(this.$, _$[$0-2], _$[$0]); break; -case 28: +case 30: this.$ = { type: "INCLUDE", file: $$[$0] } setLines(this.$, _$[$0-1], _$[$0]); break; -case 29: +case 31: this.$ = { type: "BLOCK", statements: $$[$0-1].statments }; setLines(this.$, _$[$0-2], _$[$0]); break; -case 30: +case 32: this.$ = $$[$0-1]; break; -case 33: +case 35: this.$ = { type: "OP", op: "=", values: [$$[$0-2], $$[$0]] }; setLines(this.$, _$[$0-2], _$[$0]); break; -case 34: +case 36: this.$ = { type: "OP", op: "+=", values: [$$[$0-2], $$[$0]] }; setLines(this.$, _$[$0-2], _$[$0]); break; -case 35: +case 37: this.$ = { type: "OP", op: "-=", values: [$$[$0-2], $$[$0]] }; setLines(this.$, _$[$0-2], _$[$0]); break; -case 36: +case 38: this.$ = { type: "OP", op: "*=", values: [$$[$0-2], $$[$0]] }; setLines(this.$, _$[$0-2], _$[$0]); break; -case 37: +case 39: this.$ = { type: "OP", op: "/=", values: [$$[$0-2], $$[$0]] }; setLines(this.$, _$[$0-2], _$[$0]); break; -case 38: +case 40: this.$ = { type: "OP", op: "%=", values: [$$[$0-2], $$[$0]] }; setLines(this.$, _$[$0-2], _$[$0]); break; -case 39: +case 41: this.$ = { type: "OP", op: "<<=", values: [$$[$0-2], $$[$0]] }; setLines(this.$, _$[$0-2], _$[$0]); break; -case 40: +case 42: this.$ = { type: "OP", op: ">>=", values: [$$[$0-2], $$[$0]] }; setLines(this.$, _$[$0-2], _$[$0]); break; -case 41: +case 43: this.$ = { type: "OP", op: "&=", values: [$$[$0-2], $$[$0]] }; setLines(this.$, _$[$0-2], _$[$0]); break; -case 42: +case 44: this.$ = { type: "OP", op: "|=", values: [$$[$0-2], $$[$0]] }; setLines(this.$, _$[$0-2], _$[$0]); break; -case 43: +case 45: this.$ = { type: "OP", op: "^=", values: [$$[$0-2], $$[$0]] }; setLines(this.$, _$[$0-2], _$[$0]); break; -case 44: +case 46: this.$ = { type: "OP", op: "<==", values: [$$[$0-2], $$[$0]] }; setLines(this.$, _$[$0-2], _$[$0]); break; -case 45: +case 47: this.$ = { type: "OP", op: "<==", values: [$$[$0], $$[$0-2]] }; setLines(this.$, _$[$0-2], _$[$0]); break; -case 46: +case 48: this.$ = { type: "OP", op: "<--", values: [$$[$0-2], $$[$0]] }; setLines(this.$, _$[$0-2], _$[$0]); break; -case 47: +case 49: this.$ = { type: "OP", op: "<--", values: [$$[$0], $$[$0-2]] }; setLines(this.$, _$[$0-2], _$[$0]); break; -case 48: +case 50: this.$ = { type: "OP", op: "===", values: [$$[$0-2], $$[$0]] }; setLines(this.$, _$[$0-2], _$[$0]); break; -case 49: +case 51: if ($$[$0-4].type == "NUMBER") { this.$ = !$$[$0-4].value.eq(0) ? $$[$0-2] : $$[$0]; @@ -323,12 +329,12 @@ case 49: setLines(this.$, _$[$0-4], _$[$0]); break; -case 50: case 51: case 52: case 54: case 56: case 58: +case 52: case 53: case 54: case 56: case 58: case 60: this.$ = $$[$0]; break; -case 53: +case 55: if (($$[$0-2].type == "NUMBER") && ($$[$0].type == "NUMBER")) { this.$ = { type: "NUMBER", value: !$$[$0-2].value.eq(0) || !$$[$0].value.eq(0) ? bigInt(1) : bigInt(0) }; @@ -338,7 +344,7 @@ case 53: setLines(this.$, _$[$0-2], _$[$0]); break; -case 55: +case 57: if (($$[$0-2].type == "NUMBER") && ($$[$0].type == "NUMBER")) { this.$ = { type: "NUMBER", value: !$$[$0-2].value.eq(0) && !$$[$0].value.eq(0) ? bigInt(1) : bigInt(0) }; @@ -348,7 +354,7 @@ case 55: setLines(this.$, _$[$0-2], _$[$0]); break; -case 57: +case 59: if (($$[$0-2].type == "NUMBER") && ($$[$0].type == "NUMBER")) { this.$ = { type: "NUMBER", value: $$[$0-2].value.or($$[$0].value).and(__MASK__) }; @@ -358,7 +364,7 @@ case 57: setLines(this.$, _$[$0-2], _$[$0]); break; -case 59: +case 61: if (($$[$0-2].type == "NUMBER") && ($$[$0].type == "NUMBER")) { this.$ = { type: "NUMBER", value: $$[$0-2].value.xor($$[$0].value).and(__MASK__) }; @@ -368,7 +374,7 @@ case 59: setLines(this.$, _$[$0-2], _$[$0]); break; -case 61: +case 63: if (($$[$0-2].type == "NUMBER") && ($$[$0].type == "NUMBER")) { this.$ = { type: "NUMBER", value: $$[$0-2].value.and($$[$0].value).and(__MASK__) }; @@ -378,7 +384,7 @@ case 61: setLines(this.$, _$[$0-2], _$[$0]); break; -case 63: +case 65: if (($$[$0-2].type == "NUMBER") && ($$[$0].type == "NUMBER")) { this.$ = { type: "NUMBER", value: $$[$0-2].value.equals($$[$0].value) ? bigInt(1) : bigInt(0) }; @@ -388,7 +394,7 @@ case 63: setLines(this.$, _$[$0-2], _$[$0]); break; -case 64: +case 66: if (($$[$0-2].type == "NUMBER") && ($$[$0].type == "NUMBER")) { this.$ = { type: "NUMBER", value: $$[$0-2].value.eq($$[$0].value) ? bigInt(0) : bigInt(1) }; @@ -398,12 +404,12 @@ case 64: setLines(this.$, _$[$0-2], _$[$0]); break; -case 65: case 70: +case 67: case 72: this.$ = $$[$0] break; -case 66: +case 68: if (($$[$0-2].type == "NUMBER") && ($$[$0].type == "NUMBER")) { this.$ = { type: "NUMBER", value: $$[$0-2].value.lesserOrEquals($$[$0].value) ? bigInt(1) : bigInt(0) }; @@ -413,7 +419,7 @@ case 66: setLines(this.$, _$[$0-2], _$[$0]); break; -case 67: +case 69: if (($$[$0-2].type == "NUMBER") && ($$[$0].type == "NUMBER")) { this.$ = { type: "NUMBER", value: $$[$0-2].value.greaterOrEquals($$[$0].value) ? bigInt(1) : bigInt(0) }; @@ -423,7 +429,7 @@ case 67: setLines(this.$, _$[$0-2], _$[$0]); break; -case 68: +case 70: if (($$[$0-2].type == "NUMBER") && ($$[$0].type == "NUMBER")) { this.$ = { type: "NUMBER", value: $$[$0-2].value.lesser($$[$0].value) ? bigInt(1) : bigInt(0) }; @@ -433,7 +439,7 @@ case 68: setLines(this.$, _$[$0-2], _$[$0]); break; -case 69: +case 71: if (($$[$0-2].type == "NUMBER") && ($$[$0].type == "NUMBER")) { this.$ = { type: "NUMBER", value: $$[$0-2].value.greater($$[$0].value) ? bigInt(1) : bigInt(0) }; @@ -443,7 +449,7 @@ case 69: setLines(this.$, _$[$0-2], _$[$0]); break; -case 71: +case 73: if (($$[$0-2].type == "NUMBER") && ($$[$0].type == "NUMBER")) { let v = $$[$0].value.greater(256) ? 256 : $$[$0].value.value; @@ -454,7 +460,7 @@ case 71: setLines(this.$, _$[$0-2], _$[$0]); break; -case 72: +case 74: if (($$[$0-2].type == "NUMBER") && ($$[$0].type == "NUMBER")) { let v = $$[$0].value.greater(256) ? 256 : $$[$0].value.value; @@ -465,12 +471,12 @@ case 72: setLines(this.$, _$[$0-2], _$[$0]); break; -case 73: +case 75: this.$ = $$[$0]; break; -case 74: +case 76: if (($$[$0-2].type == "NUMBER") && ($$[$0].type == "NUMBER")) { this.$ = { type: "NUMBER", value: ($$[$0-2].value.plus($$[$0].value)).mod(__P__) }; @@ -480,7 +486,7 @@ case 74: setLines(this.$, _$[$0-2], _$[$0]); break; -case 75: +case 77: if (($$[$0-2].type == "NUMBER") && ($$[$0].type == "NUMBER")) { this.$ = { type: "NUMBER", value: ($$[$0-2].value.plus(__P__).minus($$[$0].value)).mod(__P__) }; @@ -490,7 +496,7 @@ case 75: setLines(this.$, _$[$0-2], _$[$0]); break; -case 77: +case 79: if (($$[$0-2].type == "NUMBER") && ($$[$0].type == "NUMBER")) { this.$ = { type: "NUMBER", value: ($$[$0-2].value.times($$[$0].value)).mod(__P__) }; @@ -500,7 +506,7 @@ case 77: setLines(this.$, _$[$0-2], _$[$0]); break; -case 78: +case 80: if (($$[$0-2].type == "NUMBER") && ($$[$0].type == "NUMBER")) { this.$ = { type: "NUMBER", value: ($$[$0-2].value.times($$[$0].value.modInv(__P__))).mod(__P__) }; @@ -510,7 +516,7 @@ case 78: setLines(this.$, _$[$0-2], _$[$0]); break; -case 79: +case 81: if (($$[$0-2].type == "NUMBER") && ($$[$0].type == "NUMBER")) { this.$ = { type: "NUMBER", value: ($$[$0-2].value.divide($$[$0].value)) }; @@ -520,7 +526,7 @@ case 79: setLines(this.$, _$[$0-2], _$[$0]); break; -case 80: +case 82: if (($$[$0-2].type == "NUMBER") && ($$[$0].type == "NUMBER")) { this.$ = { type: "NUMBER", value: $$[$0-2].value.mod($$[$0].value) }; @@ -530,7 +536,7 @@ case 80: setLines(this.$, _$[$0-2], _$[$0]); break; -case 82: +case 84: if (($$[$0-2].type == "NUMBER") && ($$[$0].type == "NUMBER")) { this.$ = { type: "NUMBER", value: $$[$0-2].value.modPow($$[$0].value, __P__) }; @@ -540,25 +546,25 @@ case 82: setLines(this.$, _$[$0-2], _$[$0]); break; -case 84: +case 86: this.$ = { type: "OP", op: "PLUSPLUSLEFT", values: [$$[$0]] }; setLines(this.$, _$[$0-1], _$[$0]); break; -case 85: +case 87: this.$ = { type: "OP", op: "MINUSMINUSLEFT", values: [$$[$0]] }; setLines(this.$, _$[$0-1], _$[$0]); break; -case 86: +case 88: this.$ = $$[$0]; setLines(this.$, _$[$0-1], _$[$0]); break; -case 87: +case 89: if ($$[$0].type == "NUMBER") { this.$ = { type: "NUMBER", value: __P__.minus($$[$0].value).mod(__P__) }; @@ -568,7 +574,7 @@ case 87: setLines(this.$, _$[$0-1], _$[$0]); break; -case 88: +case 90: if ($$[$0].type == "NUMBER") { this.$ = { type: "NUMBER", value: $$[$0].value.eq(0) ? bigInt(1) : bigInt(0) }; @@ -578,7 +584,7 @@ case 88: setLines(this.$, _$[$0-1], _$[$0]); break; -case 89: +case 91: if ($$[$0].type == "NUMBER") { this.$ = { type: "NUMBER", value: $$[$0].value.xor(__MASK__) }; @@ -588,84 +594,84 @@ case 89: setLines(this.$, _$[$0-1], _$[$0]); break; -case 91: +case 93: this.$ = {type: "OP", op: "PLUSPLUSRIGHT", values: [$$[$0-1]] }; setLines(this.$, _$[$0-1], _$[$0]); break; -case 92: +case 94: this.$ = {type: "OP", op: "MINUSMINUSRIGHT", values: [$$[$0-1]] }; setLines(this.$, _$[$0-1], _$[$0]); break; -case 95: case 100: case 101: +case 97: case 102: case 103: this.$ = $$[$0] break; -case 96: +case 98: this.$ = {type: "NUMBER", value: bigInt($$[$0]).mod(__P__) } setLines(this.$, _$[$0]); break; -case 97: +case 99: this.$ = {type: "NUMBER", value: bigInt($$[$0].substr(2).toUpperCase(), 16).mod(__P__) } setLines(this.$, _$[$0]); break; -case 98: +case 100: this.$ = $$[$0-1]; setLines(this.$, _$[$0-2], _$[$0]); break; -case 99: +case 101: this.$ = {type: "PIN", component: $$[$0-2], pin: $$[$0] }; setLines(this.$, _$[$0-2], _$[$0]); break; -case 102: +case 104: this.$ = {type: "DECLARE", declareType: "VARIABLE", name: $$[$0]} setLines(this.$, _$[$0-1], _$[$0]); break; -case 103: +case 105: this.$ = {type: "DECLARE", declareType: "SIGNAL", name: $$[$0]} setLines(this.$, _$[$0-1], _$[$0]); break; -case 104: +case 106: this.$ = {type: "DECLARE", declareType: "SIGNALIN", name: $$[$0]}; setLines(this.$, _$[$0-2], _$[$0]); break; -case 105: +case 107: this.$ = {type: "DECLARE", declareType: "SIGNALIN", private: true, name: $$[$0]}; setLines(this.$, _$[$0-3], _$[$0]); break; -case 106: +case 108: this.$ = {type: "DECLARE", declareType: "SIGNALOUT", name: $$[$0]}; setLines(this.$, _$[$0-2], _$[$0]); break; -case 107: +case 109: this.$ = {type: "DECLARE", declareType: "COMPONENT", name: $$[$0]} setLines(this.$, _$[$0-1], _$[$0]); break; -case 108: +case 110: for (let i=0; i< $$[$0].values.length; i++) { $$[$0-1].selectors.push($$[$0].values[i]); @@ -673,37 +679,37 @@ case 108: setLines($$[$0-1], _$[$0-1], _$[$0]); break; -case 109: +case 111: this.$ = {type: "VARIABLE", name: $$[$0] , selectors: []}; setLines(this.$, _$[$0]); break; -case 110: +case 112: this.$ = {type: "FUNCTIONCALL", name: $$[$0-3], params: $$[$0-1].expressions} setLines(this.$, _$[$0-3], _$[$0]); break; -case 111: +case 113: this.$ = {type: "FUNCTIONCALL", name: $$[$0-2], params: []} setLines(this.$, _$[$0-2], _$[$0]); break; -case 112: +case 114: $$[$0-2].expressions.push($$[$0]); setLines(this.$, _$[$0-2], _$[$0]); break; -case 113: +case 115: this.$ = {type: "EXPRESSIONLST", expressions: [$$[$0]]}; setLines(this.$, _$[$0]); break; -case 115: +case 117: this.$ = { type: "ARRAY", values: $$[$0-1].expressions}; setLines(this.$, _$[$0-2], _$[$0]); @@ -711,8 +717,8 @@ case 115: break; } }, -table: [{3:1,4:2,6:3,7:4,8:5,9:6,10:7,11:8,12:9,13:10,14:11,15:12,16:13,17:$V0,18:$V1,19:$V2,22:$V3,24:$V4,25:22,27:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:24,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},{1:[3]},{5:[1,60],6:61,7:4,8:5,9:6,10:7,11:8,12:9,13:10,14:11,15:12,16:13,17:$V0,18:$V1,19:$V2,22:$V3,24:$V4,25:22,27:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:24,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},o($Vn,[2,3]),o($Vo,[2,4]),o($Vo,[2,5]),o($Vo,[2,6]),o($Vo,[2,7]),o($Vo,[2,8]),o($Vo,[2,9]),o($Vo,[2,10]),o($Vo,[2,11]),o($Vo,[2,12]),o($Vo,[2,13]),{18:[1,62]},{18:[1,63]},{19:[1,64]},{19:[1,65]},{19:[1,66]},{6:67,7:4,8:5,9:6,10:7,11:8,12:9,13:10,14:11,15:12,16:13,17:$V0,18:$V1,19:$V2,22:$V3,24:$V4,25:22,27:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:24,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},{18:$V1,19:$V2,25:68,36:24,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},{4:69,6:3,7:4,8:5,9:6,10:7,11:8,12:9,13:10,14:11,15:12,16:13,17:$V0,18:$V1,19:$V2,22:$V3,24:$V4,25:22,27:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:24,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},o($Vo,[2,31],{28:[1,70]}),{33:[1,71]},o([5,17,18,19,21,22,23,24,26,27,28,29,30,31,32,34,35,80,82,90,91,92,93,97,98,102,103,107,110,111],[2,32],{50:$Vp,52:$Vq,55:$Vr}),o($Vs,$Vt,{38:[1,75],39:[1,76],40:[1,77],41:[1,78],42:[1,79],43:[1,80],44:[1,81],45:[1,82],46:[1,83],47:[1,84],48:[1,85],49:[1,86],51:[1,87],90:$Vu,91:$Vv}),o($Vw,[2,50],{54:[1,90]}),o($Vx,[2,101],{108:92,100:[1,91],110:$Vm}),o([5,17,18,19,21,22,23,24,26,27,28,29,30,31,32,34,35,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,54,55,56,59,61,63,65,67,69,71,72,74,75,76,77,79,80,82,83,85,86,87,88,90,91,92,93,97,98,102,103,107,110,111],[2,100]),o($Vy,[2,51]),o($Vy,[2,52],{59:[1,93]}),o([5,17,18,21,22,23,24,26,27,28,29,30,31,32,34,35,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,54,55,56,59,61,63,65,67,69,71,72,74,75,76,77,79,80,82,83,85,86,87,88,90,91,92,93,97,98,100,102,103,107,110,111],$Vz,{19:[1,94]}),{18:$VA,99:95},{18:$VA,99:97,104:[1,98],105:[1,99],106:[1,100]},{18:$VA,99:101},o($Vy,[2,114]),o($VB,[2,54],{61:$VC}),{18:$V1,19:$V2,25:104,36:24,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,109:103,110:$Vm},o($VD,[2,56],{63:$VE}),o($VF,[2,58],{65:$VG}),o($VH,[2,60],{67:$VI}),o($VJ,[2,62],{69:$VK,71:$VL}),o($VM,[2,65],{72:$VN,74:$VO,75:$VP,76:$VQ}),o($VR,[2,70],{77:$VS,79:$VT}),o($VU,[2,73],{80:$VV,82:$VW}),o($VX,[2,76],{83:$VY,85:$VZ,86:$V_,87:$V$}),o($V01,[2,81],{88:$V11}),o($V21,[2,83]),{18:$VA,37:123,99:27,101:28,102:$Vj,103:$Vk,107:$Vl},{18:$VA,37:124,99:27,101:28,102:$Vj,103:$Vk,107:$Vl},{18:$V1,19:$V2,37:126,80:$Vb,82:$Vc,89:125,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl},{18:$V1,19:$V2,37:126,80:$Vb,82:$Vc,89:127,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl},{18:$V1,19:$V2,37:126,80:$Vb,82:$Vc,89:128,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl},{18:$V1,19:$V2,37:126,80:$Vb,82:$Vc,89:129,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl},o($V21,[2,90]),o($V21,[2,93]),o($V21,[2,94]),o($V21,[2,96]),o($V21,[2,97]),{18:$V1,19:$V2,25:130,36:24,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},{1:[2,1]},o($Vn,[2,2]),{19:[1,131]},{19:[1,132]},{18:$V1,19:$V2,25:133,36:24,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},{18:$V1,19:$V2,25:134,36:24,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},{18:$V1,19:$V2,25:135,36:24,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},{29:[1,136]},o($Vo,[2,26],{28:[1,137]}),{6:61,7:4,8:5,9:6,10:7,11:8,12:9,13:10,14:11,15:12,16:13,17:$V0,18:$V1,19:$V2,22:$V3,24:$V4,25:22,27:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,35:[1,138],36:24,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},o($Vo,[2,30]),o($Vo,[2,28],{28:[1,139]}),{18:$VA,37:140,99:27,101:28,102:$Vj,103:$Vk,107:$Vl},{18:$VA,37:141,99:27,101:28,102:$Vj,103:$Vk,107:$Vl},{18:$V1,19:$V2,36:142,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},{18:$V1,19:$V2,36:143,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},{18:$V1,19:$V2,36:144,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},{18:$V1,19:$V2,36:145,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},{18:$V1,19:$V2,36:146,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},{18:$V1,19:$V2,36:147,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},{18:$V1,19:$V2,36:148,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},{18:$V1,19:$V2,36:149,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},{18:$V1,19:$V2,36:150,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},{18:$V1,19:$V2,36:151,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},{18:$V1,19:$V2,36:152,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},{18:$V1,19:$V2,36:153,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},{18:$V1,19:$V2,36:154,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},{18:$V1,19:$V2,36:155,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},o($V21,[2,91]),o($V21,[2,92]),{18:$V1,19:$V2,36:156,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},{18:$VA,99:157},o($V31,[2,108]),{18:$V1,19:$V2,37:126,60:158,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl},{18:$V1,19:$V2,21:[1,160],25:104,36:24,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,109:159,110:$Vm},o($Vx,[2,102],{108:92,110:$Vm}),o($V31,$Vz),o($Vx,[2,103],{108:92,110:$Vm}),{18:$VA,99:161},{104:[1,162]},{18:$VA,99:163},o($Vx,[2,107],{108:92,110:$Vm}),{18:$V1,19:$V2,37:126,62:164,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl},{23:$V41,111:[1,165]},o($V51,[2,113]),{18:$V1,19:$V2,37:126,64:167,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl},{18:$V1,19:$V2,37:126,66:168,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl},{18:$V1,19:$V2,37:126,68:169,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl},{18:$V1,19:$V2,37:126,70:170,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl},{18:$V1,19:$V2,37:126,70:171,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl},{18:$V1,19:$V2,37:126,73:172,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl},{18:$V1,19:$V2,37:126,73:173,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl},{18:$V1,19:$V2,37:126,73:174,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl},{18:$V1,19:$V2,37:126,73:175,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl},{18:$V1,19:$V2,37:126,78:176,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl},{18:$V1,19:$V2,37:126,78:177,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl},{18:$V1,19:$V2,37:126,80:$Vb,81:178,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl},{18:$V1,19:$V2,37:126,80:$Vb,81:179,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl},{18:$V1,19:$V2,37:126,80:$Vb,82:$Vc,84:180,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl},{18:$V1,19:$V2,37:126,80:$Vb,82:$Vc,84:181,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl},{18:$V1,19:$V2,37:126,80:$Vb,82:$Vc,84:182,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl},{18:$V1,19:$V2,37:126,80:$Vb,82:$Vc,84:183,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl},{18:$V1,19:$V2,37:126,80:$Vb,82:$Vc,89:184,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl},o($V21,[2,84]),o($V21,[2,85]),o($V21,[2,86]),o($Vs,$Vt,{90:$Vu,91:$Vv}),o($V21,[2,87]),o($V21,[2,88]),o($V21,[2,89]),{21:[1,185]},{18:$V61,20:186,21:[1,187]},{18:$V61,20:189,21:[1,190]},{21:[1,191]},{28:[1,192]},{21:[1,193]},{19:[1,194]},o($Vo,[2,25]),o($Vo,[2,29]),o($Vo,[2,27]),o($Vw,[2,45]),o($Vw,[2,47]),{50:$Vp,52:$Vq,55:$Vr,56:[1,195]},o($V71,[2,33],{50:$Vp,52:$Vq,55:$Vr}),o($V71,[2,34],{50:$Vp,52:$Vq,55:$Vr}),o($V71,[2,35],{50:$Vp,52:$Vq,55:$Vr}),o($V71,[2,36],{50:$Vp,52:$Vq,55:$Vr}),o($V71,[2,37],{50:$Vp,52:$Vq,55:$Vr}),o($V71,[2,38],{50:$Vp,52:$Vq,55:$Vr}),o($V71,[2,39],{50:$Vp,52:$Vq,55:$Vr}),o($V71,[2,40],{50:$Vp,52:$Vq,55:$Vr}),o($V71,[2,41],{50:$Vp,52:$Vq,55:$Vr}),o($V71,[2,42],{50:$Vp,52:$Vq,55:$Vr}),o($V71,[2,43],{50:$Vp,52:$Vq,55:$Vr}),o($V71,[2,44],{50:$Vp,52:$Vq,55:$Vr}),o($V71,[2,46],{50:$Vp,52:$Vq,55:$Vr}),o($V71,[2,48],{50:$Vp,52:$Vq,55:$Vr}),o($Vx,[2,99],{108:92,110:$Vm}),o($VB,[2,53],{61:$VC}),{21:[1,196],23:$V41},o($V21,[2,111]),o($Vx,[2,104],{108:92,110:$Vm}),{18:$VA,99:197},o($Vx,[2,106],{108:92,110:$Vm}),o($VD,[2,55],{63:$VE}),o($V31,[2,115]),{18:$V1,19:$V2,25:198,36:24,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},o($VF,[2,57],{65:$VG}),o($VH,[2,59],{67:$VI}),o($VJ,[2,61],{69:$VK,71:$VL}),o($VM,[2,63],{72:$VN,74:$VO,75:$VP,76:$VQ}),o($VM,[2,64],{72:$VN,74:$VO,75:$VP,76:$VQ}),o($VR,[2,66],{77:$VS,79:$VT}),o($VR,[2,67],{77:$VS,79:$VT}),o($VR,[2,68],{77:$VS,79:$VT}),o($VR,[2,69],{77:$VS,79:$VT}),o($VU,[2,71],{80:$VV,82:$VW}),o($VU,[2,72],{80:$VV,82:$VW}),o($VX,[2,74],{83:$VY,85:$VZ,86:$V_,87:$V$}),o($VX,[2,75],{83:$VY,85:$VZ,86:$V_,87:$V$}),o($V01,[2,77],{88:$V11}),o($V01,[2,78],{88:$V11}),o($V01,[2,79],{88:$V11}),o($V01,[2,80],{88:$V11}),o($V21,[2,82]),o($V21,[2,98]),{21:[1,199],23:$V81},{14:201,34:$Va},o($V91,[2,19]),{21:[1,202],23:$V81},{14:203,34:$Va},{6:204,7:4,8:5,9:6,10:7,11:8,12:9,13:10,14:11,15:12,16:13,17:$V0,18:$V1,19:$V2,22:$V3,24:$V4,25:22,27:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:24,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},{18:$V1,19:$V2,25:205,36:24,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},{6:206,7:4,8:5,9:6,10:7,11:8,12:9,13:10,14:11,15:12,16:13,17:$V0,18:$V1,19:$V2,22:$V3,24:$V4,25:22,27:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:24,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},{18:$V1,19:$V2,25:207,36:24,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},{18:$V1,19:$V2,36:208,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},o($V21,[2,110]),o($Vx,[2,105],{108:92,110:$Vm}),o($V51,[2,112]),{14:209,34:$Va},{18:[1,210]},o($Vo,[2,15]),{14:211,34:$Va},o($Vo,[2,17]),o($Vn,[2,21],{26:[1,212]}),{28:[1,213]},o($Vo,[2,23]),{21:[1,214]},o($V71,[2,49],{50:$Vp,52:$Vq,55:$Vr}),o($Vo,[2,14]),o($V91,[2,18]),o($Vo,[2,16]),{6:215,7:4,8:5,9:6,10:7,11:8,12:9,13:10,14:11,15:12,16:13,17:$V0,18:$V1,19:$V2,22:$V3,24:$V4,25:22,27:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:24,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},{18:$V1,19:$V2,25:216,36:24,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},o($Vo,[2,24]),o($Vo,[2,20]),{21:[1,217]},{6:218,7:4,8:5,9:6,10:7,11:8,12:9,13:10,14:11,15:12,16:13,17:$V0,18:$V1,19:$V2,22:$V3,24:$V4,25:22,27:$V5,29:$V6,30:$V7,31:$V8,32:$V9,34:$Va,36:24,37:25,53:26,57:29,58:30,60:36,62:38,64:39,66:40,68:41,70:42,73:43,78:44,80:$Vb,81:45,82:$Vc,84:46,89:47,90:$Vd,91:$Ve,92:$Vf,93:$Vg,94:54,95:55,96:56,97:$Vh,98:$Vi,99:27,101:28,102:$Vj,103:$Vk,107:$Vl,108:35,110:$Vm},o($Vo,[2,22])], -defaultActions: {60:[2,1]}, +table: [{3:1,4:2,6:3,7:4,8:5,9:6,10:7,11:8,12:9,13:10,14:11,15:12,16:13,17:14,18:$V0,19:$V1,20:$V2,23:$V3,25:$V4,26:24,28:$V5,30:$V6,31:$V7,32:$V8,33:$V9,34:$Va,36:$Vb,38:26,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},{1:[3]},{5:[1,62],6:63,7:4,8:5,9:6,10:7,11:8,12:9,13:10,14:11,15:12,16:13,17:14,18:$V0,19:$V1,20:$V2,23:$V3,25:$V4,26:24,28:$V5,30:$V6,31:$V7,32:$V8,33:$V9,34:$Va,36:$Vb,38:26,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},o($Vo,[2,3]),o($Vp,[2,4]),o($Vp,[2,5]),o($Vp,[2,6]),o($Vp,[2,7]),o($Vp,[2,8]),o($Vp,[2,9]),o($Vp,[2,10]),o($Vp,[2,11]),o($Vp,[2,12]),o($Vp,[2,13]),o($Vp,[2,14]),{19:[1,64]},{19:[1,65]},{20:[1,66]},{20:[1,67]},{20:[1,68]},{6:69,7:4,8:5,9:6,10:7,11:8,12:9,13:10,14:11,15:12,16:13,17:14,18:$V0,19:$V1,20:$V2,23:$V3,25:$V4,26:24,28:$V5,30:$V6,31:$V7,32:$V8,33:$V9,34:$Va,36:$Vb,38:26,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},{6:70,7:4,8:5,9:6,10:7,11:8,12:9,13:10,14:11,15:12,16:13,17:14,18:$V0,19:$V1,20:$V2,23:$V3,25:$V4,26:24,28:$V5,30:$V6,31:$V7,32:$V8,33:$V9,34:$Va,36:$Vb,38:26,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},{19:$V1,20:$V2,26:71,38:26,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},{4:72,6:3,7:4,8:5,9:6,10:7,11:8,12:9,13:10,14:11,15:12,16:13,17:14,18:$V0,19:$V1,20:$V2,23:$V3,25:$V4,26:24,28:$V5,30:$V6,31:$V7,32:$V8,33:$V9,34:$Va,36:$Vb,38:26,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},o($Vp,[2,33],{29:[1,73]}),{35:[1,74]},o([5,18,19,20,22,23,24,25,27,28,29,30,31,32,33,34,36,37,82,84,92,93,94,95,99,100,104,105,109,112,113],[2,34],{52:$Vq,54:$Vr,57:$Vs}),o($Vt,$Vu,{40:[1,78],41:[1,79],42:[1,80],43:[1,81],44:[1,82],45:[1,83],46:[1,84],47:[1,85],48:[1,86],49:[1,87],50:[1,88],51:[1,89],53:[1,90],92:$Vv,93:$Vw}),o($Vx,[2,52],{56:[1,93]}),o($Vy,[2,103],{110:95,102:[1,94],112:$Vn}),o([5,18,19,20,22,23,24,25,27,28,29,30,31,32,33,34,36,37,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,56,57,58,61,63,65,67,69,71,73,74,76,77,78,79,81,82,84,85,87,88,89,90,92,93,94,95,99,100,104,105,109,112,113],[2,102]),o($Vz,[2,53]),o($Vz,[2,54],{61:[1,96]}),o([5,18,19,22,23,24,25,27,28,29,30,31,32,33,34,36,37,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,56,57,58,61,63,65,67,69,71,73,74,76,77,78,79,81,82,84,85,87,88,89,90,92,93,94,95,99,100,102,104,105,109,112,113],$VA,{20:[1,97]}),{19:$VB,101:98},{19:$VB,101:100,106:[1,101],107:[1,102],108:[1,103]},{19:$VB,101:104},o($Vz,[2,116]),o($VC,[2,56],{63:$VD}),{19:$V1,20:$V2,26:107,38:26,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,111:106,112:$Vn},o($VE,[2,58],{65:$VF}),o($VG,[2,60],{67:$VH}),o($VI,[2,62],{69:$VJ}),o($VK,[2,64],{71:$VL,73:$VM}),o($VN,[2,67],{74:$VO,76:$VP,77:$VQ,78:$VR}),o($VS,[2,72],{79:$VT,81:$VU}),o($VV,[2,75],{82:$VW,84:$VX}),o($VY,[2,78],{85:$VZ,87:$V_,88:$V$,89:$V01}),o($V11,[2,83],{90:$V21}),o($V31,[2,85]),{19:$VB,39:126,101:29,103:30,104:$Vk,105:$Vl,109:$Vm},{19:$VB,39:127,101:29,103:30,104:$Vk,105:$Vl,109:$Vm},{19:$V1,20:$V2,39:129,82:$Vc,84:$Vd,91:128,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm},{19:$V1,20:$V2,39:129,82:$Vc,84:$Vd,91:130,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm},{19:$V1,20:$V2,39:129,82:$Vc,84:$Vd,91:131,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm},{19:$V1,20:$V2,39:129,82:$Vc,84:$Vd,91:132,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm},o($V31,[2,92]),o($V31,[2,95]),o($V31,[2,96]),o($V31,[2,98]),o($V31,[2,99]),{19:$V1,20:$V2,26:133,38:26,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},{1:[2,1]},o($Vo,[2,2]),{20:[1,134]},{20:[1,135]},{19:$V1,20:$V2,26:136,38:26,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},{19:$V1,20:$V2,26:137,38:26,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},{19:$V1,20:$V2,26:138,38:26,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},{30:[1,139]},o($Vp,[2,26]),o($Vp,[2,28],{29:[1,140]}),{6:63,7:4,8:5,9:6,10:7,11:8,12:9,13:10,14:11,15:12,16:13,17:14,18:$V0,19:$V1,20:$V2,23:$V3,25:$V4,26:24,28:$V5,30:$V6,31:$V7,32:$V8,33:$V9,34:$Va,36:$Vb,37:[1,141],38:26,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},o($Vp,[2,32]),o($Vp,[2,30],{29:[1,142]}),{19:$VB,39:143,101:29,103:30,104:$Vk,105:$Vl,109:$Vm},{19:$VB,39:144,101:29,103:30,104:$Vk,105:$Vl,109:$Vm},{19:$V1,20:$V2,38:145,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},{19:$V1,20:$V2,38:146,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},{19:$V1,20:$V2,38:147,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},{19:$V1,20:$V2,38:148,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},{19:$V1,20:$V2,38:149,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},{19:$V1,20:$V2,38:150,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},{19:$V1,20:$V2,38:151,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},{19:$V1,20:$V2,38:152,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},{19:$V1,20:$V2,38:153,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},{19:$V1,20:$V2,38:154,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},{19:$V1,20:$V2,38:155,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},{19:$V1,20:$V2,38:156,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},{19:$V1,20:$V2,38:157,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},{19:$V1,20:$V2,38:158,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},o($V31,[2,93]),o($V31,[2,94]),{19:$V1,20:$V2,38:159,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},{19:$VB,101:160},o($V41,[2,110]),{19:$V1,20:$V2,39:129,62:161,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm},{19:$V1,20:$V2,22:[1,163],26:107,38:26,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,111:162,112:$Vn},o($Vy,[2,104],{110:95,112:$Vn}),o($V41,$VA),o($Vy,[2,105],{110:95,112:$Vn}),{19:$VB,101:164},{106:[1,165]},{19:$VB,101:166},o($Vy,[2,109],{110:95,112:$Vn}),{19:$V1,20:$V2,39:129,64:167,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm},{24:$V51,113:[1,168]},o($V61,[2,115]),{19:$V1,20:$V2,39:129,66:170,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm},{19:$V1,20:$V2,39:129,68:171,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm},{19:$V1,20:$V2,39:129,70:172,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm},{19:$V1,20:$V2,39:129,72:173,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm},{19:$V1,20:$V2,39:129,72:174,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm},{19:$V1,20:$V2,39:129,75:175,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm},{19:$V1,20:$V2,39:129,75:176,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm},{19:$V1,20:$V2,39:129,75:177,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm},{19:$V1,20:$V2,39:129,75:178,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm},{19:$V1,20:$V2,39:129,80:179,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm},{19:$V1,20:$V2,39:129,80:180,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm},{19:$V1,20:$V2,39:129,82:$Vc,83:181,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm},{19:$V1,20:$V2,39:129,82:$Vc,83:182,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm},{19:$V1,20:$V2,39:129,82:$Vc,84:$Vd,86:183,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm},{19:$V1,20:$V2,39:129,82:$Vc,84:$Vd,86:184,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm},{19:$V1,20:$V2,39:129,82:$Vc,84:$Vd,86:185,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm},{19:$V1,20:$V2,39:129,82:$Vc,84:$Vd,86:186,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm},{19:$V1,20:$V2,39:129,82:$Vc,84:$Vd,91:187,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm},o($V31,[2,86]),o($V31,[2,87]),o($V31,[2,88]),o($Vt,$Vu,{92:$Vv,93:$Vw}),o($V31,[2,89]),o($V31,[2,90]),o($V31,[2,91]),{22:[1,188]},{19:$V71,21:189,22:[1,190]},{19:$V71,21:192,22:[1,193]},{22:[1,194]},{29:[1,195]},{22:[1,196]},{20:[1,197]},o($Vp,[2,27]),o($Vp,[2,31]),o($Vp,[2,29]),o($Vx,[2,47]),o($Vx,[2,49]),{52:$Vq,54:$Vr,57:$Vs,58:[1,198]},o($V81,[2,35],{52:$Vq,54:$Vr,57:$Vs}),o($V81,[2,36],{52:$Vq,54:$Vr,57:$Vs}),o($V81,[2,37],{52:$Vq,54:$Vr,57:$Vs}),o($V81,[2,38],{52:$Vq,54:$Vr,57:$Vs}),o($V81,[2,39],{52:$Vq,54:$Vr,57:$Vs}),o($V81,[2,40],{52:$Vq,54:$Vr,57:$Vs}),o($V81,[2,41],{52:$Vq,54:$Vr,57:$Vs}),o($V81,[2,42],{52:$Vq,54:$Vr,57:$Vs}),o($V81,[2,43],{52:$Vq,54:$Vr,57:$Vs}),o($V81,[2,44],{52:$Vq,54:$Vr,57:$Vs}),o($V81,[2,45],{52:$Vq,54:$Vr,57:$Vs}),o($V81,[2,46],{52:$Vq,54:$Vr,57:$Vs}),o($V81,[2,48],{52:$Vq,54:$Vr,57:$Vs}),o($V81,[2,50],{52:$Vq,54:$Vr,57:$Vs}),o($Vy,[2,101],{110:95,112:$Vn}),o($VC,[2,55],{63:$VD}),{22:[1,199],24:$V51},o($V31,[2,113]),o($Vy,[2,106],{110:95,112:$Vn}),{19:$VB,101:200},o($Vy,[2,108],{110:95,112:$Vn}),o($VE,[2,57],{65:$VF}),o($V41,[2,117]),{19:$V1,20:$V2,26:201,38:26,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},o($VG,[2,59],{67:$VH}),o($VI,[2,61],{69:$VJ}),o($VK,[2,63],{71:$VL,73:$VM}),o($VN,[2,65],{74:$VO,76:$VP,77:$VQ,78:$VR}),o($VN,[2,66],{74:$VO,76:$VP,77:$VQ,78:$VR}),o($VS,[2,68],{79:$VT,81:$VU}),o($VS,[2,69],{79:$VT,81:$VU}),o($VS,[2,70],{79:$VT,81:$VU}),o($VS,[2,71],{79:$VT,81:$VU}),o($VV,[2,73],{82:$VW,84:$VX}),o($VV,[2,74],{82:$VW,84:$VX}),o($VY,[2,76],{85:$VZ,87:$V_,88:$V$,89:$V01}),o($VY,[2,77],{85:$VZ,87:$V_,88:$V$,89:$V01}),o($V11,[2,79],{90:$V21}),o($V11,[2,80],{90:$V21}),o($V11,[2,81],{90:$V21}),o($V11,[2,82],{90:$V21}),o($V31,[2,84]),o($V31,[2,100]),{22:[1,202],24:$V91},{15:204,36:$Vb},o($Va1,[2,20]),{22:[1,205],24:$V91},{15:206,36:$Vb},{6:207,7:4,8:5,9:6,10:7,11:8,12:9,13:10,14:11,15:12,16:13,17:14,18:$V0,19:$V1,20:$V2,23:$V3,25:$V4,26:24,28:$V5,30:$V6,31:$V7,32:$V8,33:$V9,34:$Va,36:$Vb,38:26,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},{19:$V1,20:$V2,26:208,38:26,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},{6:209,7:4,8:5,9:6,10:7,11:8,12:9,13:10,14:11,15:12,16:13,17:14,18:$V0,19:$V1,20:$V2,23:$V3,25:$V4,26:24,28:$V5,30:$V6,31:$V7,32:$V8,33:$V9,34:$Va,36:$Vb,38:26,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},{19:$V1,20:$V2,26:210,38:26,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},{19:$V1,20:$V2,38:211,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},o($V31,[2,112]),o($Vy,[2,107],{110:95,112:$Vn}),o($V61,[2,114]),{15:212,36:$Vb},{19:[1,213]},o($Vp,[2,16]),{15:214,36:$Vb},o($Vp,[2,18]),o($Vo,[2,22],{27:[1,215]}),{29:[1,216]},o($Vp,[2,24]),{22:[1,217]},o($V81,[2,51],{52:$Vq,54:$Vr,57:$Vs}),o($Vp,[2,15]),o($Va1,[2,19]),o($Vp,[2,17]),{6:218,7:4,8:5,9:6,10:7,11:8,12:9,13:10,14:11,15:12,16:13,17:14,18:$V0,19:$V1,20:$V2,23:$V3,25:$V4,26:24,28:$V5,30:$V6,31:$V7,32:$V8,33:$V9,34:$Va,36:$Vb,38:26,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},{19:$V1,20:$V2,26:219,38:26,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},o($Vp,[2,25]),o($Vp,[2,21]),{22:[1,220]},{6:221,7:4,8:5,9:6,10:7,11:8,12:9,13:10,14:11,15:12,16:13,17:14,18:$V0,19:$V1,20:$V2,23:$V3,25:$V4,26:24,28:$V5,30:$V6,31:$V7,32:$V8,33:$V9,34:$Va,36:$Vb,38:26,39:27,55:28,59:31,60:32,62:38,64:40,66:41,68:42,70:43,72:44,75:45,80:46,82:$Vc,83:47,84:$Vd,86:48,91:49,92:$Ve,93:$Vf,94:$Vg,95:$Vh,96:56,97:57,98:58,99:$Vi,100:$Vj,101:29,103:30,104:$Vk,105:$Vl,109:$Vm,110:37,112:$Vn},o($Vp,[2,23])], +defaultActions: {62:[2,1]}, parseError: function parseError (str, hash) { if (hash.recoverable) { this.trace(str); @@ -1207,156 +1213,158 @@ case 1: /* console.log("MULTILINE COMMENT: "+yy_.yytext); */ break; case 2: /* console.log("SINGLE LINE COMMENT: "+yy_.yytext); */ break; -case 3: return 102; +case 3: return 104; break; -case 4: return 103; +case 4: return 105; break; -case 5: return 105; +case 5: return 107; break; -case 6: return 104; +case 6: return 106; break; -case 7: return 106; +case 7: return 108; break; case 8: return 'linearCombination'; break; -case 9: return 107; +case 9: return 109; break; -case 10: return 22; +case 10: return 23; break; -case 11: return 17; +case 11: return 18; break; -case 12: return 24; +case 12: return 25; break; -case 13: return 26; +case 13: return 27; break; -case 14: return 27; +case 14: return 28; break; -case 15: return 29; +case 15: return 30; break; -case 16: return 30; +case 16: return 32; break; case 17: return 31; break; -case 18: return 32; +case 18: return 33; break; -case 19: return 98; +case 19: return 34; break; -case 20: return 97; +case 20: return 100; break; -case 21: return 18; +case 21: return 99; break; -case 22: yy_.yytext = yy_.yytext.slice(1,-1); return 33; +case 22: return 19; break; -case 23: return 50; +case 23: yy_.yytext = yy_.yytext.slice(1,-1); return 35; break; -case 24: return 49; +case 24: return 52; break; -case 25: return 52; +case 25: return 51; break; -case 26: return 51; +case 26: return 54; break; -case 27: return 54; +case 27: return 53; break; -case 28: return 45; +case 28: return 56; break; -case 29: return 44; +case 29: return 47; break; -case 30: return 61; +case 30: return 46; break; -case 31: return 59; +case 31: return 63; break; -case 32: return 69; +case 32: return 61; break; -case 33: return 72; +case 33: return 71; break; case 34: return 74; break; -case 35: return 71; +case 35: return 76; break; -case 36: return 79; +case 36: return 73; break; -case 37: return 77; +case 37: return 81; break; -case 38: return 88; +case 38: return 79; break; case 39: return 90; break; -case 40: return 91; +case 40: return 92; break; -case 41: return 39; +case 41: return 93; break; -case 42: return 40; +case 42: return 41; break; -case 43: return 41; +case 43: return 42; break; -case 44: return 42; +case 44: return 43; break; -case 45: return 43; +case 45: return 44; break; -case 46: return 47; +case 46: return 45; break; -case 47: return 46; +case 47: return 49; break; case 48: return 48; break; -case 49: return 38; +case 49: return 50; break; -case 50: return 80; +case 50: return 40; break; case 51: return 82; break; -case 52: return 83; +case 52: return 84; break; case 53: return 85; break; -case 54: return 86; +case 54: return 87; break; -case 55: return 87; +case 55: return 88; break; -case 56: return 65; +case 56: return 89; break; case 57: return 67; break; -case 58: return 63; +case 58: return 69; +break; +case 59: return 65; break; -case 59: return 92; +case 60: return 94; break; -case 60: return 75; +case 61: return 77; break; -case 61: return 76; +case 62: return 78; break; -case 62: return 92; +case 63: return 94; break; -case 63: return 55; +case 64: return 57; break; -case 64: return 56; +case 65: return 58; break; -case 65: return 19; +case 66: return 20; break; -case 66: return 21; +case 67: return 22; break; -case 67: return 110; +case 68: return 112; break; -case 68: return 111; +case 69: return 113; break; -case 69: return 34; +case 70: return 36; break; -case 70: return 35; +case 71: return 37; break; -case 71: return 28; +case 72: return 29; break; -case 72: return 23; +case 73: return 24; break; -case 73: return 100; +case 74: return 102; break; -case 74: return 5; +case 75: return 5; break; -case 75: console.log("INVALID: " + yy_.yytext); return 'INVALID' +case 76: console.log("INVALID: " + yy_.yytext); return 'INVALID' break; } }, -rules: [/^(?:\s+)/,/^(?:\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+\/)/,/^(?:\/\/.*)/,/^(?:var\b)/,/^(?:signal\b)/,/^(?:private\b)/,/^(?:input\b)/,/^(?:output\b)/,/^(?:linearCombination\b)/,/^(?:component\b)/,/^(?:template\b)/,/^(?:function\b)/,/^(?:if\b)/,/^(?:else\b)/,/^(?:for\b)/,/^(?:while\b)/,/^(?:do\b)/,/^(?:return\b)/,/^(?:include\b)/,/^(?:0x[0-9A-Fa-f]*)/,/^(?:[0-9]+)/,/^(?:[a-zA-Z][a-zA-Z$_0-9]*)/,/^(?:"[^"]+")/,/^(?:==>)/,/^(?:<==)/,/^(?:-->)/,/^(?:<--)/,/^(?:===)/,/^(?:>>=)/,/^(?:<<=)/,/^(?:&&)/,/^(?:\|\|)/,/^(?:==)/,/^(?:<=)/,/^(?:>=)/,/^(?:!=)/,/^(?:>>)/,/^(?:<<)/,/^(?:\*\*)/,/^(?:\+\+)/,/^(?:--)/,/^(?:\+=)/,/^(?:-=)/,/^(?:\*=)/,/^(?:\/=)/,/^(?:%=)/,/^(?:\|=)/,/^(?:&=)/,/^(?:\^=)/,/^(?:=)/,/^(?:\+)/,/^(?:-)/,/^(?:\*)/,/^(?:\/)/,/^(?:\\)/,/^(?:%)/,/^(?:\^)/,/^(?:&)/,/^(?:\|)/,/^(?:!)/,/^(?:<)/,/^(?:>)/,/^(?:!)/,/^(?:\?)/,/^(?::)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:;)/,/^(?:,)/,/^(?:\.)/,/^(?:$)/,/^(?:.)/], -conditions: {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75],"inclusive":true}} +rules: [/^(?:\s+)/,/^(?:\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+\/)/,/^(?:\/\/.*)/,/^(?:var\b)/,/^(?:signal\b)/,/^(?:private\b)/,/^(?:input\b)/,/^(?:output\b)/,/^(?:linearCombination\b)/,/^(?:component\b)/,/^(?:template\b)/,/^(?:function\b)/,/^(?:if\b)/,/^(?:else\b)/,/^(?:for\b)/,/^(?:while\b)/,/^(?:compute\b)/,/^(?:do\b)/,/^(?:return\b)/,/^(?:include\b)/,/^(?:0x[0-9A-Fa-f]*)/,/^(?:[0-9]+)/,/^(?:[a-zA-Z][a-zA-Z$_0-9]*)/,/^(?:"[^"]+")/,/^(?:==>)/,/^(?:<==)/,/^(?:-->)/,/^(?:<--)/,/^(?:===)/,/^(?:>>=)/,/^(?:<<=)/,/^(?:&&)/,/^(?:\|\|)/,/^(?:==)/,/^(?:<=)/,/^(?:>=)/,/^(?:!=)/,/^(?:>>)/,/^(?:<<)/,/^(?:\*\*)/,/^(?:\+\+)/,/^(?:--)/,/^(?:\+=)/,/^(?:-=)/,/^(?:\*=)/,/^(?:\/=)/,/^(?:%=)/,/^(?:\|=)/,/^(?:&=)/,/^(?:\^=)/,/^(?:=)/,/^(?:\+)/,/^(?:-)/,/^(?:\*)/,/^(?:\/)/,/^(?:\\)/,/^(?:%)/,/^(?:\^)/,/^(?:&)/,/^(?:\|)/,/^(?:!)/,/^(?:<)/,/^(?:>)/,/^(?:!)/,/^(?:\?)/,/^(?::)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:;)/,/^(?:,)/,/^(?:\.)/,/^(?:$)/,/^(?:.)/], +conditions: {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76],"inclusive":true}} }); return lexer; })(); diff --git a/src/exec.js b/src/exec.js index 867677c..228f3eb 100644 --- a/src/exec.js +++ b/src/exec.js @@ -131,6 +131,8 @@ function exec(ctx, ast) { return execFunctionCall(ctx, ast); } else if (ast.type == "BLOCK") { return execBlock(ctx, ast); + } else if (ast.type == "COMPUTE") { + return ; } else if (ast.type == "FOR") { return execFor(ctx, ast); } else if (ast.type == "WHILE") { diff --git a/src/gencode.js b/src/gencode.js index 5ee2e50..355b2ee 100644 --- a/src/gencode.js +++ b/src/gencode.js @@ -116,6 +116,8 @@ function gen(ctx, ast) { return genFunctionCall(ctx, ast); } else if (ast.type == "BLOCK") { return genBlock(ctx, ast); + } else if (ast.type == "COMPUTE") { + return genCompute(ctx, ast); } else if (ast.type == "FOR") { return genFor(ctx, ast); } else if (ast.type == "WHILE") { @@ -256,6 +258,12 @@ function genWhile(ctx, ast) { return `while (bigInt(${condition}).neq(bigInt(0))) {\n${body}\n}\n`; } +function genCompute(ctx, ast) { + const body = gen(ctx, ast.body); + if (ctx.error) return; + return `{\n${body}\n}\n`; +} + function genIf(ctx, ast) { const condition = gen(ctx, ast.condition); if (ctx.error) return; diff --git a/test/cases.js b/test/cases.js index 8890f52..a12a04d 100644 --- a/test/cases.js +++ b/test/cases.js @@ -49,4 +49,14 @@ describe("Sum test", () => { // await compiler(path.join(__dirname, "circuits", "assignsignal.circom")); // }, /Cannot assign to a signal .*/); // }); + it("Should compile a code with compute", async () => { + const cirDef = await compiler(path.join(__dirname, "circuits", "compute.circom")); + + const circuit = new snarkjs.Circuit(cirDef); + + const witness = circuit.calculateWitness({ "x": 6}); + assert(witness[0].equals(bigInt(1))); + assert(witness[1].equals(bigInt(37))); + assert(witness[2].equals(bigInt(6))); + }); }); diff --git a/test/circuits/compute.circom b/test/circuits/compute.circom new file mode 100644 index 0000000..ac8a62d --- /dev/null +++ b/test/circuits/compute.circom @@ -0,0 +1,17 @@ +template X() { + signal input x; + signal output y; + signal x2; + signal x3; + var a; + compute { + a = (x*x*x+6)/x; + y <-- a; + } + + x2 <== x*x; + x3 <== x2*x; + x*y === x3+6; +} + +component main = X();