modl 0.3.26 → 0.3.27

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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1 -149
  3. data/Gemfile +4 -2
  4. data/LICENSE.txt +1 -1
  5. data/README.md +19 -11
  6. data/Rakefile +5 -3
  7. data/lib/modl/interpreter.rb +38 -0
  8. data/lib/modl/model/model.rb +264 -0
  9. data/lib/modl/parser/parser.rb +272 -59
  10. data/lib/modl/tokeniser/context.rb +113 -0
  11. data/lib/modl/tokeniser/tokeniser.rb +28 -0
  12. data/lib/modl/util/functions.rb +74 -0
  13. data/lib/modl/util/unicode.rb +44 -0
  14. data/lib/modl/version.rb +5 -0
  15. data/lib/modl.rb +7 -32
  16. data/modl.gemspec +8 -11
  17. metadata +16 -75
  18. data/.DS_Store +0 -0
  19. data/.idea/vcs.xml +0 -6
  20. data/.rspec +0 -3
  21. data/.rubocop.yml +0 -5
  22. data/.travis.yml +0 -7
  23. data/bin/console +0 -14
  24. data/bin/setup +0 -8
  25. data/lib/modl/parser/MODLLexer.interp +0 -132
  26. data/lib/modl/parser/MODLLexer.rb +0 -324
  27. data/lib/modl/parser/MODLLexer.tokens +0 -40
  28. data/lib/modl/parser/MODLParser.interp +0 -93
  29. data/lib/modl/parser/MODLParser.rb +0 -2492
  30. data/lib/modl/parser/MODLParser.tokens +0 -40
  31. data/lib/modl/parser/MODLParserBaseListener.rb +0 -164
  32. data/lib/modl/parser/MODLParserBaseVisitor.rb +0 -107
  33. data/lib/modl/parser/MODLParserListener.rb +0 -151
  34. data/lib/modl/parser/MODLParserVisitor.rb +0 -56
  35. data/lib/modl/parser/class_processor.rb +0 -411
  36. data/lib/modl/parser/evaluator.rb +0 -125
  37. data/lib/modl/parser/file_importer.rb +0 -101
  38. data/lib/modl/parser/global_parse_context.rb +0 -318
  39. data/lib/modl/parser/instruction_processor.rb +0 -82
  40. data/lib/modl/parser/interpreter.rb +0 -75
  41. data/lib/modl/parser/modl_class.rb +0 -138
  42. data/lib/modl/parser/modl_index.rb +0 -54
  43. data/lib/modl/parser/modl_keylist.rb +0 -81
  44. data/lib/modl/parser/modl_method.rb +0 -172
  45. data/lib/modl/parser/object_cache.rb +0 -88
  46. data/lib/modl/parser/orphan_handler.rb +0 -98
  47. data/lib/modl/parser/parsed.rb +0 -1469
  48. data/lib/modl/parser/ref_processor.rb +0 -258
  49. data/lib/modl/parser/substitutions.rb +0 -101
  50. data/lib/modl/parser/sutil.rb +0 -108
  51. data/lib/modl/parser/throwing_error_listener.rb +0 -44
  52. data/lib/modl/parser/unicode_escape_replacer.rb +0 -148
  53. data/lib/modl/parser/unicode_escapes.rb +0 -112
  54. data/lib/modl/parser/version.rb +0 -29
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: modl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.26
4
+ version: 0.3.27
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tony Walmsley
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-04-15 00:00:00.000000000 Z
11
+ date: 2022-11-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -38,93 +38,35 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '3.0'
41
- - !ruby/object:Gem::Dependency
42
- name: antlr4-runtime
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - '='
46
- - !ruby/object:Gem::Version
47
- version: 0.2.10
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - '='
53
- - !ruby/object:Gem::Version
54
- version: 0.2.10
55
- - !ruby/object:Gem::Dependency
56
- name: punycode4r
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: 0.2.0
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: 0.2.0
69
- description: Contains the base Lexer, Parser, and supporting classes for a MODL parser.
41
+ description: A command line program for interpreting MODL objects.
70
42
  email:
71
43
  - tony@aosd.co.uk
72
44
  executables: []
73
45
  extensions: []
74
46
  extra_rdoc_files: []
75
47
  files:
76
- - ".DS_Store"
77
48
  - ".gitignore"
78
- - ".idea/vcs.xml"
79
- - ".rspec"
80
- - ".rubocop.yml"
81
- - ".travis.yml"
82
49
  - CHANGELOG.md
83
50
  - CODE_OF_CONDUCT.md
84
51
  - Gemfile
85
52
  - LICENSE.txt
86
53
  - README.md
87
54
  - Rakefile
88
- - bin/console
89
- - bin/setup
90
55
  - lib/modl.rb
