@irrelon/battlescript 4.1.2 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/bin/index.js +357 -278
  2. package/bin/index.js.map +1 -1
  3. package/dist/bin/functionality.cjs +357 -278
  4. package/dist/bin/functionality.cjs.map +1 -1
  5. package/dist/bin/functionality.mjs +357 -278
  6. package/dist/bin/functionality.mjs.map +1 -1
  7. package/dist/exports/typescript/enums/EnumNodeProp.d.ts +11 -7
  8. package/dist/exports/typescript/enums/EnumNodeProp.d.ts.map +1 -1
  9. package/dist/exports/typescript/enums/EnumOperator.d.ts +7 -4
  10. package/dist/exports/typescript/enums/EnumOperator.d.ts.map +1 -1
  11. package/dist/index.cjs +378 -285
  12. package/dist/index.cjs.map +1 -1
  13. package/dist/index.mjs +377 -286
  14. package/dist/index.mjs.map +1 -1
  15. package/dist/services/grammar/ts/language/BattleScriptLexer.d.ts.map +1 -1
  16. package/dist/services/miniAst/binaryTypeToByteSize.d.ts +1 -1
  17. package/dist/services/utils.d.ts +10 -0
  18. package/dist/services/utils.d.ts.map +1 -1
  19. package/dist/tests/ast/compoundAssignment.test.d.ts +2 -0
  20. package/dist/tests/ast/compoundAssignment.test.d.ts.map +1 -0
  21. package/dist/tests/ast/hex-literal.test.d.ts +2 -0
  22. package/dist/tests/ast/hex-literal.test.d.ts.map +1 -0
  23. package/dist/tests/ast/number-literal.test.d.ts +2 -0
  24. package/dist/tests/ast/number-literal.test.d.ts.map +1 -0
  25. package/dist/tsconfig.types.tsbuildinfo +1 -1
  26. package/dist/types/ast/nodes/AssignmentExpressionNode.d.ts +6 -0
  27. package/dist/types/ast/nodes/AssignmentExpressionNode.d.ts.map +1 -1
  28. package/dist/types/ast/nodes/ForwardStatementNode.d.ts +2 -0
  29. package/dist/types/ast/nodes/ForwardStatementNode.d.ts.map +1 -1
  30. package/dist/types/ast/nodes/LiteralIntNode.d.ts +10 -0
  31. package/dist/types/ast/nodes/LiteralIntNode.d.ts.map +1 -1
  32. package/dist/types/ast/nodes/OffsetStatementNode.d.ts +2 -0
  33. package/dist/types/ast/nodes/OffsetStatementNode.d.ts.map +1 -1
  34. package/dist/types/ast/nodes/OptimisedAssignmentExpressionNode.d.ts.map +1 -1
  35. package/dist/types/ast/nodes/ProtocolReadTypeNode.d.ts +2 -0
  36. package/dist/types/ast/nodes/ProtocolReadTypeNode.d.ts.map +1 -1
  37. package/dist/types/ast/nodes/ProtocolTypeNode.d.ts +2 -0
  38. package/dist/types/ast/nodes/ProtocolTypeNode.d.ts.map +1 -1
  39. package/dist/types/ast/nodes/RewindStatementNode.d.ts +2 -0
  40. package/dist/types/ast/nodes/RewindStatementNode.d.ts.map +1 -1
  41. package/dist/types/ast/nodes/RuleStatementNode.d.ts +4 -0
  42. package/dist/types/ast/nodes/RuleStatementNode.d.ts.map +1 -1
  43. package/dist/types/ast/operators/ArithmaticOperator.d.ts +1 -1
  44. package/dist/types/ast/operators/ArithmaticOperator.d.ts.map +1 -1
  45. package/dist/types/ast/operators/OtherOperator.d.ts +1 -1
  46. package/dist/types/ast/operators/OtherOperator.d.ts.map +1 -1
  47. package/package.json +1 -1
@@ -23890,7 +23890,7 @@ BattleScriptLexer._SYMBOLIC_NAMES = [
23890
23890
  ];
23891
23891
  BattleScriptLexer.VOCABULARY = new VocabularyImplExports.VocabularyImpl(BattleScriptLexer._LITERAL_NAMES, BattleScriptLexer._SYMBOLIC_NAMES, []);
23892
23892
  BattleScriptLexer._serializedATNSegments = 2;
23893
- BattleScriptLexer._serializedATNSegment0 = "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02r\u0378\b\x01" +
23893
+ BattleScriptLexer._serializedATNSegment0 = "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02r\u037F\b\x01" +
23894
23894
  "\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06" +
23895
23895
  "\x04\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r" +
23896
23896
  "\t\r\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t" +
@@ -23946,77 +23946,78 @@ BattleScriptLexer._serializedATNSegment0 = "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u
23946
23946
  "A\x03A\x03A\x03B\x03B\x03B\x03B\x03C\x03C\x03C\x03C\x03C\x03D\x03D\x03" +
23947
23947
  "D\x03D\x03D\x03D\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03F\x03F\x03F\x03" +
23948
23948
  "F\x03F\x03G\x03G\x03G\x03G\x03G\x03H\x03H\x03H\x03H\x03H\x03I\x03I\x03" +
