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