91
- - lib/modl/parser/MODLLexer.interp
92
- - lib/modl/parser/MODLLexer.rb
93
- - lib/modl/parser/MODLLexer.tokens
94
- - lib/modl/parser/MODLParser.interp
95
- - lib/modl/parser/MODLParser.rb
96
- - lib/modl/parser/MODLParser.tokens
97
- - lib/modl/parser/MODLParserBaseListener.rb
98
- - lib/modl/parser/MODLParserBaseVisitor.rb
99
- - lib/modl/parser/MODLParserListener.rb
100
- - lib/modl/parser/MODLParserVisitor.rb
101
- - lib/modl/parser/class_processor.rb
102
- - lib/modl/parser/evaluator.rb
103
- - lib/modl/parser/file_importer.rb
104
- - lib/modl/parser/global_parse_context.rb
105
- - lib/modl/parser/instruction_processor.rb
106
- - lib/modl/parser/interpreter.rb
107
- - lib/modl/parser/modl_class.rb
108
- - lib/modl/parser/modl_index.rb
109
- - lib/modl/parser/modl_keylist.rb
110
- - lib/modl/parser/modl_method.rb
111
- - lib/modl/parser/object_cache.rb
112
- - lib/modl/parser/orphan_handler.rb
113
- - lib/modl/parser/parsed.rb
56
+ - lib/modl/interpreter.rb
57
+ - lib/modl/model/model.rb
114
58
  - lib/modl/parser/parser.rb
115
- - lib/modl/parser/ref_processor.rb
116
- - lib/modl/parser/substitutions.rb
117
- - lib/modl/parser/sutil.rb
118
- - lib/modl/parser/throwing_error_listener.rb
119
- - lib/modl/parser/unicode_escape_replacer.rb
120
- - lib/modl/parser/unicode_escapes.rb
121
- - lib/modl/parser/version.rb
59
+ - lib/modl/tokeniser/context.rb
60
+ - lib/modl/tokeniser/tokeniser.rb
61
+ - lib/modl/util/functions.rb
62
+ - lib/modl/util/unicode.rb
63
+ - lib/modl/version.rb
122
64
  - modl.gemspec
123
- homepage: https://github.com/MODLanguage/ruby-interpreter
65
+ homepage: https://github.com/MODLanguage/ruby-modl
124
66
  licenses:
125
67
  - MIT
126
68
  metadata: {}
127
- post_install_message:
69
+ post_install_message:
128
70
  rdoc_options: []
129
71
  require_paths:
130
72
  - lib
@@ -139,9 +81,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
139
81
  - !ruby/object:Gem::Version
140
82
  version: '0'
141
83
  requirements: []
142
- rubyforge_project:
143
- rubygems_version: 2.7.9
144
- signing_key:
84
+ rubygems_version: 3.3.7
85
+ signing_key:
145
86
  specification_version: 4
146
- summary: The ANTLR4 Lexer and Parser for MODL generated using the Ruby language target.
87
+ summary: A Ruby inretpreter for the MODL data serialisation language.
147
88
  test_files: []