23949
- "I\x03I\x03I\x03I\x03I\x03I\x03I\x03I\x03J\x06J\u02B9\nJ\rJ\x0EJ\u02BA" +
23950
- "\x03J\x03J\x06J\u02BF\nJ\rJ\x0EJ\u02C0\x05J\u02C3\nJ\x03J\x03J\x05J\u02C7" +
23951
- "\nJ\x03J\x06J\u02CA\nJ\rJ\x0EJ\u02CB\x05J\u02CE\nJ\x03J\x03J\x06J\u02D2" +
23952
- "\nJ\rJ\x0EJ\u02D3\x03J\x03J\x05J\u02D8\nJ\x03J\x06J\u02DB\nJ\rJ\x0EJ\u02DC" +
23953
- "\x05J\u02DF\nJ\x05J\u02E1\nJ\x03K\x03K\x03K\x03K\x03K\x03K\x03K\x03K\x03" +
23954
- "K\x05K\u02EC\nK\x03L\x03L\x07L\u02F0\nL\fL\x0EL\u02F3\vL\x03L\x03L\x03" +
23955
- "M\x03M\x03M\x03M\x07M\u02FB\nM\fM\x0EM\u02FE\vM\x03M\x03M\x03M\x03M\x07" +
23956
- "M\u0304\nM\fM\x0EM\u0307\vM\x03M\x03M\x05M\u030B\nM\x03N\x03N\x03N\x03" +
23957
- "O\x03O\x03O\x03P\x03P\x03P\x03Q\x03Q\x03R\x03R\x03S\x03S\x03T\x03T\x03" +
23958
- "U\x03U\x03V\x03V\x03W\x03W\x03X\x03X\x03X\x03Y\x03Y\x03Y\x03Z\x03Z\x03" +
23959
- "Z\x03[\x03[\x03[\x03\\\x03\\\x03]\x03]\x03]\x03^\x03^\x03^\x03_\x03_\x03" +
23960
- "`\x03`\x03a\x03a\x03a\x03b\x03b\x03b\x03c\x03c\x03c\x03c\x03d\x03d\x03" +
23961
- "e\x03e\x03f\x03f\x03g\x03g\x03h\x03h\x03i\x03i\x03j\x03j\x03k\x03k\x03" +
23962
- "l\x03l\x03m\x03m\x03m\x03n\x03n\x03o\x03o\x03p\x03p\x07p\u0361\np\fp\x0E" +
23963
- "p\u0364\vp\x03p\x06p\u0367\np\rp\x0Ep\u0368\x03p\x06p\u036C\np\rp\x0E" +
23964
- "p\u036D\x05p\u0370\np\x03q\x06q\u0373\nq\rq\x0Eq\u0374\x03q\x03q\x03\u0305" +
23965
- "\x02\x02r\x03\x02\x03\x05\x02\x04\x07\x02\x05\t\x02\x06\v\x02\x07\r\x02" +
23966
- "\b\x0F\x02\t\x11\x02\n\x13\x02\v\x15\x02\f\x17\x02\r\x19\x02\x0E\x1B\x02" +
23967
- "\x0F\x1D\x02\x10\x1F\x02\x11!\x02\x12#\x02\x13%\x02\x14\'\x02\x15)\x02" +
23968
- "\x16+\x02\x17-\x02\x18/\x02\x191\x02\x1A3\x02\x1B5\x02\x1C7\x02\x1D9\x02" +
23969
- "\x1E;\x02\x1F=\x02 ?\x02!A\x02\"C\x02#E\x02$G\x02%I\x02&K\x02\'M\x02(" +
23970
- "O\x02)Q\x02*S\x02+U\x02,W\x02-Y\x02.[\x02/]\x020_\x021a\x022c\x023e\x02" +
23971
- "4g\x025i\x026k\x027m\x028o\x029q\x02:s\x02;u\x02<w\x02=y\x02>{\x02?}\x02" +
23972
- "@\x7F\x02A\x81\x02B\x83\x02C\x85\x02D\x87\x02E\x89\x02F\x8B\x02G\x8D\x02" +
23973
- "H\x8F\x02I\x91\x02J\x93\x02K\x95\x02L\x97\x02M\x99\x02N\x9B\x02O\x9D\x02" +
23974
- "P\x9F\x02Q\xA1\x02R\xA3\x02S\xA5\x02T\xA7\x02U\xA9\x02V\xAB\x02W\xAD\x02" +
23975
- "X\xAF\x02Y\xB1\x02Z\xB3\x02[\xB5\x02\\\xB7\x02]\xB9\x02^\xBB\x02_\xBD" +
23976
- "\x02`\xBF\x02a\xC1\x02b\xC3\x02c\xC5\x02d\xC7\x02e\xC9\x02f\xCB\x02g\xCD" +
23977
- "\x02h\xCF\x02i\xD1\x02j\xD3\x02k\xD5\x02l\xD7\x02m\xD9\x02n\xDB\x02o\xDD" +
23978
- "\x02p\xDF\x02q\xE1\x02r\x03\x02\v\x03\x022;\x04\x02GGgg\x04\x02--//\x03" +
23979
- "\x02$$\x04\x02\f\f\x0F\x0F\x05\x02&&C\\c|\x07\x02&&2;C\\aac|\x03\x02a" +
23980
- "a\x05\x02\v\f\x0F\x0F\"\"\x02\u038C\x02\x03\x03\x02\x02\x02\x02\x05\x03" +
23981
- "\x02\x02\x02\x02\x07\x03\x02\x02\x02\x02\t\x03\x02\x02\x02\x02\v\x03\x02" +
23982
- "\x02\x02\x02\r\x03\x02\x02\x02\x02\x0F\x03\x02\x02\x02\x02\x11\x03\x02" +
23983
- "\x02\x02\x02\x13\x03\x02\x02\x02\x02\x15\x03\x02\x02\x02\x02\x17\x03\x02" +
23984
- "\x02\x02\x02\x19\x03\x02\x02\x02\x02\x1B\x03\x02\x02\x02\x02\x1D\x03\x02" +
23985
- "\x02\x02\x02\x1F\x03\x02\x02\x02\x02!\x03\x02\x02\x02\x02#\x03\x02\x02" +
23986
- "\x02\x02%\x03\x02\x02\x02\x02\'\x03\x02\x02\x02\x02)\x03\x02\x02\x02\x02" +
23987
- "+\x03\x02\x02\x02\x02-\x03\x02\x02\x02\x02/\x03\x02\x02\x02\x021\x03\x02" +
23988
- "\x02\x02\x023\x03\x02\x02\x02\x025\x03\x02\x02\x02\x027\x03\x02\x02\x02" +
23989
- "\x029\x03\x02\x02\x02\x02;\x03\x02\x02\x02\x02=\x03\x02\x02\x02\x02?\x03" +
23990
- "\x02\x02\x02\x02A\x03\x02\x02\x02\x02C\x03\x02\x02\x02\x02E\x03\x02\x02" +
23991
- "\x02\x02G\x03\x02\x02\x02\x02I\x03\x02\x02\x02\x02K\x03\x02\x02\x02\x02" +
23992
- "M\x03\x02\x02\x02\x02O\x03\x02\x02\x02\x02Q\x03\x02\x02\x02\x02S\x03\x02" +
23993
- "\x02\x02\x02U\x03\x02\x02\x02\x02W\x03\x02\x02\x02\x02Y\x03\x02\x02\x02" +
23994
- "\x02[\x03\x02\x02\x02\x02]\x03\x02\x02\x02\x02_\x03\x02\x02\x02\x02a\x03" +
23995
- "\x02\x02\x02\x02c\x03\x02\x02\x02\x02e\x03\x02\x02\x02\x02g\x03\x02\x02" +
23996
- "\x02\x02i\x03\x02\x02\x02\x02k\x03\x02\x02\x02\x02m\x03\x02\x02\x02\x02" +
23997
- "o\x03\x02\x02\x02\x02q\x03\x02\x02\x02\x02s\x03\x02\x02\x02\x02u\x03\x02" +
23998
- "\x02\x02\x02w\x03\x02\x02\x02\x02y\x03\x02\x02\x02\x02{\x03\x02\x02\x02" +
23999
- "\x02}\x03\x02\x02\x02\x02\x7F\x03\x02\x02\x02\x02\x81\x03\x02\x02\x02" +
24000
- "\x02\x83\x03\x02\x02\x02\x02\x85\x03\x02\x02\x02\x02\x87\x03\x02\x02\x02" +
24001
- "\x02\x89\x03\x02\x02\x02\x02\x8B\x03\x02\x02\x02\x02\x8D\x03\x02\x02\x02" +
24002
- "\x02\x8F\x03\x02\x02\x02\x02\x91\x03\x02\x02\x02\x02\x93\x03\x02\x02\x02" +
24003
- "\x02\x95\x03\x02\x02\x02\x02\x97\x03\x02\x02\x02\x02\x99\x03\x02\x02\x02" +
24004
- "\x02\x9B\x03\x02\x02\x02\x02\x9D\x03\x02\x02\x02\x02\x9F\x03\x02\x02\x02" +
24005
- "\x02\xA1\x03\x02\x02\x02\x02\xA3\x03\x02\x02\x02\x02\xA5\x03\x02\x02\x02" +
24006
- "\x02\xA7\x03\x02\x02\x02\x02\xA9\x03\x02\x02\x02\x02\xAB\x03\x02\x02\x02" +
24007
- "\x02\xAD\x03\x02\x02\x02\x02\xAF\x03\x02\x02\x02\x02\xB1\x03\x02\x02\x02" +
24008
- "\x02\xB3\x03\x02\x02\x02\x02\xB5\x03\x02\x02\x02\x02\xB7\x03\x02\x02\x02" +
24009
- "\x02\xB9\x03\x02\x02\x02\x02\xBB\x03\x02\x02\x02\x02\xBD\x03\x02\x02\x02" +
24010
- "\x02\xBF\x03\x02\x02\x02\x02\xC1\x03\x02\x02\x02\x02\xC3\x03\x02\x02\x02" +
24011
- "\x02\xC5\x03\x02\x02\x02\x02\xC7\x03\x02\x02\x02\x02\xC9\x03\x02\x02\x02" +
24012
- "\x02\xCB\x03\x02\x02\x02\x02\xCD\x03\x02\x02\x02\x02\xCF\x03\x02\x02\x02" +
24013
- "\x02\xD1\x03\x02\x02\x02\x02\xD3\x03\x02\x02\x02\x02\xD5\x03\x02\x02\x02" +
24014
- "\x02\xD7\x03\x02\x02\x02\x02\xD9\x03\x02\x02\x02\x02\xDB\x03\x02\x02\x02" +
24015
- "\x02\xDD\x03\x02\x02\x02\x02\xDF\x03\x02\x02\x02\x02\xE1\x03\x02\x02\x02" +
24016
- "\x03\xE3\x03\x02\x02\x02\x05\xEC\x03\x02\x02\x02\x07\xF5\x03\x02\x02\x02" +
24017
- "\t\xFC\x03\x02\x02\x02\v\u0101\x03\x02\x02\x02\r\u0109\x03\x02\x02\x02" +
24018
- "\x0F\u0110\x03\x02\x02\x02\x11\u0118\x03\x02\x02\x02\x13\u011F\x03\x02" +
24019
- "\x02\x02\x15\u0123\x03\x02\x02\x02\x17\u0128\x03\x02\x02\x02\x19\u0132" +
23949
+ "I\x03I\x03I\x03I\x03I\x03I\x03I\x03I\x03J\x03J\x03J\x06J\u02BB\nJ\rJ\x0E" +
23950
+ "J\u02BC\x03J\x06J\u02C0\nJ\rJ\x0EJ\u02C1\x03J\x03J\x06J\u02C6\nJ\rJ\x0E" +
23951
+ "J\u02C7\x05J\u02CA\nJ\x03J\x03J\x05J\u02CE\nJ\x03J\x06J\u02D1\nJ\rJ\x0E" +
23952
+ "J\u02D2\x05J\u02D5\nJ\x03J\x03J\x06J\u02D9\nJ\rJ\x0EJ\u02DA\x03J\x03J" +
23953
+ "\x05J\u02DF\nJ\x03J\x06J\u02E2\nJ\rJ\x0EJ\u02E3\x05J\u02E6\nJ\x05J\u02E8" +
23954
+ "\nJ\x03K\x03K\x03K\x03K\x03K\x03K\x03K\x03K\x03K\x05K\u02F3\nK\x03L\x03" +
23955
+ "L\x07L\u02F7\nL\fL\x0EL\u02FA\vL\x03L\x03L\x03M\x03M\x03M\x03M\x07M\u0302" +
23956
+ "\nM\fM\x0EM\u0305\vM\x03M\x03M\x03M\x03M\x07M\u030B\nM\fM\x0EM\u030E\v" +
23957
+ "M\x03M\x03M\x05M\u0312\nM\x03N\x03N\x03N\x03O\x03O\x03O\x03P\x03P\x03" +
23958
+ "P\x03Q\x03Q\x03R\x03R\x03S\x03S\x03T\x03T\x03U\x03U\x03V\x03V\x03W\x03" +
23959
+ "W\x03X\x03X\x03X\x03Y\x03Y\x03Y\x03Z\x03Z\x03Z\x03[\x03[\x03[\x03\\\x03" +
23960
+ "\\\x03]\x03]\x03]\x03^\x03^\x03^\x03_\x03_\x03`\x03`\x03a\x03a\x03a\x03" +
23961
+ "b\x03b\x03b\x03c\x03c\x03c\x03c\x03d\x03d\x03e\x03e\x03f\x03f\x03g\x03" +
23962
+ "g\x03h\x03h\x03i\x03i\x03j\x03j\x03k\x03k\x03l\x03l\x03m\x03m\x03m\x03" +
23963
+ "n\x03n\x03o\x03o\x03p\x03p\x07p\u0368\np\fp\x0Ep\u036B\vp\x03p\x06p\u036E" +
23964
+ "\np\rp\x0Ep\u036F\x03p\x06p\u0373\np\rp\x0Ep\u0374\x05p\u0377\np\x03q" +
23965
+ "\x06q\u037A\nq\rq\x0Eq\u037B\x03q\x03q\x03\u030C\x02\x02r\x03\x02\x03" +
23966
+ "\x05\x02\x04\x07\x02\x05\t\x02\x06\v\x02\x07\r\x02\b\x0F\x02\t\x11\x02" +
23967
+ "\n\x13\x02\v\x15\x02\f\x17\x02\r\x19\x02\x0E\x1B\x02\x0F\x1D\x02\x10\x1F" +
23968
+ "\x02\x11!\x02\x12#\x02\x13%\x02\x14\'\x02\x15)\x02\x16+\x02\x17-\x02\x18" +
23969
+ "/\x02\x191\x02\x1A3\x02\x1B5\x02\x1C7\x02\x1D9\x02\x1E;\x02\x1F=\x02 " +
23970
+ "?\x02!A\x02\"C\x02#E\x02$G\x02%I\x02&K\x02\'M\x02(O\x02)Q\x02*S\x02+U" +
23971
+ "\x02,W\x02-Y\x02.[\x02/]\x020_\x021a\x022c\x023e\x024g\x025i\x026k\x02" +
23972
+ "7m\x028o\x029q\x02:s\x02;u\x02<w\x02=y\x02>{\x02?}\x02@\x7F\x02A\x81\x02" +
23973
+ "B\x83\x02C\x85\x02D\x87\x02E\x89\x02F\x8B\x02G\x8D\x02H\x8F\x02I\x91\x02" +
23974
+ "J\x93\x02K\x95\x02L\x97\x02M\x99\x02N\x9B\x02O\x9D\x02P\x9F\x02Q\xA1\x02" +
23975
+ "R\xA3\x02S\xA5\x02T\xA7\x02U\xA9\x02V\xAB\x02W\xAD\x02X\xAF\x02Y\xB1\x02" +
23976
+ "Z\xB3\x02[\xB5\x02\\\xB7\x02]\xB9\x02^\xBB\x02_\xBD\x02`\xBF\x02a\xC1" +
23977
+ "\x02b\xC3\x02c\xC5\x02d\xC7\x02e\xC9\x02f\xCB\x02g\xCD\x02h\xCF\x02i\xD1" +
23978
+ "\x02j\xD3\x02k\xD5\x02l\xD7\x02m\xD9\x02n\xDB\x02o\xDD\x02p\xDF\x02q\xE1" +
23979
+ "\x02r\x03\x02\r\x04\x02ZZzz\x05\x022;CHch\x03\x022;\x04\x02GGgg\x04\x02" +
23980
+ "--//\x03\x02$$\x04\x02\f\f\x0F\x0F\x05\x02&&C\\c|\x07\x02&&2;C\\aac|\x03" +
23981
+ "\x02aa\x05\x02\v\f\x0F\x0F\"\"\x02\u0395\x02\x03\x03\x02\x02\x02\x02\x05" +
23982
+ "\x03\x02\x02\x02\x02\x07\x03\x02\x02\x02\x02\t\x03\x02\x02\x02\x02\v\x03" +
23983
+ "\x02\x02\x02\x02\r\x03\x02\x02\x02\x02\x0F\x03\x02\x02\x02\x02\x11\x03" +
23984
+ "\x02\x02\x02\x02\x13\x03\x02\x02\x02\x02\x15\x03\x02\x02\x02\x02\x17\x03" +
23985
+ "\x02\x02\x02\x02\x19\x03\x02\x02\x02\x02\x1B\x03\x02\x02\x02\x02\x1D\x03" +
23986
+ "\x02\x02\x02\x02\x1F\x03\x02\x02\x02\x02!\x03\x02\x02\x02\x02#\x03\x02" +
23987
+ "\x02\x02\x02%\x03\x02\x02\x02\x02\'\x03\x02\x02\x02\x02)\x03\x02\x02\x02" +
23988
+ "\x02+\x03\x02\x02\x02\x02-\x03\x02\x02\x02\x02/\x03\x02\x02\x02\x021\x03" +
23989
+ "\x02\x02\x02\x023\x03\x02\x02\x02\x025\x03\x02\x02\x02\x027\x03\x02\x02" +
23990
+ "\x02\x029\x03\x02\x02\x02\x02;\x03\x02\x02\x02\x02=\x03\x02\x02\x02\x02" +
23991
+ "?\x03\x02\x02\x02\x02A\x03\x02\x02\x02\x02C\x03\x02\x02\x02\x02E\x03\x02" +
23992
+ "\x02\x02\x02G\x03\x02\x02\x02\x02I\x03\x02\x02\x02\x02K\x03\x02\x02\x02" +
23993
+ "\x02M\x03\x02\x02\x02\x02O\x03\x02\x02\x02\x02Q\x03\x02\x02\x02\x02S\x03" +
23994
+ "\x02\x02\x02\x02U\x03\x02\x02\x02\x02W\x03\x02\x02\x02\x02Y\x03\x02\x02" +
23995
+ "\x02\x02[\x03\x02\x02\x02\x02]\x03\x02\x02\x02\x02_\x03\x02\x02\x02\x02" +
23996
+ "a\x03\x02\x02\x02\x02c\x03\x02\x02\x02\x02e\x03\x02\x02\x02\x02g\x03\x02" +
23997
+ "\x02\x02\x02i\x03\x02\x02\x02\x02k\x03\x02\x02\x02\x02m\x03\x02\x02\x02" +
23998
+ "\x02o\x03\x02\x02\x02\x02q\x03\x02\x02\x02\x02s\x03\x02\x02\x02\x02u\x03" +
23999
+ "\x02\x02\x02\x02w\x03\x02\x02\x02\x02y\x03\x02\x02\x02\x02{\x03\x02\x02" +
24000
+ "\x02\x02}\x03\x02\x02\x02\x02\x7F\x03\x02\x02\x02\x02\x81\x03\x02\x02" +
24001
+ "\x02\x02\x83\x03\x02\x02\x02\x02\x85\x03\x02\x02\x02\x02\x87\x03\x02\x02" +
24002
+ "\x02\x02\x89\x03\x02\x02\x02\x02\x8B\x03\x02\x02\x02\x02\x8D\x03\x02\x02" +
24003
+ "\x02\x02\x8F\x03\x02\x02\x02\x02\x91\x03\x02\x02\x02\x02\x93\x03\x02\x02" +
24004
+ "\x02\x02\x95\x03\x02\x02\x02\x02\x97\x03\x02\x02\x02\x02\x99\x03\x02\x02" +
24005
+ "\x02\x02\x9B\x03\x02\x02\x02\x02\x9D\x03\x02\x02\x02\x02\x9F\x03\x02\x02" +
24006
+ "\x02\x02\xA1\x03\x02\x02\x02\x02\xA3\x03\x02\x02\x02\x02\xA5\x03\x02\x02" +
24007
+ "\x02\x02\xA7\x03\x02\x02\x02\x02\xA9\x03\x02\x02\x02\x02\xAB\x03\x02\x02" +
24008
+ "\x02\x02\xAD\x03\x02\x02\x02\x02\xAF\x03\x02\x02\x02\x02\xB1\x03\x02\x02" +
24009
+ "\x02\x02\xB3\x03\x02\x02\x02\x02\xB5\x03\x02\x02\x02\x02\xB7\x03\x02\x02" +
24010
+ "\x02\x02\xB9\x03\x02\x02\x02\x02\xBB\x03\x02\x02\x02\x02\xBD\x03\x02\x02" +
24011
+ "\x02\x02\xBF\x03\x02\x02\x02\x02\xC1\x03\x02\x02\x02\x02\xC3\x03\x02\x02" +
24012
+ "\x02\x02\xC5\x03\x02\x02\x02\x02\xC7\x03\x02\x02\x02\x02\xC9\x03\x02\x02" +
24013
+ "\x02\x02\xCB\x03\x02\x02\x02\x02\xCD\x03\x02\x02\x02\x02\xCF\x03\x02\x02" +
24014
+ "\x02\x02\xD1\x03\x02\x02\x02\x02\xD3\x03\x02\x02\x02\x02\xD5\x03\x02\x02" +
24015
+ "\x02\x02\xD7\x03\x02\x02\x02\x02\xD9\x03\x02\x02\x02\x02\xDB\x03\x02\x02" +
24016
+ "\x02\x02\xDD\x03\x02\x02\x02\x02\xDF\x03\x02\x02\x02\x02\xE1\x03\x02\x02" +
24017
+ "\x02\x03\xE3\x03\x02\x02\x02\x05\xEC\x03\x02\x02\x02\x07\xF5\x03\x02\x02" +
24018
+ "\x02\t\xFC\x03\x02\x02\x02\v\u0101\x03\x02\x02\x02\r\u0109\x03\x02\x02" +
24019
+ "\x02\x0F\u0110\x03\x02\x02\x02\x11\u0118\x03\x02\x02\x02\x13\u011F\x03" +
24020
+ "\x02\x02\x02\x15\u0123\x03\x02\x02\x02\x17\u0128\x03\x02\x02\x02\x19\u0132" +
24020
24021
  "\x03\x02\x02\x02\x1B\u013A\x03\x02\x02\x02\x1D\u0141\x03\x02\x02\x02\x1F" +