data/.DS_Store DELETED
Binary file
data/.idea/vcs.xml DELETED
@@ -1,6 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="VcsDirectoryMappings">
4
- <mapping directory="$PROJECT_DIR$" vcs="Git" />
5
- </component>
6
- </project>
data/.rspec DELETED
@@ -1,3 +0,0 @@
1
- --format documentation
2
- --color
3
- --require spec_helper
data/.rubocop.yml DELETED
@@ -1,5 +0,0 @@
1
- AllCops:
2
- TargetRubyVersion: 2.3
3
-
4
- Metrics/LineLength:
5
- Max: 132
data/.travis.yml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- sudo: false
3
- language: ruby
4
- cache: bundler
5
- rvm:
6
- - 2.3.7
7
- before_install: gem install bundler -v 2.0.1
data/bin/console DELETED
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "bundler/setup"
4
- require "modl/interpreter"
5
-
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require "irb"
14
- IRB.start(__FILE__)
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here
@@ -1,132 +0,0 @@
1
- token literal names:
2
- null
3
- null
4
- null
5
- null
6
- null
7
- null
8
- null
9
- null
10
- ','
11
- null
12
- null
13
- null
14
- null
15
- null
16
- null
17
- null
18
- null
19
- null
20
- '{'
21
- null
22
- '?'
23
- '/'
24
- '>'
25
- '<'
26
- '*'
27
- '&'
28
- '|'
29
- '!'
30
- null
31
- '}'
32
-
33
- token symbolic names:
34
- null
35
- WS
36
- NULL
37
- TRUE
38
- FALSE
39
- COLON
40
- EQUALS
41
- STRUCT_SEP
42
- ARR_SEP
43
- LBRAC
44
- RBRAC
45
- LSBRAC
46
- RSBRAC
47
- NUMBER
48
- COMMENT
49
- QUOTED
50
- STRING
51
- HASH_PREFIX
52
- LCBRAC
53
- CWS
54
- QMARK
55
- FSLASH
56
- GTHAN
57
- LTHAN
58
- ASTERISK
59
- AMP
60
- PIPE
61
- EXCLAM
62
- CCOMMENT
63
- RCBRAC
64
-
65
- rule names:
66
- WS
67
- NULL
68
- TRUE
69
- FALSE
70
- COLON
71
- EQUALS
72
- STRUCT_SEP
73
- ARR_SEP
74
- LBRAC
75
- RBRAC
76
- LSBRAC
77
- RSBRAC
78
- NUMBER
79
- INT
80
- EXP
81
- COMMENT
82
- INSIDE_COMMENT
83
- QUOTED
84
- INSIDE_QUOTES
85
- INSIDE_GRAVES
86
- STRING
87
- UNRESERVED
88
- RESERVED_CHARS
89
- ESCAPED
90
- UNICODE
91
- HEX
92
- HASH_PREFIX
93
- LCBRAC
94
- CWS
95
- CNULL
96
- CTRUE
97
- CFALSE
98
- CCOLON
99
- CEQUALS
100
- CSTRUCT_SEP
101
- CLBRAC
102
- CRBRAC
103
- CLSBRAC
104
- CRSBRAC
105
- CNUMBER
106
- QMARK
107
- FSLASH
108
- GTHAN
109
- LTHAN
110
- ASTERISK
111
- AMP
112
- PIPE
113
- EXCLAM
114
- CLCBRAC
115
- CQUOTED
116
- CSTRING
117
- CUNRESERVED
118
- CRESERVED_CHARS
119
- CESCAPED
120
- CCOMMENT
121
- RCBRAC
122
-
123
- channel names:
124
- DEFAULT_TOKEN_CHANNEL
125
- HIDDEN
126
-
127
- mode names:
128
- DEFAULT_MODE
129
- CONDITIONAL
130
-
131
- atn:
132
- [3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 31, 502, 8, 1, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 3, 2, 6, 2, 118, 10, 2, 13, 2, 14, 2, 119, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 135, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 147, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 161, 10, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 5, 14, 180, 10, 14, 3, 14, 3, 14, 3, 14, 6, 14, 185, 10, 14, 13, 14, 14, 14, 186, 5, 14, 189, 10, 14, 3, 14, 5, 14, 192, 10, 14, 3, 15, 3, 15, 3, 15, 7, 15, 197, 10, 15, 12, 15, 14, 15, 200, 11, 15, 5, 15, 202, 10, 15, 3, 16, 3, 16, 5, 16, 206, 10, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 7, 18, 218, 10, 18, 12, 18, 14, 18, 221, 11, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 7, 19, 229, 10, 19, 12, 19, 14, 19, 232, 11, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 5, 19, 239, 10, 19, 3, 20, 3, 20, 3, 21, 7, 21, 244, 10, 21, 12, 21, 14, 21, 247, 11, 21, 3, 22, 3, 22, 5, 22, 251, 10, 22, 3, 22, 3, 22, 3, 22, 6, 22, 256, 10, 22, 13, 22, 14, 22, 257, 3, 22, 5, 22, 261, 10, 22, 3, 22, 6, 22, 264, 10, 22, 13, 22, 14, 22, 265, 3, 22, 5, 22, 269, 10, 22, 3, 22, 3, 22, 6, 22, 273, 10, 22, 13, 22, 14, 22, 274, 7, 22, 277, 10, 22, 12, 22, 14, 22, 280, 11, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 5, 25, 289, 10, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 296, 10, 25, 5, 25, 298, 10, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 6, 30, 316, 10, 30, 13, 30, 14, 30, 317, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 5, 31, 333, 10, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 347, 10, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 5, 33, 363, 10, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 5, 41, 396, 10, 41, 3, 41, 3, 41, 3, 41, 6, 41, 401, 10, 41, 13, 41, 14, 41, 402, 5, 41, 405, 10, 41, 3, 41, 5, 41, 408, 10, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 439, 10, 51, 12, 51, 14, 51, 442, 11, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 5, 51, 449, 10, 51, 3, 51, 3, 51, 3, 52, 3, 52, 6, 52, 455, 10, 52, 13, 52, 14, 52, 456, 3, 52, 6, 52, 460, 10, 52, 13, 52, 14, 52, 461, 3, 52, 3, 52, 6, 52, 466, 10, 52, 13, 52, 14, 52, 467, 7, 52, 470, 10, 52, 12, 52, 14, 52, 473, 11, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 5, 55, 484, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 490, 10, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 2, 2, 58, 4, 3, 6, 4, 8, 5, 10, 6, 12, 7, 14, 8, 16, 9, 18, 10, 20, 11, 22, 12, 24, 13, 26, 14, 28, 15, 30, 2, 32, 2, 34, 16, 36, 2, 38, 17, 40, 2, 42, 2, 44, 18, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 19, 58, 20, 60, 21, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 80, 2, 82, 2, 84, 22, 86, 23, 88, 24, 90, 25, 92, 26, 94, 27, 96, 28, 98, 29, 100, 2, 102, 2, 104, 2, 106, 2, 108, 2, 110, 2, 112, 30, 114, 31, 4, 2, 3, 14, 5, 2, 11, 12, 15, 15, 34, 34, 3, 2, 50, 59, 3, 2, 51, 59, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 4, 2, 12, 12, 15, 15, 3, 2, 36, 36, 3, 2, 98, 98, 12, 2, 10, 12, 14, 15, 34, 34, 36, 37, 42, 43, 60, 61, 63, 63, 93, 95, 125, 125, 127, 128, 9, 2, 49, 49, 94, 94, 100, 100, 104, 104, 112, 112, 116, 116, 118, 118, 5, 2, 50, 59, 67, 72, 99, 104, 11, 2, 10, 12, 14, 15, 34, 37, 40, 40, 42, 43, 49, 49, 60, 65, 93, 95, 125, 128, 2, 545, 2, 4, 3, 2, 2, 2, 2, 6, 3, 2, 2, 2, 2, 8, 3, 2, 2, 2, 2, 10, 3, 2, 2, 2, 2, 12, 3, 2, 2, 2, 2, 14, 3, 2, 2, 2, 2, 16, 3, 2, 2, 2, 2, 18, 3, 2, 2, 2, 2, 20, 3, 2, 2, 2, 2, 22, 3, 2, 2, 2, 2, 24, 3, 2, 2, 2, 2, 26, 3, 2, 2, 2, 2, 28, 3, 2, 2, 2, 2, 34, 3, 2, 2, 2, 2, 38, 3, 2, 2, 2, 2, 44, 3, 2, 2, 2, 2, 56, 3, 2, 2, 2, 2, 58, 3, 2, 2, 2, 3, 60, 3, 2, 2, 2, 3, 62, 3, 2, 2, 2, 3, 64, 3, 2, 2, 2, 3, 66, 3, 2, 2, 2, 3, 68, 3, 2, 2, 2, 3, 70, 3, 2, 2, 2, 3, 72, 3, 2, 2, 2, 3, 74, 3, 2, 2, 2, 3, 76, 3, 2, 2, 2, 3, 78, 3, 2, 2, 2, 3, 80, 3, 2, 2, 2, 3, 82, 3, 2, 2, 2, 3, 84, 3, 2, 2, 2, 3, 86, 3, 2, 2, 2, 3, 88, 3, 2, 2, 2, 3, 90, 3, 2, 2, 2, 3, 92, 3, 2, 2, 2, 3, 94, 3, 2, 2, 2, 3, 96, 3, 2, 2, 2, 3, 98, 3, 2, 2, 2, 3, 100, 3, 2, 2, 2, 3, 102, 3, 2, 2, 2, 3, 104, 3, 2, 2, 2, 3, 112, 3, 2, 2, 2, 3, 114, 3, 2, 2, 2, 4, 117, 3, 2, 2, 2, 6, 134, 3, 2, 2, 2, 8, 146, 3, 2, 2, 2, 10, 160, 3, 2, 2, 2, 12, 162, 3, 2, 2, 2, 14, 164, 3, 2, 2, 2, 16, 166, 3, 2, 2, 2, 18, 168, 3, 2, 2, 2, 20, 170, 3, 2, 2, 2, 22, 172, 3, 2, 2, 2, 24, 174, 3, 2, 2, 2, 26, 176, 3, 2, 2, 2, 28, 179, 3, 2, 2, 2, 30, 201, 3, 2, 2, 2, 32, 203, 3, 2, 2, 2, 34, 209, 3, 2, 2, 2, 36, 219, 3, 2, 2, 2, 38, 238, 3, 2, 2, 2, 40, 240, 3, 2, 2, 2, 42, 245, 3, 2, 2, 2, 44, 250, 3, 2, 2, 2, 46, 281, 3, 2, 2, 2, 48, 283, 3, 2, 2, 2, 50, 297, 3, 2, 2, 2, 52, 299, 3, 2, 2, 2, 54, 305, 3, 2, 2, 2, 56, 307, 3, 2, 2, 2, 58, 310, 3, 2, 2, 2, 60, 315, 3, 2, 2, 2, 62, 332, 3, 2, 2, 2, 64, 346, 3, 2, 2, 2, 66, 362, 3, 2, 2, 2, 68, 366, 3, 2, 2, 2, 70, 370, 3, 2, 2, 2, 72, 374, 3, 2, 2, 2, 74, 378, 3, 2, 2, 2, 76, 382, 3, 2, 2, 2, 78, 386, 3, 2, 2, 2, 80, 390, 3, 2, 2, 2, 82, 395, 3, 2, 2, 2, 84, 411, 3, 2, 2, 2, 86, 413, 3, 2, 2, 2, 88, 415, 3, 2, 2, 2, 90, 417, 3, 2, 2, 2, 92, 419, 3, 2, 2, 2, 94, 421, 3, 2, 2, 2, 96, 423, 3, 2, 2, 2, 98, 425, 3, 2, 2, 2, 100, 427, 3, 2, 2, 2, 102, 448, 3, 2, 2, 2, 104, 454, 3, 2, 2, 2, 106, 476, 3, 2, 2, 2, 108, 478, 3, 2, 2, 2, 110, 489, 3, 2, 2, 2, 112, 491, 3, 2, 2, 2, 114, 498, 3, 2, 2, 2, 116, 118, 9, 2, 2, 2, 117, 116, 3, 2, 2, 2, 118, 119, 3, 2, 2, 2, 119, 117, 3, 2, 2, 2, 119, 120, 3, 2, 2, 2, 120, 121, 3, 2, 2, 2, 121, 122, 8, 2, 2, 2, 122, 5, 3, 2, 2, 2, 123, 124, 7, 50, 2, 2, 124, 125, 7, 50, 2, 2, 125, 135, 7, 50, 2, 2, 126, 127, 7, 112, 2, 2, 127, 128, 7, 119, 2, 2, 128, 129, 7, 110, 2, 2, 129, 135, 7, 110, 2, 2, 130, 131, 7, 80, 2, 2, 131, 132, 7, 87, 2, 2, 132, 133, 7, 78, 2, 2, 133, 135, 7, 78, 2, 2, 134, 123, 3, 2, 2, 2, 134, 126, 3, 2, 2, 2, 134, 130, 3, 2, 2, 2, 135, 7, 3, 2, 2, 2, 136, 137, 7, 50, 2, 2, 137, 147, 7, 51, 2, 2, 138, 139, 7, 118, 2, 2, 139, 140, 7, 116, 2, 2, 140, 141, 7, 119, 2, 2, 141, 147, 7, 103, 2, 2, 142, 143, 7, 86, 2, 2, 143, 144, 7, 84, 2, 2, 144, 145, 7, 87, 2, 2, 145, 147, 7, 71, 2, 2, 146, 136, 3, 2, 2, 2, 146, 138, 3, 2, 2, 2, 146, 142, 3, 2, 2, 2, 147, 9, 3, 2, 2, 2, 148, 149, 7, 50, 2, 2, 149, 161, 7, 50, 2, 2, 150, 151, 7, 104, 2, 2, 151, 152, 7, 99, 2, 2, 152, 153, 7, 110, 2, 2, 153, 154, 7, 117, 2, 2, 154, 161, 7, 103, 2, 2, 155, 156, 7, 72, 2, 2, 156, 157, 7, 67, 2, 2, 157, 158, 7, 78, 2, 2, 158, 159, 7, 85, 2, 2, 159, 161, 7, 71, 2, 2, 160, 148, 3, 2, 2, 2, 160, 150, 3, 2, 2, 2, 160, 155, 3, 2, 2, 2, 161, 11, 3, 2, 2, 2, 162, 163, 7, 60, 2, 2, 163, 13, 3, 2, 2, 2, 164, 165, 7, 63, 2, 2, 165, 15, 3, 2, 2, 2, 166, 167, 7, 61, 2, 2, 167, 17, 3, 2, 2, 2, 168, 169, 7, 46, 2, 2, 169, 19, 3, 2, 2, 2, 170, 171, 7, 42, 2, 2, 171, 21, 3, 2, 2, 2, 172, 173, 7, 43, 2, 2, 173, 23, 3, 2, 2, 2, 174, 175, 7, 93, 2, 2, 175, 25, 3, 2, 2, 2, 176, 177, 7, 95, 2, 2, 177, 27, 3, 2, 2, 2, 178, 180, 7, 47, 2, 2, 179, 178, 3, 2, 2, 2, 179, 180, 3, 2, 2, 2, 180, 181, 3, 2, 2, 2, 181, 188, 5, 30, 15, 2, 182, 184, 7, 48, 2, 2, 183, 185, 9, 3, 2, 2, 184, 183, 3, 2, 2, 2, 185, 186, 3, 2, 2, 2, 186, 184, 3, 2, 2, 2, 186, 187, 3, 2, 2, 2, 187, 189, 3, 2, 2, 2, 188, 182, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 191, 3, 2, 2, 2, 190, 192, 5, 32, 16, 2, 191, 190, 3, 2, 2, 2, 191, 192, 3, 2, 2, 2, 192, 29, 3, 2, 2, 2, 193, 202, 7, 50, 2, 2, 194, 198, 9, 4, 2, 2, 195, 197, 9, 3, 2, 2, 196, 195, 3, 2, 2, 2, 197, 200, 3, 2, 2, 2, 198, 196, 3, 2, 2, 2, 198, 199, 3, 2, 2, 2, 199, 202, 3, 2, 2, 2, 200, 198, 3, 2, 2, 2, 201, 193, 3, 2, 2, 2, 201, 194, 3, 2, 2, 2, 202, 31, 3, 2, 2, 2, 203, 205, 9, 5, 2, 2, 204, 206, 9, 6, 2, 2, 205, 204, 3, 2, 2, 2, 205, 206, 3, 2, 2, 2, 206, 207, 3, 2, 2, 2, 207, 208, 5, 30, 15, 2, 208, 33, 3, 2, 2, 2, 209, 210, 7, 37, 2, 2, 210, 211, 7, 37, 2, 2, 211, 212, 3, 2, 2, 2, 212, 213, 5, 36, 18, 2, 213, 214, 3, 2, 2, 2, 214, 215, 8, 17, 2, 2, 215, 35, 3, 2, 2, 2, 216, 218, 10, 7, 2, 2, 217, 216, 3, 2, 2, 2, 218, 221, 3, 2, 2, 2, 219, 217, 3, 2, 2, 2, 219, 220, 3, 2, 2, 2, 220, 37, 3, 2, 2, 2, 221, 219, 3, 2, 2, 2, 222, 230, 7, 36, 2, 2, 223, 229, 5, 40, 20, 2, 224, 225, 7, 128, 2, 2, 225, 229, 7, 36, 2, 2, 226, 227, 7, 94, 2, 2, 227, 229, 7, 36, 2, 2, 228, 223, 3, 2, 2, 2, 228, 224, 3, 2, 2, 2, 228, 226, 3, 2, 2, 2, 229, 232, 3, 2, 2, 2, 230, 228, 3, 2, 2, 2, 230, 231, 3, 2, 2, 2, 231, 233, 3, 2, 2, 2, 232, 230, 3, 2, 2, 2, 233, 239, 7, 36, 2, 2, 234, 235, 7, 98, 2, 2, 235, 236, 5, 42, 21, 2, 236, 237, 7, 98, 2, 2, 237, 239, 3, 2, 2, 2, 238, 222, 3, 2, 2, 2, 238, 234, 3, 2, 2, 2, 239, 39, 3, 2, 2, 2, 240, 241, 10, 8, 2, 2, 241, 41, 3, 2, 2, 2, 242, 244, 10, 9, 2, 2, 243, 242, 3, 2, 2, 2, 244, 247, 3, 2, 2, 2, 245, 243, 3, 2, 2, 2, 245, 246, 3, 2, 2, 2, 246, 43, 3, 2, 2, 2, 247, 245, 3, 2, 2, 2, 248, 249, 7, 37, 2, 2, 249, 251, 7, 34, 2, 2, 250, 248, 3, 2, 2, 2, 250, 251, 3, 2, 2, 2, 251, 255, 3, 2, 2, 2, 252, 256, 5, 50, 25, 2, 253, 256, 5, 46, 23, 2, 254, 256, 5, 56, 28, 2, 255, 252, 3, 2, 2, 2, 255, 253, 3, 2, 2, 2, 255, 254, 3, 2, 2, 2, 256, 257, 3, 2, 2, 2, 257, 255, 3, 2, 2, 2, 257, 258, 3, 2, 2, 2, 258, 278, 3, 2, 2, 2, 259, 261, 7, 37, 2, 2, 260, 259, 3, 2, 2, 2, 260, 261, 3, 2, 2, 2, 261, 263, 3, 2, 2, 2, 262, 264, 7, 34, 2, 2, 263, 262, 3, 2, 2, 2, 264, 265, 3, 2, 2, 2, 265, 263, 3, 2, 2, 2, 265, 266, 3, 2, 2, 2, 266, 268, 3, 2, 2, 2, 267, 269, 7, 37, 2, 2, 268, 267, 3, 2, 2, 2, 268, 269, 3, 2, 2, 2, 269, 272, 3, 2, 2, 2, 270, 273, 5, 50, 25, 2, 271, 273, 5, 46, 23, 2, 272, 270, 3, 2, 2, 2, 272, 271, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 272, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 277, 3, 2, 2, 2, 276, 260, 3, 2, 2, 2, 277, 280, 3, 2, 2, 2, 278, 276, 3, 2, 2, 2, 278, 279, 3, 2, 2, 2, 279, 45, 3, 2, 2, 2, 280, 278, 3, 2, 2, 2, 281, 282, 10, 10, 2, 2, 282, 47, 3, 2, 2, 2, 283, 284, 9, 10, 2, 2, 284, 49, 3, 2, 2, 2, 285, 288, 7, 94, 2, 2, 286, 289, 9, 11, 2, 2, 287, 289, 5, 52, 26, 2, 288, 286, 3, 2, 2, 2, 288, 287, 3, 2, 2, 2, 289, 298, 3, 2, 2, 2, 290, 291, 7, 94, 2, 2, 291, 298, 5, 48, 24, 2, 292, 295, 7, 128, 2, 2, 293, 296, 5, 48, 24, 2, 294, 296, 5, 52, 26, 2, 295, 293, 3, 2, 2, 2, 295, 294, 3, 2, 2, 2, 296, 298, 3, 2, 2, 2, 297, 285, 3, 2, 2, 2, 297, 290, 3, 2, 2, 2, 297, 292, 3, 2, 2, 2, 298, 51, 3, 2, 2, 2, 299, 300, 7, 119, 2, 2, 300, 301, 5, 54, 27, 2, 301, 302, 5, 54, 27, 2, 302, 303, 5, 54, 27, 2, 303, 304, 5, 54, 27, 2, 304, 53, 3, 2, 2, 2, 305, 306, 9, 12, 2, 2, 306, 55, 3, 2, 2, 2, 307, 308, 7, 37, 2, 2, 308, 309, 5, 44, 22, 2, 309, 57, 3, 2, 2, 2, 310, 311, 7, 125, 2, 2, 311, 312, 3, 2, 2, 2, 312, 313, 8, 29, 3, 2, 313, 59, 3, 2, 2, 2, 314, 316, 9, 2, 2, 2, 315, 314, 3, 2, 2, 2, 316, 317, 3, 2, 2, 2, 317, 315, 3, 2, 2, 2, 317, 318, 3, 2, 2, 2, 318, 319, 3, 2, 2, 2, 319, 320, 8, 30, 2, 2, 320, 61, 3, 2, 2, 2, 321, 322, 7, 50, 2, 2, 322, 323, 7, 50, 2, 2, 323, 333, 7, 50, 2, 2, 324, 325, 7, 112, 2, 2, 325, 326, 7, 119, 2, 2, 326, 327, 7, 110, 2, 2, 327, 333, 7, 110, 2, 2, 328, 329, 7, 80, 2, 2, 329, 330, 7, 87, 2, 2, 330, 331, 7, 78, 2, 2, 331, 333, 7, 78, 2, 2, 332, 321, 3, 2, 2, 2, 332, 324, 3, 2, 2, 2, 332, 328, 3, 2, 2, 2, 333, 334, 3, 2, 2, 2, 334, 335, 8, 31, 4, 2, 335, 63, 3, 2, 2, 2, 336, 337, 7, 50, 2, 2, 337, 347, 7, 51, 2, 2, 338, 339, 7, 118, 2, 2, 339, 340, 7, 116, 2, 2, 340, 341, 7, 119, 2, 2, 341, 347, 7, 103, 2, 2, 342, 343, 7, 86, 2, 2, 343, 344, 7, 84, 2, 2, 344, 345, 7, 87, 2, 2, 345, 347, 7, 71, 2, 2, 346, 336, 3, 2, 2, 2, 346, 338, 3, 2, 2, 2, 346, 342, 3, 2, 2, 2, 347, 348, 3, 2, 2, 2, 348, 349, 8, 32, 5, 2, 349, 65, 3, 2, 2, 2, 350, 351, 7, 50, 2, 2, 351, 363, 7, 50, 2, 2, 352, 353, 7, 104, 2, 2, 353, 354, 7, 99, 2, 2, 354, 355, 7, 110, 2, 2, 355, 356, 7, 117, 2, 2, 356, 363, 7, 103, 2, 2, 357, 358, 7, 72, 2, 2, 358, 359, 7, 67, 2, 2, 359, 360, 7, 78, 2, 2, 360, 361, 7, 85, 2, 2, 361, 363, 7, 71, 2, 2, 362, 350, 3, 2, 2, 2, 362, 352, 3, 2, 2, 2, 362, 357, 3, 2, 2, 2, 363, 364, 3, 2, 2, 2, 364, 365, 8, 33, 6, 2, 365, 67, 3, 2, 2, 2, 366, 367, 7, 60, 2, 2, 367, 368, 3, 2, 2, 2, 368, 369, 8, 34, 7, 2, 369, 69, 3, 2, 2, 2, 370, 371, 7, 63, 2, 2, 371, 372, 3, 2, 2, 2, 372, 373, 8, 35, 8, 2, 373, 71, 3, 2, 2, 2, 374, 375, 7, 61, 2, 2, 375, 376, 3, 2, 2, 2, 376, 377, 8, 36, 9, 2, 377, 73, 3, 2, 2, 2, 378, 379, 7, 42, 2, 2, 379, 380, 3, 2, 2, 2, 380, 381, 8, 37, 10, 2, 381, 75, 3, 2, 2, 2, 382, 383, 7, 43, 2, 2, 383, 384, 3, 2, 2, 2, 384, 385, 8, 38, 11, 2, 385, 77, 3, 2, 2, 2, 386, 387, 7, 93, 2, 2, 387, 388, 3, 2, 2, 2, 388, 389, 8, 39, 12, 2, 389, 79, 3, 2, 2, 2, 390, 391, 7, 95, 2, 2, 391, 392, 3, 2, 2, 2, 392, 393, 8, 40, 13, 2, 393, 81, 3, 2, 2, 2, 394, 396, 7, 47, 2, 2, 395, 394, 3, 2, 2, 2, 395, 396, 3, 2, 2, 2, 396, 397, 3, 2, 2, 2, 397, 404, 5, 30, 15, 2, 398, 400, 7, 48, 2, 2, 399, 401, 9, 3, 2, 2, 400, 399, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 400, 3, 2, 2, 2, 402, 403, 3, 2, 2, 2, 403, 405, 3, 2, 2, 2, 404, 398, 3, 2, 2, 2, 404, 405, 3, 2, 2, 2, 405, 407, 3, 2, 2, 2, 406, 408, 5, 32, 16, 2, 407, 406, 3, 2, 2, 2, 407, 408, 3, 2, 2, 2, 408, 409, 3, 2, 2, 2, 409, 410, 8, 41, 14, 2, 410, 83, 3, 2, 2, 2, 411, 412, 7, 65, 2, 2, 412, 85, 3, 2, 2, 2, 413, 414, 7, 49, 2, 2, 414, 87, 3, 2, 2, 2, 415, 416, 7, 64, 2, 2, 416, 89, 3, 2, 2, 2, 417, 418, 7, 62, 2, 2, 418, 91, 3, 2, 2, 2, 419, 420, 7, 44, 2, 2, 420, 93, 3, 2, 2, 2, 421, 422, 7, 40, 2, 2, 422, 95, 3, 2, 2, 2, 423, 424, 7, 126, 2, 2, 424, 97, 3, 2, 2, 2, 425, 426, 7, 35, 2, 2, 426, 99, 3, 2, 2, 2, 427, 428, 7, 125, 2, 2, 428, 429, 3, 2, 2, 2, 429, 430, 8, 50, 3, 2, 430, 431, 8, 50, 15, 2, 431, 101, 3, 2, 2, 2, 432, 440, 7, 36, 2, 2, 433, 439, 5, 40, 20, 2, 434, 435, 7, 128, 2, 2, 435, 439, 7, 36, 2, 2, 436, 437, 7, 94, 2, 2, 437, 439, 7, 36, 2, 2, 438, 433, 3, 2, 2, 2, 438, 434, 3, 2, 2, 2, 438, 436, 3, 2, 2, 2, 439, 442, 3, 2, 2, 2, 440, 438, 3, 2, 2, 2, 440, 441, 3, 2, 2, 2, 441, 443, 3, 2, 2, 2, 442, 440, 3, 2, 2, 2, 443, 449, 7, 36, 2, 2, 444, 445, 7, 98, 2, 2, 445, 446, 5, 42, 21, 2, 446, 447, 7, 98, 2, 2, 447, 449, 3, 2, 2, 2, 448, 432, 3, 2, 2, 2, 448, 444, 3, 2, 2, 2, 449, 450, 3, 2, 2, 2, 450, 451, 8, 51, 16, 2, 451, 103, 3, 2, 2, 2, 452, 455, 5, 110, 55, 2, 453, 455, 5, 106, 53, 2, 454, 452, 3, 2, 2, 2, 454, 453, 3, 2, 2, 2, 455, 456, 3, 2, 2, 2, 456, 454, 3, 2, 2, 2, 456, 457, 3, 2, 2, 2, 457, 471, 3, 2, 2, 2, 458, 460, 7, 34, 2, 2, 459, 458, 3, 2, 2, 2, 460, 461, 3, 2, 2, 2, 461, 459, 3, 2, 2, 2, 461, 462, 3, 2, 2, 2, 462, 465, 3, 2, 2, 2, 463, 466, 5, 110, 55, 2, 464, 466, 5, 106, 53, 2, 465, 463, 3, 2, 2, 2, 465, 464, 3, 2, 2, 2, 466, 467, 3, 2, 2, 2, 467, 465, 3, 2, 2, 2, 467, 468, 3, 2, 2, 2, 468, 470, 3, 2, 2, 2, 469, 459, 3, 2, 2, 2, 470, 473, 3, 2, 2, 2, 471, 469, 3, 2, 2, 2, 471, 472, 3, 2, 2, 2, 472, 474, 3, 2, 2, 2, 473, 471, 3, 2, 2, 2, 474, 475, 8, 52, 17, 2, 475, 105, 3, 2, 2, 2, 476, 477, 10, 13, 2, 2, 477, 107, 3, 2, 2, 2, 478, 479, 9, 13, 2, 2, 479, 109, 3, 2, 2, 2, 480, 483, 7, 94, 2, 2, 481, 484, 9, 11, 2, 2, 482, 484, 5, 52, 26, 2, 483, 481, 3, 2, 2, 2, 483, 482, 3, 2, 2, 2, 484, 490, 3, 2, 2, 2, 485, 486, 7, 94, 2, 2, 486, 490, 5, 108, 54, 2, 487, 488, 7, 128, 2, 2, 488, 490, 5, 108, 54, 2, 489, 480, 3, 2, 2, 2, 489, 485, 3, 2, 2, 2, 489, 487, 3, 2, 2, 2, 490, 111, 3, 2, 2, 2, 491, 492, 7, 37, 2, 2, 492, 493, 7, 37, 2, 2, 493, 494, 3, 2, 2, 2, 494, 495, 5, 36, 18, 2, 495, 496, 3, 2, 2, 2, 496, 497, 8, 56, 2, 2, 497, 113, 3, 2, 2, 2, 498, 499, 7, 127, 2, 2, 499, 500, 3, 2, 2, 2, 500, 501, 8, 57, 18, 2, 501, 115, 3, 2, 2, 2, 51, 2, 3, 119, 134, 146, 160, 179, 186, 188, 191, 198, 201, 205, 219, 228, 230, 238, 245, 250, 255, 257, 260, 265, 268, 272, 274, 278, 288, 295, 297, 317, 332, 346, 362, 395, 402, 404, 407, 438, 440, 448, 454, 456, 461, 465, 467, 471, 483, 489, 19, 8, 2, 2, 7, 3, 2, 9, 4, 2, 9, 5, 2, 9, 6, 2, 9, 7, 2, 9, 8, 2, 9, 9, 2, 9, 11, 2, 9, 12, 2, 9, 13, 2, 9, 14, 2, 9, 15, 2, 9, 20, 2, 9, 17, 2, 9, 18, 2, 6, 2, 2]