24021
24022
  "\u0147\x03\x02\x02\x02!\u014F\x03\x02\x02\x02#\u0156\x03\x02\x02\x02%" +
24022
24023
  "\u015F\x03\x02\x02\x02\'\u0169\x03\x02\x02\x02)\u0171\x03\x02\x02\x02" +
@@ -24037,21 +24038,21 @@ BattleScriptLexer._serializedATNSegment0 = "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u
24037
24038
  "\x7F\u027B\x03\x02\x02\x02\x81\u0281\x03\x02\x02\x02\x83\u0288\x03\x02" +
24038
24039
  "\x02\x02\x85\u028C\x03\x02\x02\x02\x87\u0291\x03\x02\x02\x02\x89\u0297" +
24039
24040
  "\x03\x02\x02\x02\x8B\u029E\x03\x02\x02\x02\x8D\u02A3\x03\x02\x02\x02\x8F" +
24040
- "\u02A8\x03\x02\x02\x02\x91\u02AD\x03\x02\x02\x02\x93\u02E0\x03\x02\x02" +
24041
- "\x02\x95\u02EB\x03\x02\x02\x02\x97\u02ED\x03\x02\x02\x02\x99\u030A\x03" +
24042
- "\x02\x02\x02\x9B\u030C\x03\x02\x02\x02\x9D\u030F\x03\x02\x02\x02\x9F\u0312" +
24043
- "\x03\x02\x02\x02\xA1\u0315\x03\x02\x02\x02\xA3\u0317\x03\x02\x02\x02\xA5" +
24044
- "\u0319\x03\x02\x02\x02\xA7\u031B\x03\x02\x02\x02\xA9\u031D\x03\x02\x02" +
24045
- "\x02\xAB\u031F\x03\x02\x02\x02\xAD\u0321\x03\x02\x02\x02\xAF\u0323\x03" +
24046
- "\x02\x02\x02\xB1\u0326\x03\x02\x02\x02\xB3\u0329\x03\x02\x02\x02\xB5\u032C" +
24047
- "\x03\x02\x02\x02\xB7\u032F\x03\x02\x02\x02\xB9\u0331\x03\x02\x02\x02\xBB" +
24048
- "\u0334\x03\x02\x02\x02\xBD\u0337\x03\x02\x02\x02\xBF\u0339\x03\x02\x02" +
24049
- "\x02\xC1\u033B\x03\x02\x02\x02\xC3\u033E\x03\x02\x02\x02\xC5\u0341\x03" +
24050
- "\x02\x02\x02\xC7\u0345\x03\x02\x02\x02\xC9\u0347\x03\x02\x02\x02\xCB\u0349" +
24051
- "\x03\x02\x02\x02\xCD\u034B\x03\x02\x02\x02\xCF\u034D\x03\x02\x02\x02\xD1" +
24052
- "\u034F\x03\x02\x02\x02\xD3\u0351\x03\x02\x02\x02\xD5\u0353\x03\x02\x02" +
24053
- "\x02\xD7\u0355\x03\x02\x02\x02\xD9\u0357\x03\x02\x02\x02\xDB\u035A\x03" +
24054
- "\x02\x02\x02\xDD\u035C\x03\x02\x02\x02\xDF\u036F\x03\x02\x02\x02\xE1\u0372" +
24041
+ "\u02A8\x03\x02\x02\x02\x91\u02AD\x03\x02\x02\x02\x93\u02E7\x03\x02\x02" +
24042
+ "\x02\x95\u02F2\x03\x02\x02\x02\x97\u02F4\x03\x02\x02\x02\x99\u0311\x03" +
24043
+ "\x02\x02\x02\x9B\u0313\x03\x02\x02\x02\x9D\u0316\x03\x02\x02\x02\x9F\u0319" +
24044
+ "\x03\x02\x02\x02\xA1\u031C\x03\x02\x02\x02\xA3\u031E\x03\x02\x02\x02\xA5" +
24045
+ "\u0320\x03\x02\x02\x02\xA7\u0322\x03\x02\x02\x02\xA9\u0324\x03\x02\x02" +
24046
+ "\x02\xAB\u0326\x03\x02\x02\x02\xAD\u0328\x03\x02\x02\x02\xAF\u032A\x03" +
24047
+ "\x02\x02\x02\xB1\u032D\x03\x02\x02\x02\xB3\u0330\x03\x02\x02\x02\xB5\u0333" +
24048
+ "\x03\x02\x02\x02\xB7\u0336\x03\x02\x02\x02\xB9\u0338\x03\x02\x02\x02\xBB" +
24049
+ "\u033B\x03\x02\x02\x02\xBD\u033E\x03\x02\x02\x02\xBF\u0340\x03\x02\x02" +
24050
+ "\x02\xC1\u0342\x03\x02\x02\x02\xC3\u0345\x03\x02\x02\x02\xC5\u0348\x03" +
24051
+ "\x02\x02\x02\xC7\u034C\x03\x02\x02\x02\xC9\u034E\x03\x02\x02\x02\xCB\u0350" +
24052
+ "\x03\x02\x02\x02\xCD\u0352\x03\x02\x02\x02\xCF\u0354\x03\x02\x02\x02\xD1" +
24053
+ "\u0356\x03\x02\x02\x02\xD3\u0358\x03\x02\x02\x02\xD5\u035A\x03\x02\x02" +
24054
+ "\x02\xD7\u035C\x03\x02\x02\x02\xD9\u035E\x03\x02\x02\x02\xDB\u0361\x03" +
24055
+ "\x02\x02\x02\xDD\u0363\x03\x02\x02\x02\xDF\u0376\x03\x02\x02\x02\xE1\u0379" +
24055
24056
  "\x03\x02\x02\x02\xE3\xE4\x07f\x02\x02\xE4\xE5\x07g\x02\x02\xE5\xE6\x07" +
24056
24057
  "d\x02\x02\xE6\xE7\x07w\x02\x02\xE7\xE8\x07i\x02\x02\xE8\xE9\x07i\x02\x02" +
24057
24058
  "\xE9\xEA\x07g\x02\x02\xEA\xEB\x07t\x02\x02\xEB\x04\x03\x02\x02\x02\xEC" +
@@ -24133,172 +24134,175 @@ BattleScriptLexer._serializedATNSegment0 = "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u
24133
24134
  "\x07h\x02\x02\u01C4\u01C5\x07q\x02\x02\u01C5\u01C6\x07t\x02\x02\u01C6" +
24134
24135
  "F\x03\x02\x02\x02\u01C7\u01C8\x07g\x02\x02\u01C8\u01C9\x07x\x02\x02\u01C9" +
24135
24136
  "\u01CA\x07c\x02\x02\u01CA\u01CB\x07n\x02\x02\u01CB\u01CC\x07w\x02\x02" +
24136
- "\u01CC\u01CD\x07c\x02\x02\u01CD\u01CE\x07v\x02\x02\u01CE\u01CF\x07g\x02" +
24137
- "\x02\u01CFH\x03\x02\x02\x02\u01D0\u01D1\x07e\x02\x02\u01D1\u01D2\x07c" +
24138
- "\x02\x02\u01D2";
24139
- BattleScriptLexer._serializedATNSegment1 = "\u01D3\x07u\x02\x02\u01D3\u01D4\x07g\x02\x02\u01D4J\x03\x02\x02\x02\u01D5" +
24140
- "\u01D6\x07d\x02\x02\u01D6\u01D7\x07t\x02\x02\u01D7\u01D8\x07g\x02\x02" +
24141
- "\u01D8\u01D9\x07c\x02\x02\u01D9\u01DA\x07m\x02\x02\u01DAL\x03\x02\x02" +
24142
- "\x02\u01DB\u01DC\x07e\x02\x02\u01DC\u01DD\x07q\x02\x02\u01DD\u01DE\x07" +
24143
- "p\x02\x02\u01DE\u01DF\x07v\x02\x02\u01DF\u01E0\x07k\x02\x02\u01E0\u01E1" +
24144
- "\x07p\x02\x02\u01E1\u01E2\x07w\x02\x02\u01E2\u01E3\x07g\x02\x02\u01E3" +
24145
- "N\x03\x02\x02\x02\u01E4\u01E5\x07h\x02\x02\u01E5\u01E6\x07c\x02\x02\u01E6" +
24146
- "\u01E7\x07n\x02\x02\u01E7\u01E8\x07n\x02\x02\u01E8\u01E9\x07d\x02\x02" +
24147
- "\u01E9\u01EA\x07c\x02\x02\u01EA\u01EB\x07e\x02\x02\u01EB\u01EC\x07m\x02" +
24148
- "\x02\u01ECP\x03\x02\x02\x02\u01ED\u01EE\x07e\x02\x02\u01EE\u01EF\x07c" +
24149
- "\x02\x02\u01EF\u01F0\x07v\x02\x02\u01F0\u01F1\x07e\x02\x02\u01F1\u01F2" +
24150
- "\x07j\x02\x02\u01F2R\x03\x02\x02\x02\u01F3\u01F4\x07c\x02\x02\u01F4\u01F5" +
24151
- "\x07u\x02\x02\u01F5T\x03\x02\x02\x02\u01F6\u01F7\x07g\x02\x02\u01F7\u01F8" +
24152
- "\x07p\x02\x02\u01F8\u01F9\x07w\x02\x02\u01F9\u01FA\x07o\x02\x02\u01FA" +
24153
- "V\x03\x02\x02\x02\u01FB\u01FC\x07c\x02\x02\u01FC\u01FD\x07p\x02\x02\u01FD" +
24154
- "\u01FE\x07{\x02\x02\u01FEX\x03\x02\x02\x02\u01FF\u0200\x07r\x02\x02\u0200" +
24155
- "\u0201\x07t\x02\x02\u0201\u0202\x07q\x02\x02\u0202\u0203\x07v\x02\x02" +
24156
- "\u0203\u0204\x07q\x02\x02\u0204\u0205\x07e\x02\x02\u0205\u0206\x07q\x02" +
24157
- "\x02\u0206\u0207\x07n\x02\x02\u0207Z\x03\x02\x02\x02\u0208\u0209\x07f" +
24158
- "\x02\x02\u0209\u020A\x07g\x02\x02\u020A\u020B\x07h\x02\x02\u020B\u020C" +
24159
- "\x07k\x02\x02\u020C\u020D\x07p\x02\x02\u020D\u020E\x07g\x02\x02\u020E" +
24160
- "\\\x03\x02\x02\x02\u020F\u0210\x07t\x02\x02\u0210\u0211\x07g\x02\x02\u0211" +
24161
- "\u0212\x07s\x02\x02\u0212\u0213\x07w\x02\x02\u0213\u0214\x07k\x02\x02" +
24162
- "\u0214\u0215\x07t\x02\x02\u0215\u0216\x07g\x02\x02\u0216^\x03\x02\x02" +
24163
- "\x02\u0217\u0218\x07v\x02\x02\u0218\u0219\x07g\x02\x02\u0219\u021A\x07" +
24164
- "t\x02\x02\u021A\u021B\x07o\x02\x02\u021B\u021C\x07k\x02\x02\u021C\u021D" +
24165
- "\x07p\x02\x02\u021D\u021E\x07c\x02\x02\u021E\u021F\x07v\x02\x02\u021F" +
24166
- "\u0220\x07g\x02\x02\u0220`\x03\x02\x02\x02\u0221\u0222\x07u\x02\x02\u0222" +
24167
- "\u0223\x07v\x02\x02\u0223\u0224\x07g\x02\x02\u0224\u0225\x07r\x02\x02" +
24168
- "\u0225b\x03\x02\x02\x02\u0226\u0227\x07f\x02\x02\u0227\u0228\x07g\x02" +
24169
- "\x02\u0228\u0229\x07e\x02\x02\u0229\u022A\x07q\x02\x02\u022A\u022B\x07" +
24170
- "f\x02\x02\u022B\u022C\x07g\x02\x02\u022Cd\x03\x02\x02\x02\u022D\u022E" +
24171
- "\x07g\x02\x02\u022E\u022F\x07p\x02\x02\u022F\u0230\x07e\x02\x02\u0230" +
24172
- "\u0231\x07q\x02\x02\u0231\u0232\x07f\x02\x02\u0232\u0233\x07g\x02\x02" +
24173
- "\u0233f\x03\x02\x02\x02\u0234\u0235\x07g\x02\x02\u0235\u0236\x07p\x02" +
24174
- "\x02\u0236\u0237\x07f\x02\x02\u0237h\x03\x02\x02\x02\u0238\u0239\x07h" +
24175
- "\x02\x02\u0239\u023A\x07q\x02\x02\u023A\u023B\x07t\x02\x02\u023B\u023C" +
24176
- "\x07y\x02\x02\u023C\u023D\x07c\x02\x02\u023D\u023E\x07t\x02\x02\u023E" +
24177
- "\u023F\x07f\x02\x02\u023Fj\x03\x02\x02\x02\u0240\u0241\x07t\x02\x02\u0241" +
24178
- "\u0242\x07g\x02\x02\u0242\u0243\x07y\x02\x02\u0243\u0244\x07k\x02\x02" +
24179
- "\u0244\u0245\x07p\x02\x02\u0245\u0246\x07f\x02\x02\u0246l\x03\x02\x02" +
24180
- "\x02\u0247\u0248\x07q\x02\x02\u0248\u0249\x07h\x02\x02\u0249\u024A\x07" +
24181
- "h\x02\x02\u024A\u024B\x07u\x02\x02\u024B\u024C\x07g\x02\x02\u024C\u024D" +
24182
- "\x07v\x02\x02\u024Dn\x03\x02\x02\x02\u024E\u024F\x07z\x02\x02\u024F\u0250" +
24183
- "\x07q\x02\x02\u0250\u0251\x07t\x02\x02\u0251p\x03\x02\x02\x02\u0252\u0253" +
24184
- "\x07z\x02\x02\u0253\u0254\x07p\x02\x02\u0254\u0255\x07q\x02\x02\u0255" +
24185
- "\u0256\x07t\x02\x02\u0256r\x03\x02\x02\x02\u0257\u0258\x07d\x02\x02\u0258" +
24186
- "\u0259\x07k\x02\x02\u0259\u025A\x07v\x02\x02\u025A\u025B\x07u\x02\x02" +
24187
- "\u025Bt\x03\x02\x02\x02\u025C\u025D\x07d\x02\x02\u025D\u025E\x07{\x02" +
24188
- "\x02\u025E\u025F\x07v\x02\x02\u025F\u0260\x07g\x02\x02\u0260\u0261\x07" +
24189
- "u\x02\x02\u0261v\x03\x02\x02\x02\u0262\u0263\x07t\x02\x02\u0263\u0264" +
24190
- "\x07w\x02\x02\u0264\u0265\x07n\x02\x02\u0265\u0266\x07g\x02\x02\u0266" +
24191
- "x\x03\x02\x02\x02\u0267\u0268\x07r\x02\x02\u0268\u0269\x07c\x02\x02\u0269" +
24192
- "\u026A\x07t\x02\x02\u026A\u026B\x07k\x02\x02\u026B\u026C\x07v\x02\x02" +
24193
- "\u026C\u026D\x07{\x02\x02\u026Dz\x03\x02\x02\x02\u026E\u026F\x07e\x02" +
24194
- "\x02\u026F\u0270\x07q\x02\x02\u0270\u0271\x07p\x02\x02\u0271\u0272\x07" +
24195
- "u\x02\x02\u0272\u0273\x07v\x02\x02\u0273|\x03\x02\x02\x02\u0274\u0275" +
24196
- "\x07q\x02\x02\u0275\u0276\x07d\x02\x02\u0276\u0277\x07l\x02\x02\u0277" +
24197
- "\u0278\x07g\x02\x02\u0278\u0279\x07e\x02\x02\u0279\u027A\x07v\x02\x02" +
24198
- "\u027A~\x03\x02\x02\x02\u027B\u027C\x07c\x02\x02\u027C\u027D\x07t\x02" +
24199
- "\x02\u027D\u027E\x07t\x02\x02\u027E\u027F\x07c\x02\x02\u027F\u0280\x07" +
24200
- "{\x02\x02\u0280\x80\x03\x02\x02\x02\u0281\u0282\x07u\x02\x02\u0282\u0283" +
24201
- "\x07v\x02\x02\u0283\u0284\x07t\x02\x02\u0284\u0285\x07k\x02\x02\u0285" +
24202
- "\u0286\x07p\x02\x02\u0286\u0287\x07i\x02\x02\u0287\x82\x03\x02\x02\x02" +
24203
- "\u0288\u0289\x07k\x02\x02\u0289\u028A\x07p\x02\x02\u028A\u028B\x07v\x02" +
24204
- "\x02\u028B\x84\x03\x02\x02\x02\u028C\u028D\x07w\x02\x02\u028D\u028E\x07" +
24205
- "k\x02\x02\u028E\u028F\x07p\x02\x02\u028F\u0290\x07v\x02\x02\u0290\x86" +
24206
- "\x03\x02\x02\x02\u0291\u0292\x07h\x02\x02\u0292\u0293\x07n\x02\x02\u0293" +
24207
- "\u0294\x07q\x02\x02\u0294\u0295\x07c\x02\x02\u0295\u0296\x07v\x02\x02" +
24208
- "\u0296\x88\x03\x02\x02\x02\u0297\u0298\x07f\x02\x02\u0298\u0299\x07q\x02" +
24209
- "\x02\u0299\u029A\x07w\x02\x02\u029A\u029B\x07d\x02\x02\u029B\u029C\x07" +
24210
- "n\x02\x02\u029C\u029D\x07g\x02\x02\u029D\x8A\x03\x02\x02\x02\u029E\u029F" +
24211
- "\x07d\x02\x02\u029F\u02A0\x07q\x02\x02\u02A0\u02A1\x07q\x02\x02\u02A1" +
24212
- "\u02A2\x07n\x02\x02\u02A2\x8C\x03\x02\x02\x02\u02A3\u02A4\x07p\x02\x02" +
24213
- "\u02A4\u02A5\x07w\x02\x02\u02A5\u02A6\x07n\x02\x02\u02A6\u02A7\x07n\x02" +
24214
- "\x02\u02A7\x8E\x03\x02\x02\x02\u02A8\u02A9\x07x\x02\x02\u02A9\u02AA\x07" +
24215
- "q\x02\x02\u02AA\u02AB\x07k\x02\x02\u02AB\u02AC\x07f\x02\x02\u02AC\x90" +
24216
- "\x03\x02\x02\x02\u02AD\u02AE\x07w\x02\x02\u02AE\u02AF\x07p\x02\x02\u02AF" +
24217
- "\u02B0\x07f\x02\x02\u02B0\u02B1\x07g\x02\x02\u02B1\u02B2\x07h\x02\x02" +
24218
- "\u02B2\u02B3\x07k\x02\x02\u02B3\u02B4\x07p\x02\x02\u02B4\u02B5\x07g\x02" +
24219
- "\x02\u02B5\u02B6\x07f\x02\x02\u02B6\x92\x03\x02\x02\x02\u02B7\u02B9\t" +
24220
- "\x02\x02\x02\u02B8\u02B7\x03\x02\x02\x02\u02B9\u02BA\x03\x02\x02\x02\u02BA" +
24221
- "\u02B8\x03\x02\x02\x02\u02BA\u02BB\x03\x02\x02\x02\u02BB\u02C2\x03\x02" +
24222
- "\x02\x02\u02BC\u02BE\x070\x02\x02\u02BD\u02BF\t\x02\x02\x02\u02BE\u02BD" +
24223
- "\x03\x02\x02\x02\u02BF\u02C0\x03\x02\x02\x02\u02C0\u02BE\x03\x02\x02\x02" +
24224
- "\u02C0\u02C1\x03\x02\x02\x02\u02C1\u02C3\x03\x02\x02\x02\u02C2\u02BC\x03" +
24225
- "\x02\x02\x02\u02C2\u02C3\x03\x02\x02\x02\u02C3\u02CD\x03\x02\x02\x02\u02C4" +
24226
- "\u02C6\t\x03\x02\x02\u02C5\u02C7\t\x04\x02\x02\u02C6\u02C5\x03\x02\x02" +
24227
- "\x02\u02C6\u02C7\x03\x02\x02\x02\u02C7\u02C9\x03\x02\x02\x02\u02C8\u02CA" +
24228
- "\t\x02\x02\x02\u02C9\u02C8\x03\x02\x02\x02\u02CA\u02CB\x03\x02\x02\x02" +
24229
- "\u02CB\u02C9\x03\x02\x02\x02\u02CB\u02CC\x03\x02\x02\x02\u02CC\u02CE\x03" +
24230
- "\x02\x02\x02\u02CD\u02C4\x03\x02\x02\x02\u02CD\u02CE\x03\x02\x02\x02\u02CE" +
24231
- "\u02E1\x03\x02\x02\x02\u02CF\u02D1\x070\x02\x02\u02D0\u02D2\t\x02\x02" +
24232
- "\x02\u02D1\u02D0\x03\x02\x02\x02\u02D2\u02D3\x03\x02\x02\x02\u02D3\u02D1" +
24233
- "\x03\x02\x02\x02\u02D3\u02D4\x03\x02\x02\x02\u02D4\u02DE\x03\x02\x02\x02" +
24234
- "\u02D5\u02D7\t\x03\x02\x02\u02D6\u02D8\t\x04\x02\x02\u02D7\u02D6\x03\x02" +
24235
- "\x02\x02\u02D7\u02D8\x03\x02\x02\x02\u02D8\u02DA\x03\x02\x02\x02\u02D9" +
24236
- "\u02DB\t\x02\x02\x02\u02DA\u02D9\x03\x02\x02\x02\u02DB\u02DC\x03\x02\x02" +
24237
- "\x02\u02DC\u02DA\x03\x02\x02\x02\u02DC\u02DD\x03\x02\x02\x02\u02DD\u02DF" +
24238
- "\x03\x02\x02\x02\u02DE\u02D5\x03\x02\x02\x02\u02DE\u02DF\x03\x02\x02\x02" +
24239
- "\u02DF\u02E1\x03\x02\x02\x02\u02E0\u02B8\x03\x02\x02\x02\u02E0\u02CF\x03" +
24240
- "\x02\x02\x02\u02E1\x94\x03\x02\x02\x02\u02E2\u02E3\x07v\x02\x02\u02E3" +
24241
- "\u02E4\x07t\x02\x02\u02E4\u02E5\x07w\x02\x02\u02E5\u02EC\x07g\x02\x02" +
24242
- "\u02E6\u02E7\x07h\x02\x02\u02E7\u02E8\x07c\x02\x02\u02E8\u02E9\x07n\x02" +
24243
- "\x02\u02E9\u02EA\x07u\x02\x02\u02EA\u02EC\x07g\x02\x02\u02EB\u02E2\x03" +
24244
- "\x02\x02\x02\u02EB\u02E6\x03\x02\x02\x02\u02EC\x96\x03\x02\x02\x02\u02ED" +
24245
- "\u02F1\x07$\x02\x02\u02EE\u02F0\n\x05\x02\x02\u02EF\u02EE\x03\x02\x02" +
24246
- "\x02\u02F0\u02F3\x03\x02\x02\x02\u02F1\u02EF\x03\x02\x02\x02\u02F1\u02F2" +
24247
- "\x03\x02\x02\x02\u02F2\u02F4\x03\x02\x02\x02\u02F3\u02F1\x03\x02\x02\x02" +
24248
- "\u02F4\u02F5\x07$\x02\x02\u02F5\x98\x03\x02\x02\x02\u02F6\u02F7\x071\x02" +
24249
- "\x02\u02F7\u02F8\x071\x02\x02\u02F8\u02FC\x03\x02\x02\x02\u02F9\u02FB" +
24250
- "\n\x06\x02\x02\u02FA\u02F9\x03\x02\x02\x02\u02FB\u02FE\x03\x02\x02\x02" +
24251
- "\u02FC\u02FA\x03\x02\x02\x02\u02FC\u02FD\x03\x02\x02\x02\u02FD\u030B\x03" +
24252
- "\x02\x02\x02\u02FE\u02FC\x03\x02\x02\x02\u02FF\u0300\x071\x02\x02\u0300" +
24253
- "\u0301\x07,\x02\x02\u0301\u0305\x03\x02\x02\x02\u0302\u0304\v\x02\x02" +
24254
- "\x02\u0303\u0302\x03\x02\x02\x02\u0304\u0307\x03\x02\x02\x02\u0305\u0306" +
24255
- "\x03\x02\x02\x02\u0305\u0303\x03\x02\x02\x02\u0306\u0308\x03\x02\x02\x02" +
24256
- "\u0307\u0305\x03\x02\x02\x02\u0308\u0309\x07,\x02\x02\u0309\u030B\x07" +
24257
- "1\x02\x02\u030A\u02F6\x03\x02\x02\x02\u030A\u02FF\x03\x02\x02\x02\u030B" +
24258
- "\x9A\x03\x02\x02\x02\u030C\u030D\x07?\x02\x02\u030D\u030E\x07@\x02\x02" +
24259
- "\u030E\x9C\x03\x02\x02\x02\u030F\u0310\x07-\x02\x02\u0310\u0311\x07-\x02" +
24260
- "\x02\u0311\x9E\x03\x02\x02\x02\u0312\u0313\x07/\x02\x02\u0313\u0314\x07" +
24261
- "/\x02\x02\u0314\xA0\x03\x02\x02\x02\u0315\u0316\x07-\x02\x02\u0316\xA2" +
24262
- "\x03\x02\x02\x02\u0317\u0318\x07/\x02\x02\u0318\xA4\x03\x02\x02\x02\u0319" +
24263
- "\u031A\x071\x02\x02\u031A\xA6\x03\x02\x02\x02\u031B\u031C\x07,\x02\x02" +
24264
- "\u031C\xA8\x03\x02\x02\x02\u031D\u031E\x07\'\x02\x02\u031E\xAA\x03\x02" +
24265
- "\x02\x02\u031F\u0320\x07A\x02\x02\u0320\xAC\x03\x02\x02\x02\u0321\u0322" +
24266
- "\x07?\x02\x02\u0322\xAE\x03\x02\x02\x02\u0323\u0324\x07-\x02\x02\u0324" +
24267
- "\u0325\x07?\x02\x02\u0325\xB0\x03\x02\x02\x02\u0326\u0327\x07/\x02\x02" +
24268
- "\u0327\u0328\x07?\x02\x02\u0328\xB2\x03\x02\x02\x02\u0329\u032A\x07(\x02" +
24269
- "\x02\u032A\u032B\x07(\x02\x02\u032B\xB4\x03\x02\x02\x02\u032C\u032D\x07" +
24270
- "~\x02\x02\u032D\u032E\x07~\x02\x02\u032E\xB6\x03\x02\x02\x02\u032F\u0330" +
24271
- "\x07#\x02\x02\u0330\xB8\x03\x02\x02\x02\u0331\u0332\x07?\x02\x02\u0332" +
24272
- "\u0333\x07?\x02\x02\u0333\xBA\x03\x02\x02\x02\u0334\u0335\x07#\x02\x02" +
24273
- "\u0335\u0336\x07?\x02\x02\u0336\xBC\x03\x02\x02\x02\u0337\u0338\x07@\x02" +
24274
- "\x02\u0338\xBE\x03\x02\x02\x02\u0339\u033A\x07>\x02\x02\u033A\xC0\x03" +
24275
- "\x02\x02\x02\u033B\u033C\x07@\x02\x02\u033C\u033D\x07?\x02\x02\u033D\xC2" +
24276
- "\x03\x02\x02\x02\u033E\u033F\x07>\x02\x02\u033F\u0340\x07?\x02\x02\u0340" +
24277
- "\xC4\x03\x02\x02\x02\u0341\u0342\x070\x02\x02\u0342\u0343\x070\x02\x02" +
24278
- "\u0343\u0344\x070\x02\x02\u0344\xC6\x03\x02\x02\x02\u0345\u0346\x070\x02" +
24279
- "\x02\u0346\xC8\x03\x02\x02\x02\u0347\u0348\x07.\x02\x02\u0348\xCA\x03" +
24280
- "\x02\x02\x02\u0349\u034A\x07a\x02\x02\u034A\xCC\x03\x02\x02\x02\u034B" +
24281
- "\u034C\x07*\x02\x02\u034C\xCE\x03\x02\x02\x02\u034D\u034E\x07+\x02\x02" +
24282
- "\u034E\xD0\x03\x02\x02\x02\u034F\u0350\x07}\x02\x02\u0350\xD2\x03\x02" +
24283
- "\x02\x02\u0351\u0352\x07\x7F\x02\x02\u0352\xD4\x03\x02\x02\x02\u0353\u0354" +
24284
- "\x07]\x02\x02\u0354\xD6\x03\x02\x02\x02\u0355\u0356\x07_\x02\x02\u0356" +
24285
- "\xD8\x03\x02\x02\x02\u0357\u0358\x07<\x02\x02\u0358\u0359\x07<\x02\x02" +
24286
- "\u0359\xDA\x03\x02\x02\x02\u035A\u035B\x07=\x02\x02\u035B\xDC\x03\x02" +
24287
- "\x02\x02\u035C\u035D\x07<\x02\x02\u035D\xDE\x03\x02\x02\x02\u035E\u0362" +
24288
- "\t\x07\x02\x02\u035F\u0361\t\b\x02\x02\u0360\u035F\x03\x02\x02\x02\u0361" +
24289
- "\u0364\x03\x02\x02\x02\u0362\u0360\x03\x02\x02\x02\u0362\u0363\x03\x02" +
24290
- "\x02\x02\u0363\u0370\x03\x02\x02\x02\u0364\u0362\x03\x02\x02\x02\u0365" +
24291
- "\u0367\t\t\x02\x02\u0366\u0365\x03\x02\x02\x02\u0367\u0368\x03\x02\x02" +
24292
- "\x02\u0368\u0366\x03\x02\x02\x02\u0368\u0369\x03\x02\x02\x02\u0369\u036B" +
24293
- "\x03\x02\x02\x02\u036A\u036C\t\b\x02\x02\u036B\u036A\x03\x02\x02\x02\u036C" +
24294
- "\u036D\x03\x02\x02\x02\u036D\u036B\x03\x02\x02\x02\u036D\u036E\x03\x02" +
24295
- "\x02\x02\u036E\u0370\x03\x02\x02\x02\u036F\u035E\x03\x02\x02\x02\u036F" +
24296
- "\u0366\x03\x02\x02\x02\u0370\xE0\x03\x02\x02\x02\u0371\u0373\t\n\x02\x02" +
24297
- "\u0372\u0371\x03\x02\x02\x02\u0373\u0374\x03\x02\x02\x02\u0374\u0372\x03" +
24298
- "\x02\x02\x02\u0374\u0375\x03\x02\x02\x02\u0375\u0376\x03\x02\x02\x02\u0376" +
24299
- "\u0377\bq\x02\x02\u0377\xE2\x03\x02\x02\x02\x18\x02\u02BA\u02C0\u02C2" +
24300
- "\u02C6\u02CB\u02CD\u02D3\u02D7\u02DC\u02DE\u02E0\u02EB\u02F1\u02FC\u0305" +
24301
- "\u030A\u0362\u0368\u036D\u036F\u0374\x03\b\x02\x02";
24137
+ "\u01CC\u01CD\x07c\x02\x02\u01CD";
24138
+ BattleScriptLexer._serializedATNSegment1 = "\u01CE\x07v\x02\x02\u01CE\u01CF\x07g\x02\x02\u01CFH\x03\x02\x02\x02\u01D0" +
24139
+ "\u01D1\x07e\x02\x02\u01D1\u01D2\x07c\x02\x02\u01D2\u01D3\x07u\x02\x02" +
24140
+ "\u01D3\u01D4\x07g\x02\x02\u01D4J\x03\x02\x02\x02\u01D5\u01D6\x07d\x02" +
24141
+ "\x02\u01D6\u01D7\x07t\x02\x02\u01D7\u01D8\x07g\x02\x02\u01D8\u01D9\x07" +
24142
+ "c\x02\x02\u01D9\u01DA\x07m\x02\x02\u01DAL\x03\x02\x02\x02\u01DB\u01DC" +
24143
+ "\x07e\x02\x02\u01DC\u01DD\x07q\x02\x02\u01DD\u01DE\x07p\x02\x02\u01DE" +
24144
+ "\u01DF\x07v\x02\x02\u01DF\u01E0\x07k\x02\x02\u01E0\u01E1\x07p\x02\x02" +
24145
+ "\u01E1\u01E2\x07w\x02\x02\u01E2\u01E3\x07g\x02\x02\u01E3N\x03\x02\x02" +
24146
+ "\x02\u01E4\u01E5\x07h\x02\x02\u01E5\u01E6\x07c\x02\x02\u01E6\u01E7\x07" +
24147
+ "n\x02\x02\u01E7\u01E8\x07n\x02\x02\u01E8\u01E9\x07d\x02\x02\u01E9\u01EA" +
24148
+ "\x07c\x02\x02\u01EA\u01EB\x07e\x02\x02\u01EB\u01EC\x07m\x02\x02\u01EC" +
24149
+ "P\x03\x02\x02\x02\u01ED\u01EE\x07e\x02\x02\u01EE\u01EF\x07c\x02\x02\u01EF" +
24150
+ "\u01F0\x07v\x02\x02\u01F0\u01F1\x07e\x02\x02\u01F1\u01F2\x07j\x02\x02" +
24151
+ "\u01F2R\x03\x02\x02\x02\u01F3\u01F4\x07c\x02\x02\u01F4\u01F5\x07u\x02" +
24152
+ "\x02\u01F5T\x03\x02\x02\x02\u01F6\u01F7\x07g\x02\x02\u01F7\u01F8\x07p" +
24153
+ "\x02\x02\u01F8\u01F9\x07w\x02\x02\u01F9\u01FA\x07o\x02\x02\u01FAV\x03" +
24154
+ "\x02\x02\x02\u01FB\u01FC\x07c\x02\x02\u01FC\u01FD\x07p\x02\x02\u01FD\u01FE" +
24155
+ "\x07{\x02\x02\u01FEX\x03\x02\x02\x02\u01FF\u0200\x07r\x02\x02\u0200\u0201" +
24156
+ "\x07t\x02\x02\u0201\u0202\x07q\x02\x02\u0202\u0203\x07v\x02\x02\u0203" +
24157
+ "\u0204\x07q\x02\x02\u0204\u0205\x07e\x02\x02\u0205\u0206\x07q\x02\x02" +
24158
+ "\u0206\u0207\x07n\x02\x02\u0207Z\x03\x02\x02\x02\u0208\u0209\x07f\x02" +
24159
+ "\x02\u0209\u020A\x07g\x02\x02\u020A\u020B\x07h\x02\x02\u020B\u020C\x07" +
24160
+ "k\x02\x02\u020C\u020D\x07p\x02\x02\u020D\u020E\x07g\x02\x02\u020E\\\x03" +
24161
+ "\x02\x02\x02\u020F\u0210\x07t\x02\x02\u0210\u0211\x07g\x02\x02\u0211\u0212" +
24162
+ "\x07s\x02\x02\u0212\u0213\x07w\x02\x02\u0213\u0214\x07k\x02\x02\u0214" +
24163
+ "\u0215\x07t\x02\x02\u0215\u0216\x07g\x02\x02\u0216^\x03\x02\x02\x02\u0217" +
24164
+ "\u0218\x07v\x02\x02\u0218\u0219\x07g\x02\x02\u0219\u021A\x07t\x02\x02" +
24165
+ "\u021A\u021B\x07o\x02\x02\u021B\u021C\x07k\x02\x02\u021C\u021D\x07p\x02" +
24166
+ "\x02\u021D\u021E\x07c\x02\x02\u021E\u021F\x07v\x02\x02\u021F\u0220\x07" +
24167
+ "g\x02\x02\u0220`\x03\x02\x02\x02\u0221\u0222\x07u\x02\x02\u0222\u0223" +
24168
+ "\x07v\x02\x02\u0223\u0224\x07g\x02\x02\u0224\u0225\x07r\x02\x02\u0225" +
24169
+ "b\x03\x02\x02\x02\u0226\u0227\x07f\x02\x02\u0227\u0228\x07g\x02\x02\u0228" +
24170
+ "\u0229\x07e\x02\x02\u0229\u022A\x07q\x02\x02\u022A\u022B\x07f\x02\x02" +
24171
+ "\u022B\u022C\x07g\x02\x02\u022Cd\x03\x02\x02\x02\u022D\u022E\x07g\x02" +
24172
+ "\x02\u022E\u022F\x07p\x02\x02\u022F\u0230\x07e\x02\x02\u0230\u0231\x07" +
24173
+ "q\x02\x02\u0231\u0232\x07f\x02\x02\u0232\u0233\x07g\x02\x02\u0233f\x03" +
24174
+ "\x02\x02\x02\u0234\u0235\x07g\x02\x02\u0235\u0236\x07p\x02\x02\u0236\u0237" +
24175
+ "\x07f\x02\x02\u0237h\x03\x02\x02\x02\u0238\u0239\x07h\x02\x02\u0239\u023A" +
24176
+ "\x07q\x02\x02\u023A\u023B\x07t\x02\x02\u023B\u023C\x07y\x02\x02\u023C" +
24177
+ "\u023D\x07c\x02\x02\u023D\u023E\x07t\x02\x02\u023E\u023F\x07f\x02\x02" +
24178
+ "\u023Fj\x03\x02\x02\x02\u0240\u0241\x07t\x02\x02\u0241\u0242\x07g\x02" +
24179
+ "\x02\u0242\u0243\x07y\x02\x02\u0243\u0244\x07k\x02\x02\u0244\u0245\x07" +
24180
+ "p\x02\x02\u0245\u0246\x07f\x02\x02\u0246l\x03\x02\x02\x02\u0247\u0248" +
24181
+ "\x07q\x02\x02\u0248\u0249\x07h\x02\x02\u0249\u024A\x07h\x02\x02\u024A" +
24182
+ "\u024B\x07u\x02\x02\u024B\u024C\x07g\x02\x02\u024C\u024D\x07v\x02\x02" +
24183
+ "\u024Dn\x03\x02\x02\x02\u024E\u024F\x07z\x02\x02\u024F\u0250\x07q\x02" +
24184
+ "\x02\u0250\u0251\x07t\x02\x02\u0251p\x03\x02\x02\x02\u0252\u0253\x07z" +
24185
+ "\x02\x02\u0253\u0254\x07p\x02\x02\u0254\u0255\x07q\x02\x02\u0255\u0256" +
24186
+ "\x07t\x02\x02\u0256r\x03\x02\x02\x02\u0257\u0258\x07d\x02\x02\u0258\u0259" +
24187
+ "\x07k\x02\x02\u0259\u025A\x07v\x02\x02\u025A\u025B\x07u\x02\x02\u025B" +
24188
+ "t\x03\x02\x02\x02\u025C\u025D\x07d\x02\x02\u025D\u025E\x07{\x02\x02\u025E" +
24189
+ "\u025F\x07v\x02\x02\u025F\u0260\x07g\x02\x02\u0260\u0261\x07u\x02\x02" +
24190
+ "\u0261v\x03\x02\x02\x02\u0262\u0263\x07t\x02\x02\u0263\u0264\x07w\x02" +
24191
+ "\x02\u0264\u0265\x07n\x02\x02\u0265\u0266\x07g\x02\x02\u0266x\x03\x02" +
24192
+ "\x02\x02\u0267\u0268\x07r\x02\x02\u0268\u0269\x07c\x02\x02\u0269\u026A" +
24193
+ "\x07t\x02\x02\u026A\u026B\x07k\x02\x02\u026B\u026C\x07v\x02\x02\u026C" +
24194
+ "\u026D\x07{\x02\x02\u026Dz\x03\x02\x02\x02\u026E\u026F\x07e\x02\x02\u026F" +
24195
+ "\u0270\x07q\x02\x02\u0270\u0271\x07p\x02\x02\u0271\u0272\x07u\x02\x02" +
24196
+ "\u0272\u0273\x07v\x02\x02\u0273|\x03\x02\x02\x02\u0274\u0275\x07q\x02" +
24197
+ "\x02\u0275\u0276\x07d\x02\x02\u0276\u0277\x07l\x02\x02\u0277\u0278\x07" +
24198
+ "g\x02\x02\u0278\u0279\x07e\x02\x02\u0279\u027A\x07v\x02\x02\u027A~\x03" +
24199
+ "\x02\x02\x02\u027B\u027C\x07c\x02\x02\u027C\u027D\x07t\x02\x02\u027D\u027E" +
24200
+ "\x07t\x02\x02\u027E\u027F\x07c\x02\x02\u027F\u0280\x07{\x02\x02\u0280" +
24201
+ "\x80\x03\x02\x02\x02\u0281\u0282\x07u\x02\x02\u0282\u0283\x07v\x02\x02" +
24202
+ "\u0283\u0284\x07t\x02\x02\u0284\u0285\x07k\x02\x02\u0285\u0286\x07p\x02" +
24203
+ "\x02\u0286\u0287\x07i\x02\x02\u0287\x82\x03\x02\x02\x02\u0288\u0289\x07" +
24204
+ "k\x02\x02\u0289\u028A\x07p\x02\x02\u028A\u028B\x07v\x02\x02\u028B\x84" +
24205
+ "\x03\x02\x02\x02\u028C\u028D\x07w\x02\x02\u028D\u028E\x07k\x02\x02\u028E" +
24206
+ "\u028F\x07p\x02\x02\u028F\u0290\x07v\x02\x02\u0290\x86\x03\x02\x02\x02" +
24207
+ "\u0291\u0292\x07h\x02\x02\u0292\u0293\x07n\x02\x02\u0293\u0294\x07q\x02" +
24208
+ "\x02\u0294\u0295\x07c\x02\x02\u0295\u0296\x07v\x02\x02\u0296\x88\x03\x02" +
24209
+ "\x02\x02\u0297\u0298\x07f\x02\x02\u0298\u0299\x07q\x02\x02\u0299\u029A" +
24210
+ "\x07w\x02\x02\u029A\u029B\x07d\x02\x02\u029B\u029C\x07n\x02\x02\u029C" +
24211
+ "\u029D\x07g\x02\x02\u029D\x8A\x03\x02\x02\x02\u029E\u029F\x07d\x02\x02" +
24212
+ "\u029F\u02A0\x07q\x02\x02\u02A0\u02A1\x07q\x02\x02\u02A1\u02A2\x07n\x02" +
24213
+ "\x02\u02A2\x8C\x03\x02\x02\x02\u02A3\u02A4\x07p\x02\x02\u02A4\u02A5\x07" +
24214
+ "w\x02\x02\u02A5\u02A6\x07n\x02\x02\u02A6\u02A7\x07n\x02\x02\u02A7\x8E" +
24215
+ "\x03\x02\x02\x02\u02A8\u02A9\x07x\x02\x02\u02A9\u02AA\x07q\x02\x02\u02AA" +
24216
+ "\u02AB\x07k\x02\x02\u02AB\u02AC\x07f\x02\x02\u02AC\x90\x03\x02\x02\x02" +
24217
+ "\u02AD\u02AE\x07w\x02\x02\u02AE\u02AF\x07p\x02\x02\u02AF\u02B0\x07f\x02" +
24218
+ "\x02\u02B0\u02B1\x07g\x02\x02\u02B1\u02B2\x07h\x02\x02\u02B2\u02B3\x07" +
24219
+ "k\x02\x02\u02B3\u02B4\x07p\x02\x02\u02B4\u02B5\x07g\x02\x02\u02B5\u02B6" +
24220
+ "\x07f\x02\x02\u02B6\x92\x03\x02\x02\x02\u02B7\u02B8\x072\x02\x02\u02B8" +
24221
+ "\u02BA\t\x02\x02\x02\u02B9\u02BB\t\x03\x02\x02\u02BA\u02B9\x03\x02\x02" +
24222
+ "\x02\u02BB\u02BC\x03\x02\x02\x02\u02BC\u02BA\x03\x02\x02\x02\u02BC\u02BD" +
24223
+ "\x03\x02\x02\x02\u02BD\u02E8\x03\x02\x02\x02\u02BE\u02C0\t\x04\x02\x02" +
24224
+ "\u02BF\u02BE\x03\x02\x02\x02\u02C0\u02C1\x03\x02\x02\x02\u02C1\u02BF\x03" +
24225
+ "\x02\x02\x02\u02C1\u02C2\x03\x02\x02\x02\u02C2\u02C9\x03\x02\x02\x02\u02C3" +
24226
+ "\u02C5\x070\x02\x02\u02C4\u02C6\t\x04\x02\x02\u02C5\u02C4\x03\x02\x02" +
24227
+ "\x02\u02C6\u02C7\x03\x02\x02\x02\u02C7\u02C5\x03\x02\x02\x02\u02C7\u02C8" +
24228
+ "\x03\x02\x02\x02\u02C8\u02CA\x03\x02\x02\x02\u02C9\u02C3\x03\x02\x02\x02" +
24229
+ "\u02C9\u02CA\x03\x02\x02\x02\u02CA\u02D4\x03\x02\x02\x02\u02CB\u02CD\t" +
24230
+ "\x05\x02\x02\u02CC\u02CE\t\x06\x02\x02\u02CD\u02CC\x03\x02\x02\x02\u02CD" +
24231
+ "\u02CE\x03\x02\x02\x02\u02CE\u02D0\x03\x02\x02\x02\u02CF\u02D1\t\x04\x02" +
24232
+ "\x02\u02D0\u02CF\x03\x02\x02\x02\u02D1\u02D2\x03\x02\x02\x02\u02D2\u02D0" +
24233
+ "\x03\x02\x02\x02\u02D2\u02D3\x03\x02\x02\x02\u02D3\u02D5\x03\x02\x02\x02" +
24234
+ "\u02D4\u02CB\x03\x02\x02\x02\u02D4\u02D5\x03\x02\x02\x02\u02D5\u02E8\x03" +
24235
+ "\x02\x02\x02\u02D6\u02D8\x070\x02\x02\u02D7\u02D9\t\x04\x02\x02\u02D8" +
24236
+ "\u02D7\x03\x02\x02\x02\u02D9\u02DA\x03\x02\x02\x02\u02DA\u02D8\x03\x02" +
24237
+ "\x02\x02\u02DA\u02DB\x03\x02\x02\x02\u02DB\u02E5\x03\x02\x02\x02\u02DC" +
24238
+ "\u02DE\t\x05\x02\x02\u02DD\u02DF\t\x06\x02\x02\u02DE\u02DD\x03\x02\x02" +
24239
+ "\x02\u02DE\u02DF\x03\x02\x02\x02\u02DF\u02E1\x03\x02\x02\x02\u02E0\u02E2" +
24240
+ "\t\x04\x02\x02\u02E1\u02E0\x03\x02\x02\x02\u02E2\u02E3\x03\x02\x02\x02" +
24241
+ "\u02E3\u02E1\x03\x02\x02\x02\u02E3\u02E4\x03\x02\x02\x02\u02E4\u02E6\x03" +
24242
+ "\x02\x02\x02\u02E5\u02DC\x03\x02\x02\x02\u02E5\u02E6\x03\x02\x02\x02\u02E6" +
24243
+ "\u02E8\x03\x02\x02\x02\u02E7\u02B7\x03\x02\x02\x02\u02E7\u02BF\x03\x02" +
24244
+ "\x02\x02\u02E7\u02D6\x03\x02\x02\x02\u02E8\x94\x03\x02\x02\x02\u02E9\u02EA" +
24245
+ "\x07v\x02\x02\u02EA\u02EB\x07t\x02\x02\u02EB\u02EC\x07w\x02\x02\u02EC" +
24246
+ "\u02F3\x07g\x02\x02\u02ED\u02EE\x07h\x02\x02\u02EE\u02EF\x07c\x02\x02" +
24247
+ "\u02EF\u02F0\x07n\x02\x02\u02F0\u02F1\x07u\x02\x02\u02F1\u02F3\x07g\x02" +
24248
+ "\x02\u02F2\u02E9\x03\x02\x02\x02\u02F2\u02ED\x03\x02\x02\x02\u02F3\x96" +
24249
+ "\x03\x02\x02\x02\u02F4\u02F8\x07$\x02\x02\u02F5\u02F7\n\x07\x02\x02\u02F6" +
24250
+ "\u02F5\x03\x02\x02\x02\u02F7\u02FA\x03\x02\x02\x02\u02F8\u02F6\x03\x02" +
24251
+ "\x02\x02\u02F8\u02F9\x03\x02\x02\x02\u02F9\u02FB\x03\x02\x02\x02\u02FA" +
24252
+ "\u02F8\x03\x02\x02\x02\u02FB\u02FC\x07$\x02\x02\u02FC\x98\x03\x02\x02" +
24253
+ "\x02\u02FD\u02FE\x071\x02\x02\u02FE\u02FF\x071\x02\x02\u02FF\u0303\x03" +
24254
+ "\x02\x02\x02\u0300\u0302\n\b\x02\x02\u0301\u0300\x03\x02\x02\x02\u0302" +
24255
+ "\u0305\x03\x02\x02\x02\u0303\u0301\x03\x02\x02\x02\u0303\u0304\x03\x02" +
24256
+ "\x02\x02\u0304\u0312\x03\x02\x02\x02\u0305\u0303\x03\x02\x02\x02\u0306" +
24257
+ "\u0307\x071\x02\x02\u0307\u0308\x07,\x02\x02\u0308\u030C\x03\x02\x02\x02" +
24258
+ "\u0309\u030B\v\x02\x02\x02\u030A\u0309\x03\x02\x02\x02\u030B\u030E\x03" +
24259
+ "\x02\x02\x02\u030C\u030D\x03\x02\x02\x02\u030C\u030A\x03\x02\x02\x02\u030D" +
24260
+ "\u030F\x03\x02\x02\x02\u030E\u030C\x03\x02\x02\x02\u030F\u0310\x07,\x02" +
24261
+ "\x02\u0310\u0312\x071\x02\x02\u0311\u02FD\x03\x02\x02\x02\u0311\u0306" +
24262
+ "\x03\x02\x02\x02\u0312\x9A\x03\x02\x02\x02\u0313\u0314\x07?\x02\x02\u0314" +
24263
+ "\u0315\x07@\x02\x02\u0315\x9C\x03\x02\x02\x02\u0316\u0317\x07-\x02\x02" +
24264
+ "\u0317\u0318\x07-\x02\x02\u0318\x9E\x03\x02\x02\x02\u0319\u031A\x07/\x02" +
24265
+ "\x02\u031A\u031B\x07/\x02\x02\u031B\xA0\x03\x02\x02\x02\u031C\u031D\x07" +
24266
+ "-\x02\x02\u031D\xA2\x03\x02\x02\x02\u031E\u031F\x07/\x02\x02\u031F\xA4" +
24267
+ "\x03\x02\x02\x02\u0320\u0321\x071\x02\x02\u0321\xA6\x03\x02\x02\x02\u0322" +
24268
+ "\u0323\x07,\x02\x02\u0323\xA8\x03\x02\x02\x02\u0324\u0325\x07\'\x02\x02" +
24269
+ "\u0325\xAA\x03\x02\x02\x02\u0326\u0327\x07A\x02\x02\u0327\xAC\x03\x02" +
24270
+ "\x02\x02\u0328\u0329\x07?\x02\x02\u0329\xAE\x03\x02\x02\x02\u032A\u032B" +
24271
+ "\x07-\x02\x02\u032B\u032C\x07?\x02\x02\u032C\xB0\x03\x02\x02\x02\u032D" +
24272
+ "\u032E\x07/\x02\x02\u032E\u032F\x07?\x02\x02\u032F\xB2\x03\x02\x02\x02" +
24273
+ "\u0330\u0331\x07(\x02\x02\u0331\u0332\x07(\x02\x02\u0332\xB4\x03\x02\x02" +
24274
+ "\x02\u0333\u0334\x07~\x02\x02\u0334\u0335\x07~\x02\x02\u0335\xB6\x03\x02" +
24275
+ "\x02\x02\u0336\u0337\x07#\x02\x02\u0337\xB8\x03\x02\x02\x02\u0338\u0339" +
24276
+ "\x07?\x02\x02\u0339\u033A\x07?\x02\x02\u033A\xBA\x03\x02\x02\x02\u033B" +
24277
+ "\u033C\x07#\x02\x02\u033C\u033D\x07?\x02\x02\u033D\xBC\x03\x02\x02\x02" +
24278
+ "\u033E\u033F\x07@\x02\x02\u033F\xBE\x03\x02\x02\x02\u0340\u0341\x07>\x02" +
24279
+ "\x02\u0341\xC0\x03\x02\x02\x02\u0342\u0343\x07@\x02\x02\u0343\u0344\x07" +
24280
+ "?\x02\x02\u0344\xC2\x03\x02\x02\x02\u0345\u0346\x07>\x02\x02\u0346\u0347" +
24281
+ "\x07?\x02\x02\u0347\xC4\x03\x02\x02\x02\u0348\u0349\x070\x02\x02\u0349" +
24282
+ "\u034A\x070\x02\x02\u034A\u034B\x070\x02\x02\u034B\xC6\x03\x02\x02\x02" +
24283
+ "\u034C\u034D\x070\x02\x02\u034D\xC8\x03\x02\x02\x02\u034E\u034F\x07.\x02" +
24284
+ "\x02\u034F\xCA\x03\x02\x02\x02\u0350\u0351\x07a\x02\x02\u0351\xCC\x03" +
24285
+ "\x02\x02\x02\u0352\u0353\x07*\x02\x02\u0353\xCE\x03\x02\x02\x02\u0354" +
24286
+ "\u0355\x07+\x02\x02\u0355\xD0\x03\x02\x02\x02\u0356\u0357\x07}\x02\x02" +
24287
+ "\u0357\xD2\x03\x02\x02\x02\u0358\u0359\x07\x7F\x02\x02\u0359\xD4\x03\x02" +
24288
+ "\x02\x02\u035A\u035B\x07]\x02\x02\u035B\xD6\x03\x02\x02\x02\u035C\u035D" +
24289
+ "\x07_\x02\x02\u035D\xD8\x03\x02\x02\x02\u035E\u035F\x07<\x02\x02\u035F" +
24290
+ "\u0360\x07<\x02\x02\u0360\xDA\x03\x02\x02\x02\u0361\u0362\x07=\x02\x02" +
24291
+ "\u0362\xDC\x03\x02\x02\x02\u0363\u0364\x07<\x02\x02\u0364\xDE\x03\x02" +
24292
+ "\x02\x02\u0365\u0369\t\t\x02\x02\u0366\u0368\t\n\x02\x02\u0367\u0366\x03" +
24293
+ "\x02\x02\x02\u0368\u036B\x03\x02\x02\x02\u0369\u0367\x03\x02\x02\x02\u0369" +
24294
+ "\u036A\x03\x02\x02\x02\u036A\u0377\x03\x02\x02\x02\u036B\u0369\x03\x02" +
24295
+ "\x02\x02\u036C\u036E\t\v\x02\x02\u036D\u036C\x03\x02\x02\x02\u036E\u036F" +
24296
+ "\x03\x02\x02\x02\u036F\u036D\x03\x02\x02\x02\u036F\u0370\x03\x02\x02\x02" +
24297
+ "\u0370\u0372\x03\x02\x02\x02\u0371\u0373\t\n\x02\x02\u0372\u0371\x03\x02" +
24298
+ "\x02\x02\u0373\u0374\x03\x02\x02\x02\u0374\u0372\x03\x02\x02\x02\u0374" +
24299
+ "\u0375\x03\x02\x02\x02\u0375\u0377\x03\x02\x02\x02\u0376\u0365\x03\x02" +
24300
+ "\x02\x02\u0376\u036D\x03\x02\x02\x02\u0377\xE0\x03\x02\x02\x02\u0378\u037A" +
24301
+ "\t\f\x02\x02\u0379\u0378\x03\x02\x02\x02\u037A\u037B\x03\x02\x02\x02\u037B" +
24302
+ "\u0379\x03\x02\x02\x02\u037B\u037C\x03\x02\x02\x02\u037C\u037D\x03\x02" +
24303
+ "\x02\x02\u037D\u037E\bq\x02\x02\u037E\xE2\x03\x02\x02\x02\x19\x02\u02BC" +
24304
+ "\u02C1\u02C7\u02C9\u02CD\u02D2\u02D4\u02DA\u02DE\u02E3\u02E5\u02E7\u02F2" +
24305
+ "\u02F8\u0303\u030C\u0311\u0369\u036F\u0374\u0376\u037B\x03\b\x02\x02";
24302
24306
  BattleScriptLexer._serializedATN = UtilsExports.join([
24303
24307
  BattleScriptLexer._serializedATNSegment0,
24304
24308
  BattleScriptLexer._serializedATNSegment1,
@@ -24372,6 +24376,18 @@ const throwIfUndefined = (value, message) => {
24372
24376
  }
24373
24377
  return value;
24374
24378
  };
24379
+ /**
24380
+ * Write a number held directly on a node back to source.
24381
+ *
24382
+ * Nodes such as `forward`/`offset`/`rewind`, `rule`, and the `uint<n>`/`bits<n>` widths store a
24383
+ * decoded number rather than a literal child, so each keeps a companion `<field>Raw` holding the
24384
+ * text it was written as - otherwise `forward 0x10;` would come back as `forward 16;`. The raw
24385
+ * text is a full-AST convenience and is not in the binary layout, so a node rebuilt from a binary
24386
+ * has no raw text and falls back to decimal.
24387
+ */
24388
+ const numberToSourceCode = (value, raw) => {
24389
+ return raw ?? value.toString();
24390
+ };
24375
24391
  const applyMetaDataToFunctionDeclarationNode = (node, meta) => {
24376
24392
  return {
24377
24393
  ...node,
@@ -24451,6 +24467,18 @@ const AssignmentExpressionNodeLayout = [{
24451
24467
  key: "right",
24452
24468
  shape: [EnumNodeLayoutEntry.LAYOUT_POINTER_NODE],
24453
24469
  }];
24470
+ /**
24471
+ * The operator as written: `=`, `+=` or `-=`. The grammar gives all three the
24472
+ * same rule, so it is the token between the two expressions. It used to be
24473
+ * written as "=" whatever the source said, which turned `a += b` into `a = b`.
24474
+ */
24475
+ const assignmentOperator = (ctx) => {
24476
+ if (ctx.PLUS_ASSIGN())
24477
+ return "+=";
24478
+ if (ctx.MINUS_ASSIGN())
24479
+ return "-=";
24480
+ return "=";
24481
+ };
24454
24482
  const assignmentExpressionToAstNode = (instance, ctx) => {
24455
24483
  // Check for optimisations
24456
24484
  const canOptimise = isOptimisable(instance, ctx);
@@ -24458,7 +24486,7 @@ const assignmentExpressionToAstNode = (instance, ctx) => {
24458
24486
  return {
24459
24487
  kind: "OPTIMISED_ASSIGNMENT_EXPRESSION",
24460
24488
  left: ctx.expression(0).text,
24461
- operator: "=",
24489
+ operator: assignmentOperator(ctx),
24462
24490
  right: ctx.expression(1).text,
24463
24491
  ...instance.contextMetaData(ctx)
24464
24492
  };
@@ -24466,7 +24494,7 @@ const assignmentExpressionToAstNode = (instance, ctx) => {
24466
24494
  return {
24467
24495
  kind: "ASSIGNMENT_EXPRESSION",
24468
24496
  left: instance.visit(ctx.expression(0)),
24469
- operator: "=",
24497
+ operator: assignmentOperator(ctx),
24470
24498
  right: instance.visit(ctx.expression(1)),
24471
24499
  ...instance.contextMetaData(ctx)
24472
24500
  };
@@ -25444,24 +25472,48 @@ const LiteralIntNodeLayout = [{
25444
25472
  key: "value",
25445
25473
  shape: [EnumNodeLayoutEntry.LAYOUT_RAW_INT],
25446
25474
  }];
25475
+ /**
25476
+ * Decode the text of a NUMBER token to its numeric value.
25477
+ *
25478
+ * `Number()` rather than `JSON.parse()`, because the NUMBER rule accepts three forms JSON
25479
+ * rejects: hex (`0xFF`), a bare fraction (`.5`), and leading zeroes (`010`). Decoding those
25480
+ * with `JSON.parse` threw on source the parser had already accepted. Note that a leading zero
25481
+ * is not a base marker - BattleScript has no octal, so `010` is ten, and a C-style bitmask is
25482
+ * written `0x…`.
25483
+ */
25484
+ const decodeNumberLiteral = (raw) => {
25485
+ const value = Number(raw);
25486
+ if (Number.isNaN(value)) {
25487
+ throw new Error(`Could not decode number literal "${raw}"`);
25488
+ }
25489
+ return value;
25490
+ };
25447
25491
  // TODO: We don't currently have a way to distinguish between float and double
25448
25492
  // and would need to add support at the grammar level to do so. I think adding
25449
25493
  // support for 1.2453L with a capital L would be the best way to do this,
25450
25494
  // defaulting to 32-bit floats when L is not present.
25451
25495
  const numberLiteralToAstNode = (instance, ctx) => {
25496
+ // `raw` is kept verbatim so codegen writes the literal back exactly as it was authored -
25497
+ // a colour written as 0xFF0000 should not come back out as 16711680.
25452
25498
  const raw = ctx.NUMBER().text;
25453
- const isInteger = Number.isInteger(JSON.parse(raw));
25454
- if (isInteger) {
25499
+ const value = decodeNumberLiteral(raw);
25500
+ // Int or float is decided by how the literal was written, not by its value:
25501
+ // `2.0` and `1e3` are floats the author spelled as floats, and deciding on
25502
+ // the value made `7 / 2.0` integer division in the interpreter. Hex is
25503
+ // always an int (its digits can include `e`).
25504
+ const isHex = /^0[xX]/.test(raw);
25505
+ const writtenAsFloat = !isHex && /[.eE]/.test(raw);
25506
+ if (!writtenAsFloat) {
25455
25507
  return {
25456
25508
  kind: `LITERAL_INT`,
25457
- value: JSON.parse(raw),
25509
+ value,
25458
25510
  raw,
25459
25511
  ...instance.contextMetaData(ctx),
25460
25512
  };
25461
25513
  }
25462
25514
  return {
25463
25515
  kind: `LITERAL_FLOAT`,
25464
- value: JSON.parse(raw),
25516
+ value,
25465
25517
  raw,
25466
25518
  ...instance.contextMetaData(ctx),
25467
25519
  };
@@ -40332,8 +40384,11 @@ const ProtocolTypeNodeLayout = [{
40332
40384
  const protocolTypeToAstNode = (instance, ctx) => {
40333
40385
  const numLiteralNode = ctx.numberLiteral();
40334
40386
  let bitCount = 0;
40387
+ let bitCountRaw;
40335
40388
  if (numLiteralNode) {
40336
- bitCount = instance.visit(numLiteralNode).value;
40389
+ const literal = instance.visit(numLiteralNode);
40390
+ bitCount = literal.value;
40391
+ bitCountRaw = literal.raw;
40337
40392
  }
40338
40393
  let value = "";
40339
40394
  if (ctx.TYPE_STRING()) {
@@ -40352,13 +40407,14 @@ const protocolTypeToAstNode = (instance, ctx) => {
40352
40407
  kind: "PROTOCOL_TYPE",
40353
40408
  value,
40354
40409
  bits: bitCount,
40410
+ bitsRaw: bitCountRaw,
40355
40411
  ...instance.contextMetaData(ctx)
40356
40412
  };
40357
40413
  };
40358
40414
  const protocolTypeFromAstNode = (instance, node, options = {}) => {
40359
40415
  if (node.value === "string")
40360
40416
  return instance.raw(`${node.value}`);
40361
- return instance.raw(`${node.value}<${node.bits}>`);
40417
+ return instance.raw(`${node.value}<${numberToSourceCode(node.bits, node.bitsRaw)}>`);
40362
40418
  };
40363
40419
 
40364
40420
  const DefineStatementNodeLayout = [{
@@ -40579,20 +40635,26 @@ const RuleStatementNodeLayout = [{
40579
40635
  shape: [EnumNodeLayoutEntry.LAYOUT_RAW_INT]
40580
40636
  }];
40581
40637
  const ruleStatementToAstNode = (instance, ctx) => {
40638
+ const value = instance.visit(ctx.numberLiteral(0));
40639
+ const consequent = instance.visit(ctx.numberLiteral(1));
40640
+ const alternate = instance.visit(ctx.numberLiteral(2));
40582
40641
  return {
40583
40642
  kind: "RULE_STATEMENT",
40584
40643
  type: instance.visit(ctx.protocolType()),
40585
40644
  id: instance.visit(ctx.stringLiteral(0)).value,
40586
40645
  inspect: instance.visit(ctx.stringLiteral(1)).value,
40587
40646
  comparator: ctx.protocolComparator().text,
40588
- value: instance.visit(ctx.numberLiteral(0)).value,
40589
- consequent: instance.visit(ctx.numberLiteral(1)).value,
40590
- alternate: instance.visit(ctx.numberLiteral(2)).value,
40647
+ value: value.value,
40648
+ consequent: consequent.value,
40649
+ alternate: alternate.value,
40650
+ valueRaw: value.raw,
40651
+ consequentRaw: consequent.raw,
40652
+ alternateRaw: alternate.raw,
40591
40653
  ...instance.contextMetaData(ctx)
40592
40654
  };
40593
40655
  };
40594
40656
  const ruleStatementFromAstNode = (instance, node, options = {}) => {
40595
- return instance.inline(instance.getTokenLiteralText(BattleScriptLexer.RULE), " ", instance.visit(node.type), " ", `"${node.id}"`, " ", instance.getTokenLiteralText(BattleScriptLexer.ASSIGN), " ", `"${node.inspect}"`, " ", node.comparator, " ", node.value.toString(), " ", instance.getTokenLiteralText(BattleScriptLexer.QUESTION_MARK), " ", node.consequent.toString(), " ", instance.getTokenLiteralText(BattleScriptLexer.COLON), " ", node.alternate.toString(), ";", instance.newLine());
40657
+ return instance.inline(instance.getTokenLiteralText(BattleScriptLexer.RULE), " ", instance.visit(node.type), " ", `"${node.id}"`, " ", instance.getTokenLiteralText(BattleScriptLexer.ASSIGN), " ", `"${node.inspect}"`, " ", node.comparator, " ", numberToSourceCode(node.value, node.valueRaw), " ", instance.getTokenLiteralText(BattleScriptLexer.QUESTION_MARK), " ", numberToSourceCode(node.consequent, node.consequentRaw), " ", instance.getTokenLiteralText(BattleScriptLexer.COLON), " ", numberToSourceCode(node.alternate, node.alternateRaw), ";", instance.newLine());
40596
40658
  };
40597
40659
 
40598
40660
  const ParityDeclarationNodeLayout = [{
@@ -40648,14 +40710,16 @@ const ForwardStatementNodeLayout = [{
40648
40710
  shape: [EnumNodeLayoutEntry.LAYOUT_RAW_INT]
40649
40711
  }];
40650
40712
  const forwardStatementToAstNode = (instance, ctx) => {
40713
+ const literal = instance.visit(ctx.numberLiteral());
40651
40714
  return {
40652
40715
  kind: "FORWARD_STATEMENT",
40653
- value: instance.visit(ctx.numberLiteral()).value,
40716
+ value: literal.value,
40717
+ valueRaw: literal.raw,
40654
40718
  ...instance.contextMetaData(ctx)
40655
40719
  };
40656
40720
  };
40657
40721
  const forwardStatementFromAstNode = (instance, node, options = {}) => {
40658
- return instance.raw(instance.inline(`${instance.getTokenLiteralText(BattleScriptLexer.FORWARD)} `, node.value.toString(), ";", instance.newLine()));
40722
+ return instance.raw(instance.inline(`${instance.getTokenLiteralText(BattleScriptLexer.FORWARD)} `, numberToSourceCode(node.value, node.valueRaw), ";", instance.newLine()));
40659
40723
  };
40660
40724
 
40661
40725
  const OffsetStatementNodeLayout = [{
@@ -40666,14 +40730,16 @@ const OffsetStatementNodeLayout = [{
40666
40730
  shape: [EnumNodeLayoutEntry.LAYOUT_RAW_INT]
40667
40731
  }];
40668
40732
  const offsetStatementToAstNode = (instance, ctx) => {
40733
+ const literal = instance.visit(ctx.numberLiteral());
40669
40734
  return {
40670
40735
  kind: "OFFSET_STATEMENT",
40671
- value: instance.visit(ctx.numberLiteral()).value,
40736
+ value: literal.value,
40737
+ valueRaw: literal.raw,
40672
40738
  ...instance.contextMetaData(ctx)
40673
40739
  };
40674
40740
  };
40675
40741
  const offsetStatementFromAstNode = (instance, node, options = {}) => {
40676
- return instance.raw(instance.inline(`${instance.getTokenLiteralText(BattleScriptLexer.OFFSET)} `, node.value.toString(), ";", instance.newLine()));
40742
+ return instance.raw(instance.inline(`${instance.getTokenLiteralText(BattleScriptLexer.OFFSET)} `, numberToSourceCode(node.value, node.valueRaw), ";", instance.newLine()));
40677
40743
  };
40678
40744
 
40679
40745
  const RewindStatementNodeLayout = [{
@@ -40684,14 +40750,16 @@ const RewindStatementNodeLayout = [{
40684
40750
  shape: [EnumNodeLayoutEntry.LAYOUT_RAW_INT]
40685
40751
  }];
40686
40752
  const rewindStatementToAstNode = (instance, ctx) => {
40753
+ const literal = instance.visit(ctx.numberLiteral());
40687
40754
  return {
40688
40755
  kind: "REWIND_STATEMENT",
40689
- value: instance.visit(ctx.numberLiteral()).value,
40756
+ value: literal.value,
40757
+ valueRaw: literal.raw,
40690
40758
  ...instance.contextMetaData(ctx)
40691
40759
  };
40692
40760
  };
40693
40761
  const rewindStatementFromAstNode = (instance, node, options = {}) => {
40694
- return instance.raw(instance.inline(`${instance.getTokenLiteralText(BattleScriptLexer.REWIND)} `, node.value.toString(), ";", instance.newLine()));
40762
+ return instance.raw(instance.inline(`${instance.getTokenLiteralText(BattleScriptLexer.REWIND)} `, numberToSourceCode(node.value, node.valueRaw), ";", instance.newLine()));
40695
40763
  };
40696
40764
 
40697
40765
  const ProtocolOpStatementNodeLayout = [{
@@ -40756,10 +40824,12 @@ const protocolReadTypeToAstNode = (instance, ctx) => {
40756
40824
  else {
40757
40825
  throw new Error(`Unknown PROTOCOL_READ_TYPE type: ${ctx.text}`);
40758
40826
  }
40827
+ const literal = instance.visit(ctx.numberLiteral());
40759
40828
  return {
40760
40829
  kind: "PROTOCOL_READ_TYPE",
40761
40830
  value,
40762
- bits: instance.visit(ctx.numberLiteral()).value,
40831
+ bits: literal.value,
40832
+ bitsRaw: literal.raw,
40763
40833
  ...instance.contextMetaData(ctx)
40764
40834
  };
40765
40835
  };
@@ -40774,7 +40844,7 @@ const protocolReadTypeFromAstNode = (instance, node, options = {}) => {
40774
40844
  else {
40775
40845
  throw new Error(`Unknown PROTOCOL_READ_TYPE type (ReadDataType enum from dyna protocol repo): ${node.value}`);
40776
40846
  }
40777
- return instance.raw(`${value}<${node.bits}>`);
40847
+ return instance.raw(`${value}<${numberToSourceCode(node.bits, node.bitsRaw)}>`);
40778
40848
  };
40779
40849
 
40780
40850
  const StopStatementNodeLayout = [{
@@ -42390,10 +42460,13 @@ var EnumOperator;
42390
42460
  EnumOperator[EnumOperator["OPERATOR_SUB"] = 13] = "OPERATOR_SUB";
42391
42461
  EnumOperator[EnumOperator["OPERATOR_MUL"] = 14] = "OPERATOR_MUL";
42392
42462
  EnumOperator[EnumOperator["OPERATOR_DIV"] = 15] = "OPERATOR_DIV";
42393
- EnumOperator[EnumOperator["OPERATOR_PERIOD"] = 16] = "OPERATOR_PERIOD";
42394
- EnumOperator[EnumOperator["OPERATOR_NAMESPACE"] = 17] = "OPERATOR_NAMESPACE";
42395
- EnumOperator[EnumOperator["OPERATOR_ASSIGN"] = 18] = "OPERATOR_ASSIGN";
42396
- EnumOperator[EnumOperator["OPERATOR_ARROW"] = 19] = "OPERATOR_ARROW";
42463
+ EnumOperator[EnumOperator["OPERATOR_MOD"] = 16] = "OPERATOR_MOD";
42464
+ EnumOperator[EnumOperator["OPERATOR_PERIOD"] = 17] = "OPERATOR_PERIOD";
42465
+ EnumOperator[EnumOperator["OPERATOR_NAMESPACE"] = 18] = "OPERATOR_NAMESPACE";
42466
+ EnumOperator[EnumOperator["OPERATOR_ASSIGN"] = 19] = "OPERATOR_ASSIGN";
42467
+ EnumOperator[EnumOperator["OPERATOR_ARROW"] = 20] = "OPERATOR_ARROW";
42468
+ EnumOperator[EnumOperator["OPERATOR_ADD_ASSIGN"] = 21] = "OPERATOR_ADD_ASSIGN";
42469
+ EnumOperator[EnumOperator["OPERATOR_SUB_ASSIGN"] = 22] = "OPERATOR_SUB_ASSIGN";
42397
42470
  })(EnumOperator || (EnumOperator = {}));
42398
42471
  function EnumOperatorToString(opTor) {
42399
42472
  switch (opTor) {
@@ -42412,10 +42485,13 @@ function EnumOperatorToString(opTor) {
42412
42485
  case EnumOperator.OPERATOR_SUB: return "-";
42413
42486
  case EnumOperator.OPERATOR_MUL: return "*";
42414
42487
  case EnumOperator.OPERATOR_DIV: return "/";
42488
+ case EnumOperator.OPERATOR_MOD: return "%";
42415
42489
  case EnumOperator.OPERATOR_PERIOD: return ".";
42416
42490
  case EnumOperator.OPERATOR_NAMESPACE: return "::";
42417
42491
  case EnumOperator.OPERATOR_ASSIGN: return "=";
42418
42492
  case EnumOperator.OPERATOR_ARROW: return "=>";
42493
+ case EnumOperator.OPERATOR_ADD_ASSIGN: return "+=";
42494
+ case EnumOperator.OPERATOR_SUB_ASSIGN: return "-=";
42419
42495
  default: return "UNKNOWN";
42420
42496
  }
42421
42497
  }
@@ -42436,10 +42512,13 @@ function EnumOperatorFromString(opTor) {
42436
42512
  case "-": return EnumOperator.OPERATOR_SUB;
42437
42513
  case "*": return EnumOperator.OPERATOR_MUL;
42438
42514
  case "/": return EnumOperator.OPERATOR_DIV;
42515
+ case "%": return EnumOperator.OPERATOR_MOD;
42439
42516
  case ".": return EnumOperator.OPERATOR_PERIOD;
42440
42517
  case "::": return EnumOperator.OPERATOR_NAMESPACE;
42441
42518
  case "=": return EnumOperator.OPERATOR_ASSIGN;
42442
42519
  case "=>": return EnumOperator.OPERATOR_ARROW;
42520
+ case "+=": return EnumOperator.OPERATOR_ADD_ASSIGN;
42521
+ case "-=": return EnumOperator.OPERATOR_SUB_ASSIGN;
42443
42522
  default: return EnumOperator.OPERATOR_UNKNOWN;
42444
42523
  }
42445
42524
  }
@@ -43462,7 +43541,7 @@ function miniAstFromBinaryBuffer(data) {
43462
43541
  };
43463
43542
  }
43464
43543
 
43465
- var version = "4.1.2";
43544
+ var version = "5.0.0";
43466
43545
  var binaryVersion = 9;
43467
43546
 
43468
43547
  function miniAstToBinary$1(json, options = {}) {